feat: métriques serveur dans footer dashboard + notification offline WS
This commit is contained in:
+26
-4
@@ -234,13 +234,35 @@ func (d *DB) PruneOldMetrics(retentionDays int) error {
|
||||
}
|
||||
|
||||
func (d *DB) MarkOffline(timeoutSec int64) error {
|
||||
cutoff := time.Now().Unix() - timeoutSec
|
||||
_, err := d.conn.Exec(
|
||||
`UPDATE agents SET status='offline' WHERE last_seen < ? AND status != 'offline'`,
|
||||
cutoff)
|
||||
_, err := d.MarkOfflineAndGetIDs(timeoutSec)
|
||||
return err
|
||||
}
|
||||
|
||||
// MarkOfflineAndGetIDs marque les agents inactifs et retourne leurs IDs.
|
||||
func (d *DB) MarkOfflineAndGetIDs(timeoutSec int64) ([]string, error) {
|
||||
cutoff := time.Now().Unix() - timeoutSec
|
||||
rows, err := d.conn.Query(
|
||||
`SELECT id FROM agents WHERE last_seen < ? AND status != 'offline'`, cutoff)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var ids []string
|
||||
for rows.Next() {
|
||||
var id string
|
||||
_ = rows.Scan(&id)
|
||||
ids = append(ids, id)
|
||||
}
|
||||
if err = rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
rows.Close()
|
||||
if len(ids) > 0 {
|
||||
_, err = d.conn.Exec(
|
||||
`UPDATE agents SET status='offline' WHERE last_seen < ? AND status != 'offline'`, cutoff)
|
||||
}
|
||||
return ids, err
|
||||
}
|
||||
|
||||
func init() {
|
||||
log.SetFlags(log.LstdFlags | log.Lshortfile)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user