summaryrefslogtreecommitdiff
path: root/robusta_krr
diff options
context:
space:
mode:
authorLeaveMyYard <33721692+LeaveMyYard@users.noreply.github.com>2023-08-02 10:45:58 +0300
committerLeaveMyYard <33721692+LeaveMyYard@users.noreply.github.com>2023-08-02 10:45:58 +0300
commit288c8de2a52a879d9fe654538e2c167c554ec950 (patch)
tree2e87c477e4bc78252b6625f4a124a938811fb2f6 /robusta_krr
parentf152bfbce7250bf7bbfad2d393a57ac2fcd94050 (diff)
Fix minor issues left
Diffstat (limited to 'robusta_krr')
-rw-r--r--robusta_krr/api/models.py4
-rw-r--r--robusta_krr/core/abstract/metrics.py4
-rw-r--r--robusta_krr/core/abstract/strategies.py6
-rw-r--r--robusta_krr/core/integrations/prometheus/metrics/base.py6
-rw-r--r--robusta_krr/core/integrations/prometheus/metrics/cpu.py46
-rw-r--r--robusta_krr/core/integrations/prometheus/metrics/memory.py44
-rw-r--r--robusta_krr/core/integrations/prometheus/metrics_service/base_metric_service.py4
-rw-r--r--robusta_krr/core/integrations/prometheus/metrics_service/prometheus_metrics_service.py4
-rw-r--r--robusta_krr/strategies/simple.py6
-rw-r--r--robusta_krr/utils/progress_bar.py2
10 files changed, 66 insertions, 60 deletions
diff --git a/robusta_krr/api/models.py b/robusta_krr/api/models.py
index 7c4f587..c6eb8f5 100644
--- a/robusta_krr/api/models.py
+++ b/robusta_krr/api/models.py
@@ -1,5 +1,5 @@
from robusta_krr.core.abstract.strategies import (
- MetricPodData,
+ PodsTimeData,
MetricsPodData,
ResourceRecommendation,
RunResult,
@@ -20,7 +20,7 @@ __all__ = [
"register_severity_calculator",
"ResourceScan",
"ResourceRecommendation",
- "MetricPodData",
+ "PodsTimeData",
"MetricsPodData",
"RunResult",
]
diff --git a/robusta_krr/core/abstract/metrics.py b/robusta_krr/core/abstract/metrics.py
index 28de381..1dbeda7 100644
--- a/robusta_krr/core/abstract/metrics.py
+++ b/robusta_krr/core/abstract/metrics.py
@@ -1,7 +1,7 @@
from abc import ABC, abstractmethod
import datetime
-from robusta_krr.core.abstract.strategies import MetricPodData
+from robusta_krr.core.abstract.strategies import PodsTimeData
from robusta_krr.core.models.objects import K8sObjectData
@@ -17,5 +17,5 @@ class BaseMetric(ABC):
@abstractmethod
async def load_data(
self, object: K8sObjectData, period: datetime.timedelta, step: datetime.timedelta
- ) -> MetricPodData:
+ ) -> PodsTimeData:
...
diff --git a/robusta_krr/core/abstract/strategies.py b/robusta_krr/core/abstract/strategies.py
index cc8432b..a9a084d 100644
--- a/robusta_krr/core/abstract/strategies.py
+++ b/robusta_krr/core/abstract/strategies.py
@@ -64,8 +64,8 @@ class StrategySettings(pd.BaseModel):
ArrayNx2 = Annotated[NDArray[np.float64], Literal["N", 2]]
-MetricPodData = dict[str, ArrayNx2] # Mapping: pod -> [(time, value)]
-MetricsPodData = dict[type["BaseMetric"], MetricPodData]
+PodsTimeData = dict[str, ArrayNx2] # Mapping: pod -> [(time, value)]
+MetricsPodData = dict[type["BaseMetric"], PodsTimeData]
RunResult = dict[ResourceType, ResourceRecommendation]
@@ -156,7 +156,7 @@ __all__ = [
"AnyStrategy",
"BaseStrategy",
"StrategySettings",
- "MetricPodData",
+ "PodsTimeData",
"MetricsPodData",
"K8sObjectData",
"ResourceType",
diff --git a/robusta_krr/core/integrations/prometheus/metrics/base.py b/robusta_krr/core/integrations/prometheus/metrics/base.py
index 434ef0a..d076ff4 100644
--- a/robusta_krr/core/integrations/prometheus/metrics/base.py
+++ b/robusta_krr/core/integrations/prometheus/metrics/base.py
@@ -11,7 +11,7 @@ import numpy as np
import pydantic as pd
from robusta_krr.core.abstract.metrics import BaseMetric
-from robusta_krr.core.abstract.strategies import MetricPodData
+from robusta_krr.core.abstract.strategies import PodsTimeData
from robusta_krr.core.models.config import Config
from robusta_krr.core.models.objects import K8sObjectData
from robusta_krr.utils.configurable import Configurable
@@ -67,7 +67,7 @@ class PrometheusMetric(BaseMetric, Configurable):
return f', {self.config.prometheus_label}="{self.config.prometheus_cluster_label}"'
@abc.abstractmethod
- def get_query(self, object: K8sObjectData, resolution: Optional[str]) -> str:
+ def get_query(self, object: K8sObjectData, resolution: str) -> str:
"""
This method should be implemented by all subclasses to provide a query string to fetch metrics.
@@ -128,7 +128,7 @@ class PrometheusMetric(BaseMetric, Configurable):
async def load_data(
self, object: K8sObjectData, period: datetime.timedelta, step: datetime.timedelta
- ) -> MetricPodData:
+ ) -> PodsTimeData:
"""
Asynchronous method that loads metric data for a specific object.
diff --git a/robusta_krr/core/integrations/prometheus/metrics/cpu.py b/robusta_krr/core/integrations/prometheus/metrics/cpu.py
index 28b5a80..41e1137 100644
--- a/robusta_krr/core/integrations/prometheus/metrics/cpu.py
+++ b/robusta_krr/core/integrations/prometheus/metrics/cpu.py
@@ -1,33 +1,39 @@
-from typing import Optional
-
from robusta_krr.core.models.objects import K8sObjectData
from .base import QueryMetric, QueryRangeMetric, FilterMetric
class CPULoader(QueryRangeMetric, FilterMetric):
- def get_query(self, object: K8sObjectData, resolution: Optional[str]) -> str:
+ def get_query(self, object: K8sObjectData, resolution: str) -> str:
pods_selector = "|".join(pod.name for pod in object.pods)
cluster_label = self.get_prometheus_cluster_label()
- return (
- "sum(irate(container_cpu_usage_seconds_total{"
- f'namespace="{object.namespace}", '
- f'pod=~"{pods_selector}", '
- f'container="{object.container}"'
- f"{cluster_label}"
- "}[5m])) by (container, pod, job)"
- )
+ return f"""
+ sum(
+ irate(
+ container_cpu_usage_seconds_total{{
+ namespace="{object.namespace}",
+ pod=~"{pods_selector}",
+ container="{object.container}"
+ {cluster_label}
+ }}[5m]
+ )
+ ) by (container, pod, job)
+ """
class MaxCPULoader(QueryMetric, FilterMetric):
- def get_query(self, object: K8sObjectData, resolution: Optional[str]) -> str:
+ def get_query(self, object: K8sObjectData, resolution: str) -> str:
pods_selector = "|".join(pod.name for pod in object.pods)
cluster_label = self.get_prometheus_cluster_label()
- return (
- "sum(irate(container_cpu_usage_seconds_total{"
- f'namespace="{object.namespace}", '
- f'pod=~"{pods_selector}", '
- f'container="{object.container}"'
- f"{cluster_label}"
- "}[5m])) by (container, pod, job)"
- )
+ return f"""
+ sum(
+ irate(
+ container_cpu_usage_seconds_total{{
+ namespace="{object.namespace}",
+ pod=~"{pods_selector}",
+ container="{object.container}"
+ {cluster_label}
+ }}[{resolution}]
+ )
+ ) by (container, pod, job)
+ """
diff --git a/robusta_krr/core/integrations/prometheus/metrics/memory.py b/robusta_krr/core/integrations/prometheus/metrics/memory.py
index 00c19f8..32df5f4 100644
--- a/robusta_krr/core/integrations/prometheus/metrics/memory.py
+++ b/robusta_krr/core/integrations/prometheus/metrics/memory.py
@@ -1,35 +1,35 @@
-from typing import Optional
-
from robusta_krr.core.models.objects import K8sObjectData
from .base import QueryMetric, QueryRangeMetric, FilterMetric
class MemoryLoader(QueryRangeMetric, FilterMetric):
- def get_query(self, object: K8sObjectData, resolution: Optional[str]) -> str:
+ def get_query(self, object: K8sObjectData, resolution: str) -> str:
pods_selector = "|".join(pod.name for pod in object.pods)
cluster_label = self.get_prometheus_cluster_label()
- return (
- "sum(container_memory_working_set_bytes{"
- f'namespace="{object.namespace}", '
- f'pod=~"{pods_selector}", '
- f'container="{object.container}"'
- f"{cluster_label}"
- "}) by (container, pod, job, id)"
- )
+ return f"""
+ sum(
+ container_memory_working_set_bytes{{
+ namespace="{object.namespace}",
+ pod=~"{pods_selector}",
+ container="{object.container}"
+ {cluster_label}
+ }}
+ ) by (container, pod, job, id)
+ """
class MaxMemoryLoader(QueryMetric, FilterMetric):
- def get_query(self, object: K8sObjectData, resolution: Optional[str]) -> str:
+ def get_query(self, object: K8sObjectData, resolution: str) -> str:
pods_selector = "|".join(pod.name for pod in object.pods)
cluster_label = self.get_prometheus_cluster_label()
- resolution_formatted = f"[{resolution}]" if resolution else ""
- return (
- f"max_over_time(container_memory_working_set_bytes{{"
- f'namespace="{object.namespace}", '
- f'pod=~"{pods_selector}", '
- f'container="{object.container}"'
- f"{cluster_label}}}"
- f"{resolution_formatted}"
- f")"
- )
+ return f"""
+ max_over_time(
+ container_memory_working_set_bytes{{
+ namespace="{object.namespace}",
+ pod=~"{pods_selector}",
+ container="{object.container}"
+ {cluster_label}
+ }}[{resolution}]
+ )
+ """
diff --git a/robusta_krr/core/integrations/prometheus/metrics_service/base_metric_service.py b/robusta_krr/core/integrations/prometheus/metrics_service/base_metric_service.py
index 6501f7c..b0adfb7 100644
--- a/robusta_krr/core/integrations/prometheus/metrics_service/base_metric_service.py
+++ b/robusta_krr/core/integrations/prometheus/metrics_service/base_metric_service.py
@@ -5,7 +5,7 @@ from typing import List, Optional
from kubernetes.client.api_client import ApiClient
-from robusta_krr.core.abstract.strategies import MetricPodData
+from robusta_krr.core.abstract.strategies import PodsTimeData
from robusta_krr.core.models.config import Config
from robusta_krr.core.models.objects import K8sObjectData
from robusta_krr.utils.configurable import Configurable
@@ -54,7 +54,7 @@ class MetricsService(Configurable, abc.ABC):
LoaderClass: type[PrometheusMetric],
period: datetime.timedelta,
step: datetime.timedelta = datetime.timedelta(minutes=30),
- ) -> MetricPodData:
+ ) -> PodsTimeData:
...
def get_prometheus_cluster_label(self) -> str:
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 b380abc..02d3d6d 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
@@ -7,7 +7,7 @@ from kubernetes.client import ApiClient
from prometheus_api_client import PrometheusApiClientException
from requests.exceptions import ConnectionError, HTTPError
-from robusta_krr.core.abstract.strategies import MetricPodData
+from robusta_krr.core.abstract.strategies import PodsTimeData
from robusta_krr.core.models.config import Config
from robusta_krr.core.models.objects import K8sObjectData, PodData
from robusta_krr.utils.service_discovery import MetricsServiceDiscovery
@@ -149,7 +149,7 @@ class PrometheusMetricsService(MetricsService):
LoaderClass: type[PrometheusMetric],
period: datetime.timedelta,
step: datetime.timedelta = datetime.timedelta(minutes=30),
- ) -> MetricPodData:
+ ) -> PodsTimeData:
"""
ResourceHistoryData: The gathered resource history data.
"""
diff --git a/robusta_krr/strategies/simple.py b/robusta_krr/strategies/simple.py
index 690ee25..d3b20be 100644
--- a/robusta_krr/strategies/simple.py
+++ b/robusta_krr/strategies/simple.py
@@ -3,7 +3,7 @@ import pydantic as pd
from robusta_krr.core.abstract.strategies import (
BaseStrategy,
- MetricPodData,
+ PodsTimeData,
MetricsPodData,
K8sObjectData,
ResourceRecommendation,
@@ -20,14 +20,14 @@ class SimpleStrategySettings(StrategySettings):
5, gt=0, description="The percentage of added buffer to the peak memory usage for memory recommendation."
)
- def calculate_memory_proposal(self, data: MetricPodData) -> float:
+ def calculate_memory_proposal(self, data: PodsTimeData) -> float:
data_ = [np.max(values[:, 1]) for values in data.values()]
if len(data_) == 0:
return float("NaN")
return max(data_) * (1 + self.memory_buffer_percentage / 100)
- def calculate_cpu_proposal(self, data: MetricPodData) -> float:
+ def calculate_cpu_proposal(self, data: PodsTimeData) -> float:
if len(data) == 0:
return float("NaN")
diff --git a/robusta_krr/utils/progress_bar.py b/robusta_krr/utils/progress_bar.py
index 621dc18..32bf211 100644
--- a/robusta_krr/utils/progress_bar.py
+++ b/robusta_krr/utils/progress_bar.py
@@ -14,7 +14,7 @@ class ProgressBar(Configurable):
def __init__(self, config: Config, **kwargs) -> None:
super().__init__(config)
- self.show_bar = self.echo_active and False
+ self.show_bar = self.echo_active
if self.show_bar:
self.alive_bar = alive_bar(**kwargs)