{{/* Poll Lane status: one row per Site's latest durable pass, refreshing itself so a run can be watched rather than sampled by reloading. The refresh is one attribute on the fragment root and the endpoint answers with this same fragment, so the swap replaces the element that asked. Every figure is read from poll_passes, never from a running poller: a restart answers from the database the moment it is up (issue #145). The browser fact is a deployment-config fact plus a reachability derived from the pass log; the cause chips and the state phrase are decided in Go, this template only prints them. */}} {{define "lanes"}}

Poll Lanes

{{if .PollerOff}}Polling: off {{else}}Browser: {{if not .BrowserConfigured}}not configured{{else if .BrowserReachable}}reachable{{else}}unreachable{{end}}{{end}}

{{if .Rows}}
SiteDueCheckedGap Last passOutcomes · state
{{range .Rows}}
{{.Site}} {{.Due}} {{.Checked}} {{.Gap}} ran {{.Ran}} {{if .HasChips}}{{range $i, $c := .Chips}}{{if $i}} · {{end}}{{$c.Name}} {{$c.Count}}{{end}}{{else}}none observed{{end}}{{if .StatePhrase}} · {{.StatePhrase}}{{end}}
{{end}}
{{else}}

No data yet — no Lane has recorded a pass.

{{end}}
{{end}}