import RunCron from '../../Utils/Cron'; import LIMIT_MAX from 'Common/Types/Database/LimitMax'; import OneUptimeDate from 'Common/Types/Date'; import { EVERY_MINUTE } from 'Common/Utils/CronTime'; import ScheduledMaintenanceService from 'CommonServer/Services/ScheduledMaintenanceService'; import ScheduledMaintenanceStateService from 'CommonServer/Services/ScheduledMaintenanceStateService'; import QueryHelper from 'CommonServer/Types/Database/QueryHelper'; import ScheduledMaintenance from 'Model/Models/ScheduledMaintenance'; import ScheduledMaintenanceState from 'Model/Models/ScheduledMaintenanceState'; RunCron( 'ScheduledMaintenance:ChangeStateToEnded', { schedule: EVERY_MINUTE, runOnStartup: false }, async () => { // get all scheduled events of all the projects. const events: Array = await ScheduledMaintenanceService.findBy({ query: { currentScheduledMaintenanceState: { isOngoingState: true, } as any, endsAt: QueryHelper.lessThan( OneUptimeDate.getCurrentDate() ), }, props: { isRoot: true, }, limit: LIMIT_MAX, skip: 0, select: { _id: true, projectId: true, changeMonitorStatusToId: true, shouldStatusPageSubscribersBeNotifiedWhenEventChangedToEnded: true, monitors: { _id: true, }, }, }); // change their state to Ongoing. for (const event of events) { const scheduledMaintenanceState: ScheduledMaintenanceState | null = await ScheduledMaintenanceStateService.findOneBy({ query: { projectId: event.projectId!, isEndedState: true, }, select: { _id: true, }, props: { isRoot: true, }, }); if (!scheduledMaintenanceState || !scheduledMaintenanceState.id) { continue; } await ScheduledMaintenanceService.changeScheduledMaintenanceState({ projectId: event.projectId!, scheduledMaintenanceId: event.id!, scheduledMaintenanceStateId: scheduledMaintenanceState.id, shouldNotifyStatusPageSubscribers: Boolean( event.shouldStatusPageSubscribersBeNotifiedWhenEventChangedToEnded ), isSubscribersNotified: false, notifyOwners: true, props: { isRoot: true, }, }); } } );