diff --git a/.changeset/fifty-moles-boil.md b/.changeset/fifty-moles-boil.md new file mode 100644 index 0000000000000..d4e1edbf9923c --- /dev/null +++ b/.changeset/fifty-moles-boil.md @@ -0,0 +1,7 @@ +--- +"@rocket.chat/meteor": patch +"@rocket.chat/model-typings": patch +"@rocket.chat/models": patch +--- + +Fixes an issue where the app's logs index was not being created by default sometimes, also set to be always 30 days diff --git a/apps/meteor/ee/server/apps/startup.ts b/apps/meteor/ee/server/apps/startup.ts index 683e40dbb6b1e..2b24859ff122f 100644 --- a/apps/meteor/ee/server/apps/startup.ts +++ b/apps/meteor/ee/server/apps/startup.ts @@ -24,7 +24,7 @@ export const startupApp = async function startupApp() { }, ], public: true, - hidden: false, + hidden: true, alert: 'Apps_Logs_TTL_Alert', }); @@ -69,33 +69,6 @@ export const startupApp = async function startupApp() { // Disable apps that depend on add-ons (external modules) if they are invalidated License.onModule(disableAppsWithAddonsCallback); - settings.watch('Apps_Logs_TTL', async (value) => { - // TODO: remove this feature, initialized is always false first time - if (!Apps.isInitialized()) { - return; - } - let expireAfterSeconds = 0; - - switch (value) { - case '7_days': - expireAfterSeconds = 604800; - break; - case '14_days': - expireAfterSeconds = 1209600; - break; - case '30_days': - expireAfterSeconds = 2592000; - break; - } - - if (!expireAfterSeconds) { - return; - } - - const model = Apps._logModel; - await model?.resetTTLIndex(expireAfterSeconds); - }); - Apps.initialize(); void Apps.load(); diff --git a/packages/model-typings/src/models/IAppLogsModel.ts b/packages/model-typings/src/models/IAppLogsModel.ts index 6a6bc765cd8ed..0ff8ae0a00cf5 100644 --- a/packages/model-typings/src/models/IAppLogsModel.ts +++ b/packages/model-typings/src/models/IAppLogsModel.ts @@ -4,6 +4,5 @@ import type { IBaseModel } from './IBaseModel'; // TODO: type for AppLogs export interface IAppLogsModel extends IBaseModel { - resetTTLIndex(expireAfterSeconds: number): Promise; remove(query: Filter): Promise; } diff --git a/packages/models/src/models/AppLogsModel.ts b/packages/models/src/models/AppLogsModel.ts index f9f7db79d86c5..de7301e24743f 100644 --- a/packages/models/src/models/AppLogsModel.ts +++ b/packages/models/src/models/AppLogsModel.ts @@ -4,18 +4,25 @@ import type { Db, DeleteResult, Filter } from 'mongodb'; import { BaseRaw } from './BaseRaw'; export class AppsLogsModel extends BaseRaw implements IAppLogsModel { - constructor(db: Db) { - super(db, 'apps_logs', undefined, { _updatedAtIndexOptions: { expireAfterSeconds: 60 * 60 * 24 * 30 } }); + constructor( + db: Db, + private readonly expireAfterSeconds: number = 60 * 60 * 24 * 30, + ) { + super(db, 'apps_logs', undefined); } - remove(query: Filter): Promise { - return this.col.deleteMany(query); + protected modelIndexes() { + return [ + { + key: { + _updatedAt: 1, + }, + expireAfterSeconds: this.expireAfterSeconds, + }, + ]; } - async resetTTLIndex(expireAfterSeconds: number): Promise { - if (await this.col.indexExists('_updatedAt_1')) { - await this.col.dropIndex('_updatedAt_1'); - } - await this.col.createIndex({ _updatedAt: 1 }, { expireAfterSeconds }); + remove(query: Filter): Promise { + return this.col.deleteMany(query); } } diff --git a/packages/models/src/models/BaseRaw.ts b/packages/models/src/models/BaseRaw.ts index 0c28c17913e3a..d6c75759c3ecf 100644 --- a/packages/models/src/models/BaseRaw.ts +++ b/packages/models/src/models/BaseRaw.ts @@ -44,7 +44,6 @@ type ModelOptions = { preventSetUpdatedAt?: boolean; collectionNameResolver?: (name: string) => string; collection?: CollectionOptions; - _updatedAtIndexOptions?: Omit; }; export abstract class BaseRaw< @@ -74,7 +73,7 @@ export abstract class BaseRaw< private db: Db, protected name: string, protected trash?: Collection, - private options?: ModelOptions, + options?: ModelOptions, ) { this.collectionName = options?.collectionNameResolver ? options.collectionNameResolver(name) : getCollectionName(name); @@ -91,9 +90,6 @@ export abstract class BaseRaw< public async createIndexes() { const indexes = this.modelIndexes(); - if (this.options?._updatedAtIndexOptions) { - indexes?.push({ ...this.options._updatedAtIndexOptions, key: { _updatedAt: 1 } }); - } if (indexes?.length) { if (this.pendingIndexes) {