5f9cfbb27e
laneRow.Stalled was Due > 0 && Checked == 0, which is exactly the shape of the on-demand wake gate declining to start Chrome (ADR-0005): under five due Series and none overdue by 15m, a browser Lane reads nothing on purpose. kagane and novelfull each have one bookmarked Series, so that is their state for most of every cycle and the page marked both "not checking" — spending the one mark that means "go look" on the commonest healthy state. LaneState.Asleep is set at the wake gate, excluded from Stalled, kept out of Attention, and rendered as "browser asleep". Verified in prod: those Lanes wake on the age rule 15m past due (kagane and novelfull both polled at 14:55Z for a 14:40Z due moment, novelfull picking up Chapter 4458).
43 lines
1.9 KiB
HTML
43 lines
1.9 KiB
HTML
{{/* Poll Lane status: one row per Site, 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 for it.
|
|
|
|
Every figure here is read out of the running poller, never out of a table:
|
|
a Site absent from Rows has not completed a pass since the last restart,
|
|
which the empty state must say — zeroes would read as a stopped Lane. */}}
|
|
{{define "lanes"}}
|
|
<section class="lanes" id="lanes"
|
|
hx-get="/ui/admin/lanes" hx-trigger="every 30s" hx-swap="outerHTML">
|
|
<h2>Poll Lanes</h2>
|
|
{{if .Rows}}
|
|
<ul class="lanelist">
|
|
{{range .Rows}}
|
|
<li{{if .Attention}} class="attention"{{end}}>
|
|
<span class="lane-site">{{.Site}}</span>
|
|
<span class="lane-fact">{{.Due}} due</span>
|
|
<span class="lane-fact">{{.Checked}} checked</span>
|
|
<span class="lane-fact">ran {{.Ran}}</span>
|
|
{{if .Gap}}<span class="lane-fact">gap {{.Gap}}</span>{{end}}
|
|
{{if .Clamped}}<span class="lane-mark">gap at floor</span>{{end}}
|
|
{{if .Refusing}}<span class="lane-mark">refusing</span>{{end}}
|
|
{{if .BrowserLost}}<span class="lane-mark">no browser</span>{{end}}
|
|
{{if .Stalled}}<span class="lane-mark">not checking</span>{{end}}
|
|
{{if .Asleep}}<span class="lane-mark">browser asleep</span>{{end}}
|
|
</li>
|
|
{{end}}
|
|
</ul>
|
|
{{else}}
|
|
<p class="setup-copy">No data yet — no Lane has completed a pass since the
|
|
backend started.</p>
|
|
{{end}}
|
|
<p class="setup-copy lane-browser">
|
|
{{if .PollerOff}}Polling is switched off in this deployment: no Lane runs,
|
|
and Latest Chapter comes from the userscripts alone.
|
|
{{else}}Browser sidecar:
|
|
{{if not .BrowserConfigured}}not configured — comix, kagane and novelfull
|
|
pages are not fetched through it{{else if .BrowserReachable}}reachable
|
|
{{else}}unreachable{{end}}.{{end}}</p>
|
|
</section>
|
|
{{end}}
|