below_model/
tc_collector_plugin.rs1use anyhow::Result;
2use async_trait::async_trait;
3use slog::error;
4use tc::TcStats;
5
6use crate::collector_plugin::AsyncCollectorPlugin;
7
8pub type SampleType = TcStats;
9
10pub struct TcStatsCollectorPlugin {
11 logger: slog::Logger,
12}
13
14impl TcStatsCollectorPlugin {
15 pub fn new(logger: slog::Logger) -> Result<Self> {
16 Ok(Self { logger })
17 }
18}
19
20#[async_trait]
21impl AsyncCollectorPlugin for TcStatsCollectorPlugin {
22 type T = TcStats;
23
24 async fn try_collect(&mut self) -> Result<Option<SampleType>> {
25 let stats = match tc::tc_stats() {
26 Ok(tc_stats) => Some(tc_stats),
27 Err(e) => {
28 error!(self.logger, "{:#}", e);
29 Default::default()
30 }
31 };
32
33 Ok(stats)
34 }
35}