Skip to content

Commit 9ccd677

Browse files
committed
Add retries
1 parent 7274380 commit 9ccd677

File tree

5 files changed

+30
-5
lines changed

5 files changed

+30
-5
lines changed

poetry.lock

Lines changed: 17 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ idna = "3.7"
4040
urllib3 = "^1.26.20"
4141
setuptools = "^70.0.0"
4242
zipp = "^3.19.1"
43+
tenacity = "^9.0.0"
4344

4445

4546

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,4 @@ tzlocal==5.2 ; python_version >= "3.9" and python_full_version < "3.13"
5353
urllib3==1.26.19 ; python_version >= "3.9" and python_full_version < "3.13"
5454
websocket-client==1.7.0 ; python_version >= "3.9" and python_full_version < "3.13"
5555
zipp==3.19.2 ; python_version >= "3.9" and python_version < "3.13"
56+
tenacity==9.0.0 ; python_version >= "3.9" and python_version < "3.13"

robusta_krr/core/integrations/prometheus/metrics/base.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import numpy as np
1212
import pydantic as pd
1313
from prometrix import CustomPrometheusConnect
14+
from tenacity import retry, stop_after_attempt, wait_random
1415

1516
from robusta_krr.core.abstract.metrics import BaseMetric
1617
from robusta_krr.core.abstract.strategies import PodsTimeData
@@ -116,6 +117,7 @@ def _step_to_string(self, step: datetime.timedelta) -> str:
116117
return f"{int(step.total_seconds()) // (60 * 60 * 24)}d"
117118
return f"{int(step.total_seconds()) // 60}m"
118119

120+
@retry(wait=wait_random(min=2, max=10), stop=stop_after_attempt(5))
119121
def _query_prometheus_sync(self, data: PrometheusMetricData) -> list[PrometheusSeries]:
120122
if data.type == QueryType.QueryRange:
121123
response = self.prometheus.safe_custom_query_range(

robusta_krr/core/integrations/prometheus/metrics_service/prometheus_metrics_service.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from kubernetes.client import ApiClient
99
from prometheus_api_client import PrometheusApiClientException
1010
from prometrix import PrometheusNotFound, get_custom_prometheus_connect
11+
from tenacity import retry, stop_after_attempt, wait_random
1112

1213
from robusta_krr.core.abstract.strategies import PodsTimeData
1314
from robusta_krr.core.integrations import openshift
@@ -114,13 +115,15 @@ def check_connection(self):
114115
"""
115116
self.prometheus.check_prometheus_connection()
116117

118+
@retry(wait=wait_random(min=2, max=10), stop=stop_after_attempt(5))
117119
async def query(self, query: str) -> dict:
118120
loop = asyncio.get_running_loop()
119121
return await loop.run_in_executor(
120122
self.executor,
121123
lambda: self.prometheus.safe_custom_query(query=query)["result"],
122124
)
123125

126+
@retry(wait=wait_random(min=2, max=10), stop=stop_after_attempt(5))
124127
async def query_range(self, query: str, start: datetime, end: datetime, step: timedelta) -> dict:
125128
loop = asyncio.get_running_loop()
126129
return await loop.run_in_executor(
@@ -190,9 +193,12 @@ async def gather_data(
190193
ResourceHistoryData: The gathered resource history data.
191194
"""
192195
logger.debug(f"Gathering {LoaderClass.__name__} metric for {object}")
193-
194-
metric_loader = LoaderClass(self.prometheus, self.name(), self.executor)
195-
data = await metric_loader.load_data(object, period, step)
196+
try:
197+
metric_loader = LoaderClass(self.prometheus, self.name(), self.executor)
198+
data = await metric_loader.load_data(object, period, step)
199+
except Exception:
200+
logger.exception("Failed to gather resource history data for %s", object)
201+
data = {}
196202

197203
if len(data) == 0:
198204
if "CPU" in LoaderClass.__name__:

0 commit comments

Comments
 (0)