diff --git a/.changeset/empty-boxes-cross.md b/.changeset/empty-boxes-cross.md new file mode 100644 index 0000000000000..532d9a9e287cc --- /dev/null +++ b/.changeset/empty-boxes-cross.md @@ -0,0 +1,5 @@ +--- +'@rocket.chat/meteor': patch +--- + +Fixes engagement dashboard loading unnecessary data into memory on startup diff --git a/apps/meteor/ee/server/lib/engagementDashboard/messages.ts b/apps/meteor/ee/server/lib/engagementDashboard/messages.ts index 55bcae0da3aeb..c108fa37340f9 100644 --- a/apps/meteor/ee/server/lib/engagementDashboard/messages.ts +++ b/apps/meteor/ee/server/lib/engagementDashboard/messages.ts @@ -34,11 +34,11 @@ export const handleMessagesDeleted = async (message: IMessage, { room }: { room: }; export const fillFirstDaysOfMessagesIfNeeded = async (date: Date): Promise => { - const messagesFromAnalytics = await Analytics.findByTypeBeforeDate({ + const messagesFromAnalytics = await Analytics.findOneByTypeBeforeDate({ type: 'messages', date: convertDateToInt(date), - }).toArray(); - if (!messagesFromAnalytics.length) { + }); + if (!messagesFromAnalytics) { const startOfPeriod = moment(date).subtract(90, 'days').toDate(); const messages = await Messages.getTotalOfMessagesSentByDate({ start: startOfPeriod, diff --git a/apps/meteor/ee/server/lib/engagementDashboard/users.ts b/apps/meteor/ee/server/lib/engagementDashboard/users.ts index bed16b60903cd..7b4451c8340ec 100644 --- a/apps/meteor/ee/server/lib/engagementDashboard/users.ts +++ b/apps/meteor/ee/server/lib/engagementDashboard/users.ts @@ -17,11 +17,11 @@ export const handleUserCreated = async (user: IUser): Promise => { }; export const fillFirstDaysOfUsersIfNeeded = async (date: Date): Promise => { - const usersFromAnalytics = await Analytics.findByTypeBeforeDate({ + const usersFromAnalytics = await Analytics.findOneByTypeBeforeDate({ type: 'users', date: convertDateToInt(date), - }).toArray(); - if (!usersFromAnalytics.length) { + }); + if (!usersFromAnalytics) { const startOfPeriod = moment(date).subtract(90, 'days').toDate(); const users = await Users.getTotalOfRegisteredUsersByDate({ start: startOfPeriod, diff --git a/packages/model-typings/src/models/IAnalyticsModel.ts b/packages/model-typings/src/models/IAnalyticsModel.ts index 1baec42d0c585..35ddf5f4fb964 100644 --- a/packages/model-typings/src/models/IAnalyticsModel.ts +++ b/packages/model-typings/src/models/IAnalyticsModel.ts @@ -1,5 +1,5 @@ import type { IAnalytics, IRoom } from '@rocket.chat/core-typings'; -import type { AggregationCursor, FindCursor, FindOptions, UpdateResult, Document } from 'mongodb'; +import type { AggregationCursor, FindOptions, UpdateResult, Document } from 'mongodb'; import type { IBaseModel } from './IBaseModel'; import type { IChannelsWithNumberOfMessagesBetweenDate } from './IRoomsModel'; @@ -38,7 +38,7 @@ export interface IAnalyticsModel extends IBaseModel { _id: IAnalytics['date']; users: number; }>; - findByTypeBeforeDate({ type, date }: { type: IAnalytics['type']; date: IAnalytics['date'] }): FindCursor; + findOneByTypeBeforeDate({ type, date }: { type: IAnalytics['type']; date: IAnalytics['date'] }): Promise; findRoomsByTypesWithNumberOfMessagesBetweenDate(params: { types: Array; start: number; diff --git a/packages/models/src/models/Analytics.ts b/packages/models/src/models/Analytics.ts index a26cb50500fd3..a4bdfddcd6c6f 100644 --- a/packages/models/src/models/Analytics.ts +++ b/packages/models/src/models/Analytics.ts @@ -1,7 +1,7 @@ import type { IAnalytics, IRoom } from '@rocket.chat/core-typings'; import type { IAnalyticsModel, IChannelsWithNumberOfMessagesBetweenDate } from '@rocket.chat/model-typings'; import { Random } from '@rocket.chat/random'; -import type { AggregationCursor, FindCursor, Db, IndexDescription, FindOptions, UpdateResult, Document, Collection } from 'mongodb'; +import type { AggregationCursor, Db, IndexDescription, FindOptions, UpdateResult, Document, Collection } from 'mongodb'; import { BaseRaw } from './BaseRaw'; import { readSecondaryPreferred } from '../readSecondaryPreferred'; @@ -212,8 +212,8 @@ export class AnalyticsRaw extends BaseRaw implements IAnalyticsModel ); } - findByTypeBeforeDate({ type, date }: { type: IAnalytics['type']; date: IAnalytics['date'] }): FindCursor { - return this.find({ type, date: { $lte: date } }); + findOneByTypeBeforeDate({ type, date }: { type: IAnalytics['type']; date: IAnalytics['date'] }): Promise { + return this.findOne({ type, date: { $lte: date } }); } getRoomsWithNumberOfMessagesBetweenDateQuery({