Fix: correct Prometheus step resolution based on time range for accurate data points

This commit is contained in:
2025-10-03 10:03:11 -03:00
parent 958e76f513
commit ed07053838

View File

@@ -369,9 +369,9 @@ class HistoricalAnalysisService:
''' '''
# Execute queries # Execute queries
cpu_usage = await self._query_prometheus(cpu_query, start_time, end_time) cpu_usage = await self._query_prometheus(cpu_query, start_time, end_time, time_range)
cpu_requests = await self._query_prometheus(cpu_requests_query, start_time, end_time) cpu_requests = await self._query_prometheus(cpu_requests_query, start_time, end_time, time_range)
cpu_limits = await self._query_prometheus(cpu_limits_query, start_time, end_time) cpu_limits = await self._query_prometheus(cpu_limits_query, start_time, end_time, time_range)
if cpu_usage and cpu_requests: if cpu_usage and cpu_requests:
analysis = self._analyze_cpu_metrics( analysis = self._analyze_cpu_metrics(
@@ -429,9 +429,9 @@ class HistoricalAnalysisService:
''' '''
# Execute queries # Execute queries
memory_usage = await self._query_prometheus(memory_query, start_time, end_time) memory_usage = await self._query_prometheus(memory_query, start_time, end_time, time_range)
memory_requests = await self._query_prometheus(memory_requests_query, start_time, end_time) memory_requests = await self._query_prometheus(memory_requests_query, start_time, end_time, time_range)
memory_limits = await self._query_prometheus(memory_limits_query, start_time, end_time) memory_limits = await self._query_prometheus(memory_limits_query, start_time, end_time, time_range)
if memory_usage and memory_requests: if memory_usage and memory_requests:
analysis = self._analyze_memory_metrics( analysis = self._analyze_memory_metrics(
@@ -767,7 +767,7 @@ class HistoricalAnalysisService:
return validations return validations
async def _query_prometheus(self, query: str, start_time: datetime, end_time: datetime) -> List[Dict]: async def _query_prometheus(self, query: str, start_time: datetime, end_time: datetime, time_range: str = "24h") -> List[Dict]:
"""Execute query in Prometheus""" """Execute query in Prometheus"""
try: try:
# Get service account token for authentication # Get service account token for authentication
@@ -783,6 +783,19 @@ class HistoricalAnalysisService:
if token: if token:
headers['Authorization'] = f'Bearer {token}' headers['Authorization'] = f'Bearer {token}'
# Calculate appropriate step based on time range
time_diff = (end_time - start_time).total_seconds()
if time_diff <= 3600: # 1 hour or less
step = "1m"
elif time_diff <= 21600: # 6 hours or less
step = "5m"
elif time_diff <= 86400: # 24 hours or less
step = "15m"
elif time_diff <= 604800: # 7 days or less
step = "1h"
else: # 30 days or more
step = "6h"
# Create session with SSL verification disabled for self-signed certificates # Create session with SSL verification disabled for self-signed certificates
connector = aiohttp.TCPConnector(ssl=False) connector = aiohttp.TCPConnector(ssl=False)
@@ -791,7 +804,7 @@ class HistoricalAnalysisService:
'query': query, 'query': query,
'start': start_time.timestamp(), 'start': start_time.timestamp(),
'end': end_time.timestamp(), 'end': end_time.timestamp(),
'step': '60s' # 1 minute resolution 'step': step
} }
async with session.get( async with session.get(
@@ -1344,7 +1357,7 @@ class HistoricalAnalysisService:
start_time = end_time - timedelta(seconds=self.time_ranges.get(time_range, 86400)) start_time = end_time - timedelta(seconds=self.time_ranges.get(time_range, 86400))
# Query Prometheus # Query Prometheus
data = await self._query_prometheus(cpu_usage_query, start_time, end_time) data = await self._query_prometheus(cpu_usage_query, start_time, end_time, time_range, time_range)
if not data: if not data:
return { return {
@@ -1395,7 +1408,7 @@ class HistoricalAnalysisService:
start_time = end_time - timedelta(seconds=self.time_ranges.get(time_range, 86400)) start_time = end_time - timedelta(seconds=self.time_ranges.get(time_range, 86400))
# Query Prometheus # Query Prometheus
data = await self._query_prometheus(memory_usage_query, start_time, end_time) data = await self._query_prometheus(memory_usage_query, start_time, end_time, time_range, time_range)
if not data: if not data:
return { return {