diff --git a/src/lib/components/KenerNav.svelte b/src/lib/components/KenerNav.svelte index 22362c87..b5e44764 100644 --- a/src/lib/components/KenerNav.svelte +++ b/src/lib/components/KenerNav.svelte @@ -43,7 +43,11 @@ style="border-radius: var(--radius-3xl)" > {#if item.iconURL} - {item.name} + {item.name} {/if} {item.name} diff --git a/src/lib/components/MinuteGrid.svelte b/src/lib/components/MinuteGrid.svelte index d2d8e405..f2fa7505 100644 --- a/src/lib/components/MinuteGrid.svelte +++ b/src/lib/components/MinuteGrid.svelte @@ -307,11 +307,12 @@ {#if hoveredMinute}
- {$formatDate(hoveredMinute.data.timestamp, "HH:mm")} - - {$t(hoveredMinute.data.status)} + + {$t(hoveredMinute.data.status)} @ {$formatDate(hoveredMinute.data.timestamp, "HH:mm")} +
{/if} diff --git a/src/lib/components/MonitorOverview.svelte b/src/lib/components/MonitorOverview.svelte index 58c85a25..b5e3c27d 100644 --- a/src/lib/components/MonitorOverview.svelte +++ b/src/lib/components/MonitorOverview.svelte @@ -15,6 +15,8 @@ import { getEndOfDayAtTz } from "$lib/client/datetime"; import { formatDate } from "$lib/stores/datetime"; import clientResolver from "$lib/client/resolver.js"; + import { ArrowDown } from "@lucide/svelte"; + import MonitorBar from "./MonitorBar.svelte"; interface Props { monitorTag: string; class?: string; diff --git a/src/lib/components/StatusBarCalendar.svelte b/src/lib/components/StatusBarCalendar.svelte index acc62d56..943ac10a 100644 --- a/src/lib/components/StatusBarCalendar.svelte +++ b/src/lib/components/StatusBarCalendar.svelte @@ -365,14 +365,14 @@ {#if hoveredBar}
{$t(GetStatusSummary(hoveredBar.data))} - @ + @ {$formatDate(hoveredBar.data.ts, "d MMM yyyy")} {#if hoveredBar.data.avgLatency > 0} - | + | {ParseLatency(hoveredBar.data.avgLatency)} {/if}
diff --git a/src/lib/server/queues/alertingQueue.ts b/src/lib/server/queues/alertingQueue.ts index a619c8d6..31465d8d 100644 --- a/src/lib/server/queues/alertingQueue.ts +++ b/src/lib/server/queues/alertingQueue.ts @@ -315,6 +315,13 @@ export const push = async (monitor_tag: string, ts: number, status: string, opti if (!options) { options = {}; } + options.removeOnComplete = { + age: 300, // keep up to 5 minutes + count: 100, // keep up to 100 jobs + }; + options.removeOnFail = { + age: 24 * 3600, // keep up to 24 hours + }; const queue = getQueue(); addWorker(); diff --git a/src/lib/server/queues/emailQueue.ts b/src/lib/server/queues/emailQueue.ts index fc845cb0..1cbdf81a 100644 --- a/src/lib/server/queues/emailQueue.ts +++ b/src/lib/server/queues/emailQueue.ts @@ -71,6 +71,13 @@ export const push = async (jobData: EmailJobData, options?: JobsOptions) => { if (!options) { options = {}; } + options.removeOnComplete = { + age: 300, // keep up to 5 minutes + count: 100, // keep up to 100 jobs + }; + options.removeOnFail = { + age: 24 * 3600, // keep up to 24 hours + }; const queue = getQueue(); addWorker(); diff --git a/src/lib/server/queues/monitorExecuteQueue.ts b/src/lib/server/queues/monitorExecuteQueue.ts index 376c9350..f107ff60 100644 --- a/src/lib/server/queues/monitorExecuteQueue.ts +++ b/src/lib/server/queues/monitorExecuteQueue.ts @@ -195,6 +195,13 @@ export const push = async (monitor: MonitorRecordTyped, ts: number, options?: Jo id: deDupId, }; } + options.removeOnComplete = { + age: 3600, // keep up to 1 hour + count: 1000, // keep up to 1000 jobs + }; + options.removeOnFail = { + age: 24 * 3600, // keep up to 24 hours + }; const queue = getQueue(); addWorker(); await queue.add( diff --git a/src/lib/server/queues/monitorResponseQueue.ts b/src/lib/server/queues/monitorResponseQueue.ts index a007c225..7df399bd 100644 --- a/src/lib/server/queues/monitorResponseQueue.ts +++ b/src/lib/server/queues/monitorResponseQueue.ts @@ -76,6 +76,13 @@ export const push = async (monitorTag: string, ts: number, result: MonitoringRes id: deDupId, }; } + options.removeOnComplete = { + age: 300, // keep up to 5 minutes + count: 100, // keep up to 100 jobs + }; + options.removeOnFail = { + age: 24 * 3600, // keep up to 24 hours + }; const queue = getQueue(); addWorker(); await queue.add( diff --git a/src/lib/server/queues/subscriberQueue.ts b/src/lib/server/queues/subscriberQueue.ts index 5cbc21cc..323ec12e 100644 --- a/src/lib/server/queues/subscriberQueue.ts +++ b/src/lib/server/queues/subscriberQueue.ts @@ -93,7 +93,16 @@ export const push = async (variables: SubscriptionVariableMap, options?: JobsOpt if (!options) { options = {}; } - + if (!options) { + options = {}; + } + options.removeOnComplete = { + age: 300, // keep up to 5 minutes + count: 100, // keep up to 100 jobs + }; + options.removeOnFail = { + age: 24 * 3600, // keep up to 24 hours + }; const queue = getQueue(); addWorker(); diff --git a/src/lib/server/schedulers/appScheduler.ts b/src/lib/server/schedulers/appScheduler.ts index bf4fb3ae..a4fba3c4 100644 --- a/src/lib/server/schedulers/appScheduler.ts +++ b/src/lib/server/schedulers/appScheduler.ts @@ -87,6 +87,13 @@ export const start = async (options?: JobSchedulerTemplateOptions) => { if (!options) { options = {}; } + options.removeOnComplete = { + age: 300, // keep up to 5 minutes + count: 100, // keep up to 100 jobs + }; + options.removeOnFail = { + age: 24 * 3600, // keep up to 24 hours + }; const queue = getQueue(); addWorker(); diff --git a/src/lib/server/schedulers/maintenanceScheduler.ts b/src/lib/server/schedulers/maintenanceScheduler.ts index 862112fb..346e2b63 100644 --- a/src/lib/server/schedulers/maintenanceScheduler.ts +++ b/src/lib/server/schedulers/maintenanceScheduler.ts @@ -137,7 +137,13 @@ export const start = async (options?: JobSchedulerTemplateOptions) => { if (!options) { options = {}; } - + options.removeOnComplete = { + age: 300, // keep up to 5 minutes + count: 100, // keep up to 100 jobs + }; + options.removeOnFail = { + age: 24 * 3600, // keep up to 24 hours + }; const queue = getQueue(); addWorker(); diff --git a/src/lib/server/schedulers/monitorSchedulers.ts b/src/lib/server/schedulers/monitorSchedulers.ts index 7fc45607..90756c3b 100644 --- a/src/lib/server/schedulers/monitorSchedulers.ts +++ b/src/lib/server/schedulers/monitorSchedulers.ts @@ -46,6 +46,16 @@ export const addJobToSchedulerQueue = async ( if (!monitor.cron) { throw new Error("Monitor cron expression is undefined"); } + if (!options) { + options = {}; + } + options.removeOnComplete = { + age: 300, // keep up to 5 minutes + count: 100, // keep up to 100 jobs + }; + options.removeOnFail = { + age: 24 * 3600, // keep up to 24 hours + }; const queue = getQueue(minNumOfWorkers); await queue.upsertJobScheduler( id, diff --git a/src/routes/(docs)/docs/DocsSidebar.svelte b/src/routes/(docs)/docs/DocsSidebar.svelte index b519b777..7179b917 100644 --- a/src/routes/(docs)/docs/DocsSidebar.svelte +++ b/src/routes/(docs)/docs/DocsSidebar.svelte @@ -44,7 +44,7 @@ let expandedGroups = $state([]); let expandedPages = $state([]); - let prevSlug = $state(currentSlug); + let prevSlug = $state(""); // Auto-expand when navigating to a different page (not when manually toggling) $effect(() => { @@ -102,7 +102,7 @@