From 9e4f66052cb360b8dcc0e7bfcb7b369c1a71c9c5 Mon Sep 17 00:00:00 2001 From: andersonid Date: Wed, 1 Oct 2025 14:48:05 -0300 Subject: [PATCH] Fix insufficient historical data detection - Adjust Prometheus query step based on time range (5min for 24h) - Reduce threshold from 10 to 5 data points for insufficient data detection - Add debug logging to understand data point counts - Improve step calculation: 30s for 1h, 5min for 24h, 30min for 7d --- app/services/historical_analysis.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/app/services/historical_analysis.py b/app/services/historical_analysis.py index 4f1acc7..afeee7c 100644 --- a/app/services/historical_analysis.py +++ b/app/services/historical_analysis.py @@ -295,6 +295,7 @@ class HistoricalAnalysisService: # Calculate usage statistics usage_values = [float(point[1]) for point in usage_data if point[1] != 'NaN'] + logger.info(f"CPU analysis for {pod_name}/{container_name}: {len(usage_data)} raw points, {len(usage_values)} valid points") if not usage_values: validations.append(ResourceValidation( pod_name=pod_name, @@ -307,8 +308,8 @@ class HistoricalAnalysisService: )) return validations - # Check for minimal data points (less than 10 data points) - if len(usage_values) < 10: + # Check for minimal data points (less than 5 data points) + if len(usage_values) < 5: validations.append(ResourceValidation( pod_name=pod_name, namespace=namespace, @@ -417,6 +418,7 @@ class HistoricalAnalysisService: # Calculate usage statistics usage_values = [float(point[1]) for point in usage_data if point[1] != 'NaN'] + logger.info(f"Memory analysis for {pod_name}/{container_name}: {len(usage_data)} raw points, {len(usage_values)} valid points") if not usage_values: validations.append(ResourceValidation( pod_name=pod_name, @@ -429,8 +431,8 @@ class HistoricalAnalysisService: )) return validations - # Check for minimal data points (less than 10 data points) - if len(usage_values) < 10: + # Check for minimal data points (less than 5 data points) + if len(usage_values) < 5: validations.append(ResourceValidation( pod_name=pod_name, namespace=namespace, @@ -535,11 +537,20 @@ class HistoricalAnalysisService: connector = aiohttp.TCPConnector(ssl=False) async with aiohttp.ClientSession(connector=connector, headers=headers) as session: + # Calculate appropriate step based on time range + time_diff = (end_time - start_time).total_seconds() + if time_diff <= 3600: # 1 hour or less + step = '30s' + elif time_diff <= 86400: # 24 hours or less + step = '300s' # 5 minutes + else: # More than 24 hours + step = '1800s' # 30 minutes + params = { 'query': query, 'start': start_time.timestamp(), 'end': end_time.timestamp(), - 'step': '60s' # 1 minute resolution + 'step': step } async with session.get(