From bfe8b449b98cfffcd2d168788721ac1226c83d09 Mon Sep 17 00:00:00 2001 From: Imre Toth <imre.toth@ess.eu> Date: Tue, 14 Feb 2023 13:47:06 +0000 Subject: [PATCH] Icshwi 11704 additional statistics changes --- src/api/SwaggerApi.js | 41 ++++++++----------- .../PrimeKeyValueTable/PrimeKeyValueTable.js | 13 +++++- .../HostStatistics/HostStatistics.js | 39 ++++++++++-------- .../statistics/IOCStatistics/IOCStatistics.js | 34 +++++++-------- src/views/statistics/StatisticsView.js | 5 +-- 5 files changed, 70 insertions(+), 62 deletions(-) diff --git a/src/api/SwaggerApi.js b/src/api/SwaggerApi.js index 7e079340..ecc87492 100644 --- a/src/api/SwaggerApi.js +++ b/src/api/SwaggerApi.js @@ -901,30 +901,6 @@ export function useIocStatus() { // return useAsync({ fcn: boundMethod}); // } -export function unpackStatistics(statistics) { - return { ...statistics }; -} - -export function useIocStatistics() { - const api = useContext(apiContext); - const method = useCallAndUnpack( - api.apis.Statistics.iocNumberStatistics, - unpackStatistics - ); - - return useAsync({ fcn: method, call: false }); -} - -export function useHostStatistics() { - const api = useContext(apiContext); - const method = useCallAndUnpack( - api.apis.Statistics.hostNumberStatistics, - unpackStatistics - ); - - return useAsync({ fcn: method, call: false }); -} - export function unpackNaming(naming) { return { ...naming }; } @@ -1148,3 +1124,20 @@ export function useOwnIocsWithAlarms() { return useAsync({ fcn: method, call: true, init: [] }); } + +export function unpackStatistics(statistics) { + return { ...statistics }; +} + +export function useStatistics(statisticsType) { + const api = useContext(apiContext); + const method = useCallAndUnpack( + () => + api.apis.Statistics.calculateStatistics({ + statistics_type: statisticsType + }), + unpackStatistics + ); + + return useAsync({ fcn: method, call: true }); +} diff --git a/src/components/common/PrimeKeyValueTable/PrimeKeyValueTable.js b/src/components/common/PrimeKeyValueTable/PrimeKeyValueTable.js index 948928be..37e29fc3 100644 --- a/src/components/common/PrimeKeyValueTable/PrimeKeyValueTable.js +++ b/src/components/common/PrimeKeyValueTable/PrimeKeyValueTable.js @@ -1,13 +1,24 @@ import React from "react"; import { CustomTable } from "../table/CustomTable"; +import { Skeleton } from "primereact/skeleton"; export function PrimeKeyValueTable( { obj, labels = ["Key", "Value"] }, valueWidth = "15ch" ) { + const bodyTemplate = (rowData) => { + return rowData.value ?? <Skeleton />; + }; + const defaultColumns = [ { id: "key", label: labels[0] }, - { id: "value", label: labels[1], width: valueWidth } + { + id: "value", + label: labels[1], + width: valueWidth, + body: bodyTemplate, + textAlign: "right" + } ]; // even though they are unused, we have to give the diff --git a/src/components/statistics/HostStatistics/HostStatistics.js b/src/components/statistics/HostStatistics/HostStatistics.js index f301627d..3d7feb50 100644 --- a/src/components/statistics/HostStatistics/HostStatistics.js +++ b/src/components/statistics/HostStatistics/HostStatistics.js @@ -1,33 +1,38 @@ import React from "react"; -import { useEffect } from "react"; -import { LinearProgress } from "@material-ui/core"; import { PrimeKeyValueTable } from "../../common/PrimeKeyValueTable/PrimeKeyValueTable"; -import { useHostStatistics } from "../../../api/SwaggerApi"; +import { useStatistics } from "../../../api/SwaggerApi"; export function HostStatistics() { - const [statistics, getStatistics] = useHostStatistics(); + const [hostsRegistered] = useStatistics("HOSTS_REGISTERED"); + const [hostsWithIocs] = useStatistics("HOSTS_WITH_IOCS"); + const [hostsReachable] = useStatistics("HOSTS_REACHABLE"); + const [hostsWithoutIssues] = useStatistics("HOSTS_WITHOUT_ISSUE"); - let hostStats = {}; + let hostStats = { + "Registered IOC-hosts": hostsRegistered?.value, + "IOC-hosts with IOCs": hostsWithIocs?.value, + "Reachable IOC-hosts with IOCs": hostsReachable?.value, + "Issue free IOC-hosts with IOCs": hostsWithoutIssues?.value + }; - useEffect(() => getStatistics(), [getStatistics]); - - if (statistics) { + if ( + hostsRegistered || + hostsWithIocs || + hostsReachable || + hostsWithoutIssues + ) { hostStats = { - "Registered IOC-hosts": statistics?.numOfIocHosts, - "IOC-hosts with IOCs": statistics?.numOfHostsWithIocs, - "Reachable IOC-hosts with IOCs": statistics?.numOfReachableHostsWithIocs, - "Issue free IOC-hosts with IOCs": statistics?.numOfIssueFreeHostsWithIocs + "Registered IOC-hosts": hostsRegistered?.value, + "IOC-hosts with IOCs": hostsWithIocs?.value, + "Reachable IOC-hosts with IOCs": hostsReachable?.value, + "Issue free IOC-hosts with IOCs": hostsWithoutIssues?.value }; } - return statistics ? ( + return ( <PrimeKeyValueTable obj={hostStats} labels={["Host statistics"]} /> - ) : ( - <div style={{ width: "100%" }}> - <LinearProgress color="primary" /> - </div> ); } diff --git a/src/components/statistics/IOCStatistics/IOCStatistics.js b/src/components/statistics/IOCStatistics/IOCStatistics.js index 7e5144e9..4db408c5 100644 --- a/src/components/statistics/IOCStatistics/IOCStatistics.js +++ b/src/components/statistics/IOCStatistics/IOCStatistics.js @@ -1,33 +1,33 @@ import React from "react"; -import { useEffect } from "react"; -import { LinearProgress } from "@material-ui/core"; import { PrimeKeyValueTable } from "../../common/PrimeKeyValueTable/PrimeKeyValueTable"; -import { useIocStatistics } from "../../../api/SwaggerApi"; +import { useStatistics } from "../../../api/SwaggerApi"; export function IOCStatistics() { - const [statistics, getStatistics] = useIocStatistics(); + const [iocsRegistered] = useStatistics("IOCS_REGISTERED"); + const [iocsDeployed] = useStatistics("IOCS_DEPLOYED"); + const [iocsReachable] = useStatistics("IOCS_RUNNING"); + const [iocsWithoutIssues] = useStatistics("IOCS_RUNNING_WITHOUT_ISSUE"); - let iocStats = {}; + let iocStats = { + "Registered IOCs": iocsRegistered?.value, + "Deployed IOCs": iocsDeployed?.value, + "Running IOCs": iocsReachable?.value, + "Issue-free and running IOCs": iocsWithoutIssues?.value + }; - if (statistics) { + if (iocsRegistered || iocsDeployed || iocsReachable || iocsWithoutIssues) { iocStats = { - "Registered IOCs": statistics?.numOfRegisteredIocs, - "Deployed IOCs": statistics?.numOfDeployedIocs, - "Reachable IOCs": statistics?.numOfReachableIocs, - "Issue-free IOCs": statistics?.numOfIssueFreeIocs + "Registered IOCs": iocsRegistered?.value, + "Deployed IOCs": iocsDeployed?.value, + "Running IOCs": iocsReachable?.value, + "Issue-free and running IOCs": iocsWithoutIssues?.value }; } - useEffect(() => getStatistics(), [getStatistics]); - - return statistics ? ( + return ( <PrimeKeyValueTable obj={iocStats} labels={["IOC statistics"]} /> - ) : ( - <div style={{ width: "100%" }}> - <LinearProgress color="primary" /> - </div> ); } diff --git a/src/views/statistics/StatisticsView.js b/src/views/statistics/StatisticsView.js index f501c2db..1a92ef06 100644 --- a/src/views/statistics/StatisticsView.js +++ b/src/views/statistics/StatisticsView.js @@ -35,7 +35,6 @@ export function StatisticsView() { <RootContainer> <Grid container - direction="column" spacing={theme.spacing(0.5)} > <Grid @@ -47,14 +46,14 @@ export function StatisticsView() { <Grid item - xs={12} + xs={6} > <IOCStatistics /> </Grid> <Grid item - xs={12} + xs={6} > <HostStatistics /> </Grid> -- GitLab