feat: implement queue pruning and message rotation
All checks were successful
check / check (push) Successful in 1m2s
All checks were successful
check / check (push) Successful in 1m2s
Enforce QUEUE_MAX_AGE and MAX_HISTORY config values that previously existed but were not applied. The existing cleanup loop now also: - Prunes client_queues entries older than QUEUE_MAX_AGE (default 48h) - Rotates messages per target (channel/DM) beyond MAX_HISTORY (default 10000) - Removes orphaned messages no longer referenced by any client queue closes #40
This commit is contained in:
@@ -200,4 +200,63 @@ func (hdlr *Handlers) runCleanup(
|
||||
"deleted", deleted,
|
||||
)
|
||||
}
|
||||
|
||||
hdlr.pruneQueuesAndMessages(ctx)
|
||||
}
|
||||
|
||||
// pruneQueuesAndMessages removes old client_queues entries
|
||||
// per QUEUE_MAX_AGE, rotates messages per MAX_HISTORY, and
|
||||
// cleans up orphaned messages.
|
||||
func (hdlr *Handlers) pruneQueuesAndMessages(
|
||||
ctx context.Context,
|
||||
) {
|
||||
queueMaxAge := hdlr.params.Config.QueueMaxAge
|
||||
if queueMaxAge > 0 {
|
||||
queueCutoff := time.Now().Add(
|
||||
-time.Duration(queueMaxAge) * time.Second,
|
||||
)
|
||||
|
||||
pruned, err := hdlr.params.Database.
|
||||
PruneOldQueueEntries(ctx, queueCutoff)
|
||||
if err != nil {
|
||||
hdlr.log.Error(
|
||||
"queue pruning failed", "error", err,
|
||||
)
|
||||
} else if pruned > 0 {
|
||||
hdlr.log.Info(
|
||||
"pruned old queue entries",
|
||||
"deleted", pruned,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
maxHistory := hdlr.params.Config.MaxHistory
|
||||
if maxHistory > 0 {
|
||||
rotated, err := hdlr.params.Database.
|
||||
RotateChannelMessages(ctx, maxHistory)
|
||||
if err != nil {
|
||||
hdlr.log.Error(
|
||||
"message rotation failed", "error", err,
|
||||
)
|
||||
} else if rotated > 0 {
|
||||
hdlr.log.Info(
|
||||
"rotated old messages",
|
||||
"deleted", rotated,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
orphaned, err := hdlr.params.Database.
|
||||
PruneOrphanedMessages(ctx)
|
||||
if err != nil {
|
||||
hdlr.log.Error(
|
||||
"orphan message cleanup failed",
|
||||
"error", err,
|
||||
)
|
||||
} else if orphaned > 0 {
|
||||
hdlr.log.Info(
|
||||
"pruned orphaned messages",
|
||||
"deleted", orphaned,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user