diff --git a/frontend/src/routes/(root)/(logged)/schedules/+page.svelte b/frontend/src/routes/(root)/(logged)/schedules/+page.svelte index d202a4c5e3..06b33ca921 100644 --- a/frontend/src/routes/(root)/(logged)/schedules/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/schedules/+page.svelte @@ -6,7 +6,15 @@ type WorkspaceDeployUISettings, WorkspaceService } from '$lib/gen' - import { canWrite, displayDate, getLocalSetting, storeLocalSetting } from '$lib/utils' + import { + canWrite, + displayDate, + getLocalSetting, + msToReadableTime, + msToReadableTimeShort, + storeLocalSetting + } from '$lib/utils' + import { runsOutlastingInterval } from '$lib/components/schedules/scheduleDrift' import { withForkConflictRetry } from '$lib/utils/forkConflict' import { base } from '$app/paths' import CenteredPage from '$lib/components/CenteredPage.svelte' @@ -21,6 +29,7 @@ import Toggle from '$lib/components/Toggle.svelte' import { userStore, workspaceStore, userWorkspaces, enterpriseLicense } from '$lib/stores' import { + AlertTriangle, Calendar, Circle, Copy, @@ -410,13 +419,19 @@ {/if} {:else if items?.length}
- {#each items.slice(0, nbDisplayed) as { path, error, summary, edited_by, edited_at, schedule, timezone, enabled, script_path, is_flow, extra_perms, canWrite, jobs, paused_until, labels, inherited_labels, draft_only, is_draft } (path)} + {#each items.slice(0, nbDisplayed) as { path, error, summary, edited_by, edited_at, schedule, timezone, enabled, script_path, is_flow, extra_perms, canWrite, jobs, interval_s, queues_next_run_at_start, paused_until, labels, inherited_labels, draft_only, is_draft } (path)} {@const hasDraft = getLocalDraftHint($workspaceStore, 'trigger_schedule', path) ?? is_draft} {@const href = `${is_flow ? '/flows/get' : '/scripts/get'}/${script_path}`} {@const avg_s = jobs ? jobs.reduce((acc, x) => acc + x.duration_ms, 0) / jobs.length : undefined} + {@const outlastingMs = runsOutlastingInterval({ + queues_next_run_at_start, + enabled, + interval_s, + jobs + })}
+ {#if outlastingMs} + + + {#snippet text()} +
+ Runs have been taking about {msToReadableTimeShort(outlastingMs, 0)}, longer + than the {msToReadableTime(interval_s! * 1000)} between scheduled events, so + this schedule is running less often than its cron asks for. +
+ {/snippet} +
+ {/if} {#if avg_s}
Avg: {(avg_s / 1000).toFixed(2)}s