maintenance: pure-logic ticker decides forget/prune/check fires
This commit is contained in:
@@ -50,6 +50,40 @@ func (st *Store) GetRepoMaintenance(ctx context.Context, hostID string) (*HostRe
|
||||
return &m, nil
|
||||
}
|
||||
|
||||
// ListAllMaintenance returns every host_repo_maintenance row.
|
||||
// Used by the server-side maintenance ticker to iterate every
|
||||
// host on each tick. Order is unspecified (the ticker doesn't
|
||||
// care).
|
||||
func (st *Store) ListAllMaintenance(ctx context.Context) ([]HostRepoMaintenance, error) {
|
||||
rows, err := st.db.QueryContext(ctx,
|
||||
`SELECT host_id, forget_cron, forget_enabled,
|
||||
prune_cron, prune_enabled,
|
||||
check_cron, check_enabled, check_subset_pct
|
||||
FROM host_repo_maintenance`)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("store: list all maintenance: %w", err)
|
||||
}
|
||||
defer func() { _ = rows.Close() }()
|
||||
var out []HostRepoMaintenance
|
||||
for rows.Next() {
|
||||
var (
|
||||
m HostRepoMaintenance
|
||||
forgetEnabled, pruneEnabled, checkEnabled int
|
||||
)
|
||||
if err := rows.Scan(&m.HostID,
|
||||
&m.ForgetCron, &forgetEnabled,
|
||||
&m.PruneCron, &pruneEnabled,
|
||||
&m.CheckCron, &checkEnabled, &m.CheckSubsetPct); err != nil {
|
||||
return nil, fmt.Errorf("store: scan maintenance: %w", err)
|
||||
}
|
||||
m.ForgetEnabled = forgetEnabled != 0
|
||||
m.PruneEnabled = pruneEnabled != 0
|
||||
m.CheckEnabled = checkEnabled != 0
|
||||
out = append(out, m)
|
||||
}
|
||||
return out, rows.Err()
|
||||
}
|
||||
|
||||
// UpdateRepoMaintenance replaces every editable field. Doesn't bump
|
||||
// the schedule version — these run on the server's own ticker, not
|
||||
// the agent's local cron, so the agent doesn't need to know.
|
||||
|
||||
Reference in New Issue
Block a user