Skip to main content

worker/
worker.rs

1//! Native application-owned logging without Canic, timers or IC calls.
2
3use ic_logging::{EntryInput, Filter, Level, Limits, Log, PageRequest};
4use std::num::NonZeroUsize;
5
6fn main() {
7    let mut log = Log::new(Limits {
8        max_entries: NonZeroUsize::new(8).expect("positive capacity"),
9        max_message_bytes: 32,
10        max_label_bytes: 16,
11    });
12    for (created_at_secs, level, message) in [
13        (10, Level::Info, "delivery accepted"),
14        (
15            11,
16            Level::Warn,
17            "provider reply is still unknown; reconcile before retry",
18        ),
19        (12, Level::Ok, "original delivery reconciled"),
20    ] {
21        log.append(EntryInput {
22            created_at_secs,
23            level,
24            source: "worker",
25            topic: Some("delivery"),
26            message,
27        })
28        .expect("valid bounded entry");
29    }
30    let page = log.page(
31        Filter::default(),
32        PageRequest {
33            before: None,
34            max_results: NonZeroUsize::new(8).expect("positive results"),
35            max_scanned: NonZeroUsize::new(8).expect("positive scan"),
36        },
37    );
38    for entry in page.entries {
39        println!("{} {:?}: {}", entry.sequence, entry.level, entry.message);
40    }
41    let batch = log.prune_expired(16, 5, 1);
42    assert_eq!(batch.removed, 1);
43    assert_eq!(log.next_expiry_secs(5), Some(17));
44}