metrics: allow customizing address in full; add tests
This commit is contained in:
parent
c20f940736
commit
2da4d6d203
3 changed files with 103 additions and 18 deletions
27
src/main.rs
27
src/main.rs
|
@ -43,10 +43,10 @@ struct Args {
|
|||
|
||||
#[clap(
|
||||
long,
|
||||
default_value = "9100",
|
||||
help = "Port to expose Prometheus metrics and status endpoint"
|
||||
default_value = "0.0.0.0:9100",
|
||||
help = "Address and port to expose Prometheus metrics and status endpoint (format: ip:port)"
|
||||
)]
|
||||
metrics_port: u16,
|
||||
metrics_addr: String,
|
||||
|
||||
#[clap(long, help = "Disable Prometheus metrics server completely")]
|
||||
disable_metrics: bool,
|
||||
|
@ -110,7 +110,7 @@ struct Args {
|
|||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||
struct Config {
|
||||
listen_addr: String,
|
||||
metrics_port: u16,
|
||||
metrics_addr: String,
|
||||
disable_metrics: bool,
|
||||
backend_addr: String,
|
||||
min_delay: u64,
|
||||
|
@ -130,7 +130,7 @@ impl Default for Config {
|
|||
fn default() -> Self {
|
||||
Self {
|
||||
listen_addr: "0.0.0.0:8888".to_string(),
|
||||
metrics_port: 9100,
|
||||
metrics_addr: "0.0.0.0:9100".to_string(),
|
||||
disable_metrics: false,
|
||||
backend_addr: "127.0.0.1:80".to_string(),
|
||||
min_delay: 1000,
|
||||
|
@ -216,7 +216,7 @@ impl Config {
|
|||
|
||||
Self {
|
||||
listen_addr: args.listen_addr.clone(),
|
||||
metrics_port: args.metrics_port,
|
||||
metrics_addr: args.metrics_addr.clone(),
|
||||
disable_metrics: args.disable_metrics,
|
||||
backend_addr: args.backend_addr.clone(),
|
||||
min_delay: args.min_delay,
|
||||
|
@ -1192,8 +1192,7 @@ async fn main() -> std::io::Result<()> {
|
|||
log::info!("Metrics server disabled via configuration");
|
||||
None
|
||||
} else {
|
||||
let metrics_addr = format!("0.0.0.0:{}", metrics_config.metrics_port);
|
||||
log::info!("Starting metrics server on {metrics_addr}");
|
||||
log::info!("Starting metrics server on {}", metrics_config.metrics_addr);
|
||||
|
||||
let server = HttpServer::new(move || {
|
||||
App::new()
|
||||
|
@ -1204,12 +1203,16 @@ async fn main() -> std::io::Result<()> {
|
|||
HttpResponse::Ok().body("Botpot Server is running. Visit /metrics for metrics or /status for status.")
|
||||
}))
|
||||
})
|
||||
.bind(&metrics_addr);
|
||||
.bind(&metrics_config.metrics_addr);
|
||||
|
||||
match server {
|
||||
Ok(server) => Some(server.run()),
|
||||
Err(e) => {
|
||||
log::error!("Failed to bind metrics server to {metrics_addr}: {e}");
|
||||
log::error!(
|
||||
"Failed to bind metrics server to {}: {}",
|
||||
metrics_config.metrics_addr,
|
||||
e
|
||||
);
|
||||
None
|
||||
}
|
||||
}
|
||||
|
@ -1265,7 +1268,7 @@ mod tests {
|
|||
fn test_config_from_args() {
|
||||
let args = Args {
|
||||
listen_addr: "127.0.0.1:8080".to_string(),
|
||||
metrics_port: 9000,
|
||||
metrics_addr: "127.0.0.1:9000".to_string(),
|
||||
disable_metrics: true,
|
||||
backend_addr: "127.0.0.1:8081".to_string(),
|
||||
min_delay: 500,
|
||||
|
@ -1279,7 +1282,7 @@ mod tests {
|
|||
|
||||
let config = Config::from_args(&args);
|
||||
assert_eq!(config.listen_addr, "127.0.0.1:8080");
|
||||
assert_eq!(config.metrics_port, 9000);
|
||||
assert_eq!(config.metrics_addr, "127.0.0.1:9000");
|
||||
assert!(config.disable_metrics);
|
||||
assert_eq!(config.backend_addr, "127.0.0.1:8081");
|
||||
assert_eq!(config.min_delay, 500);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue