use anyhow::Result;
use tracing_subscriber::{
layer::SubscriberExt,
util::SubscriberInitExt,
EnvFilter,
Registry,
};
use tracing_appender::rolling::{RollingFileAppender, Rotation};
use crate::config::TelemetryConfig;
pub fn init(config: &TelemetryConfig) -> Result<()> {
let file_appender = RollingFileAppender::new(Rotation::DAILY, "logs", "openserve.log");
let env_filter = EnvFilter::try_from_default_env()
.unwrap_or_else(|_| EnvFilter::new(&config.log_level));
let subscriber = Registry::default().with(env_filter);
match config.log_format.as_str() {
"json" => {
let fmt_layer = tracing_subscriber::fmt::layer()
.json()
.with_writer(std::io::stdout);
let file_layer = tracing_subscriber::fmt::layer()
.json()
.with_writer(file_appender);
subscriber
.with(fmt_layer)
.with(file_layer)
.init();
}
_ => {
let fmt_layer = tracing_subscriber::fmt::layer()
.with_writer(std::io::stdout);
let file_layer = tracing_subscriber::fmt::layer()
.with_writer(file_appender);
subscriber
.with(fmt_layer)
.with(file_layer)
.init();
}
}
if config.metrics_enabled {
init_metrics()?;
}
Ok(())
}
fn init_metrics() -> Result<()> {
#[cfg(feature = "metrics")]
{
use prometheus::{Counter, Histogram, register_counter, register_histogram};
use once_cell::sync::Lazy;
static HTTP_REQUESTS_TOTAL: Lazy<Counter> = Lazy::new(|| {
register_counter!("http_requests_total", "Total number of HTTP requests")
.expect("Failed to register counter")
});
static HTTP_REQUEST_DURATION: Lazy<Histogram> = Lazy::new(|| {
register_histogram!("http_request_duration_seconds", "HTTP request duration")
.expect("Failed to register histogram")
});
}
Ok(())
}
#[allow(dead_code)]
fn init_tracing(_config: &TelemetryConfig) -> Result<()> {
Ok(())
}