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!(
16        resources.len(),
17        count as usize,
18        "resource count mismatch!"
19    );
20
21    // Transports
22    println!("\n=== Transports ===");
23    let xprts = adm.transports().expect("failed to list transports");
24    if xprts.is_empty() {
25        println!("  (none)");
26    } else {
27        for id in &xprts {
28            println!("  transport {id}");
29        }
30    }
31
32    // SERD engines for each module
33    println!("\n=== SERD Engines ===");
34    let modules = adm.modules().expect("failed to list modules");
35    let mut total = 0;
36    for m in &modules {
37        let engines =
38            adm.serd_engines(&m.name).expect("failed to list serd engines");
39        if !engines.is_empty() {
40            println!("  {} ({} engines):", m.name, engines.len());
41            for e in &engines {
42                println!(
43                    "    {} - count={}, n={}, fired={}",
44                    e.name, e.count, e.n, e.fired,
45                );
46            }
47            total += engines.len();
48        }
49    }
50    if total == 0 {
51        println!("  (none)");
52    }
53
54    // Global stats
55    println!("\n=== Global Stats ===");
56    let stats = adm.stats(None).expect("failed to read stats");
57    for s in &stats {
58        println!("  {}: {} ({})", s.name, s.value, s.description);
59    }
60
61    // Per-module stats for the first module
62    if let Some(m) = modules.first() {
63        println!("\n=== Stats for {} ===", m.name);
64        let mstats =
65            adm.stats(Some(&m.name)).expect("failed to read module stats");
66        for s in &mstats {
67            println!("  {}: {} ({})", s.name, s.value, s.description);
68        }
69    }
70}