use crate::metric_primitive::MetricPrimitive; use crate::timestamp::Timestamp; use serde::{Deserialize, Serialize}; use std::collections::BTreeMap; #[allow(dead_code)] #[derive(Debug, Clone, Serialize, Deserialize)] pub struct RegexToMetricPrimitiveMatcher { pub param_name: String, pub capture_group: String, pub kind: MetricPrimitiveKind, /// Whether this param is a bucket label or its captured value (at most one Value-role param per metric); `#[serde(default)]` so profile files saved before this field existed still load as `Label`. #[serde(default)] pub role: ParamRole, } /// See [`RegexToMetricPrimitiveMatcher::role`]. #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)] #[serde(rename_all = "lowercase")] pub enum ParamRole { #[default] Label, Value, } /// `rename_all = "lowercase"` matches other `kind`-style enums, so JSON bodies use "string"/"number"/"timestamp". #[allow(dead_code)] #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] #[serde(rename_all = "lowercase")] pub enum MetricPrimitiveKind { String, Number, Timestamp, /// On a Value-role param this is derived as elapsed time since the previous event (not parsed from text); otherwise it's a literal i64 millisecond count. Duration, /// A standalone param declared with this kind doesn't require (or use) a capture group: its value is /// simply whether `message_match_regex` matches the line, case-insensitively or per the regex's own /// flags — see `crate::engine::derive_log_params`. Unlike other kinds it's present as `true`/`false` /// on every line rather than omitted when unmatched. Boolean, } /// Value type paired with [`crate::index_key::IndexKey`] in the engine's primary index. #[allow(dead_code)] #[derive(Debug, Clone, Serialize)] pub enum DataValue { /// Paired with `IndexKey::IngestedLog`. LogLiteral { text: String }, /// Paired with `IndexKey::ParamDeclaration`. ParamDeclaration { message_match_regex: String, capture_group: String, kind: MetricPrimitiveKind, }, /// Paired with `IndexKey::MetricDeclaration`. MetricDeclaration { message_match_regex: String, params: Vec, /// See `crate::engine::DeclareMetricRequest::matched_labels`. matched_labels: Option>, /// See `crate::engine::DeclareMetricRequest::unmatched_labels`. unmatched_labels: Option>, }, /// Paired with `IndexKey::Bucket`. BucketValue { values: Vec<(u64, Timestamp, MetricPrimitive)>, }, /// Paired with `IndexKey::LastMetricEvent`. LastEventTimestamp { timestamp: Timestamp, }, }