From 6abc99d9b671eecc7dafb42e099a4bb11dd361da Mon Sep 17 00:00:00 2001 From: Cameron Cordes Date: Mon, 5 Apr 2021 20:14:34 -0400 Subject: [PATCH] Add PrometheusMetrics --- Cargo.lock | 29 +++++++++++++++++++++++++++++ Cargo.toml | 1 + src/main.rs | 7 ++++++- 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 3c1e301..ded651d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -326,6 +326,20 @@ dependencies = [ "syn", ] +[[package]] +name = "actix-web-prom" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec994b7dd52e686b9ae8f63bc485e6027fb44b936ed09bdf648495b9966c36ce" +dependencies = [ + "actix-http", + "actix-service", + "actix-web", + "futures", + "pin-project 1.0.6", + "prometheus", +] + [[package]] name = "actix_derive" version = "0.5.0" @@ -1136,6 +1150,7 @@ dependencies = [ "actix-multipart", "actix-rt", "actix-web", + "actix-web-prom", "bcrypt", "chrono", "diesel", @@ -1728,6 +1743,20 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "prometheus" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8425533e7122f0c3cc7a37e6244b16ad3a2cc32ae7ac6276e2a75da0d9c200d" +dependencies = [ + "cfg-if 1.0.0", + "fnv", + "lazy_static", + "parking_lot", + "regex", + "thiserror", +] + [[package]] name = "quick-error" version = "1.2.3" diff --git a/Cargo.toml b/Cargo.toml index a8f3ed8..f1f92ec 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,3 +32,4 @@ notify = "4.0" path-absolutize = "3.0.6" log="0.4" env_logger="0.8" +actix-web-prom = "0.5.1" diff --git a/src/main.rs b/src/main.rs index 7718412..b549c60 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,12 +3,13 @@ extern crate diesel; extern crate rayon; use crate::auth::login; +use actix_web_prom::PrometheusMetrics; use database::{DbError, DbErrorKind, FavoriteDao, SqliteFavoriteDao, SqliteUserDao, UserDao}; use futures::stream::StreamExt; -use std::io::prelude::*; use std::path::{Path, PathBuf}; use std::sync::mpsc::channel; use std::sync::Arc; +use std::{collections::HashMap, io::prelude::*}; use std::{env, fs::File}; use actix::prelude::*; @@ -404,6 +405,9 @@ fn main() -> std::io::Result<()> { stream_manager: Arc::new(act), }); + let labels = HashMap::new(); + let prometheus = PrometheusMetrics::new("", Some("/metrics"), Some(labels)); + HttpServer::new(move || { let user_dao = SqliteUserDao::new(); let favorites_dao = SqliteFavoriteDao::new(); @@ -422,6 +426,7 @@ fn main() -> std::io::Result<()> { .app_data(app_data.clone()) .data::>(Box::new(user_dao)) .data::>(Box::new(favorites_dao)) + .wrap(prometheus.clone()) }) .bind(dotenv::var("BIND_URL").unwrap())? .bind("localhost:8088")?