import { matchesFirewallFailure, type FirewallFailure } from "./firewall-response" export type FirewallSliceTime = { serverId: string; family: "ip" | "ip6"; table: string; receivedAt: string | null } export function updateFirewallSliceTimes(previous: FirewallSliceTime[], serverIds: string[], failures: FirewallFailure[], receivedAt: string): FirewallSliceTime[] { return serverIds.flatMap(serverId => (["ip", "ip6"] as const).flatMap(family => ["filter", "nat", "mangle", "raw", "address-list"].map(table => { const slice = { serverId, family, table } const old = previous.find(row => row.serverId === serverId && row.family === family && row.table === table) return { ...slice, receivedAt: failures.some(f => matchesFirewallFailure(f, slice)) ? old?.receivedAt ?? null : receivedAt } }))) } export function firewallTimeRange(slices: FirewallSliceTime[]) { const times = slices.flatMap(slice => slice.receivedAt ? [slice.receivedAt] : []).sort() return { oldest: times[0], newest: times.at(-1), unknown: slices.filter(slice => !slice.receivedAt).length } }