Fix: kubernetes statistics not respecting selector (#5199)

This commit is contained in:
xethlyx 2025-04-20 20:39:56 -04:00 committed by GitHub
parent 1fe4f49771
commit d99c3cb691
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -53,9 +53,11 @@ export default async function handler(req, res) {
return; return;
} }
const podNames = new Set();
let cpuLimit = 0; let cpuLimit = 0;
let memLimit = 0; let memLimit = 0;
pods.forEach((pod) => { pods.forEach((pod) => {
podNames.add(pod.metadata.name);
pod.spec.containers.forEach((container) => { pod.spec.containers.forEach((container) => {
if (container?.resources?.limits?.cpu) { if (container?.resources?.limits?.cpu) {
cpuLimit += parseCpu(container?.resources?.limits?.cpu); cpuLimit += parseCpu(container?.resources?.limits?.cpu);
@ -66,42 +68,32 @@ export default async function handler(req, res) {
}); });
}); });
const podStatsList = await Promise.all( const namespaceMetrics = await metricsApi
pods.map(async (pod) => { .getPodMetrics(namespace)
let depMem = 0; .then((response) => response.items)
let depCpu = 0; .catch((err) => {
const podMetrics = await metricsApi // 404 generally means that the metrics have not been populated yet
.getPodMetrics(namespace, pod.items) if (err.statusCode !== 404) {
.then((response) => response.items) logger.error("Error getting pod metrics: %d %s %s", err.statusCode, err.body, err.response);
.catch((err) => {
// 404 generally means that the metrics have not been populated yet
if (err.statusCode !== 404) {
logger.error("Error getting pod metrics: %d %s %s", err.statusCode, err.body, err.response);
}
return null;
});
if (podMetrics) {
podMetrics.forEach((metrics) => {
metrics.containers.forEach((container) => {
depMem += parseMemory(container.usage.memory);
depCpu += parseCpu(container.usage.cpu);
});
});
} }
return { return null;
mem: depMem, });
cpu: depCpu,
};
}),
);
const stats = { const stats = {
mem: 0, mem: 0,
cpu: 0, cpu: 0,
}; };
podStatsList.forEach((podStat) => {
stats.mem += podStat.mem; if (namespaceMetrics) {
stats.cpu += podStat.cpu; const podMetrics = namespaceMetrics.filter((item) => podNames.has(item.metadata.name));
}); podMetrics.forEach((metrics) => {
metrics.containers.forEach((container) => {
stats.mem += parseMemory(container.usage.memory);
stats.cpu += parseCpu(container.usage.cpu);
});
});
}
stats.cpuLimit = cpuLimit; stats.cpuLimit = cpuLimit;
stats.memLimit = memLimit; stats.memLimit = memLimit;
stats.cpuUsage = cpuLimit ? 100 * (stats.cpu / cpuLimit) : 0; stats.cpuUsage = cpuLimit ? 100 * (stats.cpu / cpuLimit) : 0;