From 58eef6b3fa7be4ce955b1e4dac0754b8edd669b7 Mon Sep 17 00:00:00 2001 From: Aravinth Manivannan Date: Sun, 25 Dec 2022 13:14:00 +0530 Subject: [PATCH] feat: add prometheus instrumentation --- Cargo.lock | 27 +++++++++++++++++++++++++++ Cargo.toml | 1 + src/main.rs | 7 +++++++ 3 files changed, 35 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index 3d0fa2e..7764663 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -208,6 +208,18 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "actix-web-prom" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9df3127d20a5d01c9fc9aceb969a38d31a6767e1b48a54d55a8f56c769a84923" +dependencies = [ + "actix-web", + "futures-core", + "pin-project-lite", + "prometheus", +] + [[package]] name = "adler" version = "1.0.2" @@ -415,6 +427,7 @@ dependencies = [ "actix-web", "actix-web-codegen-const-routes", "actix-web-httpauth", + "actix-web-prom", "base64", "clap", "config", @@ -1408,6 +1421,20 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "prometheus" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c" +dependencies = [ + "cfg-if", + "fnv", + "lazy_static", + "memchr", + "parking_lot 0.12.1", + "thiserror", +] + [[package]] name = "quick-error" version = "1.2.3" diff --git a/Cargo.toml b/Cargo.toml index d606f73..88a48ca 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,7 @@ build = "build.rs" [dependencies] actix-web = "4" +actix-web-prom = "0.6.0" futures-util = { version = "0.3.17", default-features = false, features = ["std"] } lazy_static = "1.4.0" log = "0.4.17" diff --git a/src/main.rs b/src/main.rs index ddecbc0..4053369 100644 --- a/src/main.rs +++ b/src/main.rs @@ -19,6 +19,7 @@ use std::env; use actix_web::http::StatusCode; use actix_web::web::JsonConfig; use actix_web::{error::InternalError, middleware, App, HttpServer}; +use actix_web_prom::PrometheusMetricsBuilder; use clap::{Parser, Subcommand}; use log::info; @@ -112,6 +113,11 @@ async fn serve(settings: Settings, ctx: AppCtx) -> std::io::Result<()> { let ip = settings.server.get_ip(); println!("Starting server on: http://{ip}"); + let prometheus = PrometheusMetricsBuilder::new("api") + .endpoint("/metrics") + .build() + .unwrap(); + HttpServer::new(move || { App::new() .wrap(middleware::Logger::default()) @@ -124,6 +130,7 @@ async fn serve(settings: Settings, ctx: AppCtx) -> std::io::Result<()> { middleware::TrailingSlash::Trim, )) .app_data(get_json_err()) + .wrap(prometheus.clone()) .configure(routes::services) }) .bind(ip)?