1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Add back total capacity for node resources

Display both Total Capacity and Allocatable Capacity on node and cluster graphs .

Signed-off-by: Michael Pappas <mhagen@mapcom.com>
This commit is contained in:
Michael Pappas 2021-05-21 17:59:15 -04:00
parent a7851b7420
commit b6c0c30ebd
9 changed files with 84 additions and 30 deletions

View File

@ -53,24 +53,31 @@ export class PrometheusLens implements PrometheusProvider {
node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes) node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)
) by (kubernetes_name) ) by (kubernetes_name)
`.replace(/_bytes/g, `_bytes{kubernetes_node=~"${opts.nodes}"}`), `.replace(/_bytes/g, `_bytes{kubernetes_node=~"${opts.nodes}"}`),
workloadMemoryUsage: `sum(container_memory_working_set_bytes{container!="POD",container!="",instance=~"${opts.nodes}"}) by (component)`,
memoryRequests: `sum(kube_pod_container_resource_requests{node=~"${opts.nodes}", resource="memory"}) by (component)`, memoryRequests: `sum(kube_pod_container_resource_requests{node=~"${opts.nodes}", resource="memory"}) by (component)`,
memoryLimits: `sum(kube_pod_container_resource_limits{node=~"${opts.nodes}", resource="memory"}) by (component)`, memoryLimits: `sum(kube_pod_container_resource_limits{node=~"${opts.nodes}", resource="memory"}) by (component)`,
memoryCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="memory"}) by (component)`, memoryCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="memory"}) by (component)`,
memoryAllocatableCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="memory"}) by (component)`,
cpuUsage: `sum(rate(node_cpu_seconds_total{kubernetes_node=~"${opts.nodes}", mode=~"user|system"}[${this.rateAccuracy}]))`, cpuUsage: `sum(rate(node_cpu_seconds_total{kubernetes_node=~"${opts.nodes}", mode=~"user|system"}[${this.rateAccuracy}]))`,
cpuRequests:`sum(kube_pod_container_resource_requests{node=~"${opts.nodes}", resource="cpu"}) by (component)`, cpuRequests:`sum(kube_pod_container_resource_requests{node=~"${opts.nodes}", resource="cpu"}) by (component)`,
cpuLimits: `sum(kube_pod_container_resource_limits{node=~"${opts.nodes}", resource="cpu"}) by (component)`, cpuLimits: `sum(kube_pod_container_resource_limits{node=~"${opts.nodes}", resource="cpu"}) by (component)`,
cpuCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="cpu"}) by (component)`, cpuCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="cpu"}) by (component)`,
cpuAllocatableCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="cpu"}) by (component)`,
podUsage: `sum({__name__=~"kubelet_running_pod_count|kubelet_running_pods", instance=~"${opts.nodes}"})`, podUsage: `sum({__name__=~"kubelet_running_pod_count|kubelet_running_pods", instance=~"${opts.nodes}"})`,
podCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="pods"}) by (component)`, podCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="pods"}) by (component)`,
podAllocatableCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="pods"}) by (component)`,
fsSize: `sum(node_filesystem_size_bytes{kubernetes_node=~"${opts.nodes}", mountpoint="/"}) by (kubernetes_node)`, fsSize: `sum(node_filesystem_size_bytes{kubernetes_node=~"${opts.nodes}", mountpoint="/"}) by (kubernetes_node)`,
fsUsage: `sum(node_filesystem_size_bytes{kubernetes_node=~"${opts.nodes}", mountpoint="/"} - node_filesystem_avail_bytes{kubernetes_node=~"${opts.nodes}", mountpoint="/"}) by (kubernetes_node)` fsUsage: `sum(node_filesystem_size_bytes{kubernetes_node=~"${opts.nodes}", mountpoint="/"} - node_filesystem_avail_bytes{kubernetes_node=~"${opts.nodes}", mountpoint="/"}) by (kubernetes_node)`
}; };
case "nodes": case "nodes":
return { return {
memoryUsage: `sum (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) by (kubernetes_node)`, memoryUsage: `sum (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) by (kubernetes_node)`,
memoryCapacity: `sum(kube_node_status_allocatable{resource="memory"}) by (node)`, workloadMemoryUsage: `sum(container_memory_working_set_bytes{container!="POD",container!=""}) by (instance)`,
memoryCapacity: `sum(kube_node_status_capacity{resource="memory"}) by (node)`,
memoryAllocatableCapacity: `sum(kube_node_status_allocatable{resource="memory"}) by (node)`,
cpuUsage: `sum(rate(node_cpu_seconds_total{mode=~"user|system"}[${this.rateAccuracy}])) by(kubernetes_node)`, cpuUsage: `sum(rate(node_cpu_seconds_total{mode=~"user|system"}[${this.rateAccuracy}])) by(kubernetes_node)`,
cpuCapacity: `sum(kube_node_status_allocatable{resource="cpu"}) by (node)`, cpuCapacity: `sum(kube_node_status_capacity{resource="cpu"}) by (node)`,
cpuAllocatableCapacity: `sum(kube_node_status_allocatable{resource="cpu"}) by (node)`,
fsSize: `sum(node_filesystem_size_bytes{mountpoint="/"}) by (kubernetes_node)`, fsSize: `sum(node_filesystem_size_bytes{mountpoint="/"}) by (kubernetes_node)`,
fsUsage: `sum(node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_avail_bytes{mountpoint="/"}) by (kubernetes_node)` fsUsage: `sum(node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_avail_bytes{mountpoint="/"}) by (kubernetes_node)`
}; };

View File

@ -63,24 +63,31 @@ export class PrometheusOperator implements PrometheusProvider {
node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes) node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)
) )
`.replace(/_bytes/g, `_bytes * on (pod,namespace) group_left(node) kube_pod_info{node=~"${opts.nodes}"}`), `.replace(/_bytes/g, `_bytes * on (pod,namespace) group_left(node) kube_pod_info{node=~"${opts.nodes}"}`),
workloadMemoryUsage: `sum(container_memory_working_set_bytes{container!="POD",container!="",instance=~"${opts.nodes}"}) by (component)`,
memoryRequests: `sum(kube_pod_container_resource_requests{node=~"${opts.nodes}", resource="memory"})`, memoryRequests: `sum(kube_pod_container_resource_requests{node=~"${opts.nodes}", resource="memory"})`,
memoryLimits: `sum(kube_pod_container_resource_limits{node=~"${opts.nodes}", resource="memory"})`, memoryLimits: `sum(kube_pod_container_resource_limits{node=~"${opts.nodes}", resource="memory"})`,
memoryCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="memory"})`, memoryCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="memory"})`,
memoryAllocatableCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="memory"})`,
cpuUsage: `sum(rate(node_cpu_seconds_total{mode=~"user|system"}[${this.rateAccuracy}])* on (pod,namespace) group_left(node) kube_pod_info{node=~"${opts.nodes}"})`, cpuUsage: `sum(rate(node_cpu_seconds_total{mode=~"user|system"}[${this.rateAccuracy}])* on (pod,namespace) group_left(node) kube_pod_info{node=~"${opts.nodes}"})`,
cpuRequests:`sum(kube_pod_container_resource_requests{node=~"${opts.nodes}", resource="cpu"})`, cpuRequests:`sum(kube_pod_container_resource_requests{node=~"${opts.nodes}", resource="cpu"})`,
cpuLimits: `sum(kube_pod_container_resource_limits{node=~"${opts.nodes}", resource="cpu"})`, cpuLimits: `sum(kube_pod_container_resource_limits{node=~"${opts.nodes}", resource="cpu"})`,
cpuCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="cpu"})`, cpuCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="cpu"})`,
cpuAllocatableCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="cpu"})`,
podUsage: `sum({__name__=~"kubelet_running_pod_count|kubelet_running_pods", node=~"${opts.nodes}"})`, podUsage: `sum({__name__=~"kubelet_running_pod_count|kubelet_running_pods", node=~"${opts.nodes}"})`,
podCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="pods"})`, podCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="pods"})`,
podAllocatableCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="pods"})`,
fsSize: `sum(node_filesystem_size_bytes{mountpoint="/"} * on (pod,namespace) group_left(node) kube_pod_info{node=~"${opts.nodes}"})`, fsSize: `sum(node_filesystem_size_bytes{mountpoint="/"} * on (pod,namespace) group_left(node) kube_pod_info{node=~"${opts.nodes}"})`,
fsUsage: `sum(node_filesystem_size_bytes{mountpoint="/"} * on (pod,namespace) group_left(node) kube_pod_info{node=~"${opts.nodes}"} - node_filesystem_avail_bytes{mountpoint="/"} * on (pod,namespace) group_left(node) kube_pod_info{node=~"${opts.nodes}"})` fsUsage: `sum(node_filesystem_size_bytes{mountpoint="/"} * on (pod,namespace) group_left(node) kube_pod_info{node=~"${opts.nodes}"} - node_filesystem_avail_bytes{mountpoint="/"} * on (pod,namespace) group_left(node) kube_pod_info{node=~"${opts.nodes}"})`
}; };
case "nodes": case "nodes":
return { return {
memoryUsage: `sum((node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) * on (pod,namespace) group_left(node) kube_pod_info) by (node)`, memoryUsage: `sum((node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) * on (pod,namespace) group_left(node) kube_pod_info) by (node)`,
memoryCapacity: `sum(kube_node_status_allocatable{resource="memory"}) by (node)`, workloadMemoryUsage: `sum(container_memory_working_set_bytes{container!="POD",container!=""}) by (instance)`,
memoryCapacity: `sum(kube_node_status_capacity{resource="memory"}) by (node)`,
memoryAllocatableCapacity: `sum(kube_node_status_allocatable{resource="memory"}) by (node)`,
cpuUsage: `sum(rate(node_cpu_seconds_total{mode=~"user|system"}[${this.rateAccuracy}]) * on (pod,namespace) group_left(node) kube_pod_info) by (node)`, cpuUsage: `sum(rate(node_cpu_seconds_total{mode=~"user|system"}[${this.rateAccuracy}]) * on (pod,namespace) group_left(node) kube_pod_info) by (node)`,
cpuCapacity: `sum(kube_node_status_allocatable{resource="cpu"}) by (node)`, cpuCapacity: `sum(kube_node_status_capacity{resource="cpu"}) by (node)`,
cpuAllocatableCapacity: `sum(kube_node_status_allocatable{resource="cpu"}) by (node)`,
fsSize: `sum(node_filesystem_size_bytes{mountpoint="/"} * on (pod,namespace) group_left(node) kube_pod_info) by (node)`, fsSize: `sum(node_filesystem_size_bytes{mountpoint="/"} * on (pod,namespace) group_left(node) kube_pod_info) by (node)`,
fsUsage: `sum((node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_avail_bytes{mountpoint="/"}) * on (pod,namespace) group_left(node) kube_pod_info) by (node)` fsUsage: `sum((node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_avail_bytes{mountpoint="/"}) * on (pod,namespace) group_left(node) kube_pod_info) by (node)`
}; };

