From 979d5410fda7cfe9a7b45971e54fa83653cbec40 Mon Sep 17 00:00:00 2001 From: prplV Date: Thu, 27 Feb 2025 12:31:06 +0300 Subject: [PATCH] self-defining pattern for Value type --- src/metrics.rs | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/metrics.rs b/src/metrics.rs index 7f73859..d48e5e9 100644 --- a/src/metrics.rs +++ b/src/metrics.rs @@ -2,6 +2,8 @@ use crate::structs::v3::MetricOutput; use serde_json::{Map, Value}; use prometheus::Gauge; use tracing::error; +use prometheus::Opts; +use prometheus::GaugeVec; #[derive(Debug)] pub enum MetricsValueType { @@ -32,6 +34,8 @@ impl MetricsProcesser { } MetricsValueType::None } + + // TODO: i64 and f63 support pub fn gauge_from_number( metric: &MetricOutput, metric_name: &str, @@ -102,9 +106,6 @@ impl MetricsProcesser { metric_value = value.as_f64().unwrap_or(0.0) } }); - use prometheus::Opts; - use prometheus::GaugeVec; - let opts = Opts::new(&name, &help); let gauge_vec = GaugeVec::new(opts, &[&label_name]); match gauge_vec { @@ -177,4 +178,19 @@ impl MetricsProcesser { metrics .value.is_number() } +} + + + +trait IsTaggedArray { + fn is_tagged_array(&self) -> bool; +} + +impl IsTaggedArray for Value { + fn is_tagged_array(&self) -> bool { + if let Some(arr) = self.as_array() { + return arr[0].get("tag_name").is_some(); + } + false + } } \ No newline at end of file