Pure code-motion refactor, no logic changes. Follows the repo convention of one struct/enum + its impl per module file: - engine/handle.rs: the left-right write/read plumbing (EngineOp, IndexWriter, IndexReadHandle, IndexReader, EngineHandle) and the actor loop (spawn/run) that owns EngineSnapshot. - engine/message.rs: EngineQuery/EngineMessage/EngineResponse. - engine/snapshot/: EngineSnapshot itself, split by concern into params.rs (declaration + auto-detect), metrics.rs (declare/apply/ backfill), filter.rs (search-bar filter compilation/eval), sort.rs (sort-helper indexes), and query.rs (handle_query_inner + PromQL evaluation), with mod.rs holding the struct and the accessors shared across all of them. - engine/tests.rs: the inline test module, kept as one file (per the task's own escape hatch) since most tests exercise ingest -> declare -> query across several of the new submodules at once rather than one in isolation. Visibility was narrowed per call site: pub(super) where only sibling snapshot submodules need an item, pub(crate) where engine::handle or engine::tests (outside the snapshot subtree) also need it. cargo build --all-targets and cargo test are green (291 passed, 1 ignored, same as before the split). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A1ZJ3SrayzLzVndhVq9BmS
65 lines
1.5 KiB
Rust
65 lines
1.5 KiB
Rust
pub mod alerts;
|
|
pub mod data_value;
|
|
pub mod filter_datetime;
|
|
pub mod filter_parser;
|
|
pub mod handle;
|
|
pub mod index_key;
|
|
pub mod ingest;
|
|
pub mod logfmt;
|
|
pub mod message;
|
|
pub mod metric_primitive;
|
|
pub mod promql;
|
|
pub mod rate;
|
|
pub mod snapshot;
|
|
pub mod timestamp;
|
|
|
|
#[cfg(test)]
|
|
mod tests;
|
|
|
|
pub use handle::{spawn, EngineHandle};
|
|
#[cfg(test)]
|
|
pub(crate) use handle::test_handle;
|
|
pub use message::{EngineMessage, EngineQuery, EngineResponse};
|
|
pub(crate) use snapshot::{eval_json_comparison, EngineSnapshot};
|
|
|
|
use crate::engine::data_value::ParamDeclaration;
|
|
use crate::engine::timestamp::Timestamp;
|
|
use serde::Deserialize;
|
|
use std::collections::BTreeMap;
|
|
|
|
pub struct IngestedLine {
|
|
pub sequence: u64,
|
|
pub timestamp: Timestamp,
|
|
pub text: String,
|
|
}
|
|
|
|
pub struct MetricSample {
|
|
pub metric_name: String,
|
|
pub labels: BTreeMap<String, String>,
|
|
pub value: f64,
|
|
pub timestamp: Timestamp,
|
|
}
|
|
|
|
pub type DeclareParamRequest = ParamDeclaration;
|
|
|
|
#[derive(Debug, Clone, serde::Serialize)]
|
|
pub struct ClearParamsResult {
|
|
pub removed: usize,
|
|
pub reextracted: usize,
|
|
pub logs_considered: usize,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Deserialize)]
|
|
pub struct DeclareMetricRequest {
|
|
pub name: String,
|
|
pub message_match_regex: String,
|
|
#[serde(default)]
|
|
pub label_params: Vec<String>,
|
|
#[serde(default)]
|
|
pub value_param: Option<String>,
|
|
#[serde(default)]
|
|
pub matched_labels: Option<BTreeMap<String, String>>,
|
|
#[serde(default)]
|
|
pub unmatched_labels: Option<BTreeMap<String, String>>,
|
|
}
|