below_model/
tc_collector_plugin.rs

1use 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}