View File

@ -23,22 +23,29 @@ import type { CoreV1Api } from "@kubernetes/client-node";
export type PrometheusClusterQuery = { export type PrometheusClusterQuery = {
memoryUsage: string; memoryUsage: string;
workloadMemoryUsage: string;
memoryRequests: string; memoryRequests: string;
memoryLimits: string; memoryLimits: string;
memoryCapacity: string; memoryCapacity: string;
memoryAllocatableCapacity: string;
cpuUsage: string; cpuUsage: string;
cpuRequests: string; cpuRequests: string;
cpuLimits: string; cpuLimits: string;
cpuCapacity: string; cpuCapacity: string;
cpuAllocatableCapacity: string;
podUsage: string; podUsage: string;
podCapacity: string; podCapacity: string;
podAllocatableCapacity: string;
}; };
export type PrometheusNodeQuery = { export type PrometheusNodeQuery = {
memoryUsage: string; memoryUsage: string;
workloadMemoryUsage: string;
memoryCapacity: string; memoryCapacity: string;
memoryAllocatableCapacity: string;
cpuUsage: string; cpuUsage: string;
cpuCapacity: string; cpuCapacity: string;
cpuAllocatableCapacity: string;
fsSize: string; fsSize: string;
fsUsage: string; fsUsage: string;
}; };

