mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat: add chat debug retention purge (#24943)
> Mux is acting on Mike's behalf. Adds configurable retention for chat debug data, including the purge query, updated_at index, site config, experimental API, SDK types, frontend lifecycle setting, and docs. The purge deletes debug runs older than the configured retention window and relies on existing cascades to delete steps. The default retention is 30 days, and setting the value to 0 disables the purge.
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
-- updated_at is the retention clock used by DeleteOldChatDebugRuns.
|
||||
-- Set it on every write to keep retention semantics correct.
|
||||
-- name: InsertChatDebugRun :one
|
||||
INSERT INTO chat_debug_runs (
|
||||
chat_id,
|
||||
@@ -39,6 +41,7 @@ RETURNING *;
|
||||
-- write-once-finalize pattern where fields are set at creation
|
||||
-- or finalization and never cleared back to NULL. The @now
|
||||
-- parameter keeps updated_at under the caller's clock.
|
||||
-- updated_at is also the retention clock used by DeleteOldChatDebugRuns.
|
||||
--
|
||||
-- finished_at is enforced as write-once at the SQL level: once
|
||||
-- populated it cannot be overwritten by a later call. Callers
|
||||
@@ -246,6 +249,23 @@ DELETE FROM chat_debug_runs
|
||||
WHERE chat_id = @chat_id::uuid
|
||||
AND id IN (SELECT id FROM affected_runs);
|
||||
|
||||
-- updated_at is the retention clock, so the window starts after the run
|
||||
-- stops being written to.
|
||||
-- Intentionally no finished_at IS NOT NULL guard: abandoned in-flight rows
|
||||
-- older than the cutoff are also purged.
|
||||
-- name: DeleteOldChatDebugRuns :execrows
|
||||
WITH deletable AS (
|
||||
SELECT id, chat_id
|
||||
FROM chat_debug_runs
|
||||
WHERE updated_at < @before_time::timestamptz
|
||||
ORDER BY updated_at ASC
|
||||
LIMIT @limit_count::int
|
||||
)
|
||||
DELETE FROM chat_debug_runs
|
||||
USING deletable
|
||||
WHERE chat_debug_runs.id = deletable.id
|
||||
AND chat_debug_runs.chat_id = deletable.chat_id;
|
||||
|
||||
-- name: FinalizeStaleChatDebugRows :one
|
||||
-- Marks orphaned in-progress rows as interrupted so they do not stay
|
||||
-- in a non-terminal state forever. The NOT IN list must match the
|
||||
|
||||
Reference in New Issue
Block a user