Add simulated data fallback for historical analysis when Prometheus is not accessible
This commit is contained in:
@@ -536,6 +536,9 @@ async def get_workload_historical_metrics(
|
|||||||
cluster_cpu_total = 0
|
cluster_cpu_total = 0
|
||||||
cluster_memory_total = 0
|
cluster_memory_total = 0
|
||||||
|
|
||||||
|
# Check if we got any data from Prometheus
|
||||||
|
prometheus_available = False
|
||||||
|
|
||||||
if cpu_usage_data.get("status") == "success" and cpu_usage_data.get("data", {}).get("result"):
|
if cpu_usage_data.get("status") == "success" and cpu_usage_data.get("data", {}).get("result"):
|
||||||
cpu_usage = float(cpu_usage_data["data"]["result"][0]["value"][1])
|
cpu_usage = float(cpu_usage_data["data"]["result"][0]["value"][1])
|
||||||
|
|
||||||
@@ -560,6 +563,39 @@ async def get_workload_historical_metrics(
|
|||||||
if cluster_memory_data.get("status") == "success" and cluster_memory_data.get("data", {}).get("result"):
|
if cluster_memory_data.get("status") == "success" and cluster_memory_data.get("data", {}).get("result"):
|
||||||
cluster_memory_total = float(cluster_memory_data["data"]["result"][0]["value"][1])
|
cluster_memory_total = float(cluster_memory_data["data"]["result"][0]["value"][1])
|
||||||
|
|
||||||
|
# Check if Prometheus is available (any non-zero values)
|
||||||
|
if cluster_cpu_total > 0 or cluster_memory_total > 0:
|
||||||
|
prometheus_available = True
|
||||||
|
|
||||||
|
# If Prometheus is not available, provide simulated data for demonstration
|
||||||
|
if not prometheus_available:
|
||||||
|
# Simulate cluster resources (typical OpenShift cluster)
|
||||||
|
cluster_cpu_total = 24.0 # 6 nodes * 4 cores each
|
||||||
|
cluster_memory_total = 96.0 * (1024**3) # 6 nodes * 16GB each
|
||||||
|
|
||||||
|
# Simulate workload metrics based on namespace
|
||||||
|
if namespace == "resource-governance":
|
||||||
|
cpu_usage = 0.05
|
||||||
|
memory_usage = 128 * (1024**2) # 128MB
|
||||||
|
cpu_requests = 0.1
|
||||||
|
memory_requests = 128 * (1024**2)
|
||||||
|
cpu_limits = 0.5
|
||||||
|
memory_limits = 512 * (1024**2)
|
||||||
|
elif namespace == "shishika01":
|
||||||
|
cpu_usage = 0.15
|
||||||
|
memory_usage = 256 * (1024**2) # 256MB
|
||||||
|
cpu_requests = 0.2
|
||||||
|
memory_requests = 256 * (1024**2)
|
||||||
|
cpu_limits = 1.0
|
||||||
|
memory_limits = 1024 * (1024**2)
|
||||||
|
else:
|
||||||
|
cpu_usage = 0.08
|
||||||
|
memory_usage = 192 * (1024**2) # 192MB
|
||||||
|
cpu_requests = 0.15
|
||||||
|
memory_requests = 192 * (1024**2)
|
||||||
|
cpu_limits = 0.8
|
||||||
|
memory_limits = 768 * (1024**2)
|
||||||
|
|
||||||
# Calculate percentages
|
# Calculate percentages
|
||||||
cpu_usage_percent = (cpu_usage / cluster_cpu_total * 100) if cluster_cpu_total > 0 else 0
|
cpu_usage_percent = (cpu_usage / cluster_cpu_total * 100) if cluster_cpu_total > 0 else 0
|
||||||
memory_usage_percent = (memory_usage / cluster_memory_total * 100) if cluster_memory_total > 0 else 0
|
memory_usage_percent = (memory_usage / cluster_memory_total * 100) if cluster_memory_total > 0 else 0
|
||||||
@@ -572,6 +608,8 @@ async def get_workload_historical_metrics(
|
|||||||
"workload": workload,
|
"workload": workload,
|
||||||
"namespace": namespace,
|
"namespace": namespace,
|
||||||
"time_range": time_range,
|
"time_range": time_range,
|
||||||
|
"prometheus_available": prometheus_available,
|
||||||
|
"data_source": "simulated" if not prometheus_available else "prometheus",
|
||||||
"cluster_total": {
|
"cluster_total": {
|
||||||
"cpu_cores": cluster_cpu_total,
|
"cpu_cores": cluster_cpu_total,
|
||||||
"memory_bytes": cluster_memory_total,
|
"memory_bytes": cluster_memory_total,
|
||||||
|
|||||||
@@ -1556,8 +1556,13 @@
|
|||||||
const clusterTotalDiv = document.getElementById('clusterTotal');
|
const clusterTotalDiv = document.getElementById('clusterTotal');
|
||||||
const workloadDataDiv = document.getElementById('workloadData');
|
const workloadDataDiv = document.getElementById('workloadData');
|
||||||
|
|
||||||
|
// Add data source indicator
|
||||||
|
const dataSourceIndicator = data.data_source === 'simulated' ?
|
||||||
|
'<div style="background: #fff3cd; border: 1px solid #ffeaa7; border-radius: 4px; padding: 10px; margin-bottom: 15px; color: #856404;"><strong>📊 Demo Mode:</strong> Showing simulated data for demonstration. Prometheus integration requires proper RBAC configuration.</div>' :
|
||||||
|
'<div style="background: #d4edda; border: 1px solid #c3e6cb; border-radius: 4px; padding: 10px; margin-bottom: 15px; color: #155724;"><strong>✅ Live Data:</strong> Real metrics from Prometheus</div>';
|
||||||
|
|
||||||
// Render cluster total resources
|
// Render cluster total resources
|
||||||
clusterTotalDiv.innerHTML = `
|
clusterTotalDiv.innerHTML = dataSourceIndicator + `
|
||||||
<div class="cluster-stats">
|
<div class="cluster-stats">
|
||||||
<div class="stat-card">
|
<div class="stat-card">
|
||||||
<h4>CPU Total</h4>
|
<h4>CPU Total</h4>
|
||||||
|
|||||||
Reference in New Issue
Block a user