Skip to content

[UI] EVEREST-1889 Fix resources display in overview page and expanded row #1148

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 43 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
06e5e4d
fix: resources display in overview page and expanded row
dianabirs Feb 27, 2025
3fc4b67
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
dianabirs Feb 27, 2025
c19af7c
fix: e2e
dianabirs Mar 3, 2025
463f5be
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
dianabirs Mar 3, 2025
a5a314e
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
dianabirs Mar 10, 2025
76cde30
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot Mar 10, 2025
972a74d
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot Mar 11, 2025
2f5ca91
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot Mar 11, 2025
c77f5ec
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot Mar 11, 2025
d03fea7
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot Mar 12, 2025
bd19c8d
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot Mar 12, 2025
81bf07f
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot Mar 12, 2025
de6707a
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot Mar 13, 2025
0249d67
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot Mar 13, 2025
9cd39cf
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot Mar 13, 2025
3c71956
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot Mar 14, 2025
ed18c84
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot Mar 17, 2025
2e1d54c
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot Mar 18, 2025
43572e0
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot Mar 18, 2025
76c15d5
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot Mar 18, 2025
1c91060
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot Mar 19, 2025
9585bc7
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot Mar 19, 2025
38d71c5
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot Mar 19, 2025
09e5838
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot Mar 20, 2025
654e64d
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot Mar 20, 2025
283512c
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot Mar 20, 2025
18624a0
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot Mar 21, 2025
9fe1111
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot Mar 21, 2025
77bb40e
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
dianabirs May 5, 2025
7924d84
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
dianabirs May 5, 2025
e21f8e2
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot May 5, 2025
c7df317
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot May 6, 2025
4496fe0
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot May 6, 2025
04b3521
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot May 7, 2025
84af480
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot May 7, 2025
668bec7
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot May 7, 2025
5895f36
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot May 7, 2025
b88dec1
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot May 7, 2025
fc68cfc
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot May 12, 2025
812618e
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot May 13, 2025
2cc336a
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot May 13, 2025
f19ac42
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
percona-robot May 19, 2025
15b762c
Merge branch 'main' into EVEREST-1889-ui-display-nodes-per-shard-in-o…
dianabirs May 23, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -209,11 +209,10 @@ const openResourcesModal = async (page: Page) => {
await page.getByTestId('form-dialog-save').click();

//check result
const numberOfNodes = size * (db !== 'psmdb' ? 1 : 2);
await expect(
page
.getByTestId('node-cpu-overview-section-row')
.filter({ hasText: `${2 * numberOfNodes}.00 CPU` })
.filter({ hasText: '2' })
).toBeVisible();

await expect(
Expand All @@ -222,7 +221,7 @@ const openResourcesModal = async (page: Page) => {
`${db != 'psmdb' ? 'proxies' : 'routers'}-cpu-overview-section-row`
)
.filter({
hasText: `${db != 'psmdb' ? '0.80' : '4.00'} CPU`,
hasText: `${db != 'psmdb' ? '0.4' : '2'}`,
})
).toBeVisible();
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,14 @@ export const Messages = {
cpu: 'CPU',
memory: 'Memory',
disk: 'Disk',
nodes: 'Nº nodes',
externalAccess: 'External Access',
monitoring: 'Monitoring',
enabled: 'Enabled',
disabled: 'Disabled',
shardingStatus: 'Status',
sharding: 'Sharding',
nrOfShards: 'Nº shards',
configServers: 'Config servers',
},
dbCluster: {
noData:
Expand Down
69 changes: 46 additions & 23 deletions ui/apps/everest/src/pages/databases/expandedRow/ExpandedRow.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,12 @@ import { LabelValue } from './LabelValue';
import { useRBACPermissions } from 'hooks/rbac';
import {
cpuParser,
getTotalResourcesDetailedString,
getResourcesDetailedString,
memoryParser,
} from 'utils/k8ResourceParser';
import { getProxyUnitNamesFromDbType } from 'components/cluster-form/resources/utils';
import { dbEngineToDbType } from '@percona/utils';
import { DbEngineType } from '@percona/types';

export const ExpandedRow = ({
row,
Expand All @@ -52,33 +53,28 @@ export const ExpandedRow = ({
port,
raw,
} = row.original;

const sharding = raw.spec.sharding;
const parsedDiskValues = memoryParser(storage.toString());
const parsedMemoryValues = memoryParser(memory.toString());
const parsedProxyMemoryValues = memoryParser(proxyMemory.toString());
const cpuResourcesStr = getTotalResourcesDetailedString(
const parsedMemoryValues = memoryParser(memory.toString(), 'G');
const parsedProxyMemoryValues = memoryParser(proxyMemory.toString(), 'G');
const cpuResourcesStr = getResourcesDetailedString(
cpuParser(cpu.toString() || '0'),
nodes,
'CPU'
''
);
const cpuProxyResourcesStr = getTotalResourcesDetailedString(
const cpuProxyResourcesStr = getResourcesDetailedString(
cpuParser(proxyCpu.toString() || '0'),
proxies,
'CPU'
''
);
const memoryResourcesStr = getTotalResourcesDetailedString(
const memoryResourcesStr = getResourcesDetailedString(
parsedMemoryValues.value,
nodes,
parsedMemoryValues.originalUnit
'GB'
);
const memoryProxyResourcesStr = getTotalResourcesDetailedString(
const memoryProxyResourcesStr = getResourcesDetailedString(
parsedProxyMemoryValues.value,
proxies,
parsedProxyMemoryValues.originalUnit
'GB'
);
const storageResourcesStr = getTotalResourcesDetailedString(
const storageResourcesStr = getResourcesDetailedString(
parsedDiskValues.value,
nodes,
parsedDiskValues.originalUnit
);
const isExpanded = row.getIsExpanded();
Expand Down Expand Up @@ -159,7 +155,35 @@ export const ExpandedRow = ({
>
{Messages.expandedRow.dbClusterParams}
</Typography>
<LabelValue label={Messages.expandedRow.nodes} value={nodes} />
<Box>
{dbType === DbEngineType.PSMDB && (
<Box>
<Typography sx={{ fontWeight: 'bold', paddingBottom: 1 }}>
{Messages.expandedRow.sharding}
</Typography>
<LabelValue
label={Messages.expandedRow.shardingStatus}
value={
sharding?.enabled
? Messages.expandedRow.enabled
: Messages.expandedRow.disabled
}
/>
<LabelValue
label={Messages.expandedRow.nrOfShards}
value={sharding?.shards}
/>
<LabelValue
label={Messages.expandedRow.configServers}
value={sharding?.configServer.replicas}
/>
</Box>
)}
</Box>
<Divider sx={{ margin: '10px 0' }} />
<Typography sx={{ fontWeight: 'bold', paddingBottom: 1 }}>
{`${nodes} node${+nodes > 1 ? 's' : ''} ${dbType === DbEngineType.PSMDB ? 'per shard' : ''}`}
</Typography>
<LabelValue label={Messages.expandedRow.cpu} value={cpuResourcesStr} />
<LabelValue
label={Messages.expandedRow.memory}
Expand All @@ -172,10 +196,9 @@ export const ExpandedRow = ({
<Divider sx={{ margin: '10px 0' }} />
{proxies > 0 && (
<>
<LabelValue
label={`Nº ${getProxyUnitNamesFromDbType(dbEngineToDbType(dbType)).plural}`}
value={proxies}
/>
<Typography sx={{ fontWeight: 'bold', paddingBottom: 1 }}>
{`${proxies} ${getProxyUnitNamesFromDbType(dbEngineToDbType(dbType))[proxies > 1 ? 'plural' : 'singular']} ${dbType === DbEngineType.PSMDB ? 'per shard' : ''}`}
</Typography>
<LabelValue
label={Messages.expandedRow.cpu}
value={cpuProxyResourcesStr}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ import { Messages } from '../cluster-overview.messages';
import { ResourcesEditModal } from './resources';
import {
cpuParser,
getTotalResourcesDetailedString,
getResourcesDetailedString,
memoryParser,
} from 'utils/k8ResourceParser';
import { dbEngineToDbType } from '@percona/utils';
Expand Down Expand Up @@ -67,8 +67,8 @@ export const ResourcesDetails = ({
: 0;
const disk = dbCluster.spec.engine.storage.size;
const parsedDiskValues = memoryParser(disk.toString());
const parsedMemoryValues = memoryParser(memory.toString());
const parsedProxyMemoryValues = memoryParser(proxyMemory.toString());
const parsedMemoryValues = memoryParser(memory.toString(), 'G');
const parsedProxyMemoryValues = memoryParser(proxyMemory.toString(), 'G');
const dbType = dbEngineToDbType(dbCluster.spec.engine.type);
const replicas = dbCluster.spec.engine.replicas.toString();
const proxies = isProxy(dbCluster.spec.proxy)
Expand All @@ -78,10 +78,7 @@ export const ResourcesDetails = ({
const numberOfNodes = NODES_DB_TYPE_MAP[dbType].includes(replicas)
? replicas
: CUSTOM_NR_UNITS_INPUT_VALUE;
const numberOfNodesStr =
sharding?.enabled && sharding?.shards
? (+numberOfNodes * sharding?.shards).toString()
: numberOfNodes;
const numberOfNodesStr = numberOfNodes;
const numberOfProxiesStr = NODES_DB_TYPE_MAP[dbType].includes(proxies)
? proxies
: CUSTOM_NR_UNITS_INPUT_VALUE;
Expand Down Expand Up @@ -185,61 +182,50 @@ export const ResourcesDetails = ({
</OverviewSection>
)}
<OverviewSection
title={`${numberOfNodesStr} node${+numberOfNodesStr > 1 ? 's' : ''}`}
title={`${numberOfNodesStr} node${+numberOfNodesStr > 1 ? 's' : ''} ${dbType === DbType.Mongo ? 'per shard' : ''}`}
loading={loading}
>
<OverviewSectionRow
dataTestId="node-cpu"
label={Messages.fields.cpu}
contentString={getTotalResourcesDetailedString(
contentString={getResourcesDetailedString(
cpuParser(cpu.toString() || '0'),
parseInt(replicas, 10),
'CPU',
sharding?.shards,
sharding?.enabled
''
)}
/>
<OverviewSectionRow
label={Messages.fields.memory}
contentString={getTotalResourcesDetailedString(
contentString={getResourcesDetailedString(
parsedMemoryValues.value,
parseInt(replicas, 10),
parsedMemoryValues.originalUnit,
sharding?.shards,
sharding?.enabled
'GB'
)}
/>
<OverviewSectionRow
label={Messages.fields.disk}
contentString={getTotalResourcesDetailedString(
contentString={getResourcesDetailedString(
parsedDiskValues.value,
parseInt(replicas, 10),
parsedDiskValues.originalUnit,
sharding?.shards,
sharding?.enabled
parsedDiskValues.originalUnit
)}
/>
</OverviewSection>
{numberOfProxiesInt > 0 && (
<OverviewSection
title={`${proxies} ${getProxyUnitNamesFromDbType(dbEngineToDbType(dbCluster.spec.engine.type))[numberOfProxiesInt > 1 ? 'plural' : 'singular']}`}
title={`${proxies} ${getProxyUnitNamesFromDbType(dbEngineToDbType(dbCluster.spec.engine.type))[numberOfProxiesInt > 1 ? 'plural' : 'singular']} ${dbType === DbType.Mongo ? 'per shard' : ''}`}
loading={loading}
>
<OverviewSectionRow
dataTestId={`${getProxyUnitNamesFromDbType(dbEngineToDbType(dbCluster.spec.engine.type))[numberOfProxiesInt > 1 ? 'plural' : 'singular']}-cpu`}
label={Messages.fields.cpu}
contentString={getTotalResourcesDetailedString(
contentString={getResourcesDetailedString(
cpuParser(proxyCpu.toString() || '0'),
parseInt(proxies, 10),
'CPU'
''
)}
/>
<OverviewSectionRow
label={Messages.fields.memory}
contentString={getTotalResourcesDetailedString(
contentString={getResourcesDetailedString(
parsedProxyMemoryValues.value,
parseInt(proxies, 10),
parsedProxyMemoryValues.originalUnit
'GB'
)}
/>
</OverviewSection>
Expand Down
19 changes: 2 additions & 17 deletions ui/apps/everest/src/utils/k8ResourceParser/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,21 +67,6 @@ export const memoryParser = (
};
};

export const getTotalResourcesDetailedString = (
value: number,
numberOfNodes: number,
unit: string,
shardNr?: number,
sharding?: boolean
) => {
if (numberOfNodes === 1 && !sharding) {
return `${value.toFixed(2)} ${unit}`;
}

const totalResources =
sharding && shardNr
? value * numberOfNodes * shardNr
: value * numberOfNodes;

return `${totalResources.toFixed(2)} ${unit}`;
export const getResourcesDetailedString = (value: number, unit: string) => {
return `${value} ${unit}`;
};
Loading