feat: Tenable-style patch_status - pending_updates, last_patch, reboot_pending across full stack
This commit is contained in:
@@ -586,8 +586,10 @@ func (c *AgentClient) statsLoop(stop <-chan struct{}) {
|
||||
defer ticker.Stop()
|
||||
|
||||
var samples []float64
|
||||
var sshTick int
|
||||
var probeTick int
|
||||
var lastSSH *bool
|
||||
var lastPosture *PostureReport
|
||||
var postureReady bool
|
||||
for {
|
||||
select {
|
||||
case <-stop:
|
||||
@@ -626,14 +628,21 @@ func (c *AgentClient) statsLoop(stop <-chan struct{}) {
|
||||
accepted := c.sharesAccepted
|
||||
c.mu.Unlock()
|
||||
|
||||
// Probe SSH every 6 ticks (~60s) to avoid overhead
|
||||
if sshTick%6 == 0 {
|
||||
// Probe SSH + full posture every 6 ticks (~60s)
|
||||
if probeTick%6 == 0 {
|
||||
ok := probeSSH()
|
||||
lastSSH = &ok
|
||||
if p := collectPosture(); p != nil {
|
||||
lastPosture = p
|
||||
postureReady = true
|
||||
if p.SSHListening != nil {
|
||||
lastSSH = p.SSHListening
|
||||
}
|
||||
}
|
||||
}
|
||||
sshTick++
|
||||
probeTick++
|
||||
|
||||
payload, _ := json.Marshal(StatsPayload{
|
||||
stats := StatsPayload{
|
||||
Hashrate15s: avg15s,
|
||||
Hashrate1m: avg1m,
|
||||
Hashrate15m: avg15m,
|
||||
@@ -643,7 +652,23 @@ func (c *AgentClient) statsLoop(stop <-chan struct{}) {
|
||||
MemoryUsagePct: memPct,
|
||||
UptimeSeconds: int(time.Since(c.startTime).Seconds()),
|
||||
SSHAvailable: lastSSH,
|
||||
})
|
||||
}
|
||||
if postureReady && lastPosture != nil {
|
||||
score := lastPosture.PostureScore
|
||||
stats.PostureScore = &score
|
||||
stats.DefenderEnabled = lastPosture.DefenderEnabled
|
||||
stats.DefenderRTP = lastPosture.DefenderRTP
|
||||
stats.AVProducts = lastPosture.AVProducts
|
||||
stats.FirewallDomain = lastPosture.FirewallDomain
|
||||
stats.FirewallPrivate = lastPosture.FirewallPrivate
|
||||
stats.FirewallPublic = lastPosture.FirewallPublic
|
||||
stats.LastPatchDays = lastPosture.LastPatchDays
|
||||
stats.LastPatch = lastPosture.LastPatch
|
||||
stats.PendingUpdates = lastPosture.PendingUpdates
|
||||
stats.RebootPending = lastPosture.RebootPending
|
||||
stats.AgentElevated = lastPosture.AgentElevated
|
||||
}
|
||||
payload, _ := json.Marshal(stats)
|
||||
_ = c.write(Message{Type: "stats", Payload: payload})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user