client/
client.rs

1use scx_stats::prelude::*;
2use scx_stats_derive::Stats;
3use serde::{Deserialize, Serialize};
4use std::collections::BTreeMap;
5use std::env::args;
6
7// Hacky definition sharing. See stats_def.rs.h.
8include!("stats_defs.rs.h");
9
10fn main() {
11    simple_logger::SimpleLogger::new()
12        .with_level(log::LevelFilter::Info)
13        .env()
14        .init()
15        .unwrap();
16
17    std::assert_eq!(args().len(), 2, "Usage: client UNIX_SOCKET_PATH");
18    let path = args().nth(1).unwrap();
19
20    let mut client = StatsClient::new().set_path(path).connect().unwrap();
21
22    println!("===== Requesting \"stats_meta\":");
23    let resp = client.request::<BTreeMap<String, StatsMeta>>("stats_meta", vec![]);
24    println!("{:#?}", &resp);
25
26    println!("\n===== Requesting \"stats\" without arguments:");
27    let resp = client.request::<ClusterStats>("stats", vec![]);
28    println!("{:#?}", &resp);
29
30    println!("\n===== Requesting \"stats\" with \"target\"=\"non-existent\":");
31    let resp =
32        client.request::<ClusterStats>("stats", vec![("target".into(), "non-existent".into())]);
33    println!("{:#?}", &resp);
34
35    println!("\n===== Requesting \"stats\" with \"target\"=\"all\":");
36    let resp = client.request::<ClusterStats>("stats", vec![("target".into(), "top".into())]);
37    println!("{:#?}", &resp);
38
39    println!("\n===== Requesting \"stats\" but receiving with serde_json::Value:");
40    let resp = client.request::<serde_json::Value>("stats", vec![("target".into(), "top".into())]);
41    println!("{:#?}", &resp);
42
43    println!("\n===== Requesting \"stats_meta\" but receiving with serde_json::Value:");
44    let resp = client
45        .request::<serde_json::Value>("stats_meta", vec![])
46        .unwrap();
47    println!("{}", serde_json::to_string_pretty(&resp).unwrap());
48}