Strip all comments outside src/consts.rs
Removes doc comments, module comments, and inline comments across the backend so the only comments left in the codebase are the brief ones on the constants they document. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A1ZJ3SrayzLzVndhVq9BmS
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
284e3562a2
commit
b6401c1c3c
@@ -3,61 +3,22 @@ use crate::timestamp::Timestamp;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::collections::BTreeMap;
|
||||
|
||||
/// A named, standalone parameter: how to pull a value out of a matching log line, and what kind it
|
||||
/// parses as. Ticket 037 unified this with the metric-declaration-embedded matcher that used to
|
||||
/// exist alongside it (`RegexToMetricPrimitiveMatcher`) — a metric now references params by name
|
||||
/// (`MetricDeclaration::label_params`/`value_param`) instead of redeclaring its own extractor per
|
||||
/// param, so a param declared once (e.g. via the Params panel) can be reused as a label by one
|
||||
/// metric and as the value by another without re-entering its regex/capture-group/kind.
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
pub struct ParamDeclaration {
|
||||
pub name: String,
|
||||
pub message_match_regex: String,
|
||||
pub capture_group: String,
|
||||
/// Alternative extraction source to `capture_group`: a dot-separated JSON field path (e.g.
|
||||
/// `foo.bar`), read from lines that parse as a JSON object instead of via the regex capture
|
||||
/// group. When present and non-empty, this takes precedence over `capture_group`.
|
||||
/// `#[serde(default)]` so profile files/requests saved before this field existed still load
|
||||
/// as plain regex-capture-group params.
|
||||
#[serde(default)]
|
||||
pub json_field_path: Option<String>,
|
||||
pub kind: MetricPrimitiveKind,
|
||||
/// A third extraction source, alongside `capture_group`/`json_field_path`: when set, this
|
||||
/// param's value is never parsed from text at all — it's computed as elapsed time since the
|
||||
/// previous event that produced the same label set (ticket 038). Takes precedence over
|
||||
/// `json_field_path`/`capture_group` when set, and `message_match_regex`/`capture_group`/
|
||||
/// `json_field_path` are simply unused in that case (`declare_param` doesn't validate them for
|
||||
/// this shape). Only meaningful paired with `kind == Duration`, since elapsed time is the only
|
||||
/// primitive this computation can produce — `declare_param` enforces that pairing.
|
||||
/// `#[serde(default)]` so params declared before this field existed keep parsing as plain
|
||||
/// regex/JSON-field extraction.
|
||||
#[serde(default)]
|
||||
pub elapsed_since_last: bool,
|
||||
/// Set when this param was discovered by `crate::engine::auto_declare_params` (a nom-based
|
||||
/// `key=value` scan run on every ingested line) rather than declared through `POST /api/params`.
|
||||
/// `declare_param` refuses to overwrite an auto-derived param by name, and it's never persisted
|
||||
/// to a profile — see `crate::engine::declare_param` and `crate::api::reload_engine_declarations`.
|
||||
/// `#[serde(default)]` so profiles/requests saved before this field existed still load as
|
||||
/// ordinary (non-auto) params.
|
||||
#[serde(default)]
|
||||
pub auto_derived: bool,
|
||||
/// Set for a `log stream` column/message param declared by
|
||||
/// `crate::engine::auto_declare_log_stream_params`. Those params' `message_match_regex` is a
|
||||
/// pure fixed character-offset slice with no content anchor of its own (ticket 076) — it'll
|
||||
/// happily "match" and extract garbage from any line at least that long, including a wrapped
|
||||
/// multi-line dump's continuation line or the header row itself. When set, extraction (
|
||||
/// `extract_param_raw`/`derive_log_params`) additionally requires
|
||||
/// `crate::logfmt::is_log_stream_line(text)` before trusting the regex at all.
|
||||
/// `#[serde(default)]` so params declared before this field existed keep extracting as before.
|
||||
#[serde(default)]
|
||||
pub log_stream_gated: bool,
|
||||
}
|
||||
|
||||
/// Reads a value out of a JSON object by dot-separated field path (e.g. `"foo.bar"`), for
|
||||
/// [`ParamDeclaration::json_field_path`]. Returns `None` when `text` doesn't parse as a JSON
|
||||
/// object, the path doesn't resolve to a value, or the resolved value isn't a scalar
|
||||
/// (string/number/bool) — there's no sensible flat text form of a nested object/array to feed into
|
||||
/// `parse_metric_primitive`.
|
||||
pub fn extract_json_field(text: &str, field_path: &str) -> Option<String> {
|
||||
let root: serde_json::Value = serde_json::from_str(text).ok()?;
|
||||
let mut current = root.as_object()?;
|
||||
@@ -77,14 +38,6 @@ pub fn extract_json_field(text: &str, field_path: &str) -> Option<String> {
|
||||
}
|
||||
}
|
||||
|
||||
/// Flattens a JSON object into dot-separated field paths mapped to each leaf scalar's raw text form
|
||||
/// (string/number/bool), for [`crate::engine::auto_declare_params`] when a line is JSON
|
||||
/// (`crate::logfmt::detect_format`) rather than logfmt — the JSON equivalent of
|
||||
/// `crate::logfmt::extract_pairs`'s `key=value` scan. Nested objects recurse, dot-joining the path
|
||||
/// (`"foo": {"bar": 1}` yields `"foo.bar"`); arrays and null are skipped since there's no single leaf
|
||||
/// scalar to declare a param against, matching `extract_json_field`'s own restriction to scalars.
|
||||
/// Returns an empty vec for anything that isn't a JSON object, same as `extract_pairs` returns empty
|
||||
/// for a line with no `key=value` pairs.
|
||||
pub fn flatten_json_object(text: &str) -> Vec<(String, String)> {
|
||||
let Ok(serde_json::Value::Object(root)) = serde_json::from_str::<serde_json::Value>(text) else {
|
||||
return Vec::new();
|
||||
@@ -111,7 +64,6 @@ fn flatten_json_object_into(
|
||||
}
|
||||
}
|
||||
|
||||
/// `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")]
|
||||
@@ -119,45 +71,25 @@ pub enum MetricPrimitiveKind {
|
||||
String,
|
||||
Number,
|
||||
Timestamp,
|
||||
/// A literal i64 millisecond count. Note this is unrelated to
|
||||
/// `ParamDeclaration::elapsed_since_last`, which is a separate, independent extraction source —
|
||||
/// a param using that source always parses/produces `Duration`, but not every `Duration`-kind
|
||||
/// param is computed that way (one can also just parse a literal duration out of captured text,
|
||||
/// like any other kind).
|
||||
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(ParamDeclaration),
|
||||
/// Paired with `IndexKey::MetricDeclaration`. `label_params`/`value_param` reference standalone
|
||||
/// `ParamDeclaration`s by name (resolved against the engine's param store in
|
||||
/// `crate::engine::apply_metric_to_log`) rather than embedding their own extractor.
|
||||
MetricDeclaration {
|
||||
message_match_regex: String,
|
||||
label_params: Vec<String>,
|
||||
/// At most one value param per metric; its primitive becomes the event's bucket value instead of a label.
|
||||
value_param: Option<String>,
|
||||
/// See `crate::engine::DeclareMetricRequest::matched_labels`.
|
||||
matched_labels: Option<BTreeMap<String, String>>,
|
||||
/// See `crate::engine::DeclareMetricRequest::unmatched_labels`.
|
||||
unmatched_labels: Option<BTreeMap<String, String>>,
|
||||
},
|
||||
/// Paired with `IndexKey::Bucket`.
|
||||
BucketValue {
|
||||
values: Vec<(u64, Timestamp, MetricPrimitive)>,
|
||||
},
|
||||
/// Paired with `IndexKey::LastMetricEvent`.
|
||||
LastEventTimestamp {
|
||||
timestamp: Timestamp,
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user