From cf366e6ea65aa3acbe9de48e35a1e1bfcd6de34b Mon Sep 17 00:00:00 2001 From: Pavel Zhukov <33721692+LeaveMyYard@users.noreply.github.com> Date: Wed, 22 May 2024 12:58:48 +0300 Subject: [PATCH] Add config to result (#271) Co-authored-by: Avi-Robusta <97387909+Avi-Robusta@users.noreply.github.com> --- .../metrics_service/prometheus_metrics_service.py | 10 +++++++--- .../core/integrations/prometheus/prometheus_utils.py | 4 ++-- robusta_krr/core/models/config.py | 12 ++++++++---- robusta_krr/core/models/result.py | 2 ++ 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/robusta_krr/core/integrations/prometheus/metrics_service/prometheus_metrics_service.py b/robusta_krr/core/integrations/prometheus/metrics_service/prometheus_metrics_service.py index 90efdc16..440611eb 100644 --- a/robusta_krr/core/integrations/prometheus/metrics_service/prometheus_metrics_service.py +++ b/robusta_krr/core/integrations/prometheus/metrics_service/prometheus_metrics_service.py @@ -66,7 +66,9 @@ def __init__( logger.info(f"Trying to connect to {self.name()} for {self.cluster} cluster") - self.auth_header = settings.prometheus_auth_header + self.auth_header = ( + settings.prometheus_auth_header.get_secret_value() if settings.prometheus_auth_header else None + ) self.ssl_enabled = settings.prometheus_ssl_enabled if settings.openshift: @@ -93,7 +95,7 @@ def __init__( logger.info(f"Using {self.name()} at {self.url} for cluster {cluster or 'default'}") - headers = settings.prometheus_other_headers + headers = {k: v.get_secret_value() for k, v in settings.prometheus_other_headers.items()} headers |= self.additional_headers if self.auth_header: @@ -246,7 +248,9 @@ async def load_pods(self, object: K8sObjectData, period: timedelta) -> list[PodD }}[{period_literal}] """ ) - pod_owners = {repl_controller["metric"]["replicationcontroller"] for repl_controller in replication_controllers} + pod_owners = { + repl_controller["metric"]["replicationcontroller"] for repl_controller in replication_controllers + } pod_owner_kind = "ReplicationController" del replication_controllers diff --git a/robusta_krr/core/integrations/prometheus/prometheus_utils.py b/robusta_krr/core/integrations/prometheus/prometheus_utils.py index e40c2805..e561af24 100644 --- a/robusta_krr/core/integrations/prometheus/prometheus_utils.py +++ b/robusta_krr/core/integrations/prometheus/prometheus_utils.py @@ -39,7 +39,7 @@ def generate_prometheus_config( credentials = credentials.get_frozen_credentials() region = settings.eks_managed_prom_region if settings.eks_managed_prom_region else session.region_name access_key = settings.eks_access_key if settings.eks_access_key else credentials.access_key - secret_key = settings.eks_secret_key if settings.eks_secret_key else credentials.secret_key + secret_key = settings.eks_secret_key.get_secret_value() if settings.eks_secret_key else credentials.secret_key service_name = settings.eks_service_name if settings.eks_secret_key else "aps" if not region: raise Exception("No eks region specified") @@ -53,7 +53,7 @@ def generate_prometheus_config( ) # coralogix config if settings.coralogix_token: - return CoralogixPrometheusConfig(**baseconfig, prometheus_token=settings.coralogix_token) + return CoralogixPrometheusConfig(**baseconfig, prometheus_token=settings.coralogix_token.get_secret_value()) if isinstance(metrics_service, VictoriaMetricsService): return VictoriaMetricsPrometheusConfig(**baseconfig) return PrometheusConfig(**baseconfig) diff --git a/robusta_krr/core/models/config.py b/robusta_krr/core/models/config.py index ff6142a6..18add983 100644 --- a/robusta_krr/core/models/config.py +++ b/robusta_krr/core/models/config.py @@ -35,18 +35,18 @@ class Config(pd.BaseSettings): # Prometheus Settings prometheus_url: Optional[str] = pd.Field(None) - prometheus_auth_header: Optional[str] = pd.Field(None) - prometheus_other_headers: dict[str, str] = pd.Field(default_factory=dict) + prometheus_auth_header: Optional[pd.SecretStr] = pd.Field(None) + prometheus_other_headers: dict[str, pd.SecretStr] = pd.Field(default_factory=dict) prometheus_ssl_enabled: bool = pd.Field(False) prometheus_cluster_label: Optional[str] = pd.Field(None) prometheus_label: Optional[str] = pd.Field(None) eks_managed_prom: bool = pd.Field(False) eks_managed_prom_profile_name: Optional[str] = pd.Field(None) eks_access_key: Optional[str] = pd.Field(None) - eks_secret_key: Optional[str] = pd.Field(None) + eks_secret_key: Optional[pd.SecretStr] = pd.Field(None) eks_service_name: Optional[str] = pd.Field(None) eks_managed_prom_region: Optional[str] = pd.Field(None) - coralogix_token: Optional[str] = pd.Field(None) + coralogix_token: Optional[pd.SecretStr] = pd.Field(None) openshift: bool = pd.Field(False) # Threading settings @@ -170,6 +170,10 @@ def set_config(config: Config) -> None: logging.getLogger("").setLevel(logging.CRITICAL) logger.setLevel(logging.DEBUG if config.verbose else logging.CRITICAL if config.quiet else logging.INFO) + @staticmethod + def get_config() -> Optional[Config]: + return _config + # NOTE: This class is just a proxy for _config. # Import settings from this module and use it like it is just a config object. diff --git a/robusta_krr/core/models/result.py b/robusta_krr/core/models/result.py index 2d5ffbc9..4373b71e 100644 --- a/robusta_krr/core/models/result.py +++ b/robusta_krr/core/models/result.py @@ -8,6 +8,7 @@ from robusta_krr.core.models.allocations import RecommendationValue, ResourceAllocations, ResourceType from robusta_krr.core.models.objects import K8sObjectData from robusta_krr.core.models.severity import Severity +from robusta_krr.core.models.config import Config class Recommendation(pd.BaseModel): @@ -64,6 +65,7 @@ class Result(pd.BaseModel): description: Optional[str] = None strategy: StrategyData errors: list[dict[str, Any]] = pd.Field(default_factory=list) + config: Optional[Config] = pd.Field(default_factory=Config.get_config) def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs)