diff --git a/frontend/src/lib/components/auditLogs/AuditLogsFilters.svelte b/frontend/src/lib/components/auditLogs/AuditLogsFilters.svelte index dcc0ee1000..0da67ef43e 100644 --- a/frontend/src/lib/components/auditLogs/AuditLogsFilters.svelte +++ b/frontend/src/lib/components/auditLogs/AuditLogsFilters.svelte @@ -4,13 +4,21 @@ import Button from '$lib/components/common/button/Button.svelte' import CalendarPicker from '$lib/components/common/calendarPicker/CalendarPicker.svelte' - import { AuditLog, AuditService, UserService } from '$lib/gen' + import { + AuditLog, + AuditService, + ResourceService, + UserService, + type ListableResource + } from '$lib/gen' import { userStore, workspaceStore } from '$lib/stores' import { Loader2, RefreshCcw } from 'lucide-svelte' import { onDestroy } from 'svelte' + import AutoComplete from 'simple-svelte-autocomplete' let usernames: string[] + let resources: ListableResource[] let loading: boolean = false export let logs: AuditLog[] = [] @@ -20,7 +28,7 @@ export let after: string | undefined = undefined export let perPage: number | undefined = 100 export let operation: string = 'all' - export let resource: string | undefined = undefined + export let resource: string | undefined = 'all' export let actionKind: ActionKind | 'all' = 'all' async function loadLogs( @@ -47,6 +55,10 @@ actionKind = undefined } + if (resource == 'all' || resource == '') { + resource = undefined + } + logs = await AuditService.listAuditLogs({ workspace: $workspaceStore!, page, @@ -69,9 +81,16 @@ : [$userStore?.username ?? ''] } + async function loadResources() { + resources = await ResourceService.listResource({ + workspace: $workspaceStore! + }) + } + $: { if ($workspaceStore && refresh) { loadUsers() + loadResources() loadLogs(username, pageIndex, perPage, before, after, operation, resource, actionKind) } } @@ -159,6 +178,7 @@ perPage = Number(urlSearchParams.get('perPage')) || 100 operation = urlSearchParams.get('operation') ?? 'all' resource = urlSearchParams.get('resource') ?? undefined + actionKind = (urlSearchParams.get('actionKind') as ActionKind) ?? 'all' } @@ -256,7 +276,7 @@ let refresh = 1 -
+
After @@ -299,6 +319,18 @@ {/if}
+
+ Resource + + r.path) ?? []} + value={resource} + bind:selectedItem={resource} + inputClassName="!h-[34px] py-1 !text-xs !w-48" + hideArrow + dropdownClassName="!text-sm !w-48 !max-w-48" + /> +
Operation @@ -334,6 +366,7 @@ actionKind = 'all' pageIndex = 1 perPage = 100 + resource = 'all' }} size="xs" > diff --git a/frontend/src/lib/components/auditLogs/AuditLogsTable.svelte b/frontend/src/lib/components/auditLogs/AuditLogsTable.svelte index 8c292e2453..8da641beac 100644 --- a/frontend/src/lib/components/auditLogs/AuditLogsTable.svelte +++ b/frontend/src/lib/components/auditLogs/AuditLogsTable.svelte @@ -7,6 +7,8 @@ import type { AuditLog } from '$lib/gen' import { displayDate } from '$lib/utils' import { createEventDispatcher } from 'svelte' + import Button from '../common/button/Button.svelte' + import { ListFilter } from 'lucide-svelte' export let logs: AuditLog[] = [] export let pageIndex: number | undefined = 1 @@ -14,6 +16,8 @@ export let actionKind: string | undefined = undefined export let operation: string | undefined = undefined export let selectedId: number | undefined = undefined + export let usernameFilter: string | undefined = undefined + export let resourceFilter: string | undefined = undefined function groupLogsByDay(logs: AuditLog[]): Record { const groupedLogs = {} @@ -103,8 +107,19 @@ {displayDate(timestamp)} -
- {username} +
+
+ {username} +
+
@@ -125,8 +140,19 @@
-
- {resource} +
+
+ {resource} +
+
diff --git a/frontend/src/routes/(root)/(logged)/audit_logs/+page.svelte b/frontend/src/routes/(root)/(logged)/audit_logs/+page.svelte index aaf5e3e908..062832cfdf 100644 --- a/frontend/src/routes/(root)/(logged)/audit_logs/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/audit_logs/+page.svelte @@ -22,6 +22,7 @@ let perPage: number | undefined = Number($page.url.searchParams.get('perPage')) || 100 let operation: string = $page.url.searchParams.get('operation') ?? 'all' let resource: string | undefined = $page.url.searchParams.get('resource') ?? undefined + let actionKind: ActionKind | 'all' = ($page.url.searchParams.get('actionKind') as ActionKind) ?? 'all' @@ -40,7 +41,7 @@ You can only see your own audit logs unless you are an admin.
-