ora/src/dashboard/pages/Dashboard.svelte

69 lines
1.4 KiB
Svelte
Raw Normal View History

2020-09-20 17:28:09 +02:00
<script>
import { onMount } from 'svelte'
import Chart from '../components/Chart.svelte'
import RangeChooser from '../components/RangeChooser.svelte'
2020-09-20 22:24:57 +02:00
import { data, countInGroup } from '../../shared/lib'
2020-09-20 17:28:09 +02:00
let top = 15
let full = 50
let loading = true
let counted = []
2020-09-20 18:24:22 +02:00
let timeout
2020-09-20 17:28:09 +02:00
let start
let end
async function calculate() {
try {
loading = true
const logs = await data({
start,
2020-09-20 18:24:22 +02:00
end,
2020-09-20 17:28:09 +02:00
})
counted = countInGroup(logs)
} finally {
loading = false
}
}
2020-09-20 18:24:22 +02:00
$: topData = counted.slice(0, top).map(({ total, host, human }) => ({ value: total, name: host, human }))
$: {
2020-09-20 17:28:09 +02:00
start, end
2020-09-20 18:24:22 +02:00
clearTimeout(timeout)
timeout = setTimeout(calculate, 5)
2020-09-20 17:28:09 +02:00
}
2020-09-20 18:24:22 +02:00
onMount(calculate)
2020-09-20 17:28:09 +02:00
</script>
<style>
</style>
<div class="flex justify-between items-center mb-4">
<h2 class="text-2xl">Dashboard</h2>
<RangeChooser bind:start bind:end />
</div>
{#if loading}
<div class="loading loading-lg" />
{:else if counted}
<h2 class="text-lg">Top {top}</h2>
<Chart data={topData} />
<h2 class="text-lg mt-4">Top {full}</h2>
<table class="table">
<tr>
<th>Time Spent</th>
<th>Host</th>
</tr>
{#each counted.slice(0, 100) as { host, total, human }}
<tr>
<td>{human}</td>
<td class="link"><a href={'https://' + host}>{host}</a></td>
</tr>
{/each}
</table>
{/if}