mirror of
https://github.com/coder/coder.git
synced 2026-06-02 20:48:20 +00:00
a876287d36
Adds a background job in `dbpurge` that periodically archives chats inactive beyond a configurable threshold. Each archived root chat gets a background audit entry tagged `chat_auto_archive`. Disabled by default. * New `AutoArchiveInactiveChats` SQL query with LATERAL last-activity subquery and partial index on archive candidates * `site_configs`-backed `auto_archive_days` setting with admin-only PUT, any-authenticated-user GET * Cascade archive via `root_chat_id`; pinned chats and active threads exempt * Root-only audit dispatch on detached context, matching manual archive (`patchChat`) behavior * 11 subtests covering disabled no-op, boundary, deleted messages, child activity, pinned exemption, multi-owner, idempotency, and batch pagination PR #24643 adds per-owner digest notifications. PR #24704 adds the requisite UI controls. > 🤖
35 lines
790 B
Go
35 lines
790 B
Go
package audit
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
|
|
"cdr.dev/slog/v3"
|
|
)
|
|
|
|
type BackgroundSubsystem string
|
|
|
|
const (
|
|
BackgroundSubsystemDormancy BackgroundSubsystem = "dormancy"
|
|
BackgroundSubsystemChatAutoArchive BackgroundSubsystem = "chat_auto_archive"
|
|
)
|
|
|
|
func BackgroundTaskFields(subsystem BackgroundSubsystem) map[string]string {
|
|
return map[string]string{
|
|
"automatic_actor": "coder",
|
|
"automatic_subsystem": string(subsystem),
|
|
}
|
|
}
|
|
|
|
func BackgroundTaskFieldsBytes(ctx context.Context, logger slog.Logger, subsystem BackgroundSubsystem) []byte {
|
|
af := BackgroundTaskFields(subsystem)
|
|
|
|
wriBytes, err := json.Marshal(af)
|
|
if err != nil {
|
|
logger.Error(ctx, "marshal additional fields for background audit", slog.Error(err))
|
|
return []byte("{}")
|
|
}
|
|
|
|
return wriBytes
|
|
}
|