Skip to main content

linkrs_metrics/manager/
migration.rs

1//! Data migration observability.
2use std::collections::HashMap;
3
4use super::core::StatsManager;
5use super::metric_type::MetricType;
6
7impl StatsManager {
8    pub fn record_migration_start(&self) {
9        self.add_value(MetricType::MigrationTotalCount);
10        self.add_value(MetricType::MigrationActiveCount);
11    }
12
13    pub fn record_migration_success(&self, rows: u64, duration_ms: u64) {
14        self.dec_value(MetricType::MigrationActiveCount);
15        self.add_value_with_amount(MetricType::MigrationRowsMigrated, rows);
16        self.add_value_with_amount(MetricType::MigrationDurationMs, duration_ms);
17    }
18
19    pub fn record_migration_failure(&self, duration_ms: u64) {
20        self.dec_value(MetricType::MigrationActiveCount);
21        self.add_value(MetricType::MigrationErrorsTotal);
22        self.add_value_with_amount(MetricType::MigrationDurationMs, duration_ms);
23    }
24
25    pub fn get_migration_metrics(&self) -> HashMap<MetricType, u64> {
26        let mut out = HashMap::new();
27        for mt in [
28            MetricType::MigrationTotalCount,
29            MetricType::MigrationRowsMigrated,
30            MetricType::MigrationDurationMs,
31            MetricType::MigrationErrorsTotal,
32            MetricType::MigrationActiveCount,
33        ] {
34            if let Some(v) = self.get_value(mt) {
35                out.insert(mt, v);
36            }
37        }
38        out
39    }
40}