skyline/src/pages/monitor/containers/Overview/config.jsx
Jingwei.Zhang ec59419f4f feat: update color variables
Use color variables to set color in less and jsx, this makes it easy to change the theme for all pages.

Change-Id: I9b82c4624826854d40d11da4e6ce4a9137b86085
2023-05-25 16:44:59 +08:00

407 lines
10 KiB
JavaScript

import React from 'react';
import { get } from 'lodash';
import { Progress, Row } from 'antd';
import { computePercentage } from 'src/utils';
import {
cephStatusColorMap,
cephStatusMap,
getSuitableValue,
} from 'resources/prometheus/monitoring';
import CircleChart from 'components/PrometheusChart/CircleWithRightLegend';
import { handleResponses } from 'components/PrometheusChart/utils/dataHandler';
import { ChartType } from 'components/PrometheusChart/utils/utils';
import globalRootStore from 'stores/root';
import {
renderTopColumnChart,
renderTopColumnExtra,
renderTopProgress,
} from './components/Tops';
import styles from './index.less';
export const physicalNodeLeftTopCardList = [
{
title: t('Physical CPU Usage'),
span: 12,
createFetchParams: {
metricKey: 'monitorOverview.physicalCPUUsage',
},
renderContent: ({ data }) => {
const used = get(data[0], 'y', 0);
const total = get(data[1], 'y', 0);
return (
<div className={styles['top-content']}>
<div>
<Row
style={{
alignItems: 'baseline',
justifyContent: 'center',
}}
>
<span style={{ fontSize: 28, fontWeight: 600 }}>
{computePercentage(used, total)}
</span>
%
</Row>
<Row
style={{
alignItems: 'baseline',
justifyContent: 'center',
fontSize: 12,
}}
>
{`${used} / ${total}`}
</Row>
</div>
</div>
);
},
},
{
title: t('Total Ram'),
span: 12,
createFetchParams: {
metricKey: 'monitorOverview.physicalMemoryUsage',
},
renderContent: (store) => {
const { data } = store;
const usedValue = get(data[0], 'y', 0);
const totalValue = get(data[1], 'y', 0);
const used = getSuitableValue(usedValue, 'memory');
const total = getSuitableValue(totalValue, 'memory');
return (
<div className={styles['top-content']}>
<div>
<Row
style={{
alignItems: 'baseline',
justifyContent: 'center',
}}
>
<span style={{ fontSize: 28, fontWeight: 600 }}>
{computePercentage(usedValue, totalValue)}
</span>
%
</Row>
<Row
style={{
alignItems: 'baseline',
justifyContent: 'center',
fontSize: 12,
}}
>
{`${used} / ${total}`}
</Row>
</div>
</div>
);
},
},
{
title: t('Physical Storage Usage'),
span: 24,
createFetchParams: {
metricKey: 'monitorOverview.physicalStorageUsage',
},
renderContent: (store) => {
const { data } = store;
const usedValue = get(data[0], 'y', 0);
const totalValue = get(data[1], 'y', 0);
const used = getSuitableValue(usedValue, 'disk');
const total = getSuitableValue(totalValue, 'disk');
const progressPercentage = computePercentage(usedValue, totalValue);
return (
<div className={styles['top-content']}>
<div
style={{
width: '100%',
height: '100%',
}}
>
<Row
style={{
justifyContent: 'flex-end',
height: '50%',
}}
>
<span
style={{
fontSize: 12,
marginRight: 32,
}}
>
{`${t('Used')} ${used} / ${t('Total')} ${total}`}
</span>
</Row>
<Row style={{ height: '50%' }}>
<Progress
style={{ width: '95%' }}
percent={progressPercentage}
strokeColor={
progressPercentage > 80
? globalCSS.warnDarkColor
: globalCSS.primaryColor
}
showInfo={progressPercentage !== 100}
/>
</Row>
</div>
</div>
);
},
},
];
export const physicalNodeRightTopCardList = [
{
visibleHeight: 319,
createFetchParams: {
requestType: 'current',
metricKey: 'monitorOverview.computeNodeStatus',
},
handleDataParams: {
formatDataFn: (responses) => {
const status = [
{
type: 'up',
value: 0,
},
{
type: 'down',
value: 0,
},
];
const result = get(responses[0], 'data.result', []);
result.forEach((r) => {
const idx = r.metric.adminState === 'enabled' ? 0 : 1;
status[idx].value += parseInt(r.value[1], 10);
});
return status;
},
},
title: t('Compute Node status'),
renderContent: ({ data }) => (
<div style={{ height: 309 }}>
<CircleChart data={data} />
</div>
),
},
];
export const topCardList = [
{
title: t('Host CPU Usage'),
span: 12,
createFetchParams: {
metricKey: 'monitorOverview.topHostCPUUsage',
},
handleDataParams: {
typeKey: 'instance',
},
renderContent: renderTopProgress,
},
{
title: t('Host Disk Average IOPS'),
span: 12,
createFetchParams: {
metricKey: 'monitorOverview.topHostDiskIOPS',
},
handleDataParams: {
formatDataFn: (reps, tk, dk, mk) => {
const data = [];
reps.forEach((ret, resIdx) => {
(ret.data.result || []).forEach((d) => {
data.push({
x: d.metric.instance,
y: parseFloat(get(d, 'value[1]', 0)),
type: mk[resIdx],
});
});
});
return data;
},
modifyKeys: [t('read'), t('write')],
},
extra: renderTopColumnExtra,
renderContent: renderTopColumnChart,
},
{
title: t('Host Memory Usage'),
span: 12,
createFetchParams: {
metricKey: 'monitorOverview.topHostMemoryUsage',
},
handleDataParams: {
typeKey: 'instance',
},
renderContent: renderTopProgress,
},
{
title: t('Host Average Network IO'),
span: 12,
createFetchParams: {
metricKey: 'monitorOverview.topHostInterface',
},
handleDataParams: {
formatDataFn: (reps, tk, dk, mk) => {
const data = [];
reps.forEach((ret, resIdx) => {
(ret.data.result || []).forEach((d) => {
data.push({
x: d.metric.instance,
y: parseFloat(get(d, 'value[1]', 0)),
type: mk[resIdx],
});
});
});
return data;
},
modifyKeys: [t('receive'), t('transmit')],
},
extra: renderTopColumnExtra,
renderContent: (p) => {
const Cmp = renderTopColumnChart(p);
return React.cloneElement(Cmp, {
...Cmp.props,
scale: {
y: {
nice: true,
formatter: (d) => getSuitableValue(d, 'traffic', 0),
},
},
});
},
},
];
export const storageLeftCardList = [
{
title: t('Storage Cluster Status'),
span: 24,
createFetchParams: {
metricKey: 'monitorOverview.cephHealthStatus',
},
renderContent: (store) => {
const data = get(store.data, 'y', 0);
return (
<div
className={styles['top-content']}
style={{
fontSize: 28,
fontWeight: 600,
color: cephStatusColorMap[data],
height: 65,
}}
>
{cephStatusMap[data]}
</div>
);
},
},
{
title: t('Storage Cluster Usage'),
span: 12,
createFetchParams: {
metricKey: 'monitorOverview.cephStorageUsage',
},
renderContent: (store) => {
const { data } = store;
const usedValue = get(data[0], 'y', 0);
const totalValue = get(data[1], 'y', 0);
const used = getSuitableValue(usedValue, 'disk');
const total = getSuitableValue(totalValue, 'disk');
return (
<div className={styles['top-content']}>
<div>
<Row
style={{
alignItems: 'baseline',
justifyContent: 'center',
}}
>
<span style={{ fontSize: 28, fontWeight: 600 }}>
{computePercentage(usedValue, totalValue)}
</span>
%
</Row>
<Row
style={{
alignItems: 'baseline',
justifyContent: 'center',
fontSize: 12,
}}
>
{`${used} / ${total}`}
</Row>
</div>
</div>
);
},
},
{
title: t('Disk allocation (GiB)'),
span: 12,
createFetchParams: {
metricKey: 'monitorOverview.cephStorageAllocate',
},
renderContent: (store) => {
const { data } = store;
const totalValue = parseFloat(get(data[1], 'y', 0).toFixed(2));
const usedValue = parseFloat(
(totalValue - get(data[0], 'y', 0)).toFixed(2)
);
return (
<div className={styles['top-content']}>
<div>
<Row
style={{
alignItems: 'baseline',
justifyContent: 'center',
}}
>
<span style={{ fontSize: 28, fontWeight: 600 }}>
{computePercentage(usedValue, totalValue)}
</span>
%
</Row>
<Row
style={{
alignItems: 'baseline',
justifyContent: 'center',
fontSize: 12,
}}
>
{`${usedValue} GiB / ${totalValue} GiB`}
</Row>
</div>
</div>
);
},
hidden: !globalRootStore.checkEndpoint('cinder'),
},
];
export const storageRightChartList = [
{
title: t('Storage Cluster IOPS'),
createFetchParams: {
requestType: 'range',
metricKey: 'monitorOverview.cephStorageClusterIOPS',
},
handleDataParams: {
formatDataFn: handleResponses,
modifyKeys: [t('read'), t('write')],
},
span: 24,
chartProps: {
chartType: ChartType.MULTILINE,
height: 318,
scale: {
y: {
nice: true,
},
},
},
},
];