fix: adapt interface to work with current API format
- Update updateWorkloadsTable to group validations by namespace - Fix analyzeNamespace to work with validation array format - Group validations by namespace and pod for proper display - Show actual validation data instead of 'No Issues Found' - Maintain compatibility with existing modal functionality
This commit is contained in:
@@ -965,7 +965,36 @@
|
|||||||
function updateWorkloadsTable(data) {
|
function updateWorkloadsTable(data) {
|
||||||
const container = document.getElementById('workloads-table-container');
|
const container = document.getElementById('workloads-table-container');
|
||||||
|
|
||||||
if (!data.namespaces || data.namespaces.length === 0) {
|
// Group validations by namespace
|
||||||
|
const namespaceGroups = {};
|
||||||
|
if (data.validations && data.validations.length > 0) {
|
||||||
|
data.validations.forEach(validation => {
|
||||||
|
const namespace = validation.namespace;
|
||||||
|
if (!namespaceGroups[namespace]) {
|
||||||
|
namespaceGroups[namespace] = {
|
||||||
|
namespace: namespace,
|
||||||
|
validations: [],
|
||||||
|
pods: new Set(),
|
||||||
|
severity_breakdown: { error: 0, warning: 0, info: 0 }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
namespaceGroups[namespace].validations.push(validation);
|
||||||
|
namespaceGroups[namespace].pods.add(validation.pod_name);
|
||||||
|
|
||||||
|
// Count severity
|
||||||
|
if (validation.severity === 'error') {
|
||||||
|
namespaceGroups[namespace].severity_breakdown.error++;
|
||||||
|
} else if (validation.severity === 'warning') {
|
||||||
|
namespaceGroups[namespace].severity_breakdown.warning++;
|
||||||
|
} else if (validation.severity === 'info') {
|
||||||
|
namespaceGroups[namespace].severity_breakdown.info++;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const namespaces = Object.values(namespaceGroups);
|
||||||
|
|
||||||
|
if (namespaces.length === 0) {
|
||||||
container.innerHTML = `
|
container.innerHTML = `
|
||||||
<div style="text-align: center; padding: 40px; color: var(--pf-global--Color--300);">
|
<div style="text-align: center; padding: 40px; color: var(--pf-global--Color--300);">
|
||||||
<i class="fas fa-check-circle" style="font-size: 48px; margin-bottom: 16px; color: var(--pf-global--success-color--100);"></i>
|
<i class="fas fa-check-circle" style="font-size: 48px; margin-bottom: 16px; color: var(--pf-global--success-color--100);"></i>
|
||||||
@@ -988,13 +1017,13 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
${data.namespaces.map(namespace => `
|
${namespaces.map(namespace => `
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<strong style="color: var(--pf-global--Color--100);">${namespace.namespace}</strong>
|
<strong style="color: var(--pf-global--Color--100);">${namespace.namespace}</strong>
|
||||||
</td>
|
</td>
|
||||||
<td>${Object.keys(namespace.pods || {}).length}</td>
|
<td>${namespace.pods.size}</td>
|
||||||
<td>${namespace.total_validations || 0}</td>
|
<td>${namespace.validations.length}</td>
|
||||||
<td>
|
<td>
|
||||||
<span class="status-indicator ${getSeverityClass(namespace)}">
|
<span class="status-indicator ${getSeverityClass(namespace)}">
|
||||||
${getSeverityText(namespace)}
|
${getSeverityText(namespace)}
|
||||||
@@ -1300,16 +1329,46 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function analyzeNamespace(namespaceName) {
|
function analyzeNamespace(namespaceName) {
|
||||||
if (!currentData || !currentData.validations || !currentData.validations.namespaces) return;
|
if (!currentData || !currentData.validations || !currentData.validations.validations) return;
|
||||||
|
|
||||||
const namespace = currentData.validations.namespaces.find(ns => ns.namespace === namespaceName);
|
// Filter validations for this namespace
|
||||||
if (!namespace) return;
|
const namespaceValidations = currentData.validations.validations.filter(v => v.namespace === namespaceName);
|
||||||
|
if (namespaceValidations.length === 0) return;
|
||||||
|
|
||||||
|
// Group by pod
|
||||||
|
const podGroups = {};
|
||||||
|
namespaceValidations.forEach(validation => {
|
||||||
|
const podName = validation.pod_name;
|
||||||
|
if (!podGroups[podName]) {
|
||||||
|
podGroups[podName] = {
|
||||||
|
pod_name: podName,
|
||||||
|
namespace: namespaceName,
|
||||||
|
phase: 'Running', // Default phase
|
||||||
|
node_name: 'Unknown', // Default node
|
||||||
|
containers: [],
|
||||||
|
validations: []
|
||||||
|
};
|
||||||
|
}
|
||||||
|
podGroups[podName].validations.push(validation);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Create namespace object for compatibility
|
||||||
|
const namespace = {
|
||||||
|
namespace: namespaceName,
|
||||||
|
pods: podGroups,
|
||||||
|
validations: namespaceValidations,
|
||||||
|
severity_breakdown: {
|
||||||
|
error: namespaceValidations.filter(v => v.severity === 'error').length,
|
||||||
|
warning: namespaceValidations.filter(v => v.severity === 'warning').length,
|
||||||
|
info: namespaceValidations.filter(v => v.severity === 'info').length
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// Show details in modal
|
// Show details in modal
|
||||||
showNamespaceDetails(namespaceName);
|
showNamespaceDetails(namespaceName, namespace);
|
||||||
}
|
}
|
||||||
|
|
||||||
function showNamespaceDetails(namespaceName) {
|
function showNamespaceDetails(namespaceName, namespace) {
|
||||||
// Create modal if it doesn't exist
|
// Create modal if it doesn't exist
|
||||||
let modal = document.getElementById('namespaceModal');
|
let modal = document.getElementById('namespaceModal');
|
||||||
if (!modal) {
|
if (!modal) {
|
||||||
@@ -1334,8 +1393,7 @@
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create detailed content
|
// Use the passed namespace object
|
||||||
const namespace = currentData.validations.namespaces.find(ns => ns.namespace === namespaceName);
|
|
||||||
if (!namespace) return;
|
if (!namespace) return;
|
||||||
|
|
||||||
let content = `
|
let content = `
|
||||||
|
|||||||
Reference in New Issue
Block a user