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
This commit is contained in:
2025-10-01 14:48:05 -03:00
parent ee20a09147
commit 9e4f66052c

View File

@@ -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(