use crate::metrics::MetricsManager;
use super::config::BatchProcessingConfig;
pub fn register(manager: &MetricsManager, config: &BatchProcessingConfig) {
let _ = manager.counter(
"batch_engine_messages_received_total",
"Messages received from transport",
);
let _ = manager.counter(
"batch_engine_messages_parsed_total",
"Messages successfully SIMD-parsed",
);
let _ = manager.counter(
"batch_engine_messages_filtered_total",
"Messages filtered at pre-route",
);
let _ = manager.counter("batch_engine_messages_dlq_total", "Messages routed to DLQ");
let _ = manager.counter("batch_engine_parse_errors_total", "Parse failures");
let _ = manager.histogram(
"batch_engine_parse_duration_seconds",
"SIMD parse time per chunk",
);
let _ = manager.histogram(
"batch_engine_transform_duration_seconds",
"App transform time per chunk",
);
let _ = manager.histogram("batch_engine_chunk_size", "Actual items per chunk");
let _ = manager.histogram(
"batch_engine_pre_route_duration_seconds",
"Pre-route extraction time per chunk",
);
let _ = manager.gauge(
"batch_engine_intern_table_size",
"Interned field name count",
);
#[cfg(feature = "governor")]
{
let _ = manager.gauge(
"self_regulation_byte_budget",
"Current AIMD byte budget (inbound block size lever)",
);
let _ = manager.gauge(
"pressure_ratio",
"Combined self-regulation pressure level (0.0-1.0)",
);
let _ = manager.gauge(
"inbound_paused",
"1 while the inbound gate is holding under pressure, else 0",
);
let _ = manager.counter(
"self_regulation_inbound_pauses_total",
"Inbound gate pause (rising-edge) events",
);
}
emit_thresholds(config);
}
pub fn emit_thresholds(config: &BatchProcessingConfig) {
metrics::gauge!("batch_engine_max_chunk_size").set(config.max_chunk_size as f64);
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn register_does_not_panic() {
let manager = MetricsManager::new_for_test("test_engine_metrics");
let config = BatchProcessingConfig::default();
register(&manager, &config);
}
#[test]
fn emit_thresholds_does_not_panic() {
let config = BatchProcessingConfig::default();
emit_thresholds(&config);
}
#[test]
fn register_returns_handles() {
let manager = MetricsManager::new_for_test("test_engine_metrics_handles");
let config = BatchProcessingConfig::default();
register(&manager, &config);
register(&manager, &config);
}
}