|
| 1 | +use std::io; |
| 2 | +use std::sync::Arc; |
| 3 | + |
| 4 | +use actix_web::middleware::Compress; |
| 5 | +use actix_web::{App, HttpServer, web}; |
| 6 | + |
| 7 | +use crate::actix::api::service_api::config_metrics_api; |
| 8 | +use crate::actix::certificate_helpers; |
| 9 | +use crate::common::telemetry::TelemetryCollector; |
| 10 | +use crate::settings::Settings; |
| 11 | + |
| 12 | +pub fn init_metrics( |
| 13 | + port: u16, |
| 14 | + telemetry_collector: Arc<tokio::sync::Mutex<TelemetryCollector>>, |
| 15 | + settings: Settings, |
| 16 | +) -> io::Result<()> { |
| 17 | + actix_web::rt::System::new().block_on(async { |
| 18 | + let telemetry_collector_data = web::Data::from(telemetry_collector); |
| 19 | + let service_config = web::Data::new(settings.service.clone()); |
| 20 | + |
| 21 | + let mut server = HttpServer::new(move || { |
| 22 | + App::new() |
| 23 | + .wrap(Compress::default()) |
| 24 | + .app_data(telemetry_collector_data.clone()) |
| 25 | + .app_data(service_config.clone()) |
| 26 | + .configure(config_metrics_api) |
| 27 | + }) |
| 28 | + .workers(1); |
| 29 | + |
| 30 | + let bind_addr = format!("{}:{}", settings.service.host, port); |
| 31 | + |
| 32 | + server = if settings.service.enable_tls { |
| 33 | + log::info!( |
| 34 | + "TLS enabled for REST API (TTL: {})", |
| 35 | + settings |
| 36 | + .tls |
| 37 | + .as_ref() |
| 38 | + .and_then(|tls| tls.cert_ttl) |
| 39 | + .map(|ttl| ttl.to_string()) |
| 40 | + .unwrap_or_else(|| "none".into()), |
| 41 | + ); |
| 42 | + |
| 43 | + let config = certificate_helpers::actix_tls_server_config(&settings) |
| 44 | + .map_err(io::Error::other)?; |
| 45 | + server.bind_rustls_0_23(bind_addr, config)? |
| 46 | + } else { |
| 47 | + log::info!("TLS disabled for REST API"); |
| 48 | + |
| 49 | + server.bind(bind_addr)? |
| 50 | + }; |
| 51 | + |
| 52 | + log::info!("Qdrant metrics listening on {port}"); |
| 53 | + server.run().await |
| 54 | + }) |
| 55 | +} |
0 commit comments