Skip to content

Commit

Permalink
fix: record metrics properly (#164)
Browse files Browse the repository at this point in the history
This PR:
- fixes 404 metric recording
- fixes de-synced metrics on each GET to /metrics
  • Loading branch information
lauti7 authored Oct 31, 2023
1 parent 61d0e84 commit d8e5e3e
Show file tree
Hide file tree
Showing 8 changed files with 40 additions and 35 deletions.
25 changes: 12 additions & 13 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion crates/server/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ log = { workspace = true }
dcl-crypto = { workspace = true }
uuid = { workspace = true }

actix-web-prom = "0.6.0"
dcl-http-prom-metrics = "0.1.0"
async-trait = "0.1.57"
tracing = "0.1"
tracing-log = "0.1"
Expand Down
8 changes: 0 additions & 8 deletions crates/server/src/api/middlewares/metrics.rs

This file was deleted.

2 changes: 0 additions & 2 deletions crates/server/src/api/middlewares/mod.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
mod auth;
mod metrics;
mod metrics_token;
mod tracing;

pub use self::tracing::initialize_telemetry;
pub use auth::dcl_auth_middleware;
pub use metrics::metrics;
pub use metrics_token::metrics_token;
22 changes: 14 additions & 8 deletions crates/server/src/api/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ use actix_web::{
web::Data,
App, HttpServer,
};
use dcl_http_prom_metrics::HttpMetricsCollector;
use quests_db::Database;
use quests_message_broker::messages_queue::RedisMessagesQueue;
use tracing_actix_web::TracingLogger;
Expand All @@ -20,13 +21,16 @@ pub async fn run_server(
config: Data<Config>,
database: Data<Database>,
events_queue: Data<RedisMessagesQueue>,
metrics_collector: Data<HttpMetricsCollector>,
) -> Server {
let server_address = format!("0.0.0.0:{}", config.http_server_port);

let server = HttpServer::new(move || get_app_router(&config, &database, &events_queue))
.bind(&server_address)
.unwrap() // Unwrap because if it's not able to bind, it doens't matter the panic
.run();
let server = HttpServer::new(move || {
get_app_router(&config, &database, &events_queue, &metrics_collector)
})
.bind(&server_address)
.unwrap() // Unwrap because if it's not able to bind, it doens't matter the panic
.run();

log::info!("Quests REST API running at http://{}", server_address);

Expand All @@ -37,6 +41,7 @@ pub fn get_app_router(
config: &Data<Config>,
db: &Data<Database>,
redis: &Data<RedisMessagesQueue>,
metrics_collector: &Data<HttpMetricsCollector>,
) -> App<
impl ServiceFactory<
actix_web::dev::ServiceRequest,
Expand All @@ -54,10 +59,7 @@ pub fn get_app_router(
.app_data(config.clone())
.app_data(db.clone())
.app_data(redis.clone())
.wrap(cors)
.wrap(TracingLogger::default())
// .wrap(middlewares::metrics())
// .wrap(middlewares::metrics_token(&config.wkc_metrics_bearer_token))
.app_data(metrics_collector.clone())
.wrap(middlewares::dcl_auth_middleware(
[
"POST:/api/quests",
Expand All @@ -72,5 +74,9 @@ pub fn get_app_router(
"GET:/api/creators/{user_address}/quests",
],
))
.wrap(dcl_http_prom_metrics::metrics())
.wrap(middlewares::metrics_token(&config.wkc_metrics_bearer_token))
.wrap(TracingLogger::default())
.wrap(cors)
.configure(routes::services)
}
2 changes: 1 addition & 1 deletion crates/server/src/configuration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ impl Config {
.set_default("http_server_port", 3000)? // It's empty for local development
.set_default("ws_server_port", 3001)? // default for local development
.set_default("env", "dev")?
.set_default("wkc_metrics_bearer_token", "")?
.set_default("wkc_metrics_bearer_token", "DEV")?
.set_default(
"database_url",
"postgres://postgres:postgres@localhost:5432/quests_db",
Expand Down
12 changes: 10 additions & 2 deletions crates/server/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ pub mod rpc;
use std::sync::Arc;

use api::middlewares::initialize_telemetry;
use dcl_http_prom_metrics::HttpMetricsCollectorBuilder;
use env_logger::init as initialize_logger;
use quests_db::create_quests_db_component;
use quests_message_broker::{
Expand Down Expand Up @@ -44,6 +45,8 @@ pub async fn run_app() {
));
let quests_channel_subscriber = RedisChannelSubscriber::new(redis.clone());

let http_metrics_collector = Arc::new(HttpMetricsCollectorBuilder::default().build());

let (warp_websocket_server, rpc_server) = rpc::run_rpc_server((
config.clone(),
database.clone(),
Expand All @@ -59,8 +62,13 @@ pub async fn run_app() {
quests_channel_publisher.clone(),
);

let actix_rest_api_server =
api::run_server(config.into(), database.into(), events_queue.into()).await;
let actix_rest_api_server = api::run_server(
config.into(),
database.into(),
events_queue.into(),
http_metrics_collector.into(),
)
.await;

select! {
_ = tokio::signal::ctrl_c() => {
Expand Down
2 changes: 2 additions & 0 deletions crates/server/tests/common/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ use actix_web::web::Data;
use actix_web::App;
use actix_web_lab::__reexports::serde_json;
use dcl_crypto::Identity;
use dcl_http_prom_metrics::HttpMetricsCollectorBuilder;
use quests_db::core::ops::{Connect, GetConnection, Migrate};
use quests_db::{create_quests_db_component, DatabaseOptions, Executor};
use quests_message_broker::messages_queue::RedisMessagesQueue;
Expand Down Expand Up @@ -49,6 +50,7 @@ pub async fn build_app(
&Data::new(config.clone()),
&Data::new(db),
&Data::new(events_queue),
&Data::new(HttpMetricsCollectorBuilder::default().build()),
)
}

Expand Down

0 comments on commit d8e5e3e

Please sign in to comment.