package db import ( "time" "crypto-miner-server/internal/models" ) // ListStaleOnlineAgents returns online agents whose last_seen is older than // the given threshold. Uses indexed status+last_seen filters instead of a full // table scan. func (d *Database) ListStaleOnlineAgents(olderThan time.Duration) ([]*models.Agent, error) { cutoff := time.Now().Add(-olderThan) query := `SELECT ` + agentSelectCols + ` FROM agents WHERE status = 'online' AND last_seen < ? ORDER BY last_seen ASC` rows, err := d.Query(query, cutoff) if err != nil { return nil, err } defer rows.Close() var agents []*models.Agent for rows.Next() { a, err := d.scanAgent(rows) if err != nil { return nil, err } agents = append(agents, a) } return agents, rows.Err() }