From bacdcfe973ec6cbdcef8b5ff41b759e56af49fa8 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Wed, 2 Nov 2022 13:50:33 +0100 Subject: [PATCH] fix: realtime stats --- src/lib/charts/base.svelte | 1 + src/lib/layout/usage.svelte | 72 ++++++++++--------- .../console/project-[project]/+layout.svelte | 21 ++++++ .../project-[project]/overview/+layout.svelte | 64 +++++++++-------- src/routes/console/project-[project]/store.ts | 36 +++++++++- 5 files changed, 132 insertions(+), 62 deletions(-) diff --git a/src/lib/charts/base.svelte b/src/lib/charts/base.svelte index 54d8e2907..91a5064a0 100644 --- a/src/lib/charts/base.svelte +++ b/src/lib/charts/base.svelte @@ -86,5 +86,6 @@ .echart { width: 100%; min-height: 12rem; + height: 100%; } diff --git a/src/lib/layout/usage.svelte b/src/lib/layout/usage.svelte index 8b07ff126..a2c5860c4 100644 --- a/src/lib/layout/usage.svelte +++ b/src/lib/layout/usage.svelte @@ -75,14 +75,16 @@ {total(created)}

{createdMetadata.title}

- [e.date, e.value])], - color: Colors.Secondary - } - ]} /> +
+ [e.date, e.value])], + color: Colors.Secondary + } + ]} /> +
{/if} @@ -90,14 +92,16 @@ {total(read)}

{readMetadata.title}

- [e.date, e.value])], - color: Colors.Tertiary - } - ]} /> +
+ [e.date, e.value])], + color: Colors.Tertiary + } + ]} /> +
{/if} @@ -105,14 +109,16 @@ {total(updated)}

{updatedMetadata.title}

- [e.date, e.value])], - color: Colors.Quaternary - } - ]} /> +
+ [e.date, e.value])], + color: Colors.Quaternary + } + ]} /> +
{/if} @@ -120,14 +126,16 @@ {total(deleted)}

{deletedMetadata.title}

- [e.date, e.value])], - color: Colors.Quinary - } - ]} /> +
+ [e.date, e.value])], + color: Colors.Quinary + } + ]} /> +
{/if} diff --git a/src/routes/console/project-[project]/+layout.svelte b/src/routes/console/project-[project]/+layout.svelte index 6b69070e6..004daed0f 100644 --- a/src/routes/console/project-[project]/+layout.svelte +++ b/src/routes/console/project-[project]/+layout.svelte @@ -1,5 +1,26 @@ diff --git a/src/routes/console/project-[project]/overview/+layout.svelte b/src/routes/console/project-[project]/overview/+layout.svelte index 87145363e..c76947b11 100644 --- a/src/routes/console/project-[project]/overview/+layout.svelte +++ b/src/routes/console/project-[project]/overview/+layout.svelte @@ -2,9 +2,7 @@ import type { Models } from '@aw-labs/appwrite-console'; import { Container, type UsagePeriods } from '$lib/layout'; import { page } from '$app/stores'; - import { browser } from '$app/environment'; - import { sdkForConsole } from '$lib/stores/sdk'; - import { project } from '../store'; + import { project, stats } from '../store'; import { usage } from './store'; import { onMount } from 'svelte'; import { afterNavigate } from '$app/navigation'; @@ -14,7 +12,7 @@ $: projectId = $page.params.project; $: path = `/console/project-${projectId}/overview`; - + $: console.log($stats.get(projectId)); let period: UsagePeriods = '30d'; let showPeriodBandwidth = false; let showPeriodRequests = false; @@ -55,15 +53,6 @@ showPeriodRequests = false; } - if (browser) { - sdkForConsole.client.subscribe('console', (message) => { - if (message.events.includes('stats.connections')) { - // TODO: take care of realtime connections - return; - } - }); - } - //TODO: workaround for broken types $: network = $usage?.network as unknown as Array<{ date: number; @@ -119,13 +108,15 @@
{#if network.length} - [e.date, e.value])] - } - ]} /> +
+ [e.date, e.value])] + } + ]} /> +
{/if}
@@ -160,13 +151,15 @@
{#if network.length} - [e.date, e.value])] - } - ]} /> +
+ [e.date, e.value])] + } + ]} /> +
{/if}
@@ -262,8 +255,21 @@
-
XX
-
Realtime Connections
+ {#if $stats.get(projectId)} +
+ {format($stats.get(projectId)[11][1])} +
+
Realtime Connections
+ + {:else} +
waiting for realtime connections
+ {/if}
diff --git a/src/routes/console/project-[project]/store.ts b/src/routes/console/project-[project]/store.ts index c1ca42ac1..97c2372ec 100644 --- a/src/routes/console/project-[project]/store.ts +++ b/src/routes/console/project-[project]/store.ts @@ -1,5 +1,39 @@ -import { derived } from 'svelte/store'; +import { derived, writable } from 'svelte/store'; import { page } from '$app/stores'; import type { Models } from '@aw-labs/appwrite-console'; +import type { BarSeriesOption } from 'echarts/charts'; export const project = derived(page, ($page) => $page.data.project as Models.Project); + +function createStats() { + const { subscribe, set, update } = writable>(new Map()); + + return { + subscribe, + add: (projectId: string, data: BarSeriesOption['data'][number]) => + update((n) => { + let series = n.get(projectId) ?? []; + + if (series.length === 0) { + const date = new Date(data[0]); + for (let i = 0; i < 12; i++) { + series.push([date.toISOString(), 0]); + date.setSeconds(date.getSeconds() - 5); + } + } + + series.push(data); + + if (series.length > 12) { + series = series.slice(-12); + } + + n.set(projectId, series); + + return n; + }), + reset: () => set(new Map()) + }; +} + +export const stats = createStats();