fix: handle filtering for global status

pull/101/head
Bennet Gallein 2025-04-19 17:19:29 +02:00
parent edb092968a
commit 1e1cb90f91
No known key found for this signature in database
GPG Key ID: 54F2DF6954E8C635
1 changed files with 21 additions and 7 deletions

View File

@ -1,4 +1,4 @@
import { Maintenances } from '@/types/config' import { Maintenances, Monitor } from '@/types/config'
import { Alert, Card, Center, Container, List, ListItem, Text, Title } from '@mantine/core' import { Alert, Card, Center, Container, List, ListItem, Text, Title } from '@mantine/core'
import { IconCircleCheck, IconAlertCircle, IconInfoCircle } from '@tabler/icons-react' import { IconCircleCheck, IconAlertCircle, IconInfoCircle } from '@tabler/icons-react'
import { useEffect, useState } from 'react' import { useEffect, useState } from 'react'
@ -25,9 +25,11 @@ function useWindowVisibility() {
export default function OverallStatus({ export default function OverallStatus({
state, state,
maintenances, maintenances,
monitors,
}: { }: {
state: { overallUp: number; overallDown: number; lastUpdate: number } state: { overallUp: number; overallDown: number; lastUpdate: number }
maintenances?: Maintenances[] maintenances: Maintenances[]
monitors: Monitor[]
}) { }) {
let statusString = '' let statusString = ''
let icon = <IconAlertCircle style={{ width: 64, height: 64, color: '#b91c1c' }} /> let icon = <IconAlertCircle style={{ width: 64, height: 64, color: '#b91c1c' }} />
@ -63,8 +65,20 @@ export default function OverallStatus({
return () => clearInterval(interval) return () => clearInterval(interval)
}) })
// @TODO make dynamic const now = new Date()
const showMaintenance = maintenances let filteredMaintenances: (Omit<Maintenances, 'monitors'> & {
monitors: Monitor[] | undefined
})[] = (maintenances || [])
.filter((m) => (!m.start && !m.end) || (m.start && m.end && now >= m.start && now <= m.end))
.map((maintenance) => {
// enrich maintenace with monitor
return {
...maintenance,
monitors: maintenance.monitors?.map(
(monitorId) => monitors.find((mon) => monitorId === mon.id)!
),
}
})
return ( return (
<> <>
@ -79,8 +93,8 @@ export default function OverallStatus({
currentTime - state.lastUpdate currentTime - state.lastUpdate
} sec ago)`} } sec ago)`}
</Title> </Title>
{showMaintenance && {filteredMaintenances &&
maintenances.map((maintenance, idx) => ( filteredMaintenances.map((maintenance, idx) => (
<Alert <Alert
key={idx} key={idx}
icon={<IconInfoCircle />} icon={<IconInfoCircle />}
@ -110,7 +124,7 @@ export default function OverallStatus({
</Text> </Text>
<List size="sm" withPadding> <List size="sm" withPadding>
{maintenance.monitors.map((comp, compIdx) => ( {maintenance.monitors.map((comp, compIdx) => (
<List.Item key={compIdx}>{comp}</List.Item> <List.Item key={compIdx}>{comp.name}</List.Item>
))} ))}
</List> </List>
</> </>