@page @model PlanTempusAdmin.Pages.Forgejo.ActionsModel @{ ViewData["Title"] = "Forgejo Actions"; } @if (!Model.IsConnected) {

Kan ikke forbinde til Forgejo database

} else { var running = Model.Runs.Count(r => r.Status == 2); var successful = Model.Runs.Count(r => r.Status == 3); var failed = Model.Runs.Count(r => r.Status == 4);
Status
@if (running > 0) { @running KØRER } else { IDLE }
Workflows
@Model.Stats.Count
Success Rate
@(Model.Stats.Count > 0 ? Model.Stats.Average(s => s.SuccessRate).ToString("0") : "0")%
Viste Runs
@Model.Runs.Count
@if (running > 0) {
Kørende Workflows
@foreach (var run in Model.Runs.Where(r => r.Status == 2)) { }
Repository Workflow Branch Trigger Startet Varighed
@run.FullRepoName @run.WorkflowId @run.Ref.Replace("refs/heads/", "").Replace("refs/tags/", "tag:") @run.Event @if (!string.IsNullOrEmpty(run.TriggerUser)) { by @run.TriggerUser } @run.Started?.ToString("HH:mm:ss") @FormatDuration(run.Duration)
}
Workflow Statistik
@foreach (var stat in Model.Stats.OrderByDescending(s => s.TotalRuns)) { }
Workflow Repo Runs Rate Avg. Tid Sidst
@stat.WorkflowId @stat.RepoName @stat.Successful @if (stat.Failed > 0) { / @stat.Failed }
= 70 ? "warn" : "bad")" style="width: @stat.SuccessRate.ToString("0")%">
@stat.SuccessRate.ToString("0")%
@(stat.AvgDurationSeconds.HasValue ? FormatDuration(TimeSpan.FromSeconds(stat.AvgDurationSeconds.Value)) : "-") @FormatTimeAgo(stat.LastRun)
Seneste Workflow Runs
@foreach (var run in Model.Runs.Take(50)) { }
Status Repository Workflow Event Tid Varighed
@switch (run.Status) { case 1: VENTER break; case 2: KØRER break; case 3: OK break; case 4: FEJL break; case 5: ANNULLERET break; case 6: SKIPPED break; default: @run.StatusText break; } @run.FullRepoName @run.WorkflowId @run.Event @FormatTimeAgo(run.Created) @FormatDuration(run.Duration)
} @functions { string FormatDuration(TimeSpan? duration) { if (!duration.HasValue) return "-"; var d = duration.Value; if (d.TotalHours >= 1) return $"{(int)d.TotalHours}t {d.Minutes}m"; if (d.TotalMinutes >= 1) return $"{(int)d.TotalMinutes}m {d.Seconds}s"; return $"{d.Seconds}s"; } string FormatTimeAgo(DateTime? time) { if (!time.HasValue) return "-"; var diff = DateTime.Now - time.Value; if (diff.TotalMinutes < 1) return "lige nu"; if (diff.TotalMinutes < 60) return $"{(int)diff.TotalMinutes}m siden"; if (diff.TotalHours < 24) return $"{(int)diff.TotalHours}t siden"; if (diff.TotalDays < 7) return $"{(int)diff.TotalDays}d siden"; return time.Value.ToString("dd/MM HH:mm"); } }