diff --git a/Cargo.toml b/Cargo.toml index 15e719f..bd08195 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "exporter" -version = "0.1.0" +version = "0.2.3" edition = "2021" [dependencies] diff --git a/src/endpoints.rs b/src/endpoints.rs index fad43eb..f1538eb 100644 --- a/src/endpoints.rs +++ b/src/endpoints.rs @@ -7,23 +7,18 @@ use crate::structs::v3::PrometheusMetrics; use prometheus::{ Encoder, Gauge, Registry, TextEncoder}; use std::sync::{ Arc, MutexGuard }; use crate::AppState; -use tracing::{ error, debug, info, warn }; +use tracing::{ error, info, warn }; use crate::metrics::{MetricsProcesser, MetricsValueType}; pub async fn update_metrics( State(state): State>, - Json(request) : Json + Json(request) : Json> ) -> impl IntoResponse { info!("post on /update"); -// let resp = Response::new("body"); - // debug!("{:?}", request); - // debug!("{:?}", MetricsProcesser::get_type_of_value(&request)); let service = &request.service_name; let endpoint = &request.endpoint_name; for i in request.metrics { - // debug!("{:?}", &i); - // debug!("{:?}", MetricsProcesser::get_type_of_value(&i)); let metric_name = format!("{}_{}_{}", service, endpoint, &i.id); match MetricsProcesser::get_type_of_value(&i) { MetricsValueType::Array | @@ -33,7 +28,8 @@ pub async fn update_metrics( MetricsValueType::Number => { let gauge = MetricsProcesser::gauge_from_number( &i, - &metric_name + &metric_name, + &i.desc.clone().unwrap_or_else(|| std::borrow::Cow::Borrowed(&i.id)) ); if let Some(gauge) = gauge { match state.registry.lock() { @@ -50,7 +46,6 @@ pub async fn update_metrics( }, } } - // dbg!(gauge); }, MetricsValueType::ArrayOfStrings => { warn!("String arrays are unsupported, ignoring ..."); diff --git a/src/metrics.rs b/src/metrics.rs index d48e5e9..87aa996 100644 --- a/src/metrics.rs +++ b/src/metrics.rs @@ -39,10 +39,11 @@ impl MetricsProcesser { pub fn gauge_from_number( metric: &MetricOutput, metric_name: &str, + metric_desc: &str ) -> Option { let gauge = Gauge::new( metric_name, - &metric.id + metric_desc ); match gauge { diff --git a/src/structs.rs b/src/structs.rs index 3f56f4a..b480f3a 100644 --- a/src/structs.rs +++ b/src/structs.rs @@ -1,25 +1,28 @@ // use std::collections::HashMap; use serde::{Serialize, Deserialize}; use serde_json::Value; +use std::borrow::Cow; // use anyhow::Result; // use std::sync::Arc; pub mod v3 { pub use super::*; // to prometheus and nmns - #[derive(Serialize, Deserialize, Debug)] - pub struct MetricOutput { + #[derive(Serialize, Deserialize, Debug, Clone)] + pub struct MetricOutput<'a> { pub id : String, #[serde(rename = "type")] json_type : String, addr : String, pub value : Value, + #[serde(rename = "description")] + pub desc : Option>, } #[derive(Serialize, Deserialize, Debug)] - pub struct PrometheusMetrics { + pub struct PrometheusMetrics<'a> { pub service_name: String, pub endpoint_name: String, - pub metrics: Vec, + pub metrics: Vec>, } } \ No newline at end of file