{{define "title"}}{{.Title}}{{end}} {{define "content"}} {{$page := .Page}} {{$job := $page.Job}} {{$host := $page.Host}}
Dashboard/ {{$host.Name}}/ job {{slice $job.ID 0 8}}…{{slice $job.ID (sub (len $job.ID) 4) (len $job.ID)}}
{{/* ---------- header ---------- */}}
{{if $page.IsActive}} {{else if eq $job.Status "succeeded"}} {{else if eq $job.Status "failed"}} {{else}} {{end}}

{{$job.Kind}} · {{$host.Name}}

{{if eq $job.Status "queued"}} queued {{else if eq $job.Status "running"}} running {{else if eq $job.Status "succeeded"}} succeeded {{else if eq $job.Status "failed"}} failed {{else}} {{$job.Status}} {{end}}
job {{$job.ID}} {{if $job.StartedAt}} · started {{relTime $job.StartedAt}} {{end}} {{if $job.FinishedAt}} · finished {{relTime $job.FinishedAt}} {{end}} {{if $job.ExitCode}} · exit code {{derefInt $job.ExitCode}} {{end}}
{{/* ---------- progress (running only) ---------- */}} {{if $page.IsActive}}
{{if eq (printf "%s" $job.Kind) "restore"}}
Current
{{end}}
{{end}} {{/* ---------- failure summary (failed only) ---------- */}} {{if eq $job.Status "failed"}}
Failure
{{if $job.Error}}

{{deref $job.Error}}

{{else}}

No error message captured. Inspect the log below for details.

{{end}}
{{end}} {{/* ---------- log viewer ---------- */}}

Stream

{{if $page.IsActive}} following · auto-scroll on {{else}} complete · {{len $page.Logs}} lines {{end}}
{{range $page.Logs}}
{{.TS.Format "15:04:05.000"}} {{if eq .Stream "stdout"}}OUT{{else if eq .Stream "stderr"}}ERR{{else}}EVENT{{end}} {{.Payload}}
{{end}} {{if and $page.IsActive (eq (len $page.Logs) 0)}}
··· awaiting agent output
{{end}}
{{if $page.IsActive}} {{end}} {{end}}