{{template "icon_sprite"}} {{template "inline_confirm_js"}}

Felhom Hub

{{template "mail_hold_banner"}}

System — versions and OS updates

{{if .Flash}}
{{.Flash}}
{{end}} {{if .FlashErr}}
{{.FlashErr}}
{{end}}

Needs attention

One line per box that is amber or red, and why. Amber: worth a look. Red: an operator alarm fires (`08` §6.3).

{{if .Rows}} {{if .Attention}} {{else}}

All boxes look fine.

{{end}} {{else}}

No boxes yet.

{{end}}

Waiting for you

Update sets that only you approve: the kernel, the Docker engine and the Proxmox packages. Guest and host Debian updates approve themselves after 24 h and one night on the ring-0 boxes.

{{if .Cards}}
{{range .Cards}}

{{.What}}

{{.Evidence}}

{{.FirstSeen}}. {{.After}}

{{end}}
{{else}}

Nothing waits for your approval.

{{end}} {{if .Testing}} {{end}}
{{if .Rows}}

Boxes

Click a box to see every value it reports, and its ring and update switches. "unknown": the box could not read the value — never a guess.

Box
Ring
Health
Controller · agent
OS updates
Kernel
Last night
{{range .Rows}}
{{.HostID}}{{if .CustomerName}}{{.CustomerName}}{{end}}
{{.Ring}}
{{.Mark.Text}}
{{.Controller.Text}}agent {{.Agent.Text}}
{{.Updates.Text}}
{{.KernelShort.Text}}{{if .KernelNext}}next boot: {{.KernelNext}}{{end}}
{{.LastNight.Text}}
{{if .FactsNote}}

{{.FactsNote}}

{{end}}
Ring and updates
Ring
ring {{.Ring}}
{{if eq .Ring 0}} {{else}}{{end}}
OS updates
updates {{if .Enabled}}ON{{else}}OFF{{end}}
{{if .Enabled}} {{else}}{{end}}
Tunnel
{{template "sys_dd" .Tunnel}}
Controller
{{template "sys_dd" .Controller}}
Agent
{{template "sys_dd" .Agent}}
Last OS leg
{{template "sys_dd" .LastLeg}}
Docker engine
Docker
{{template "sys_dd" .Engine}}
containerd
{{template "sys_dd" .Containerd}}
live-restore
{{template "sys_dd" .LiveRestore}}
Docker release
{{template "sys_dd" .DockerRelease}}
Host
Proxmox
{{template "sys_dd" .PVE}}
Kernel (running)
{{template "sys_dd" .KernelRunning}}
Kernel (next boot)
{{template "sys_dd" .KernelNextBoot}}
Kernel (default)
{{template "sys_dd" .KernelDefault}}
Kernel step
{{template "sys_dd" .KernelStep}}
Debian
{{template "sys_dd" .HostDebian}}
Felhom release
{{template "sys_dd" .HostRelease}}
Pending
{{template "sys_dd" .HostPending}}
Not covered
{{template "sys_dd" .HostNotCovered}}
Held
{{template "sys_dd" .Held}}
Reboot needed
{{template "sys_dd" .RebootSince}}
kernel.panic
{{template "sys_dd" .KernelPanic}}
Oops
{{template "sys_dd" .Oops}}
Crash restarts 24 h
{{template "sys_dd" .CrashRestarts24h}}
Crash guard
{{template "sys_dd" .Guard}}
Root files
{{template "sys_dd" .Bundle}}
Guest
Guest Debian
{{template "sys_dd" .GuestDebian}}
Felhom release
{{template "sys_dd" .GuestRelease}}
Pending
{{template "sys_dd" .GuestPending}}
Restart needed
{{template "sys_dd" .GuestRestart}}
Last disk trim
{{template "sys_dd" .Trim}}
{{end}}
{{else}}

No boxes yet.

{{end}}
Details

Release ids, cancelled approvals, what ring 0 runs, the version floors, and every box's crash guard and root files.

Approved releases

The newest approved set of each layer. A TEST approval is amber.

{{range .Releases}}
{{.Layer}}: {{.ID}}
{{.Packages}} packages · {{.ApprovedAt.UTC.Format "2006-01-02 15:04"}} UTC · by {{.ApprovedBy}} {{if .Test}}
TEST approval{{end}}
{{else}}
No release approved yet.
{{end}}
An urgent fix only — normally the hub approves after 24 h and one night.
{{if .Cancelled}}

Cancelled approvals (last 7 days)

{{range .Cancelled}}
{{.Layer}}: {{.ID}}
cancelled {{.Cancelled}} UTC{{if .Test}} — a TEST approval{{end}}
no further box installs it; boxes that installed it keep it
{{end}}
{{end}}

What ring 0 runs now

{{range .Candidates}}
{{.Layer}}: {{if .Fingerprint}}{{.Packages}} packages, first seen {{.FirstSeen.UTC.Format "2006-01-02 15:04"}} UTC{{else}}—{{end}}
{{if .Approved}}approved as {{.Approved}} {{else if .Waiting}}{{.Waiting}} {{else if .Fingerprint}}ready — see "Waiting for you"{{end}}
{{end}}

Version floors

Global controller floor: {{if .GlobalFloor}}{{.GlobalFloor}}{{else}}none{{end}} · vouched agent: {{if .VouchedAgent}}{{.VouchedAgent}}{{else}}none{{end}}

What is a floor? · What is a vouched agent?

{{if .Floors}}
{{range .Floors}} {{end}}
CustomerOwn floorSetGlobal floor moves it?
{{.CustomerID}}{{if .CustomerName}}
{{.CustomerName}}{{end}}
{{.Version}} {{.Age.Text}} {{if .HeldBack}}NO — its own floor is lower and wins (R-604){{else}}no — its own floor applies (at or above the global){{end}}
{{else}}

No per-customer floors: every box follows the global floor.

{{end}} {{if .Rows}}

Crash guard and root files

{{range .Rows}} {{template "sys_cell" .KernelPanic}}{{template "sys_cell" .Oops}}{{template "sys_cell" .CrashRestarts24h}}{{template "sys_cell" .Guard}}{{template "sys_cell" .Bundle}} {{end}}
Boxkernel.panicOopsCrash restarts 24 hCrash guardRoot files
{{.HostID}}
{{end}}
{{define "sys_cell"}}{{.Text}}{{end}} {{define "sys_dd"}}{{.Text}}{{end}}