From 2ebce58f28c593b03e71264cd340ecf659d19917 Mon Sep 17 00:00:00 2001 From: Cesar Gonzalez Date: Mon, 1 Apr 2024 12:12:04 -0500 Subject: [PATCH] [PM-6426] Implementing eventUploadInterval using TaskScheduler --- apps/browser/src/background/main.background.ts | 1 + .../event-upload-service.factory.ts | 8 +++++++- libs/angular/src/services/jslib-services.module.ts | 8 +++++++- .../src/services/event/event-upload.service.ts | 13 +++++++++---- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/apps/browser/src/background/main.background.ts b/apps/browser/src/background/main.background.ts index 80393e8419..7fb6bbc736 100644 --- a/apps/browser/src/background/main.background.ts +++ b/apps/browser/src/background/main.background.ts @@ -749,6 +749,7 @@ export default class MainBackground { this.stateProvider, this.logService, this.accountService, + this.taskSchedulerService, ); this.eventCollectionService = new EventCollectionService( this.cipherService, diff --git a/apps/browser/src/background/service-factories/event-upload-service.factory.ts b/apps/browser/src/background/service-factories/event-upload-service.factory.ts index 4e1d7949be..66d7dd667f 100644 --- a/apps/browser/src/background/service-factories/event-upload-service.factory.ts +++ b/apps/browser/src/background/service-factories/event-upload-service.factory.ts @@ -17,13 +17,18 @@ import { } from "../../platform/background/service-factories/log-service.factory"; import { stateProviderFactory } from "../../platform/background/service-factories/state-provider.factory"; import { StateServiceInitOptions } from "../../platform/background/service-factories/state-service.factory"; +import { + taskSchedulerServiceFactory, + TaskSchedulerServiceInitOptions, +} from "../../platform/background/service-factories/task-scheduler-service.factory"; type EventUploadServiceOptions = FactoryOptions; export type EventUploadServiceInitOptions = EventUploadServiceOptions & ApiServiceInitOptions & StateServiceInitOptions & - LogServiceInitOptions; + LogServiceInitOptions & + TaskSchedulerServiceInitOptions; export function eventUploadServiceFactory( cache: { eventUploadService?: AbstractEventUploadService } & CachedServices, @@ -39,6 +44,7 @@ export function eventUploadServiceFactory( await stateProviderFactory(cache, opts), await logServiceFactory(cache, opts), await accountServiceFactory(cache, opts), + await taskSchedulerServiceFactory(cache, opts), ), ); } diff --git a/libs/angular/src/services/jslib-services.module.ts b/libs/angular/src/services/jslib-services.module.ts index 70d13e767d..e1ebed4467 100644 --- a/libs/angular/src/services/jslib-services.module.ts +++ b/libs/angular/src/services/jslib-services.module.ts @@ -737,7 +737,13 @@ const safeProviders: SafeProvider[] = [ safeProvider({ provide: EventUploadServiceAbstraction, useClass: EventUploadService, - deps: [ApiServiceAbstraction, StateProvider, LogService, AccountServiceAbstraction], + deps: [ + ApiServiceAbstraction, + StateProvider, + LogService, + AccountServiceAbstraction, + TaskSchedulerService, + ], }), safeProvider({ provide: EventCollectionServiceAbstraction, diff --git a/libs/common/src/services/event/event-upload.service.ts b/libs/common/src/services/event/event-upload.service.ts index 4ee4300c39..0495e593b1 100644 --- a/libs/common/src/services/event/event-upload.service.ts +++ b/libs/common/src/services/event/event-upload.service.ts @@ -7,6 +7,8 @@ import { AuthenticationStatus } from "../../auth/enums/authentication-status"; import { EventData } from "../../models/data/event.data"; import { EventRequest } from "../../models/request/event.request"; import { LogService } from "../../platform/abstractions/log.service"; +import { TaskSchedulerService } from "../../platform/abstractions/task-scheduler.service"; +import { ScheduledTaskNames } from "../../platform/enums/scheduled-task-name.enum"; import { StateProvider } from "../../platform/state"; import { UserId } from "../../types/guid"; @@ -19,6 +21,7 @@ export class EventUploadService implements EventUploadServiceAbstraction { private stateProvider: StateProvider, private logService: LogService, private accountService: AccountService, + private taskSchedulerService: TaskSchedulerService, ) {} init(checkOnInterval: boolean) { @@ -28,10 +31,12 @@ export class EventUploadService implements EventUploadServiceAbstraction { this.inited = true; if (checkOnInterval) { - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - this.uploadEvents(); - setInterval(() => this.uploadEvents(), 60 * 1000); // check every 60 seconds + void this.uploadEvents(); + void this.taskSchedulerService.setInterval( + () => this.uploadEvents(), + 60 * 1000, // check every 60 seconds + ScheduledTaskNames.eventUploadsInterval, + ); } }