From fc2f288bcb96546a9d1ca5e4d0622c28a38bcc9c Mon Sep 17 00:00:00 2001 From: avi robusta Date: Tue, 4 Jul 2023 13:55:07 +0300 Subject: return query for graphs --- .../core/integrations/prometheus/metrics/base_metric.py | 16 ++++++++++++++++ .../integrations/prometheus/metrics/memory_metric.py | 7 +++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/robusta_krr/core/integrations/prometheus/metrics/base_metric.py b/robusta_krr/core/integrations/prometheus/metrics/base_metric.py index e748565..8bf263c 100644 --- a/robusta_krr/core/integrations/prometheus/metrics/base_metric.py +++ b/robusta_krr/core/integrations/prometheus/metrics/base_metric.py @@ -72,6 +72,19 @@ class BaseMetricLoader(Configurable, abc.ABC): pass + def get_graph_query(self, object: K8sObjectData, resolution: Optional[str]) -> str: + """ + This method should be implemented by all subclasses to provide a query string in the metadata to produce relevant graphs. + + Args: + object (K8sObjectData): The object for which metrics need to be fetched. + resolution (Optional[str]): a string for configurable resolution to the query. + + Returns: + str: The query string. + """ + return self.get_query(object, resolution) + def _step_to_string(self, step: datetime.timedelta) -> str: """ Converts step in datetime.timedelta format to a string format used by Prometheus. @@ -145,6 +158,8 @@ class BaseMetricLoader(Configurable, abc.ABC): step=self._step_to_string(step), ) result = await self.query_prometheus(metric=metric, query_type=query_type) + # adding the query in the results for a graph + metric.query = self.get_graph_query(object, resolution) if result == []: self.warning(f"{service_name} returned no {self.__class__.__name__} metrics for {object}") @@ -207,6 +222,7 @@ def bind_metric(resource: str) -> Callable[[type[Self]], type[Self]]: return decorator +# This is a temporary solutions, metric loaders will be moved to strategy in the future def override_metric(strategy: str, resource: str) -> Callable[[type[Self]], type[Self]]: """ A decorator that overrides the bound metric on a specific strategy. diff --git a/robusta_krr/core/integrations/prometheus/metrics/memory_metric.py b/robusta_krr/core/integrations/prometheus/metrics/memory_metric.py index d333f34..a8a4521 100644 --- a/robusta_krr/core/integrations/prometheus/metrics/memory_metric.py +++ b/robusta_krr/core/integrations/prometheus/metrics/memory_metric.py @@ -23,9 +23,9 @@ class MemoryMetricLoader(BaseFilteredMetricLoader): def get_query_type(self) -> QueryType: return QueryType.QueryRange - +# This is a temporary solutions, metric loaders will be moved to strategy in the future @override_metric("simple", ResourceType.Memory) -class MemoryMetricLoader(BaseFilteredMetricLoader): +class MemoryMetricLoader(MemoryMetricLoader): """ A class that overrides the memory metric on the simple strategy. """ @@ -46,3 +46,6 @@ class MemoryMetricLoader(BaseFilteredMetricLoader): def get_query_type(self) -> QueryType: return QueryType.Query + + def get_graph_query(self, object: K8sObjectData, resolution: Optional[str]) -> str: + return super().get_query(object, resolution) -- cgit v1.2.3