Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 31 additions & 21 deletions backend/src/entities/cron-jobs/cron-jobs.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,15 @@ export class CronJobsService {
if (!isJobAdded) {
return;
}
const startTime = new Date();
const startTimeString = `${startTime.getHours()}:${startTime.getMinutes()}:${startTime.getSeconds()}`;
await slackPostMessage(`midnight cron started at ${startTimeString}`, Constants.EXCEPTIONS_CHANNELS);
await slackPostMessage(
`midnight cron started at ${Constants.CURRENT_TIME_FORMATTED()}`,
Constants.EXCEPTIONS_CHANNELS,
);
await this.checkUsersLogsAndUpdateActionsUseCase.execute();
const endTime = new Date();
const endTimeString = `${endTime.getHours()}:${endTime.getMinutes()}:${endTime.getSeconds()}`;
await slackPostMessage(`midnight cron finished at ${endTimeString}`, Constants.EXCEPTIONS_CHANNELS);
await slackPostMessage(
`midnight cron finished at ${Constants.CURRENT_TIME_FORMATTED()}`,
Constants.EXCEPTIONS_CHANNELS,
);
} catch (e) {
Sentry.captureException(e);
console.error(e);
Expand All @@ -53,29 +55,28 @@ export class CronJobsService {
if (!isJobAdded) {
return;
}
const startTime = new Date();
const startTimeString = `${startTime.getHours()}:${startTime.getMinutes()}:${startTime.getSeconds()}`;
await slackPostMessage(`email cron started at ${startTimeString}`, Constants.EXCEPTIONS_CHANNELS);

await slackPostMessage(
`email cron started at ${Constants.CURRENT_TIME_FORMATTED()}`,
Constants.EXCEPTIONS_CHANNELS,
);

const emails = await this.checkUsersActionsAndMailingUsersUseCase.execute();
await slackPostMessage(`found ${emails.length} emails. starting messaging`, Constants.EXCEPTIONS_CHANNELS);
const mailingResults = await this.emailService.sendRemindersToUsers(emails);
if (mailingResults.length === 0) {
const mailingResultToString = 'Sending emails triggered, but no emails sent (no users found)';
await slackPostMessage(mailingResultToString, Constants.EXCEPTIONS_CHANNELS);
const endTime = new Date();
const endTimeString = `${endTime.getHours()}:${endTime.getMinutes()}:${endTime.getSeconds()}`;
await slackPostMessage(`morning cron finished at ${endTimeString}`, Constants.EXCEPTIONS_CHANNELS);
await slackPostMessage(
`morning cron finished at ${Constants.CURRENT_TIME_FORMATTED()}`,
Constants.EXCEPTIONS_CHANNELS,
);
} else {
const mailingResultToString = this.emailCronResultToSlackString(mailingResults);
if (mailingResultToString) {
await slackPostMessage(mailingResultToString, Constants.EXCEPTIONS_CHANNELS);
} else {
await slackPostMessage(JSON.stringify(mailingResults), Constants.EXCEPTIONS_CHANNELS);
}
const endTime = new Date();
const endTimeString = `${endTime.getHours()}:${endTime.getMinutes()}:${endTime.getSeconds()}`;
await slackPostMessage(`morning cron finished at ${endTimeString}`, Constants.EXCEPTIONS_CHANNELS);
await this.sendEmailResultsToSlack(mailingResults);
await slackPostMessage(
`morning cron finished at ${Constants.CURRENT_TIME_FORMATTED()}`,
Constants.EXCEPTIONS_CHANNELS,
);
}
} catch (e) {
Sentry.captureException(e);
Expand Down Expand Up @@ -124,4 +125,13 @@ export class CronJobsService {
return null;
}
}

private async sendEmailResultsToSlack(results: Array<ICronMessagingResults>): Promise<void> {
const chunkSize = 20;
for (let i = 0; i < results.length; i += chunkSize) {
const chunk = results.slice(i, i + chunkSize);
const message = this.emailCronResultToSlackString(chunk);
await slackPostMessage(message, Constants.EXCEPTIONS_CHANNELS);
}
}
}
6 changes: 6 additions & 0 deletions backend/src/helpers/constants/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,12 @@ export const Constants = {
PASSWORD_LENGTH: 256,
DIGEST: 'sha512',

CURRENT_TIME_FORMATTED: (): string => {
const now = new Date();
const padString = (n: number) => n.toString().padStart(2, '0');
return `${padString(now.getHours())}:${padString(now.getMinutes())}:${padString(now.getSeconds())}`;
},

ONE_WEEK_AGO: (): Date => {
const today = new Date();
const oneWeekAgo = today.getDate() - 7;
Expand Down
Loading