@page "/admin/tasks"
@using Iceshrimp.Backend.Components.Admin
@using Iceshrimp.Backend.Core.Extensions
@using Iceshrimp.Backend.Core.Services
@inherits AdminComponentBase
@inject CronService CronSvc
Name | Assembly | Schedule | Last run | Next run | Actions | @foreach (var task in CronSvc.Tasks) { var type = task.Task.GetType(); var schedule = task.Task.Type switch { CronTaskType.Daily when task.Task.Trigger == TimeSpan.Zero => "daily at midnight", // CronTaskType.Daily => $"daily at {((int)task.Task.Trigger.TotalHours).ToString().PadLeft(2, '0')}:{((int)task.Task.Trigger.TotalMinutes).ToString().PadLeft(2, '0')}", CronTaskType.Interval => $"every {task.Task.Trigger.ToDisplayString(singleNumber: false)}", _ => throw new ArgumentOutOfRangeException() }; var last = task.Trigger.IsRunning ? "now" : task.Trigger.LastRun.HasValue ? (DateTime.UtcNow - task.Trigger.LastRun.Value).ToDisplayString() + " ago" : "never"; if (task.Trigger.LastRun.HasValue) { last += task.Trigger.Error is null ? " (OK)" : " (Error)"; } var next = task.Trigger.IsRunning ? "now" : "in " + (task.Trigger.NextTrigger - DateTime.UtcNow).ToDisplayString();|
---|---|---|---|---|---|---|
@type.Name | @type.Assembly.GetName().Name | @schedule | @if (task.Trigger is { LastRun: not null, Error: { } e }) {@last | } else {@last | }@next | Run now |