blueprint_qos/
lib.rs

1#![allow(clippy::must_use_candidate)]
2pub mod error;
3pub mod heartbeat;
4pub mod logging;
5pub mod metrics;
6pub mod servers;
7pub mod service;
8pub mod service_builder;
9pub mod unified_service;
10
11// Allow clippy lints in generated code
12#[allow(
13    clippy::missing_errors_doc,
14    clippy::wildcard_imports,
15    clippy::doc_markdown,
16    clippy::used_underscore_items,
17    clippy::default_trait_access
18)]
19pub mod proto {
20    include!(concat!(env!("OUT_DIR"), "/qos.rs"));
21}
22
23pub use logging::{GrafanaClient, GrafanaConfig, LokiConfig};
24pub use servers::{
25    grafana::GrafanaServerConfig, loki::LokiServerConfig, prometheus::PrometheusServerConfig,
26};
27pub use service_builder::QoSServiceBuilder;
28pub use unified_service::QoSService;
29
30/// Configuration for the `QoS` system
31#[derive(Clone, Debug, Default)]
32pub struct QoSConfig {
33    /// Heartbeat configuration
34    pub heartbeat: Option<heartbeat::HeartbeatConfig>,
35
36    /// Metrics configuration
37    pub metrics: Option<metrics::MetricsConfig>,
38
39    /// Loki logging configuration
40    pub loki: Option<logging::LokiConfig>,
41
42    /// Grafana configuration
43    pub grafana: Option<logging::GrafanaConfig>,
44
45    /// Grafana server configuration (if None, no server will be started)
46    pub grafana_server: Option<servers::grafana::GrafanaServerConfig>,
47
48    /// Docker network for managed servers (if None, default network will be used)
49    pub docker_network: Option<String>,
50
51    /// Loki server configuration (if None, no server will be started)
52    pub loki_server: Option<servers::loki::LokiServerConfig>,
53
54    /// Prometheus server configuration (if None, no server will be started)
55    pub prometheus_server: Option<servers::prometheus::PrometheusServerConfig>,
56
57    /// Whether to manage servers automatically
58    pub manage_servers: bool,
59
60    /// Optional Service ID for Grafana dashboard context
61    pub service_id: Option<u64>,
62
63    /// Optional Blueprint ID for Grafana dashboard context
64    pub blueprint_id: Option<u64>,
65
66    /// Optional Docker bind IP for managed servers (defaults to 127.0.0.1)
67    pub docker_bind_ip: Option<String>,
68}
69
70/// Creates a new `QoS` configuration with sensible default values for all components.
71///
72/// This function initializes `QoSConfig` with defaults for heartbeat, metrics, Loki logging,
73/// and Grafana, but disables automatic server management. Prometheus server is not
74/// enabled by default. This configuration is suitable as a starting point that can be
75/// further customized.
76#[must_use]
77pub fn default_qos_config() -> QoSConfig {
78    QoSConfig {
79        heartbeat: Some(heartbeat::HeartbeatConfig::default()),
80        metrics: Some(metrics::MetricsConfig::default()),
81        loki: Some(logging::LokiConfig::default()),
82        grafana: Some(logging::GrafanaConfig::default()),
83        grafana_server: Some(servers::grafana::GrafanaServerConfig::default()),
84        loki_server: Some(servers::loki::LokiServerConfig::default()),
85        prometheus_server: None,
86        docker_network: None,
87        manage_servers: false,
88        service_id: None,
89        blueprint_id: None,
90        docker_bind_ip: None,
91    }
92}