diff --git a/src/apache_metrics.rs b/src/apache_metrics.rs index dc89f42..7b982eb 100644 --- a/src/apache_metrics.rs +++ b/src/apache_metrics.rs @@ -1,12 +1,23 @@ +use prometheus_client::metrics::counter::Counter; +use prometheus_client::metrics::family::Family; use prometheus_client::registry::Registry; #[derive(Clone)] -pub struct ApacheMetrics {} +pub struct ApacheMetrics { + pub requests_total: Family<(&'static str, String), Counter> +} impl ApacheMetrics { pub fn new() -> (Registry, ApacheMetrics) { let mut registry = <Registry>::default(); - let metrics = ApacheMetrics {}; + + let requests_total = Family::<(&'static str, String), Counter>::default(); + registry.register("apache_requests", "Number of received requests", Box::new(requests_total.clone())); + + let metrics = ApacheMetrics { + requests_total + }; + return (registry, metrics); } } diff --git a/src/log_watcher.rs b/src/log_watcher.rs index 9d3a916..bd93f3e 100644 --- a/src/log_watcher.rs +++ b/src/log_watcher.rs @@ -36,8 +36,9 @@ async fn read_logs(log_files: Vec<LogFilePath>, metrics: ApacheMetrics) -> io::R let event_result = file_reader.next_line().await?; if let Some(event) = event_result { match label_lookup.get(event.source()) { - Some(label) => { + Some(&label) => { println!("[LogWatcher] Received line from \"{}\": {}", label, event.line()); + metrics.requests_total.get_or_create(&("file", label.clone())).inc(); } None => { println!("[LogWatcher] Received line from unknown file: {}", event.source().display());