diff --git a/src/lib/components/filters/customFilters.svelte b/src/lib/components/filters/customFilters.svelte new file mode 100644 index 000000000..3b4a1d751 --- /dev/null +++ b/src/lib/components/filters/customFilters.svelte @@ -0,0 +1,17 @@ + + + + (show = true)}>Custom filters + + +{#if show} + +{/if} diff --git a/src/lib/components/filters/filtersModal.svelte b/src/lib/components/filters/filtersModal.svelte new file mode 100644 index 000000000..816187d28 --- /dev/null +++ b/src/lib/components/filters/filtersModal.svelte @@ -0,0 +1,73 @@ + + + + Apply filter rules to refine the table view + + (applied = 0)} /> + + + + + diff --git a/src/lib/components/filters/index.ts b/src/lib/components/filters/index.ts index 7d3b7f3d2..b2747057b 100644 --- a/src/lib/components/filters/index.ts +++ b/src/lib/components/filters/index.ts @@ -1,3 +1,6 @@ export { default as Filters } from './filters.svelte'; export { default as TagList } from './tagList.svelte'; +export { default as FilterMenu } from './menu.svelte'; +export { default as FilterSubMenu } from './subMenu.svelte'; +export { default as CustomFilters } from './customFilters.svelte'; export { hasPageQueries, queryParamToMap, queries } from '$lib/components/filters/store'; diff --git a/src/lib/components/filters/menu.svelte b/src/lib/components/filters/menu.svelte new file mode 100644 index 000000000..743ac1a20 --- /dev/null +++ b/src/lib/components/filters/menu.svelte @@ -0,0 +1,49 @@ + + +
+
+ {#if $tags.length} + + {:else} + + {/if} +
+ + +
+ + diff --git a/src/routes/(console)/project-[project]/functions/function-[function]/+page.svelte b/src/routes/(console)/project-[project]/functions/function-[function]/+page.svelte index 88cf037db..b7f2ac859 100644 --- a/src/routes/(console)/project-[project]/functions/function-[function]/+page.svelte +++ b/src/routes/(console)/project-[project]/functions/function-[function]/+page.svelte @@ -183,31 +183,6 @@ {#if data.deploymentList.total} - -
- - {#if $tags?.length} -
-
- - {/if} -
-
{/if}
diff --git a/src/routes/(console)/project-[project]/functions/function-[function]/executions/(components)/LogsRequest.svelte b/src/routes/(console)/project-[project]/functions/function-[function]/executions/(components)/LogsRequest.svelte new file mode 100644 index 000000000..71fee3b9a --- /dev/null +++ b/src/routes/(console)/project-[project]/functions/function-[function]/executions/(components)/LogsRequest.svelte @@ -0,0 +1,114 @@ + + + + + + (requestTab = 'parameters')}> + Parameters + + + (requestTab = 'headers')}> + Headers + + + + + {#if requestTab === 'parameters'} + {#if parameters?.length} + + + Key + Value + + {#each parameters as parameter} + + {parameter.name} + {parameter.value} + + {/each} + + {:else} + + No parameters found. + + {/if} + {:else if requestTab === 'headers'} + {#if selectedLog.requestHeaders?.length} + + + Key + Value + + {#each selectedLog.requestHeaders as request} + + {request.name} + {request.value} + + {/each} + + + + + Missing headers? Check the docs to + see the supported data and how to log it. + + + {:else} + + No headers found. + + {/if} + {/if} + diff --git a/src/routes/(console)/project-[project]/functions/function-[function]/executions/(components)/LogsResponse.svelte b/src/routes/(console)/project-[project]/functions/function-[function]/executions/(components)/LogsResponse.svelte new file mode 100644 index 000000000..82e204396 --- /dev/null +++ b/src/routes/(console)/project-[project]/functions/function-[function]/executions/(components)/LogsResponse.svelte @@ -0,0 +1,127 @@ + + + + + + (responseTab = 'logs')}> + Logs + + (responseTab = 'errors')}> + Errors + + (responseTab = 'headers')}> + Headers + + + (responseTab = 'body')}> + Body + + + + + + {#if responseTab === 'logs'} + {#if selectedLog.logs} + + {:else} + + No logs found. + + {/if} + {:else if responseTab === 'errors'} + {#if selectedLog.errors} + + {:else} + + No errors found. + + {/if} + {:else if responseTab === 'headers'} + {#if selectedLog.responseHeaders?.length} + + + Key + Value + + {#each selectedLog.responseHeaders as request} + + {request.name} + {request.value} + + {/each} + + + + + Missing headers? Check the docs to + see the supported data and how to log it. + + + {:else} + + No headers found. + + {/if} + {:else if responseTab === 'body'} + {#if selectedLog.responseBody} + + {:else} + + Body data is not captured by Appwrite for your user's security and privacy. To + display body data in the Logs tab, use . + Learn more. + + + {/if} + {/if} + diff --git a/src/routes/(console)/project-[project]/functions/function-[function]/executions/+page.svelte b/src/routes/(console)/project-[project]/functions/function-[function]/executions/+page.svelte index f44dccf92..09c7544cd 100644 --- a/src/routes/(console)/project-[project]/functions/function-[function]/executions/+page.svelte +++ b/src/routes/(console)/project-[project]/functions/function-[function]/executions/+page.svelte @@ -31,31 +31,7 @@ - + {#if data?.executions?.total} diff --git a/src/routes/(console)/project-[project]/functions/function-[function]/executions/quickFilters.svelte b/src/routes/(console)/project-[project]/functions/function-[function]/executions/quickFilters.svelte index df451a731..f9bb43bf0 100644 --- a/src/routes/(console)/project-[project]/functions/function-[function]/executions/quickFilters.svelte +++ b/src/routes/(console)/project-[project]/functions/function-[function]/executions/quickFilters.svelte @@ -11,11 +11,9 @@ type TagValue } from '$lib/components/filters/store'; import type { Column } from '$lib/helpers/types'; - import { Card, Icon } from '@appwrite.io/pink-svelte'; - import { melt, createMenubar } from '@melt-ui/svelte'; import { type Writable } from 'svelte/store'; - import { Button } from '$lib/elements/forms'; - import { IconFilterLine } from '@appwrite.io/pink-icons-svelte'; + import Menu from '$lib/components/filters/menu.svelte'; + import { CustomFilters } from '$lib/components/filters'; export let columns: Writable; @@ -183,86 +181,53 @@ addFilter($columns, colId, ValidOperators.GreaterThanOrEqual, isoValue.toISOString()); addFilter($columns, colId, ValidOperators.LessThanOrEqual, now.toISOString()); } - - const { - elements: { menubar }, - builders: { createMenu } - } = createMenubar(); - - const { - elements: { trigger: trigger, menu: menu } - } = createMenu(); -
-
- {#if $tags.length} - - {:else} - - {/if} -
- - -
- - + + {#each [statusFilter, triggerFilter, methodFilter] as filter} + { + console.log('test'); + addFilterAndApply( + filter.id, + filter.title, + filter.operator, + e.detail.value, + filter?.array + ? (filter.options.filter((opt) => opt.checked).map((opt) => opt.value) ?? + []) + : [] + ); + }} + on:clear={() => { + filter.tag = null; + addFilterAndApply(filter.id, filter.title, filter.operator, null, []); + }} /> + {/each} + {#each [statusCodeFilter, createdAtFilter] as filter} + { + console.log('test'); + addFilterAndApply( + filter.id, + filter.title, + filter.operator, + e.detail.value, + filter?.array + ? (filter.options.filter((opt) => opt.checked).map((opt) => opt.value) ?? + []) + : [] + ); + }} + on:clear={() => { + filter.tag = null; + addFilterAndApply(filter.id, filter.title, filter.operator, null, []); + }} /> + {/each} + + + + diff --git a/src/routes/(console)/project-[project]/functions/function-[function]/executions/sheet.svelte b/src/routes/(console)/project-[project]/functions/function-[function]/executions/sheet.svelte index 70497878d..26c5b316e 100644 --- a/src/routes/(console)/project-[project]/functions/function-[function]/executions/sheet.svelte +++ b/src/routes/(console)/project-[project]/functions/function-[function]/executions/sheet.svelte @@ -11,11 +11,16 @@ Layout, Sheet, Tag, - Typography + Typography, + Tooltip, + Status } from '@appwrite.io/pink-svelte'; - import { timeFromNow } from '$lib/helpers/date'; + import { timeFromNow, toLocaleDateTime } from '$lib/helpers/date'; import { capitalize } from '$lib/helpers/string'; import { Copy } from '$lib/components'; + import { logStatusConverter } from './store'; + import LogsResponse from './(components)/LogsResponse.svelte'; + import LogsRequest from './(components)/LogsRequest.svelte'; export let open = false; export let selectedLogId: string; @@ -40,14 +45,13 @@ $: selectedLog = logs?.find((log) => log.$id === selectedLogId); $: isFirstLog = logs.findIndex((log) => log.$id === selectedLogId) === 0; $: isLastLog = logs.findIndex((log) => log.$id === selectedLogId) === logs.length - 1; - $: console.log(selectedLog);
- Log ID + Execution ID {selectedLog?.$id} @@ -66,66 +70,109 @@ - - - - - Method - - - {selectedLog.requestMethod} - - - - - Status - - - = 400 - ? 'error' - : 'success'} /> - - - - - Duration - - - {calculateTime(selectedLog.duration)} - - - - - Created - - - {capitalize(timeFromNow(selectedLog.$createdAt))} - - - - + + + + Method + + + {selectedLog.requestMethod} + + + + + Status code + + + = 400 + ? 'error' + : selectedLog.responseStatusCode === 0 + ? undefined + : 'success'} /> + + - - - Path - -
- -
-
+ + + Path + +
+ +
+
+
+ + + + Status + + + +
+ + {capitalize(selectedLog.status)} + +
+ + {`Scheduled to execute on ${toLocaleDateTime(selectedLog.scheduledAt)}`} + +
+
+ + + Duration + + + {calculateTime(selectedLog.duration)} + + + + + Triggered + + + {capitalize(selectedLog.trigger)} + + + + + Created + + + {capitalize(timeFromNow(selectedLog.$createdAt))} + + +
- + - +
{/if} diff --git a/src/routes/(console)/project-[project]/functions/function-[function]/executions/store.ts b/src/routes/(console)/project-[project]/functions/function-[function]/executions/store.ts index 2459b8059..2758f99ad 100644 --- a/src/routes/(console)/project-[project]/functions/function-[function]/executions/store.ts +++ b/src/routes/(console)/project-[project]/functions/function-[function]/executions/store.ts @@ -3,29 +3,15 @@ import { writable } from 'svelte/store'; export const columns = writable([ { id: '$id', title: 'Execution ID', type: 'string', show: true, width: 150 }, - { - id: '$createdAt', - title: 'Created', - type: 'datetime', + id: 'requestPath', + title: 'Path', + type: 'string', show: true, - width: 120, - format: 'datetime', - elements: [ - { - value: 5 * 60 * 1000, - label: 'last 5 minutes' - }, - { - value: 60 * 60 * 1000, - label: 'last 1 hour' - }, - { - value: 24 * 60 * 60 * 1000, - label: 'last 24 hours' - } - ] + width: 90, + format: 'string' }, + { id: 'trigger', title: 'Trigger', @@ -79,14 +65,7 @@ export const columns = writable([ ], hide: true }, - { - id: 'requestPath', - title: 'Path', - type: 'string', - show: true, - width: 90, - format: 'string' - }, + { id: 'status', title: 'Status', @@ -118,5 +97,48 @@ export const columns = writable([ label: 'more than 30 seconds' } ] + }, + { + id: '$createdAt', + title: 'Created', + type: 'datetime', + show: true, + width: 120, + format: 'datetime', + elements: [ + { + value: 5 * 60 * 1000, + label: 'last 5 minutes' + }, + { + value: 60 * 60 * 1000, + label: 'last 1 hour' + }, + { + value: 24 * 60 * 60 * 1000, + label: 'last 24 hours' + } + ] } ]); + +export function logStatusConverter(status: string) { + // ['completed', 'failed', 'waiting', 'scheduled', 'processing', 'cancelled'] + + switch (status) { + case 'completed': + return 'complete'; + case 'scheduled': + return 'processing'; + case 'processing': + return 'processing'; + case 'waiting': + return 'waiting'; + case 'peding': + return 'pending'; + case 'cancelled': + return 'waiting'; + case 'failed': + return 'failed'; + } +} diff --git a/src/routes/(console)/project-[project]/functions/function-[function]/executions/table.svelte b/src/routes/(console)/project-[project]/functions/function-[function]/executions/table.svelte index 59be85c6a..fa1bf102c 100644 --- a/src/routes/(console)/project-[project]/functions/function-[function]/executions/table.svelte +++ b/src/routes/(console)/project-[project]/functions/function-[function]/executions/table.svelte @@ -7,35 +7,13 @@ import Sheet from './sheet.svelte'; import { capitalize } from '$lib/helpers/string'; import { formatTimeDetailed } from '$lib/helpers/timeConversion'; + import { logStatusConverter } from './store'; export let columns: Column[]; export let logs: Models.ExecutionList; let openSheet = false; let selectedLogId: string = null; - - $: console.log(columns); - - export function logStatusConverter(status: string) { - // ['completed', 'failed', 'waiting', 'scheduled', 'processing', 'cancelled'] - - switch (status) { - case 'completed': - return 'complete'; - case 'scheduled': - return 'ready'; - case 'processing': - return 'processing'; - case 'waiting': - return 'waiting'; - case 'peding': - return 'pending'; - case 'cancelled': - return 'waiting'; - case 'failed': - return 'failed'; - } - } @@ -97,12 +75,7 @@ - {#if status === 'scheduled'} -
diff --git a/src/routes/(console)/project-[project]/functions/function-[function]/quickFilters.svelte b/src/routes/(console)/project-[project]/functions/function-[function]/quickFilters.svelte index e171c5784..9286f84d0 100644 --- a/src/routes/(console)/project-[project]/functions/function-[function]/quickFilters.svelte +++ b/src/routes/(console)/project-[project]/functions/function-[function]/quickFilters.svelte @@ -1,19 +1,18 @@ -{#each [typeFilter] as filter} - - - {#key filter.tag} - - {filter?.tag ?? filter.title} - - {/key} - - - - - {#each filter.options as option (option.value + option.checked)} - { - option.checked = !option.checked; - addFilterAndApply( - filter.id, - filter.title, - filter.operator, - filter?.array ? null : option.checked ? option.value : null, - filter?.array - ? (filter.options - .filter((opt) => opt.checked) - .map((opt) => opt.value) ?? []) - : [] - ); - }}> - {option.label} - - {/each} - {#if filter.options.some((option) => option.checked)} - { - toggle(e); - filter.tag = null; - addFilterAndApply(filter.id, filter.title, filter.operator, null, []); - }}> - Clear selection - - {/if} - - - -{/each} -{#each [sizeFilter] as filter} - - - {#key filter.tag} - - {filter?.tag ?? filter.title} - - {/key} - - - - - {#each filter.options as option (option.value + option.checked)} - { - addFilterAndApply( - filter.id, - filter.title, - filter.operator, - filter?.array ? null : option.value, - [] - ); - toggle(e); - }}> - {option.label} - - {/each} - {#if filter?.tag} - { - filter.tag = null; - addFilterAndApply(filter.id, filter.title, filter.operator, null, []); - toggle(e); - }}> - Clear selection - - {/if} - - - -{/each} + + {#each [typeFilter] as filter} + { + console.log('test'); + addFilterAndApply( + filter.id, + filter.title, + filter.operator, + e.detail.value, + filter?.array + ? (filter.options.filter((opt) => opt.checked).map((opt) => opt.value) ?? + []) + : [] + ); + }} + on:clear={() => { + filter.tag = null; + addFilterAndApply(filter.id, filter.title, filter.operator, null, []); + }} /> + {/each} + {#each [sizeFilter] as filter} + { + console.log('test'); + addFilterAndApply( + filter.id, + filter.title, + filter.operator, + e.detail.value, + filter?.array + ? (filter.options.filter((opt) => opt.checked).map((opt) => opt.value) ?? + []) + : [] + ); + }} + on:clear={() => { + filter.tag = null; + addFilterAndApply(filter.id, filter.title, filter.operator, null, []); + }} /> + {/each} + + + + diff --git a/src/routes/(console)/project-[project]/sites/site-[site]/logs/+page.svelte b/src/routes/(console)/project-[project]/sites/site-[site]/logs/+page.svelte index 95c47e7e1..6cd53aab5 100644 --- a/src/routes/(console)/project-[project]/sites/site-[site]/logs/+page.svelte +++ b/src/routes/(console)/project-[project]/sites/site-[site]/logs/+page.svelte @@ -20,6 +20,15 @@ const columns = writable([ { id: '$id', title: 'Log ID', type: 'string', show: true, width: 150 }, + + { + id: 'requestPath', + title: 'Path', + type: 'string', + show: true, + width: 90, + format: 'string' + }, { id: '$createdAt', title: 'Created', @@ -41,15 +50,6 @@ label: 'last 24 hours' } ] - }, - - { - id: 'requestPath', - title: 'Path', - type: 'string', - show: true, - width: 90, - format: 'string' } ]); let search = ''; diff --git a/src/routes/(console)/project-[project]/sites/site-[site]/logs/sheet.svelte b/src/routes/(console)/project-[project]/sites/site-[site]/logs/sheet.svelte index f31f2ca55..d50a824b3 100644 --- a/src/routes/(console)/project-[project]/sites/site-[site]/logs/sheet.svelte +++ b/src/routes/(console)/project-[project]/sites/site-[site]/logs/sheet.svelte @@ -80,7 +80,7 @@
- Status + Status code