diff --git a/web/src/lib/components/data-table/data-table-card.svelte b/web/src/lib/components/data-table/data-table-card.svelte index c87bd40..c3dfe00 100644 --- a/web/src/lib/components/data-table/data-table-card.svelte +++ b/web/src/lib/components/data-table/data-table-card.svelte @@ -21,7 +21,7 @@ {#if title} - + {title} {#if description} {description} diff --git a/web/src/lib/components/kpi-trend-card.svelte b/web/src/lib/components/kpi-trend-card.svelte index 61c56a9..e21d2e8 100644 --- a/web/src/lib/components/kpi-trend-card.svelte +++ b/web/src/lib/components/kpi-trend-card.svelte @@ -62,13 +62,13 @@
- {label} + {label} {#if trend} >({}); - type FleetKpiPrev = { - serversOk: number; - serversTotal: number; - connections: number; - bad: number; - uniqueIp: number; - megabytes: number; - readOnly: number; - }; - - let kpiPrev = $state(null); - function sumBad(stats: typeof nodeStats): number { let n = 0; for (const v of Object.values(stats)) { @@ -139,17 +133,6 @@ fetchAggFleetStatus({ aliases: aliasFilter === 'all' ? undefined : aliasFilter }), fetchAggUniqueIps({ aliases: aliasFilter === 'all' ? undefined : aliasFilter, geo: true }) ]); - if (summary !== null && fleet !== null) { - kpiPrev = { - serversOk: fleet.servers_all_ok ?? summary.servers_ok, - serversTotal: fleet.servers_total ?? summary.servers_total, - connections: summary.fleet_total_connections, - bad: sumBad(nodeStats), - uniqueIp: countUniqueIps(uniqueIps), - megabytes: summary.fleet_total_megabytes, - readOnly: countReadOnlyNodes(fleet) - }; - } generatedAt = s.generated_at; partial = !!(s.partial || f.partial || u.partial); summary = s.data; @@ -520,15 +503,13 @@
-

- Telemt multi-server overview -

Обзор флота

- {#if generatedAt} -

- Снимок: {new Date(generatedAt).toLocaleString()} -

- {/if} +

+ Состояние нод и агрегированные метрики Telemt + {#if generatedAt} + + {/if} +

@@ -563,16 +544,7 @@ {#snippet skeleton()}
{#each Array.from({ length: 6 }) as _, i (i)} - - - - - - - - - - + {/each}
@@ -583,50 +555,52 @@ {@const okN = fleet?.servers_all_ok ?? summary.servers_ok} {@const totN = fleet?.servers_total ?? summary.servers_total}
- - + {#snippet icon()} +
(r.total_megabytes ?? 0) > 0).length); let countActive = $derived(rows.filter((r) => (r.active_unique_ips ?? 0) > 0).length); +let sumTraffic = $derived.by(() => + rows.reduce((acc, row) => acc + (row.total_megabytes ?? 0), 0) +); +let sumActiveIps = $derived.by(() => + rows.reduce((acc, row) => acc + (row.active_unique_ips ?? 0), 0) +); let tabFilteredRows = $derived.by(() => { if (usersViewTab === 'traffic') return rows.filter((r) => (r.total_megabytes ?? 0) > 0); @@ -389,6 +400,33 @@ {/snippet} {#snippet children()} +
+ + {#snippet icon()} + + + {#snippet icon()} + + + {#snippet icon()} + + + {#snippet icon()} + +
+ {#snippet toolbar()}