View File

@ -53,24 +53,31 @@ export class PrometheusStacklight implements PrometheusProvider {
node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes) node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)
) by (kubernetes_name) ) by (kubernetes_name)
`.replace(/_bytes/g, `_bytes{node=~"${opts.nodes}"}`), `.replace(/_bytes/g, `_bytes{node=~"${opts.nodes}"}`),
workloadMemoryUsage: `sum(container_memory_working_set_bytes{container!="POD",container!="",instance=~"${opts.nodes}"}) by (component)`,
memoryRequests: `sum(kube_pod_container_resource_requests{node=~"${opts.nodes}", resource="memory"}) by (component)`, memoryRequests: `sum(kube_pod_container_resource_requests{node=~"${opts.nodes}", resource="memory"}) by (component)`,
memoryLimits: `sum(kube_pod_container_resource_limits{node=~"${opts.nodes}", resource="memory"}) by (component)`, memoryLimits: `sum(kube_pod_container_resource_limits{node=~"${opts.nodes}", resource="memory"}) by (component)`,
memoryCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="memory"}) by (component)`, memoryCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="memory"}) by (component)`,
memoryAllocatableCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="memory"}) by (component)`,
cpuUsage: `sum(rate(node_cpu_seconds_total{node=~"${opts.nodes}", mode=~"user|system"}[${this.rateAccuracy}]))`, cpuUsage: `sum(rate(node_cpu_seconds_total{node=~"${opts.nodes}", mode=~"user|system"}[${this.rateAccuracy}]))`,
cpuRequests:`sum(kube_pod_container_resource_requests{node=~"${opts.nodes}", resource="cpu"}) by (component)`, cpuRequests:`sum(kube_pod_container_resource_requests{node=~"${opts.nodes}", resource="cpu"}) by (component)`,
cpuLimits: `sum(kube_pod_container_resource_limits{node=~"${opts.nodes}", resource="cpu"}) by (component)`, cpuLimits: `sum(kube_pod_container_resource_limits{node=~"${opts.nodes}", resource="cpu"}) by (component)`,
cpuCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="cpu"}) by (component)`, cpuCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="cpu"}) by (component)`,
cpuAllocatableCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="cpu"}) by (component)`,
podUsage: `sum({__name__=~"kubelet_running_pod_count|kubelet_running_pods", instance=~"${opts.nodes}"})`, podUsage: `sum({__name__=~"kubelet_running_pod_count|kubelet_running_pods", instance=~"${opts.nodes}"})`,
podCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="pods"}) by (component)`, podCapacity: `sum(kube_node_status_capacity{node=~"${opts.nodes}", resource="pods"}) by (component)`,
podAllocatableCapacity: `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="pods"}) by (component)`,
fsSize: `sum(node_filesystem_size_bytes{node=~"${opts.nodes}", mountpoint="/"}) by (node)`, fsSize: `sum(node_filesystem_size_bytes{node=~"${opts.nodes}", mountpoint="/"}) by (node)`,
fsUsage: `sum(node_filesystem_size_bytes{node=~"${opts.nodes}", mountpoint="/"} - node_filesystem_avail_bytes{node=~"${opts.nodes}", mountpoint="/"}) by (node)` fsUsage: `sum(node_filesystem_size_bytes{node=~"${opts.nodes}", mountpoint="/"} - node_filesystem_avail_bytes{node=~"${opts.nodes}", mountpoint="/"}) by (node)`
}; };
case "nodes": case "nodes":
return { return {
memoryUsage: `sum (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) by (node)`, memoryUsage: `sum (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) by (node)`,
memoryCapacity: `sum(kube_node_status_allocatable{resource="memory"}) by (node)`, workloadMemoryUsage: `sum(container_memory_working_set_bytes{container!="POD",container!=""}) by (instance)`,
memoryCapacity: `sum(kube_node_status_capacity{resource="memory"}) by (node)`,
memoryAllocatableCapacity: `sum(kube_node_status_allocatable{resource="memory"}) by (node)`,
cpuUsage: `sum(rate(node_cpu_seconds_total{mode=~"user|system"}[${this.rateAccuracy}])) by(node)`, cpuUsage: `sum(rate(node_cpu_seconds_total{mode=~"user|system"}[${this.rateAccuracy}])) by(node)`,
cpuCapacity: `sum(kube_node_status_allocatable{resource="cpu"}) by (node)`, cpuCapacity: `sum(kube_node_status_capacity{resource="cpu"}) by (node)`,
cpuAllocatableCapacity: `sum(kube_node_status_allocatable{resource="cpu"}) by (node)`,
fsSize: `sum(node_filesystem_size_bytes{mountpoint="/"}) by (node)`, fsSize: `sum(node_filesystem_size_bytes{mountpoint="/"}) by (node)`,
fsUsage: `sum(node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_avail_bytes{mountpoint="/"}) by (node)` fsUsage: `sum(node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_avail_bytes{mountpoint="/"}) by (node)`
}; };

View File

@ -33,15 +33,19 @@ export class ClusterApi extends KubeApi<Cluster> {
return metricsApi.getMetrics({ return metricsApi.getMetrics({
memoryUsage: opts, memoryUsage: opts,
workloadMemoryUsage: opts,
memoryRequests: opts, memoryRequests: opts,
memoryLimits: opts, memoryLimits: opts,
memoryCapacity: opts, memoryCapacity: opts,
memoryAllocatableCapacity: opts,
cpuUsage: opts, cpuUsage: opts,
cpuRequests: opts, cpuRequests: opts,
cpuLimits: opts, cpuLimits: opts,
cpuCapacity: opts, cpuCapacity: opts,
cpuAllocatableCapacity: opts,
podUsage: opts, podUsage: opts,
podCapacity: opts, podCapacity: opts,
podAllocatableCapacity: opts,
fsSize: opts, fsSize: opts,
fsUsage: opts fsUsage: opts
}, params); }, params);

View File

@ -30,7 +30,9 @@ export class NodesApi extends KubeApi<Node> {
return metricsApi.getMetrics({ return metricsApi.getMetrics({
memoryUsage: opts, memoryUsage: opts,
workloadMemoryUsage: opts,
memoryCapacity: opts, memoryCapacity: opts,
memoryAllocatableCapacity: opts,
cpuUsage: opts, cpuUsage: opts,
cpuCapacity: opts, cpuCapacity: opts,
fsSize: opts, fsSize: opts,
@ -42,7 +44,9 @@ export class NodesApi extends KubeApi<Node> {
export interface INodeMetrics<T = IMetrics> { export interface INodeMetrics<T = IMetrics> {
[metric: string]: T; [metric: string]: T;
memoryUsage: T; memoryUsage: T;
workloadMemoryUsage: T;
memoryCapacity: T; memoryCapacity: T;
memoryAllocatableCapacity: T;
cpuUsage: T; cpuUsage: T;
cpuCapacity: T; cpuCapacity: T;
fsUsage: T; fsUsage: T;

View File

@ -45,20 +45,20 @@ export const ClusterPieCharts = observer(() => {
const renderCharts = () => { const renderCharts = () => {
const data = getMetricLastPoints(clusterOverviewStore.metrics); const data = getMetricLastPoints(clusterOverviewStore.metrics);
const { memoryUsage, memoryRequests, memoryCapacity, memoryLimits } = data; const { memoryUsage, memoryRequests, memoryAllocatableCapacity, memoryCapacity, memoryLimits } = data;
const { cpuUsage, cpuRequests, cpuCapacity, cpuLimits } = data; const { cpuUsage, cpuRequests, cpuAllocatableCapacity, cpuCapacity, cpuLimits } = data;
const { podUsage, podCapacity } = data; const { podUsage, podAllocatableCapacity, podCapacity } = data;
const cpuLimitsOverload = cpuLimits > cpuCapacity; const cpuLimitsOverload = cpuLimits > cpuAllocatableCapacity;
const memoryLimitsOverload = memoryLimits > memoryCapacity; const memoryLimitsOverload = memoryLimits > memoryAllocatableCapacity;
const defaultColor = ThemeStore.getInstance().activeTheme.colors.pieChartDefaultColor; const defaultColor = ThemeStore.getInstance().activeTheme.colors.pieChartDefaultColor;
if (!memoryCapacity || !cpuCapacity || !podCapacity) return null; if (!memoryCapacity || !cpuCapacity || !podCapacity || !memoryAllocatableCapacity || !cpuAllocatableCapacity || !podAllocatableCapacity) return null;
const cpuData: ChartData = { const cpuData: ChartData = {
datasets: [ datasets: [
{ {
data: [ data: [
cpuUsage, cpuUsage,
cpuUsage ? cpuCapacity - cpuUsage : 1, cpuUsage ? cpuAllocatableCapacity - cpuUsage : 1,
], ],
backgroundColor: [ backgroundColor: [
"#c93dce", "#c93dce",
@ -69,7 +69,7 @@ export const ClusterPieCharts = observer(() => {
{ {
data: [ data: [
cpuRequests, cpuRequests,
cpuRequests ? cpuCapacity - cpuRequests : 1, cpuRequests ? cpuAllocatableCapacity - cpuRequests : 1,
], ],
backgroundColor: [ backgroundColor: [
"#4caf50", "#4caf50",
@ -80,7 +80,7 @@ export const ClusterPieCharts = observer(() => {
{ {
data: [ data: [
cpuLimits, cpuLimits,
cpuLimitsOverload ? 0 : cpuCapacity - cpuLimits, cpuLimitsOverload ? 0 : cpuAllocatableCapacity - cpuLimits,
], ],
backgroundColor: [ backgroundColor: [
"#3d90ce", "#3d90ce",
@ -93,6 +93,7 @@ export const ClusterPieCharts = observer(() => {
`Usage: ${cpuUsage ? cpuUsage.toFixed(2) : "N/A"}`, `Usage: ${cpuUsage ? cpuUsage.toFixed(2) : "N/A"}`,
`Requests: ${cpuRequests ? cpuRequests.toFixed(2) : "N/A"}`, `Requests: ${cpuRequests ? cpuRequests.toFixed(2) : "N/A"}`,
`Limits: ${cpuLimits ? cpuLimits.toFixed(2) : "N/A"}`, `Limits: ${cpuLimits ? cpuLimits.toFixed(2) : "N/A"}`,
`Allocatable Capacity: ${cpuAllocatableCapacity || "N/A"}`,
`Capacity: ${cpuCapacity || "N/A"}` `Capacity: ${cpuCapacity || "N/A"}`
] ]
}; };
@ -101,7 +102,7 @@ export const ClusterPieCharts = observer(() => {
{ {
data: [ data: [
memoryUsage, memoryUsage,
memoryUsage ? memoryCapacity - memoryUsage : 1, memoryUsage ? memoryAllocatableCapacity - memoryUsage : 1,
], ],
backgroundColor: [ backgroundColor: [
"#c93dce", "#c93dce",
@ -112,7 +113,7 @@ export const ClusterPieCharts = observer(() => {
{ {
data: [ data: [
memoryRequests, memoryRequests,
memoryRequests ? memoryCapacity - memoryRequests : 1, memoryRequests ? memoryAllocatableCapacity - memoryRequests : 1,
], ],
backgroundColor: [ backgroundColor: [
"#4caf50", "#4caf50",
@ -123,7 +124,7 @@ export const ClusterPieCharts = observer(() => {
{ {
data: [ data: [
memoryLimits, memoryLimits,
memoryLimitsOverload ? 0 : memoryCapacity - memoryLimits, memoryLimitsOverload ? 0 : memoryAllocatableCapacity - memoryLimits,
], ],
backgroundColor: [ backgroundColor: [
"#3d90ce", "#3d90ce",
@ -136,7 +137,8 @@ export const ClusterPieCharts = observer(() => {
`Usage: ${bytesToUnits(memoryUsage)}`, `Usage: ${bytesToUnits(memoryUsage)}`,
`Requests: ${bytesToUnits(memoryRequests)}`, `Requests: ${bytesToUnits(memoryRequests)}`,
`Limits: ${bytesToUnits(memoryLimits)}`, `Limits: ${bytesToUnits(memoryLimits)}`,
`Capacity: ${bytesToUnits(memoryCapacity)}`, `Allocatable Capacity: ${bytesToUnits(memoryAllocatableCapacity)}`,
`Capacity: ${bytesToUnits(memoryCapacity)}`
] ]
}; };
const podsData: ChartData = { const podsData: ChartData = {
@ -144,7 +146,7 @@ export const ClusterPieCharts = observer(() => {
{ {
data: [ data: [
podUsage, podUsage,
podUsage ? podCapacity - podUsage : 1, podUsage ? podAllocatableCapacity - podUsage : 1,
], ],
backgroundColor: [ backgroundColor: [
"#4caf50", "#4caf50",
@ -155,7 +157,7 @@ export const ClusterPieCharts = observer(() => {
], ],
labels: [ labels: [
`Usage: ${podUsage || 0}`, `Usage: ${podUsage || 0}`,
`Capacity: ${podCapacity}`, `Capacity: ${podAllocatableCapacity}`,
] ]
}; };

View File

@ -47,8 +47,10 @@ export const NodeCharts = observer(() => {
const { const {
memoryUsage, memoryUsage,
workloadMemoryUsage,
memoryRequests, memoryRequests,
memoryCapacity, memoryCapacity,
memoryAllocatableCapacity,
cpuUsage, cpuUsage,
cpuRequests, cpuRequests,
cpuCapacity, cpuCapacity,
@ -92,6 +94,13 @@ export const NodeCharts = observer(() => {
borderColor: "#c93dce", borderColor: "#c93dce",
data: memoryUsage.map(([x, y]) => ({ x, y })) data: memoryUsage.map(([x, y]) => ({ x, y }))
}, },
{
id: `${id}-workloadMemoryUsage`,
label: `Workload Memory Usage`,
tooltip: `Workload memory usage`,
borderColor: "#9cd3ce",
data: workloadMemoryUsage.map(([x, y]) => ({ x, y }))
},
{ {
id: "memoryRequests", id: "memoryRequests",
label: `Requests`, label: `Requests`,
@ -99,6 +108,13 @@ export const NodeCharts = observer(() => {
borderColor: "#30b24d", borderColor: "#30b24d",
data: memoryRequests.map(([x, y]) => ({ x, y })) data: memoryRequests.map(([x, y]) => ({ x, y }))
}, },
{
id: `${id}-memoryAllocatableCapacity`,
label: `Allocatable Capacity`,
tooltip: `Memory allocatable capacity`,
borderColor: "#032b4d",
data: memoryAllocatableCapacity.map(([x, y]) => ({ x, y }))
},
{ {
id: `${id}-memoryCapacity`, id: `${id}-memoryCapacity`,
label: `Capacity`, label: `Capacity`,
@ -148,7 +164,7 @@ export const NodeCharts = observer(() => {
yAxes: [{ yAxes: [{
ticks: { ticks: {
callback: value => value callback: value => value
} }
}] }]
}, },
tooltips: { tooltips: {

View File

@ -90,7 +90,7 @@ export class Nodes extends React.Component<Props> {
} }
renderMemoryUsage(node: Node) { renderMemoryUsage(node: Node) {
const metrics = nodesStore.getLastMetricValues(node, ["memoryUsage", "memoryCapacity"]); const metrics = nodesStore.getLastMetricValues(node, ["workloadMemoryUsage", "memoryAllocatableCapacity"]);
if (!metrics || !metrics[1]) return <LineProgress value={0}/>; if (!metrics || !metrics[1]) return <LineProgress value={0}/>;
const usage = metrics[0]; const usage = metrics[0];