From f358e57019d5915dbf9b8427222907eb86e8d81f Mon Sep 17 00:00:00 2001 From: Ricardo Garim Date: Mon, 9 Feb 2026 10:55:48 -0300 Subject: [PATCH 1/4] fix: add TTL index to statistics collection for automatic cleanup --- packages/models/src/models/Statistics.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/models/src/models/Statistics.ts b/packages/models/src/models/Statistics.ts index 8a1dae77dc76e..47ddb6a633f93 100644 --- a/packages/models/src/models/Statistics.ts +++ b/packages/models/src/models/Statistics.ts @@ -10,7 +10,10 @@ export class StatisticsRaw extends BaseRaw implements IStatisticsModel { } protected override modelIndexes(): IndexDescription[] { - return [{ key: { createdAt: -1 } }]; + return [ + { key: { createdAt: -1 } }, + { key: { createdAt: 1 }, expireAfterSeconds: 365 * 24 * 60 * 60 }, // expire after 1 year + ]; } async findLast(): Promise { From 073dfa8bbeae58526a95d53330872cdad578439b Mon Sep 17 00:00:00 2001 From: Ricardo Garim Date: Mon, 9 Feb 2026 10:55:52 -0300 Subject: [PATCH 2/4] chore: add changeset --- .changeset/young-humans-stare.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/young-humans-stare.md diff --git a/.changeset/young-humans-stare.md b/.changeset/young-humans-stare.md new file mode 100644 index 0000000000000..c887f9479f673 --- /dev/null +++ b/.changeset/young-humans-stare.md @@ -0,0 +1,5 @@ +--- +'@rocket.chat/models': patch +--- + +Adds automatic cleanup of statistics collection with 1-year retention via TTL index. From 6df9fef0d93e14cd14d5cdc8f2b258cd6f78ae37 Mon Sep 17 00:00:00 2001 From: Ricardo Garim Date: Mon, 9 Feb 2026 13:20:35 -0300 Subject: [PATCH 3/4] fix: unify statistics indexes with TTL expiration and add migration --- apps/meteor/server/startup/migrations/index.ts | 1 + apps/meteor/server/startup/migrations/v336.ts | 15 +++++++++++++++ packages/models/src/models/Statistics.ts | 5 +---- 3 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 apps/meteor/server/startup/migrations/v336.ts diff --git a/apps/meteor/server/startup/migrations/index.ts b/apps/meteor/server/startup/migrations/index.ts index d10693f181110..deadd9ff88f59 100644 --- a/apps/meteor/server/startup/migrations/index.ts +++ b/apps/meteor/server/startup/migrations/index.ts @@ -41,5 +41,6 @@ import './v332'; import './v333'; import './v334'; import './v335'; +import './v336'; export * from './xrun'; diff --git a/apps/meteor/server/startup/migrations/v336.ts b/apps/meteor/server/startup/migrations/v336.ts new file mode 100644 index 0000000000000..2f0e174e900ab --- /dev/null +++ b/apps/meteor/server/startup/migrations/v336.ts @@ -0,0 +1,15 @@ +import { Statistics } from '@rocket.chat/models'; + +import { addMigration } from '../../lib/migrations'; + +addMigration({ + version: 336, + name: 'Remove redundant statistics createdAt descending index', + async up() { + try { + await Statistics.col.dropIndex('createdAt_-1'); + } catch { + // Index might not exist on fresh installations + } + }, +}); diff --git a/packages/models/src/models/Statistics.ts b/packages/models/src/models/Statistics.ts index 47ddb6a633f93..38f8e82c6afbf 100644 --- a/packages/models/src/models/Statistics.ts +++ b/packages/models/src/models/Statistics.ts @@ -10,10 +10,7 @@ export class StatisticsRaw extends BaseRaw implements IStatisticsModel { } protected override modelIndexes(): IndexDescription[] { - return [ - { key: { createdAt: -1 } }, - { key: { createdAt: 1 }, expireAfterSeconds: 365 * 24 * 60 * 60 }, // expire after 1 year - ]; + return [{ key: { createdAt: 1 }, expireAfterSeconds: 365 * 24 * 60 * 60 }]; } async findLast(): Promise { From d57f8cbf7d77d68f527d21ee0fc9c8282fe828db Mon Sep 17 00:00:00 2001 From: Ricardo Garim Date: Mon, 9 Feb 2026 16:47:31 -0300 Subject: [PATCH 4/4] chore: add changeset --- .changeset/dry-gifts-report.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/dry-gifts-report.md diff --git a/.changeset/dry-gifts-report.md b/.changeset/dry-gifts-report.md new file mode 100644 index 0000000000000..353dfaa2c857f --- /dev/null +++ b/.changeset/dry-gifts-report.md @@ -0,0 +1,6 @@ +--- +'@rocket.chat/models': patch +'@rocket.chat/meteor': patch +--- + +Adds migration to remove redundant statistics index after TTL index consolidation.