The controller raises what the watchman says stopped moving, and takes a machine's silence from its presence (issue 1156)
This commit is contained in:
@@ -155,6 +155,8 @@ type machineFacts struct {
|
||||
tools bool
|
||||
toolsHeard time.Time
|
||||
toolsEvery time.Duration
|
||||
// presence is the watchman's word on whether it is online (novox/hq ADR 0433 §3); unsaid, the heartbeat rule judges.
|
||||
presence presenceVerdict
|
||||
}
|
||||
|
||||
// asleep says the machine said it would be away and has not said it is back (ADR 0211).
|
||||
@@ -470,7 +472,7 @@ func (w *watchdogs) gatherMachines(ctx context.Context, inv *inventory.Inventory
|
||||
}
|
||||
m.reportedCurrent = r.Current
|
||||
}
|
||||
if !m.lastHeard.IsZero() && now.Sub(m.lastHeard) > heartbeatBound(m.every) {
|
||||
if m.silent(now) {
|
||||
anyPast = true
|
||||
}
|
||||
if m.tools && now.Sub(later(m.toolsHeard, link.ToolsBeats.Started())) > heartbeatBound(m.toolsEvery) {
|
||||
@@ -478,6 +480,19 @@ func (w *watchdogs) gatherMachines(ctx context.Context, inv *inventory.Inventory
|
||||
}
|
||||
out = append(out, m)
|
||||
}
|
||||
// What the watchman says of each machine: its stuck presence key is the silent verdict, and presence.<node>'s time when
|
||||
// it was last heard (ADR 0433 §3). Unreadable is said, and the heartbeat rule judges as before.
|
||||
if w.js != nil {
|
||||
if err := withPresence(ctx, w.js.Conn(), out); err != nil {
|
||||
fmt.Printf("what the watchman says of the machines' presence cannot be read: %v\n", err)
|
||||
} else {
|
||||
for _, m := range out {
|
||||
if m.silent(now) {
|
||||
anyPast = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// What a machine past its bound last said of its power, read only then: a machine that said it
|
||||
// is asleep is not lost (ADR 0211). Unreadable is said: a sleeping laptop is then called silent,
|
||||
// which is the louder mistake and the right one to make.
|
||||
|
||||
Reference in New Issue
Block a user