1use std::collections::HashMap;
18
19use metriki_core::metrics::Metric;
20use metriki_core::MetricsSet;
21use tikv_jemalloc_ctl::{epoch, stats};
22
23#[derive(Debug)]
38pub struct JemallocMetricsSet {
39 prefix: &'static str,
40}
41
42impl JemallocMetricsSet {
43 pub fn new(prefix: &'static str) -> JemallocMetricsSet {
46 JemallocMetricsSet { prefix }
47 }
48}
49
50impl MetricsSet for JemallocMetricsSet {
51 fn get_all(&self) -> HashMap<String, Metric> {
52 let mut result = HashMap::new();
53
54 epoch::advance().unwrap();
55
56 let active = Metric::gauge(Box::new(|| stats::active::read().unwrap() as f64)).into();
57 result.insert(format!("{}.jemalloc.active", self.prefix), active);
58
59 let allocated = Metric::gauge(Box::new(|| stats::allocated::read().unwrap() as f64)).into();
60 result.insert(format!("{}.jemalloc.allocated", self.prefix), allocated);
61
62 let metadata = Metric::gauge(Box::new(|| stats::metadata::read().unwrap() as f64)).into();
63 result.insert(format!("{}.jemalloc.metadata", self.prefix), metadata);
64
65 let mapped = Metric::gauge(Box::new(|| stats::mapped::read().unwrap() as f64)).into();
66 result.insert(format!("{}.jemalloc.mapped", self.prefix), mapped);
67
68 let resident = Metric::gauge(Box::new(|| stats::resident::read().unwrap() as f64)).into();
69 result.insert(format!("{}.jemalloc.resident", self.prefix), resident);
70
71 let retained = Metric::gauge(Box::new(|| stats::retained::read().unwrap() as f64)).into();
72 result.insert(format!("{}.jemalloc.retained", self.prefix), retained);
73
74 result
75 }
76}