From ca05c67a8eb23aaadd003d7fb4fca014a39c0d03 Mon Sep 17 00:00:00 2001 From: tahahawa Date: Thu, 26 Jun 2025 23:45:00 -0400 Subject: [PATCH] fixes for some comments --- examples/monitoring/src/main.rs | 20 ++----- .../monitoring/kube_prometheus/types.rs | 55 ++++++++++++++++++- harmony_macros/src/lib.rs | 20 ------- 3 files changed, 57 insertions(+), 38 deletions(-) diff --git a/examples/monitoring/src/main.rs b/examples/monitoring/src/main.rs index a39e8e2..da9c1c1 100644 --- a/examples/monitoring/src/main.rs +++ b/examples/monitoring/src/main.rs @@ -20,8 +20,6 @@ use harmony::{ topology::{K8sAnywhereTopology, Url}, }; -use harmony_macros::http_scheme; - #[tokio::main] async fn main() { let discord_receiver = DiscordWebhook { @@ -47,33 +45,23 @@ async fn main() { let service_monitor_endpoint = ServiceMonitorEndpoint { port: Some("80".to_string()), - target_port: None, - bearer_token_file: None, - interval: None, path: "/metrics".to_string(), - scheme: http_scheme!("http"), - tls_config: None, - metric_relabelings: vec![], - relabelings: vec![], + scheme: HTTPScheme::HTTP, + ..Default::default() }; let service_monitor = ServiceMonitor { name: "test-service-monitor".to_string(), - additional_labels: None, - job_label: None, - target_labels: vec![], - pod_target_labels: vec![], selector: Selector { match_labels: HashMap::new(), match_expressions: vec![MatchExpression { key: "test".to_string(), - operator: "In".to_string(), + operator: Operator::In, values: vec!["test-service".to_string()], }], }, - namespace_selector: None, endpoints: vec![service_monitor_endpoint], - fallback_scrape_protocol: None, + ..Default::default() }; let alerting_score = HelmPrometheusAlertingScore { receivers: vec![Box::new(discord_receiver)], diff --git a/harmony/src/modules/monitoring/kube_prometheus/types.rs b/harmony/src/modules/monitoring/kube_prometheus/types.rs index b74f79b..f3d1e95 100644 --- a/harmony/src/modules/monitoring/kube_prometheus/types.rs +++ b/harmony/src/modules/monitoring/kube_prometheus/types.rs @@ -54,6 +54,22 @@ pub struct AlertGroup { pub groups: Vec, } +#[derive(Debug, Clone, Serialize)] +pub enum HTTPScheme { + #[serde(rename = "http")] + HTTP, + #[serde(rename = "https")] + HTTPS, +} + +#[derive(Debug, Clone, Serialize)] +pub enum Operator { + In, + NotIn, + Exists, + DoesNotExist, +} + #[derive(Debug, Clone, Serialize)] #[serde(rename_all = "camelCase")] pub struct PrometheusConfigValues { @@ -116,7 +132,7 @@ pub struct ServiceMonitorEndpoint { // ## HTTP scheme to use for scraping // ## - pub scheme: String, + pub scheme: HTTPScheme, // ## TLS configuration to use when scraping the endpoint // ## @@ -146,7 +162,7 @@ pub struct ServiceMonitorEndpoint { #[serde(rename_all = "camelCase")] pub struct MatchExpression { pub key: String, - pub operator: String, + pub operator: Operator, pub values: Vec, } @@ -201,3 +217,38 @@ pub struct ServiceMonitor { // # ref: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api-reference/api.md#monitoring.coreos.com/v1.ScrapeProtocol pub fallback_scrape_protocol: Option, } + +impl Default for ServiceMonitor { + fn default() -> Self { + Self { + name: Default::default(), + additional_labels: Default::default(), + job_label: Default::default(), + target_labels: Default::default(), + pod_target_labels: Default::default(), + selector: Selector { + match_labels: HashMap::new(), + match_expressions: vec![], + }, + namespace_selector: Default::default(), + endpoints: Default::default(), + fallback_scrape_protocol: Default::default(), + } + } +} + +impl Default for ServiceMonitorEndpoint { + fn default() -> Self { + Self { + port: Some("80".to_string()), + target_port: Default::default(), + bearer_token_file: Default::default(), + interval: Default::default(), + path: "/metrics".to_string(), + scheme: HTTPScheme::HTTP, + tls_config: Default::default(), + metric_relabelings: Default::default(), + relabelings: Default::default(), + } + } +} diff --git a/harmony_macros/src/lib.rs b/harmony_macros/src/lib.rs index 941bb13..7a2748d 100644 --- a/harmony_macros/src/lib.rs +++ b/harmony_macros/src/lib.rs @@ -133,26 +133,6 @@ pub fn ingress_path(input: TokenStream) -> TokenStream { } } -/// Verify that a string is a valid http scheme -/// Panics if not http or https -#[proc_macro] -pub fn http_scheme(input: TokenStream) -> TokenStream { - let input = parse_macro_input!(input as LitStr); - let scheme_str = input.value(); - - if scheme_str.to_lowercase() == "http" { - let expanded = quote! {(#scheme_str.to_lowercase().to_string()) }; - return TokenStream::from(expanded); - } - - if scheme_str.to_lowercase() == "https" { - let expanded = quote! {(#scheme_str.to_lowercase().to_string()) }; - return TokenStream::from(expanded); - } - - panic!("Invalid HTTP scheme") -} - #[proc_macro] pub fn cidrv4(input: TokenStream) -> TokenStream { let input = parse_macro_input!(input as LitStr);