Skip to content

feat(queue-stats): replace Content-ID column with per-row schedule#21

Merged
nxships merged 1 commit into
mainfrom
feat/queue-stats-schedule-column
May 25, 2026
Merged

feat(queue-stats): replace Content-ID column with per-row schedule#21
nxships merged 1 commit into
mainfrom
feat/queue-stats-schedule-column

Conversation

@nxships
Copy link
Copy Markdown
Contributor

@nxships nxships commented May 25, 2026

Summary

  • Drops the raw Content ID column from the Settings → Refresh queue "Top contents" table; adds a state-dependent Schedule column instead.
  • Rows below the attempt cap show the earliest retry countdown (Retry in 45m / "Versuch in 45m", grey); rows at the cap show the cleanup countdown (Cleanup in 23h / "Löschung in 23h", yellow) derived from the existing 24h ExhaustedRetention TTL.
  • Both times are aggregated per content_id via two MIN(CASE…) expressions over last_failed_at / last_attempted_at in the same Top-Contents query — no schema change. The triple-used SQLite-DateTime parse is extracted into ParseSqliteDateTimeUtc.
  • RefreshQueueMaintenanceContributor.ExhaustedRetention is promoted from private to internal so the stats service and the maintenance contributor share one source of truth for the TTL.
  • Localisation: removes queuestats.col.content_id; adds queuestats.col.schedule + four queuestats.schedule.* keys in Strings.resx and Strings.de.resx.

Test plan

  • Build Debug|x64 is clean (verified locally: 0 warnings, 0 errors).
  • In FFXIV, open Settings → Refresh queue and confirm the Top-Contents table no longer shows Content-ID, instead shows: Name | Zeilen | Max. Versuche | Zeitplan.
  • Row with a recent failure (attempt_count < 10) shows "Versuch in *h *m" in grey and the countdown ticks between the 3 s snapshot refreshes.
  • Row with no failure yet (attempt_count < 10, LastFailedAt = NULL) shows "Versuch steht an" in grey.
  • Row at 10/10 shows "Löschung in *h *m" in yellow.
  • EN locale renders identical layout with "Schedule" / "Retry in …" / "Cleanup in …" wording.

The Settings "Top contents" table dropped its raw Content-ID column in
favour of a state-dependent Schedule column: rows below the attempt cap
show the earliest retry countdown ("Retry in 45m"), rows at the cap show
the cleanup countdown ("Cleanup in 23h") driven by the 24h
ExhaustedRetention TTL.

Both times are aggregated per content_id in the existing Top-Contents
SQL via two MIN(CASE…) expressions over LastFailedAt / LastAttemptedAt;
no schema change. The shared SQLite-DateTime parse was extracted into a
helper since it now runs three times.

ExhaustedRetention is bumped from private to internal so the stats
service can reference the same TTL the maintenance contributor enforces.
@nxships nxships enabled auto-merge (squash) May 25, 2026 12:22
@nxships nxships merged commit d0f882f into main May 25, 2026
2 checks passed
@nxships nxships deleted the feat/queue-stats-schedule-column branch May 25, 2026 12:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant