summaryrefslogtreecommitdiffstatshomepage
path: root/frontend/src/routes/statistics
diff options
context:
space:
mode:
authorWolfgang Müller2025-01-19 18:30:28 +0100
committerWolfgang Müller2025-01-19 23:36:36 +0100
commit91cfd5d306aedb4bdcc1c4045611bee7d2270462 (patch)
tree1e88be6e7757169a9cae7651bc7c4d558e7f7604 /frontend/src/routes/statistics
parent261ceaa057742fc70c52885021221d7a89c28af7 (diff)
downloadhircine-91cfd5d306aedb4bdcc1c4045611bee7d2270462.tar.gz
frontend: Add basic statistics page
Diffstat (limited to 'frontend/src/routes/statistics')
-rw-r--r--frontend/src/routes/statistics/+page.svelte43
-rw-r--r--frontend/src/routes/statistics/+page.ts1
2 files changed, 44 insertions, 0 deletions
diff --git a/frontend/src/routes/statistics/+page.svelte b/frontend/src/routes/statistics/+page.svelte
new file mode 100644
index 0000000..7497bcf
--- /dev/null
+++ b/frontend/src/routes/statistics/+page.svelte
@@ -0,0 +1,43 @@
+<script lang="ts">
+ import { statisticsQuery } from '$gql/Queries';
+ import Head from '$lib/components/Head.svelte';
+ import Stat from '$lib/statistics/Stat.svelte';
+ import StatGroup from '$lib/statistics/StatGroup.svelte';
+ import { getContextClient } from '@urql/svelte';
+
+ $: query = statisticsQuery(getContextClient());
+ $: totals = $query.data?.statistics.total;
+</script>
+
+<Head section="Statistics" />
+
+{#if $query.data && totals}
+ <div class="flex flex-row flex-wrap gap-8">
+ <StatGroup title="Content">
+ <Stat title="Archives" value={totals.archives} />
+ <Stat title="Comics" value={totals.comics} />
+ <Stat title="Images" value={totals.images} />
+ <Stat title="Pages" value={totals.pages} />
+ <Stat title="Dedup" value={(1 - totals.images / totals.pages) * 100} precision={2} unit="%" />
+ </StatGroup>
+ <StatGroup title="Metadata">
+ <Stat title="Namespaces" value={totals.namespaces} />
+ <Stat title="Tags" value={totals.tags} />
+ <Stat title="Artists" value={totals.artists} />
+ <Stat title="Circles" value={totals.circles} />
+ <Stat title="Characters" value={totals.characters} />
+ <Stat title="Worlds" value={totals.worlds} />
+ </StatGroup>
+ <StatGroup title="Average per Comic">
+ <Stat title="Tags" value={totals.comic.tags / totals.comics} precision={2} />
+ <Stat title="Artists" value={totals.comic.artists / totals.comics} precision={2} />
+ <Stat title="Circles" value={totals.comic.circles / totals.comics} precision={2} />
+ <Stat title="Characters" value={totals.comic.characters / totals.comics} precision={2} />
+ <Stat title="Worlds" value={totals.comic.worlds / totals.comics} precision={2} />
+ </StatGroup>
+ <StatGroup title="Average per Archive">
+ <Stat title="Comics" value={totals.comics / totals.archives} precision={2} />
+ <Stat title="Images" value={totals.images / totals.archives} precision={2} />
+ </StatGroup>
+ </div>
+{/if}
diff --git a/frontend/src/routes/statistics/+page.ts b/frontend/src/routes/statistics/+page.ts
new file mode 100644
index 0000000..d3c3250
--- /dev/null
+++ b/frontend/src/routes/statistics/+page.ts
@@ -0,0 +1 @@
+export const trailingSlash = 'always';