diff --git a/src/components/FullNodeViewer/FullNodeViewer.tsx b/src/components/FullNodeViewer/FullNodeViewer.tsx
index 667c33deff..5cdd3b1f50 100644
--- a/src/components/FullNodeViewer/FullNodeViewer.tsx
+++ b/src/components/FullNodeViewer/FullNodeViewer.tsx
@@ -35,7 +35,7 @@ export const FullNodeViewer = ({node, className}: FullNodeViewerProps) => {
{label: 'Rack', value: node?.Rack},
);
- const averageInfo = node?.LoadAverage?.map((load, loadIndex) => ({
+ const averageInfo = node?.LoadAveragePercents?.map((load, loadIndex) => ({
label: LOAD_AVERAGE_TIME_INTERVALS[loadIndex],
value: (
diff --git a/src/containers/Nodes/getNodesColumns.tsx b/src/containers/Nodes/getNodesColumns.tsx
index 53bb702175..73cd565179 100644
--- a/src/containers/Nodes/getNodesColumns.tsx
+++ b/src/containers/Nodes/getNodesColumns.tsx
@@ -136,13 +136,12 @@ const cpuColumn: NodesColumn = {
const loadAverageColumn: NodesColumn = {
name: NODES_COLUMNS_IDS.LoadAverage,
header: 'Load average',
- sortAccessor: ({LoadAverage = []}) =>
- LoadAverage.slice(0, 1).reduce((acc, item) => acc + item, 0),
+ sortAccessor: ({LoadAveragePercents = []}) => LoadAveragePercents[0],
defaultOrder: DataTable.DESCENDING,
render: ({row}) =>
- row.LoadAverage && row.LoadAverage.length > 0 ? (
+ row.LoadAveragePercents && row.LoadAveragePercents.length > 0 ? (
- row.LoadAverage && row.LoadAverage.length > 0 ? (
+ row.LoadAveragePercents && row.LoadAveragePercents.length > 0 ? (
) : (
'—'
diff --git a/src/containers/Versions/NodesTable/NodesTable.tsx b/src/containers/Versions/NodesTable/NodesTable.tsx
index bcb8928241..d2e0ef04c1 100644
--- a/src/containers/Versions/NodesTable/NodesTable.tsx
+++ b/src/containers/Versions/NodesTable/NodesTable.tsx
@@ -51,12 +51,12 @@ const columns: Column[] = [
align: DataTable.LEFT,
},
{
- name: 'uptime',
+ name: 'Uptime',
header: 'Uptime',
sortAccessor: ({StartTime}) => StartTime && -StartTime,
width: 120,
align: DataTable.LEFT,
- render: ({row}) => row.uptime,
+ render: ({row}) => row.Uptime,
},
{
name: 'MemoryUsed',
@@ -90,15 +90,14 @@ const columns: Column[] = [
{
name: 'LoadAverage',
header: 'Load average',
- sortAccessor: ({LoadAverage = []}) =>
- LoadAverage.slice(0, 1).reduce((acc, item) => acc + item, 0),
+ sortAccessor: ({LoadAveragePercents = []}) => LoadAveragePercents[0],
defaultOrder: DataTable.DESCENDING,
width: 140,
resizeMinWidth: 140,
render: ({row}) =>
- row.LoadAverage && row.LoadAverage.length > 0 ? (
+ row.LoadAveragePercents && row.LoadAveragePercents.length > 0 ? (
({
@@ -13,12 +11,7 @@ export const clusterNodesApi = api.injectEndpoints({
try {
const result = await window.api.getClusterNodes();
const {SystemStateInfo: nodes = []} = result;
- const data: PreparedClusterNode[] = nodes.map((node) => {
- return {
- ...node,
- uptime: calcUptime(node.StartTime),
- };
- });
+ const data: PreparedClusterNode[] = nodes.map(prepareNodeSystemState);
return {data};
} catch (error) {
return {error};
diff --git a/src/store/reducers/nodes/types.ts b/src/store/reducers/nodes/types.ts
index 8800ce8d77..05e3e7a684 100644
--- a/src/store/reducers/nodes/types.ts
+++ b/src/store/reducers/nodes/types.ts
@@ -34,6 +34,7 @@ export interface NodesPreparedEntity {
PoolStats?: TPoolStats[];
LoadAverage?: number[];
+ LoadAveragePercents?: number[];
Tablets?: TFullTabletStateInfo[] | TComputeTabletStateInfo[];
Endpoints?: TEndpoint[];
diff --git a/src/store/reducers/nodes/utils.ts b/src/store/reducers/nodes/utils.ts
index 0190b4edc1..caec302887 100644
--- a/src/store/reducers/nodes/utils.ts
+++ b/src/store/reducers/nodes/utils.ts
@@ -2,17 +2,18 @@ import type {TComputeInfo, TComputeNodeInfo, TComputeTenantInfo} from '../../../
import type {TNodesInfo} from '../../../types/api/nodes';
import {calcUptime} from '../../../utils/dataFormatters/dataFormatters';
import {generateEvaluator} from '../../../utils/generateEvaluator';
-import {prepareNodeSystemState} from '../../../utils/nodes';
+import {calculateLoadAveragePercents, prepareNodeSystemState} from '../../../utils/nodes';
import type {NodesHandledResponse, NodesPreparedEntity} from './types';
-const prepareComputeNode = (node: TComputeNodeInfo, tenantName?: string) => {
+const prepareComputeNode = (node: TComputeNodeInfo, tenantName?: string): NodesPreparedEntity => {
return {
...node,
// v2 response has tenant name, v1 - doesn't
TenantName: node.Tenant ?? tenantName,
SystemState: node?.Overall,
Uptime: calcUptime(node?.StartTime),
+ LoadAveragePercents: calculateLoadAveragePercents(node),
DC: node.DataCenter,
};
diff --git a/src/utils/nodes.ts b/src/utils/nodes.ts
index 93106d4442..60c7f84bf2 100644
--- a/src/utils/nodes.ts
+++ b/src/utils/nodes.ts
@@ -3,6 +3,7 @@ import {z} from 'zod';
import type {NodesPreparedEntity} from '../store/reducers/nodes/types';
import {ProblemFilterValues} from '../store/reducers/settings/settings';
import type {ProblemFilterValue} from '../store/reducers/settings/types';
+import type {TComputeNodeInfo} from '../types/api/compute';
import {EFlag} from '../types/api/enums';
import type {TSystemStateInfo} from '../types/api/nodes';
import type {TNodeInfo} from '../types/api/nodesList';
@@ -12,6 +13,8 @@ import type {NodesMap} from '../types/store/nodesList';
import {HOUR_IN_SECONDS} from './constants';
import {calcUptime} from './dataFormatters/dataFormatters';
+import {valueIsDefined} from '.';
+
export enum NodesUptimeFilterValues {
'All' = 'All',
'SmallUptime' = 'SmallUptime',
@@ -38,9 +41,22 @@ export const prepareNodesMap = (nodesList?: TNodeInfo[]) => {
}, new Map());
};
+export function calculateLoadAveragePercents(node: TSystemStateInfo | TComputeNodeInfo = {}) {
+ const {LoadAverage, NumberOfCpus} = node;
+
+ if (!valueIsDefined(LoadAverage) || !valueIsDefined(NumberOfCpus)) {
+ return undefined;
+ }
+
+ return LoadAverage.map((value) => {
+ return (value * 100) / NumberOfCpus;
+ });
+}
+
export interface PreparedNodeSystemState extends TSystemStateInfo {
Rack?: string;
DC?: string;
+ LoadAveragePercents?: number[];
Uptime: string;
}
@@ -53,11 +69,14 @@ export const prepareNodeSystemState = (
const Uptime = calcUptime(systemState.StartTime);
+ const LoadAveragePercents = calculateLoadAveragePercents(systemState);
+
return {
...systemState,
Rack,
DC,
Uptime,
+ LoadAveragePercents,
};
};