admission_capacity/
admission_capacity.rs1use saddle_admission::*;
3use saddle_core::*;
4use saddle_observability::*;
5
6pub fn consume_original(
9 original: ProfuseGwAdmissionObservationReceipt,
10 observer: &Observer,
11 output: Option<&EmergencyDiagnosticHandle>,
12 context: AdmissionEventContext<'_>,
13 construction: AdmissionConstruction,
14) -> AdmissionCapacitySubmission {
15 let facts = AdmissionCapacityFacts::from_receipt(&original);
16 observer.record_admission_capacity(output, context, &facts, construction)
17}
18
19pub fn example_profile() -> ProfuseGwLightweightProcessOwner {
22 let pending = freeze_deployment_resource_budget(
23 2, 128, 5_000, 1, 3, 1_000_000, 1_000_000, 1_000_000, 1_000_000,
24 )
25 .unwrap()
26 .reserve_known_database_memory(0, 0, 0)
27 .ok()
28 .unwrap();
29 let (application, listener) = BootstrapRendezvousIssuer::issue()
30 .freeze_application(GeneratedApplicationFreezeSource::new(
31 "app",
32 b"descriptor",
33 &["route"],
34 ))
35 .unwrap();
36 let listener = listener
37 .freeze_listener(ListenerStartupFreezeSource::new(
38 "app",
39 "127.0.0.1:8000".parse().unwrap(),
40 "127.0.0.1:9000".parse().unwrap(),
41 std::time::Duration::from_millis(5_000),
42 ))
43 .ok()
44 .unwrap();
45 let (whole, receipt) = pair_bootstrap_rendezvous(application, listener)
46 .ok()
47 .unwrap();
48 let budget = bind_deployment_resource_budget_bootstrap(pending, whole, receipt)
49 .ok()
50 .unwrap();
51 prepare_profusegw_lightweight_profile(budget).ok().unwrap()
52}
53
54#[allow(dead_code)] fn main() {
56 let process = example_profile();
57 let observer = Observer::with_writer(ObserverConfig::default(), std::io::sink()).unwrap();
58 let app = ContextLabel::checked("app").unwrap();
59 let (permit, original) = match process.verified_profile().try_admit_observed() {
60 ProfuseGwLightweightObservedAdmissionOutcome::Ready(permit, original) => (permit, original),
61 _ => panic!("example first admission must succeed"),
62 };
63 let submission = consume_original(
64 original,
65 &observer,
66 None,
67 AdmissionEventContext::Unrooted {
68 application: &app,
69 lifecycle: RequestViewPhase::Admitted,
70 },
71 AdmissionConstruction::Failed(AdmissionConstructionFailure::Storage),
72 );
73 assert_eq!(submission.cpu, DiagnosticSubmission::OutputUnavailable);
74 assert_eq!(submission.memory, DiagnosticSubmission::OutputUnavailable);
75 assert_eq!(submission.database, DiagnosticSubmission::OutputUnavailable);
76 assert_eq!(
77 submission.profuse_contract,
78 DiagnosticSubmission::OutputUnavailable
79 );
80 permit.into_execution().cancel();
82 process.finish().unwrap();
83 for (name, layout) in ["facts", "borrowed_context", "record", "submission"]
84 .into_iter()
85 .zip(admission_capacity_layouts())
86 {
87 println!(
88 "AE layout {name}: bytes={} align={}",
89 layout.size(),
90 layout.align()
91 );
92 }
93 let existing = root_diagnostic::request_logging_layouts();
94 println!(
95 "AE existing frame={} packet={} slots={} confirmation_owner={}",
96 existing.source_frame.size(),
97 existing.emergency_packet.size(),
98 existing.emergency_slots,
99 existing.confirmation_owner.size()
100 );
101 println!("AE consumer example GO; AF/Service production wiring NOT_RUN");
102}