Skip to main content

admission_capacity/
admission_capacity.rs

1//! Compilable AF consumption shape. This example is not the Runtime event issuer.
2use saddle_admission::*;
3use saddle_core::*;
4use saddle_observability::*;
5
6/// Runtime keeps its private event, then calls this shape with its original
7/// receipt exactly once. A borrowed root guard is not moved into the output.
8pub 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
19/// Real Admission setup for the executable example/test, not a fake receipt or
20/// a production deployment. No request root is used to establish this profile.
21pub 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)] // Also compiled as the integration test's shared consumer example.
55fn 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    // The output did not release or remake admission: original permit remains.
81    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}