Refine AdminStatusOverview calculations
cgen-0fbe4fe97e934bb597f4e1ca337dd3f9
This commit is contained in:
parent
7a5ecf22ab
commit
a5641ecf73
1 changed files with 17 additions and 7 deletions
|
|
@ -44,25 +44,35 @@ export default function AdminStatusOverview({
|
||||||
)
|
)
|
||||||
: null;
|
: null;
|
||||||
|
|
||||||
|
const uptimeAccumulator = services.reduce(
|
||||||
|
(acc, service) => {
|
||||||
|
const asNumber = Number.parseFloat(service.uptime);
|
||||||
|
if (Number.isFinite(asNumber)) {
|
||||||
|
return { total: acc.total + asNumber, count: acc.count + 1 };
|
||||||
|
}
|
||||||
|
return acc;
|
||||||
|
},
|
||||||
|
{ total: 0, count: 0 },
|
||||||
|
);
|
||||||
|
|
||||||
const averageUptime =
|
const averageUptime =
|
||||||
services.length > 0
|
uptimeAccumulator.count > 0
|
||||||
? services.reduce((total, service) => {
|
? uptimeAccumulator.total / uptimeAccumulator.count
|
||||||
const asNumber = Number.parseFloat(service.uptime);
|
|
||||||
return Number.isFinite(asNumber) ? total + asNumber : total;
|
|
||||||
}, 0) / services.length
|
|
||||||
: null;
|
: null;
|
||||||
|
|
||||||
const healthyServices = services.filter(
|
const healthyServices = services.filter(
|
||||||
(service) => service.status === "operational",
|
(service) => service.status === "operational",
|
||||||
).length;
|
).length;
|
||||||
|
|
||||||
|
const OverallIcon = overall.Icon;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Card className="bg-card/60 border-border/40 backdrop-blur">
|
<Card className="bg-card/60 border-border/40 backdrop-blur">
|
||||||
<CardHeader className="space-y-4">
|
<CardHeader className="space-y-4">
|
||||||
<div className="flex flex-wrap items-center justify-between gap-4">
|
<div className="flex flex-wrap items-center justify-between gap-4">
|
||||||
<div className="flex items-center gap-3">
|
<div className="flex items-center gap-3">
|
||||||
<div className={`${overall.badgeClass} flex h-10 w-10 items-center justify-center rounded-full border`}>
|
<div className={`${overall.badgeClass} flex h-10 w-10 items-center justify-center rounded-full border`}>
|
||||||
<overall.Icon className="h-5 w-5" />
|
<OverallIcon className="h-5 w-5" />
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<CardTitle className="text-lg">System health</CardTitle>
|
<CardTitle className="text-lg">System health</CardTitle>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue