Skip to main content

stats/
stats.rs

1use fmd_adm::FmdAdm;
2
3fn main() {
4    let adm = FmdAdm::open().expect("failed to open fmd adm handle");
5
6    // Validate resource_count against resources().len()
7    let resources = adm.resources(true).expect("failed to list resources");
8    let count = adm.resource_count(true).expect("failed to count resources");
9    println!("=== Resources ===");
10    println!(
11        "  resources(all=true).len() = {}, resource_count(all=true) = {}",
12        resources.len(),
13        count,
14    );
15    assert_eq!(resources.len(), count as usize, "resource count mismatch!");
16
17    // Transports
18    println!("\n=== Transports ===");
19    let xprts = adm.transports().expect("failed to list transports");
20    if xprts.is_empty() {
21        println!("  (none)");
22    } else {
23        for id in &xprts {
24            println!("  transport {id}");
25        }
26    }
27
28    // SERD engines for each module
29    println!("\n=== SERD Engines ===");
30    let modules = adm.modules().expect("failed to list modules");
31    let mut total = 0;
32    for m in &modules {
33        let engines = adm
34            .serd_engines(&m.name)
35            .expect("failed to list serd engines");
36        if !engines.is_empty() {
37            println!("  {} ({} engines):", m.name, engines.len());
38            for e in &engines {
39                println!(
40                    "    {} - count={}, n={}, fired={}",
41                    e.name, e.count, e.n, e.fired,
42                );
43            }
44            total += engines.len();
45        }
46    }
47    if total == 0 {
48        println!("  (none)");
49    }
50
51    // Global stats
52    println!("\n=== Global Stats ===");
53    let stats = adm.stats(None).expect("failed to read stats");
54    for s in &stats {
55        println!("  {}: {} ({})", s.name, s.value, s.description);
56    }
57
58    // Per-module stats for the first module
59    if let Some(m) = modules.first() {
60        println!("\n=== Stats for {} ===", m.name);
61        let mstats = adm
62            .stats(Some(&m.name))
63            .expect("failed to read module stats");
64        for s in &mstats {
65            println!("  {}: {} ({})", s.name, s.value, s.description);
66        }
67    }
68}