summaryrefslogtreecommitdiff
path: root/robusta_krr
diff options
context:
space:
mode:
authorLeaveMyYard <zhukovpavel2001@gmail.com>2023-08-10 15:38:36 +0300
committerLeaveMyYard <zhukovpavel2001@gmail.com>2023-08-10 15:38:36 +0300
commit12607a47080eda2b39dfc2ca765f0d5dbbc383b9 (patch)
tree1d8ff65fc32a772fbf6aec0682140f50837c9a0f /robusta_krr
parent80b958e441343d91ab3dfa0c3a4064e6ff9b9d01 (diff)
Lint and format code
Diffstat (limited to 'robusta_krr')
-rw-r--r--robusta_krr/__init__.py2
-rw-r--r--robusta_krr/api/models.py7
-rw-r--r--robusta_krr/core/abstract/metrics.py2
-rw-r--r--robusta_krr/core/abstract/strategies.py4
-rw-r--r--robusta_krr/core/integrations/kubernetes.py7
-rw-r--r--robusta_krr/core/integrations/prometheus/loader.py2
-rw-r--r--robusta_krr/core/integrations/prometheus/metrics/base.py4
-rw-r--r--robusta_krr/core/integrations/prometheus/metrics/cpu.py3
-rw-r--r--robusta_krr/core/integrations/prometheus/metrics/memory.py4
-rw-r--r--robusta_krr/core/integrations/prometheus/metrics_service/prometheus_metrics_service.py18
-rw-r--r--robusta_krr/core/integrations/prometheus/prometheus_utils.py13
-rw-r--r--robusta_krr/core/integrations/rollout.py3
-rw-r--r--robusta_krr/core/models/config.py1
-rw-r--r--robusta_krr/core/models/objects.py3
-rw-r--r--robusta_krr/core/runner.py32
-rw-r--r--robusta_krr/main.py6
-rw-r--r--robusta_krr/strategies/simple.py6
-rw-r--r--robusta_krr/utils/configurable.py2
18 files changed, 52 insertions, 67 deletions
diff --git a/robusta_krr/__init__.py b/robusta_krr/__init__.py
index 24a4deb..d063250 100644
--- a/robusta_krr/__init__.py
+++ b/robusta_krr/__init__.py
@@ -1,4 +1,4 @@
from .main import run
-__version__ = "1.4.1-dev"
+__version__ = "1.5.0-dev"
__all__ = ["run", "__version__"]
diff --git a/robusta_krr/api/models.py b/robusta_krr/api/models.py
index c6eb8f5..3a453ce 100644
--- a/robusta_krr/api/models.py
+++ b/robusta_krr/api/models.py
@@ -1,9 +1,4 @@
-from robusta_krr.core.abstract.strategies import (
- PodsTimeData,
- MetricsPodData,
- ResourceRecommendation,
- RunResult,
-)
+from robusta_krr.core.abstract.strategies import MetricsPodData, PodsTimeData, ResourceRecommendation, RunResult
from robusta_krr.core.models.allocations import RecommendationValue, ResourceAllocations, ResourceType
from robusta_krr.core.models.objects import K8sObjectData, PodData
from robusta_krr.core.models.result import ResourceScan, Result
diff --git a/robusta_krr/core/abstract/metrics.py b/robusta_krr/core/abstract/metrics.py
index 1dbeda7..3b6f19c 100644
--- a/robusta_krr/core/abstract/metrics.py
+++ b/robusta_krr/core/abstract/metrics.py
@@ -1,5 +1,5 @@
-from abc import ABC, abstractmethod
import datetime
+from abc import ABC, abstractmethod
from robusta_krr.core.abstract.strategies import PodsTimeData
from robusta_krr.core.models.objects import K8sObjectData
diff --git a/robusta_krr/core/abstract/strategies.py b/robusta_krr/core/abstract/strategies.py
index d91f814..9e6b269 100644
--- a/robusta_krr/core/abstract/strategies.py
+++ b/robusta_krr/core/abstract/strategies.py
@@ -3,7 +3,7 @@ from __future__ import annotations
import abc
import datetime
from textwrap import dedent
-from typing import Annotated, Generic, Literal, Optional, TypeVar, get_args, TYPE_CHECKING, Sequence
+from typing import TYPE_CHECKING, Annotated, Generic, Literal, Optional, Sequence, TypeVar, get_args
import numpy as np
import pydantic as pd
@@ -12,8 +12,8 @@ from numpy.typing import NDArray
from robusta_krr.core.models.result import K8sObjectData, ResourceType
if TYPE_CHECKING:
- from robusta_krr.core.integrations.prometheus.metrics import PrometheusMetric
from robusta_krr.core.abstract.metrics import BaseMetric # noqa: F401
+ from robusta_krr.core.integrations.prometheus.metrics import PrometheusMetric
SelfRR = TypeVar("SelfRR", bound="ResourceRecommendation")
diff --git a/robusta_krr/core/integrations/kubernetes.py b/robusta_krr/core/integrations/kubernetes.py
index 8ee8afa..915f79b 100644
--- a/robusta_krr/core/integrations/kubernetes.py
+++ b/robusta_krr/core/integrations/kubernetes.py
@@ -1,19 +1,19 @@
import asyncio
from concurrent.futures import ThreadPoolExecutor
-from typing import AsyncGenerator, Optional, Union, Callable, AsyncIterator
-import aiostream
+from typing import AsyncGenerator, AsyncIterator, Callable, Optional, Union
+import aiostream
from kubernetes import client, config # type: ignore
from kubernetes.client import ApiException
from kubernetes.client.models import (
V1Container,
V1DaemonSet,
V1Deployment,
+ V1HorizontalPodAutoscalerList,
V1Job,
V1LabelSelector,
V1Pod,
V1StatefulSet,
- V1HorizontalPodAutoscalerList,
V2HorizontalPodAutoscaler,
V2HorizontalPodAutoscalerList,
)
@@ -22,7 +22,6 @@ from robusta_krr.core.models.objects import HPAData, K8sObjectData, KindLiteral
from robusta_krr.core.models.result import ResourceAllocations
from robusta_krr.utils.configurable import Configurable
-
from .rollout import RolloutAppsV1Api
AnyKubernetesAPIObject = Union[V1Deployment, V1DaemonSet, V1StatefulSet, V1Pod, V1Job]
diff --git a/robusta_krr/core/integrations/prometheus/loader.py b/robusta_krr/core/integrations/prometheus/loader.py
index 70d839a..1829ef1 100644
--- a/robusta_krr/core/integrations/prometheus/loader.py
+++ b/robusta_krr/core/integrations/prometheus/loader.py
@@ -11,7 +11,7 @@ from prometrix import MetricsNotFound, PrometheusNotFound
from robusta_krr.core.models.objects import K8sObjectData
from robusta_krr.utils.configurable import Configurable
-from .metrics_service.prometheus_metrics_service import PrometheusMetricsService, PrometheusNotFound
+from .metrics_service.prometheus_metrics_service import PrometheusMetricsService
from .metrics_service.thanos_metrics_service import ThanosMetricsService
from .metrics_service.victoria_metrics_service import VictoriaMetricsService
diff --git a/robusta_krr/core/integrations/prometheus/metrics/base.py b/robusta_krr/core/integrations/prometheus/metrics/base.py
index b6be241..177d908 100644
--- a/robusta_krr/core/integrations/prometheus/metrics/base.py
+++ b/robusta_krr/core/integrations/prometheus/metrics/base.py
@@ -2,12 +2,12 @@ from __future__ import annotations
import abc
import asyncio
+import copy
import datetime
import enum
-import copy
from concurrent.futures import ThreadPoolExecutor
-from typing import Any, TYPE_CHECKING, Optional
from functools import reduce
+from typing import TYPE_CHECKING, Any, Optional
import numpy as np
import pydantic as pd
diff --git a/robusta_krr/core/integrations/prometheus/metrics/cpu.py b/robusta_krr/core/integrations/prometheus/metrics/cpu.py
index 31cb38f..302e09d 100644
--- a/robusta_krr/core/integrations/prometheus/metrics/cpu.py
+++ b/robusta_krr/core/integrations/prometheus/metrics/cpu.py
@@ -1,7 +1,6 @@
from robusta_krr.core.models.objects import K8sObjectData
-from robusta_krr.core.abstract.strategies import PodsTimeData
-from .base import QueryMetric, QueryRangeMetric, FilterJobsMixin, BatchedRequestMixin
+from .base import BatchedRequestMixin, FilterJobsMixin, QueryMetric, QueryRangeMetric
class CPULoader(QueryRangeMetric, FilterJobsMixin, BatchedRequestMixin):
diff --git a/robusta_krr/core/integrations/prometheus/metrics/memory.py b/robusta_krr/core/integrations/prometheus/metrics/memory.py
index c5685a9..ad84abe 100644
--- a/robusta_krr/core/integrations/prometheus/metrics/memory.py
+++ b/robusta_krr/core/integrations/prometheus/metrics/memory.py
@@ -1,8 +1,6 @@
-from robusta_krr.core.abstract.strategies import PodsTimeData
-
from robusta_krr.core.models.objects import K8sObjectData
-from .base import QueryMetric, QueryRangeMetric, FilterJobsMixin, BatchedRequestMixin
+from .base import BatchedRequestMixin, FilterJobsMixin, QueryMetric, QueryRangeMetric
class MemoryLoader(QueryRangeMetric, FilterJobsMixin, BatchedRequestMixin):
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 57bd3c4..728dc52 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
@@ -1,13 +1,11 @@
import asyncio
import datetime
-import time
from concurrent.futures import ThreadPoolExecutor
from typing import List, Optional
from kubernetes.client import ApiClient
from prometheus_api_client import PrometheusApiClientException
from prometrix import PrometheusNotFound, get_custom_prometheus_connect
-from requests.exceptions import ConnectionError, HTTPError
from robusta_krr.core.abstract.strategies import PodsTimeData
from robusta_krr.core.models.config import Config
@@ -83,9 +81,7 @@ class PrometheusMetricsService(MetricsService):
headers |= {"Authorization": self.auth_header}
elif not self.config.inside_cluster and self.api_client is not None:
self.api_client.update_params_for_auth(headers, {}, ["BearerToken"])
- self.prom_config = generate_prometheus_config(
- config, url=self.url, headers=headers, metrics_service=self
- )
+ self.prom_config = generate_prometheus_config(config, url=self.url, headers=headers, metrics_service=self)
self.prometheus = get_custom_prometheus_connect(self.prom_config)
def check_connection(self):
@@ -95,7 +91,7 @@ class PrometheusMetricsService(MetricsService):
PrometheusNotFound: If the connection to Prometheus cannot be established.
"""
self.prometheus.check_prometheus_connection()
-
+
async def query(self, query: str) -> dict:
loop = asyncio.get_running_loop()
return await loop.run_in_executor(self.executor, lambda: self.prometheus.custom_query(query=query))
@@ -217,7 +213,9 @@ class PrometheusMetricsService(MetricsService):
current_pods_set = {pod["metric"]["pod"] for pod in current_pods}
del current_pods
- object.pods += set([
- PodData(name=pod["metric"]["pod"], deleted=pod["metric"]["pod"] not in current_pods_set)
- for pod in related_pods
- ])
+ object.pods += set(
+ [
+ PodData(name=pod["metric"]["pod"], deleted=pod["metric"]["pod"] not in current_pods_set)
+ for pod in related_pods
+ ]
+ )
diff --git a/robusta_krr/core/integrations/prometheus/prometheus_utils.py b/robusta_krr/core/integrations/prometheus/prometheus_utils.py
index d4c6fd4..450c60c 100644
--- a/robusta_krr/core/integrations/prometheus/prometheus_utils.py
+++ b/robusta_krr/core/integrations/prometheus/prometheus_utils.py
@@ -1,8 +1,17 @@
+from __future__ import annotations
+
+from typing import TYPE_CHECKING
+
import boto3
from prometrix import AWSPrometheusConfig, CoralogixPrometheusConfig, PrometheusConfig, VictoriaMetricsPrometheusConfig
from robusta_krr.core.models.config import Config
+if TYPE_CHECKING:
+ from robusta_krr.core.integrations.prometheus.metrics_service.prometheus_metrics_service import (
+ PrometheusMetricsService,
+ )
+
class ClusterNotSpecifiedException(Exception):
"""
@@ -13,10 +22,10 @@ class ClusterNotSpecifiedException(Exception):
def generate_prometheus_config(
- config: Config, url: str, headers: dict[str, str], metrics_service: "PrometheusMetricsService"
+ config: Config, url: str, headers: dict[str, str], metrics_service: PrometheusMetricsService
) -> PrometheusConfig:
from .metrics_service.victoria_metrics_service import VictoriaMetricsService
-
+
baseconfig = {
"url": url,
"disable_ssl": not config.prometheus_ssl_enabled,
diff --git a/robusta_krr/core/integrations/rollout.py b/robusta_krr/core/integrations/rollout.py
index 677e00d..389c65b 100644
--- a/robusta_krr/core/integrations/rollout.py
+++ b/robusta_krr/core/integrations/rollout.py
@@ -1,6 +1,5 @@
-from kubernetes import client
import six
-
+from kubernetes import client
from kubernetes.client.exceptions import ApiTypeError, ApiValueError
diff --git a/robusta_krr/core/models/config.py b/robusta_krr/core/models/config.py
index 8aef1a7..a3b7be0 100644
--- a/robusta_krr/core/models/config.py
+++ b/robusta_krr/core/models/config.py
@@ -7,7 +7,6 @@ from rich.console import Console
from robusta_krr.core.abstract import formatters
from robusta_krr.core.abstract.strategies import AnyStrategy, BaseStrategy
-
from robusta_krr.core.models.objects import KindLiteral
diff --git a/robusta_krr/core/models/objects.py b/robusta_krr/core/models/objects.py
index 63049c4..23f7345 100644
--- a/robusta_krr/core/models/objects.py
+++ b/robusta_krr/core/models/objects.py
@@ -1,10 +1,9 @@
-from typing import Optional, Literal
+from typing import Literal, Optional
import pydantic as pd
from robusta_krr.core.models.allocations import ResourceAllocations
-
KindLiteral = Literal["deployment", "daemonset", "statefulset", "job", "rollout"]
diff --git a/robusta_krr/core/runner.py b/robusta_krr/core/runner.py
index f419c7c..659e16f 100644
--- a/robusta_krr/core/runner.py
+++ b/robusta_krr/core/runner.py
@@ -1,27 +1,20 @@
import asyncio
import math
+import os
+import sys
+import warnings
from concurrent.futures import ThreadPoolExecutor
from typing import Optional, Union
-import sys, os
+
+from prometrix import PrometheusNotFound
from slack_sdk import WebClient
-import warnings
from robusta_krr.core.abstract.strategies import ResourceRecommendation, RunResult
from robusta_krr.core.integrations.kubernetes import KubernetesLoader
-from robusta_krr.core.integrations.prometheus import (
- PrometheusMetricsLoader,
- ClusterNotSpecifiedException,
-)
-from prometrix import PrometheusNotFound
+from robusta_krr.core.integrations.prometheus import ClusterNotSpecifiedException, PrometheusMetricsLoader
from robusta_krr.core.models.config import Config
from robusta_krr.core.models.objects import K8sObjectData
-from robusta_krr.core.models.result import (
- ResourceAllocations,
- ResourceScan,
- ResourceType,
- Result,
- StrategyData,
-)
+from robusta_krr.core.models.result import ResourceAllocations, ResourceScan, ResourceType, Result, StrategyData
from robusta_krr.utils.configurable import Configurable
from robusta_krr.utils.logo import ASCII_LOGO
from robusta_krr.utils.progress_bar import ProgressBar
@@ -76,22 +69,21 @@ class Runner(Configurable):
file_name = self.config.file_output
elif self.config.slack_output:
file_name = self.config.slack_output
- with open(file_name, 'w') as target_file:
+ with open(file_name, "w") as target_file:
sys.stdout = target_file
self.print_result(formatted, rich=getattr(Formatter, "__rich_console__", False))
sys.stdout = sys.stdout
- if (self.config.slack_output):
+ if self.config.slack_output:
client = WebClient(os.environ["SLACK_BOT_TOKEN"])
warnings.filterwarnings("ignore", category=UserWarning)
client.files_upload(
- channels=f'#{self.config.slack_output}',
+ channels=f"#{self.config.slack_output}",
title="KRR Report",
- file=f'./{file_name}',
- initial_comment=f'Kubernetes Resource Report for {(" ".join(self.config.namespaces))}'
+ file=f"./{file_name}",
+ initial_comment=f'Kubernetes Resource Report for {(" ".join(self.config.namespaces))}',
)
os.remove(file_name)
-
def __get_resource_minimal(self, resource: ResourceType) -> float:
if resource == ResourceType.CPU:
return 1 / 1000 * self.config.cpu_min_value
diff --git a/robusta_krr/main.py b/robusta_krr/main.py
index 2522faf..b9a2d3e 100644
--- a/robusta_krr/main.py
+++ b/robusta_krr/main.py
@@ -5,11 +5,11 @@ import textwrap
from datetime import datetime
from typing import List, Literal, Optional, Union
from uuid import UUID
-from pydantic import ValidationError # noqa: F401
-from rich import print # noqa: F401
import typer
import urllib3
+from pydantic import ValidationError # noqa: F401
+from rich import print # noqa: F401
from robusta_krr import formatters as concrete_formatters # noqa: F401
from robusta_krr.core.abstract import formatters
@@ -185,7 +185,7 @@ def load_commands() -> None:
{strategy_settings},
) -> None:
'''Run KRR using the `{func_name}` strategy'''
-
+
try:
config = Config(
kubeconfig=kubeconfig,
diff --git a/robusta_krr/strategies/simple.py b/robusta_krr/strategies/simple.py
index fa59fac..f4adee3 100644
--- a/robusta_krr/strategies/simple.py
+++ b/robusta_krr/strategies/simple.py
@@ -3,15 +3,15 @@ import pydantic as pd
from robusta_krr.core.abstract.strategies import (
BaseStrategy,
- PodsTimeData,
- MetricsPodData,
K8sObjectData,
+ MetricsPodData,
+ PodsTimeData,
ResourceRecommendation,
ResourceType,
RunResult,
StrategySettings,
)
-from robusta_krr.core.integrations.prometheus.metrics import PercentileCPULoader, MaxMemoryLoader, PrometheusMetric
+from robusta_krr.core.integrations.prometheus.metrics import MaxMemoryLoader, PercentileCPULoader, PrometheusMetric
class SimpleStrategySettings(StrategySettings):
diff --git a/robusta_krr/utils/configurable.py b/robusta_krr/utils/configurable.py
index 4fbd804..183fc29 100644
--- a/robusta_krr/utils/configurable.py
+++ b/robusta_krr/utils/configurable.py
@@ -1,5 +1,4 @@
import abc
-from inspect import getframeinfo, stack
from typing import Literal, Union
from rich.console import Console
@@ -62,7 +61,6 @@ class Configurable(abc.ABC):
"""
if self.debug_active:
- caller = getframeinfo(stack()[1][0])
self.console.print(
self.__add_prefix(
message,