feat: database activity

This commit is contained in:
Torsten Dittmann
2022-10-27 14:37:23 +02:00
parent 354afee635
commit f593346dbd
6 changed files with 244 additions and 7 deletions
@@ -0,0 +1,100 @@
<script lang="ts">
import { Empty, Pagination } from '$lib/components';
import { Button } from '$lib/elements/forms';
import {
Table,
TableBody,
TableHeader,
TableRow,
TableCellHead,
TableCell,
TableCellText
} from '$lib/elements/table';
import { Container } from '$lib/layout';
import { toLocaleDateTime } from '$lib/helpers/date';
import { sdkForProject } from '$lib/stores/sdk';
import type { PageData } from './$types';
import { PAGE_LIMIT } from '$lib/constants';
import { page } from '$app/stores';
export let data: PageData;
const getBrowser = (clientCode: string) => sdkForProject.avatars.getBrowser(clientCode, 80, 80);
</script>
<Container>
{#if data.logs.total}
<Table>
<TableHeader>
<TableCellHead>Client</TableCellHead>
<TableCellHead>Event</TableCellHead>
<TableCellHead>Location</TableCellHead>
<TableCellHead>IP</TableCellHead>
<TableCellHead>Date</TableCellHead>
</TableHeader>
<TableBody>
{#each data.logs.logs as log}
<TableRow>
<TableCell title="Client">
{#if log.clientName}
<div class="u-flex u-cross-center u-gap-12">
<div class="avatar is-small">
<img
height="20"
width="20"
src={getBrowser(log.clientCode).toString()}
alt={log.clientName} />
</div>
<p class="text u-trim">
{log.clientName}
{log.clientVersion}
on {log.osName}
{log.osVersion}
</p>
</div>
{:else}
<div class="u-flex u-cross-center u-gap-12">
<p class="text u-trim">
<span class="avatar is-color-empty" />
Unknown
</p>
</div>
{/if}
</TableCell>
<TableCellText title="Event">{log.event}</TableCellText>
<TableCellText title="Location">
{#if log.countryCode !== '--'}
{log.countryName}
{:else}
Unknown
{/if}
</TableCellText>
<TableCellText title="IP">{log.ip}</TableCellText>
<TableCellText title="Date">{toLocaleDateTime(log.time)}</TableCellText>
</TableRow>
{/each}
</TableBody>
</Table>
{:else}
<Empty>
<div class="u-flex u-flex-vertical u-cross-center">
<div class="common-section">
<p>No logs available</p>
</div>
<div class="common-section">
<Button external secondary href="https://appwrite.io/docs/server/database">
Documentation
</Button>
</div>
</div>
</Empty>
{/if}
<div class="u-flex u-margin-block-start-32 u-main-space-between">
<p class="text">Total results: {data.logs.total}</p>
<Pagination
limit={PAGE_LIMIT}
path={`/console/project-${$page.params.project}/authentication/databases/database-${$page.params.team}/collection-${$page.params.collection}/document-${$page.params.document}/activity`}
offset={data.offset}
sum={data.logs.total} />
</div>
</Container>
@@ -0,0 +1,19 @@
import { Query } from '@aw-labs/appwrite-console';
import { sdkForProject } from '$lib/stores/sdk';
import { pageToOffset } from '$lib/helpers/load';
import { PAGE_LIMIT } from '$lib/constants';
import type { PageLoad } from './$types';
export const load: PageLoad = async ({ params, parent }) => {
await parent();
const page = Number(params.page);
const offset = pageToOffset(page, PAGE_LIMIT);
return {
offset,
logs: sdkForProject.databases.listCollectionLogs(params.database, params.collection, [
Query.limit(PAGE_LIMIT),
Query.offset(offset)
])
};
};
@@ -1,7 +0,0 @@
<script>
import { Card } from '$lib/components';
</script>
<h1>Activity</h1>
<Card />
@@ -0,0 +1,100 @@
<script lang="ts">
import { Empty, Pagination } from '$lib/components';
import { Button } from '$lib/elements/forms';
import {
Table,
TableBody,
TableHeader,
TableRow,
TableCellHead,
TableCell,
TableCellText
} from '$lib/elements/table';
import { Container } from '$lib/layout';
import { toLocaleDateTime } from '$lib/helpers/date';
import { sdkForProject } from '$lib/stores/sdk';
import type { PageData } from './$types';
import { PAGE_LIMIT } from '$lib/constants';
import { page } from '$app/stores';
export let data: PageData;
const getBrowser = (clientCode: string) => sdkForProject.avatars.getBrowser(clientCode, 80, 80);
</script>
<Container>
{#if data.logs.total}
<Table>
<TableHeader>
<TableCellHead>Client</TableCellHead>
<TableCellHead>Event</TableCellHead>
<TableCellHead>Location</TableCellHead>
<TableCellHead>IP</TableCellHead>
<TableCellHead>Date</TableCellHead>
</TableHeader>
<TableBody>
{#each data.logs.logs as log}
<TableRow>
<TableCell title="Client">
{#if log.clientName}
<div class="u-flex u-cross-center u-gap-12">
<div class="avatar is-small">
<img
height="20"
width="20"
src={getBrowser(log.clientCode).toString()}
alt={log.clientName} />
</div>
<p class="text u-trim">
{log.clientName}
{log.clientVersion}
on {log.osName}
{log.osVersion}
</p>
</div>
{:else}
<div class="u-flex u-cross-center u-gap-12">
<p class="text u-trim">
<span class="avatar is-color-empty" />
Unknown
</p>
</div>
{/if}
</TableCell>
<TableCellText title="Event">{log.event}</TableCellText>
<TableCellText title="Location">
{#if log.countryCode !== '--'}
{log.countryName}
{:else}
Unknown
{/if}
</TableCellText>
<TableCellText title="IP">{log.ip}</TableCellText>
<TableCellText title="Date">{toLocaleDateTime(log.time)}</TableCellText>
</TableRow>
{/each}
</TableBody>
</Table>
{:else}
<Empty>
<div class="u-flex u-flex-vertical u-cross-center">
<div class="common-section">
<p>No logs available</p>
</div>
<div class="common-section">
<Button external secondary href="https://appwrite.io/docs/server/database">
Documentation
</Button>
</div>
</div>
</Empty>
{/if}
<div class="u-flex u-margin-block-start-32 u-main-space-between">
<p class="text">Total results: {data.logs.total}</p>
<Pagination
limit={PAGE_LIMIT}
path={`/console/project-${$page.params.project}/authentication/databases/database-${$page.params.team}/collection-${$page.params.collection}/document-${$page.params.document}/activity`}
offset={data.offset}
sum={data.logs.total} />
</div>
</Container>
@@ -0,0 +1,21 @@
import { Query } from '@aw-labs/appwrite-console';
import { sdkForProject } from '$lib/stores/sdk';
import { pageToOffset } from '$lib/helpers/load';
import { PAGE_LIMIT } from '$lib/constants';
import type { PageLoad } from './$types';
export const load: PageLoad = async ({ params, parent }) => {
await parent();
const page = Number(params.page);
const offset = pageToOffset(page, PAGE_LIMIT);
return {
offset,
logs: sdkForProject.databases.listDocumentLogs(
params.database,
params.collection,
params.document,
[Query.limit(PAGE_LIMIT), Query.offset(offset)]
)
};
};
@@ -22,6 +22,10 @@
href: `${path}/indexes`,
title: 'Indexes'
},
{
href: `${path}/activity`,
title: 'Activity'
},
{
href: `${path}/usage`,
title: 'Usage'