diff --git a/server/src/controllers/analytics_controller.ts b/server/src/controllers/analytics_controller.ts index cbe5584..9edacdc 100644 --- a/server/src/controllers/analytics_controller.ts +++ b/server/src/controllers/analytics_controller.ts @@ -99,6 +99,9 @@ export function terminate() { async function runTask(task: AnalyticsTask): Promise { return new Promise((resolver: TaskResolver) => { + if(!analyticsService.ready) { + throw new Error(`Can't send task, analytics is not ready`); + } taskResolvers.set(task.id, resolver); // it will be resolved in onTaskResult() analyticsService.sendTask(task); // we dont wait for result here }); @@ -291,15 +294,23 @@ export async function runDetect(id: AnalyticUnit.AnalyticUnitId) { } } -export async function remove(id: AnalyticUnit.AnalyticUnitId) { - let task = new AnalyticsTask(id, AnalyticsTaskType.CANCEL); - await runTask(task); +export async function remove(analyticUnitId: AnalyticUnit.AnalyticUnitId) { + await cancelAnalyticsTask(analyticUnitId); if(dataPuller !== undefined) { - dataPuller.deleteUnit(id); + dataPuller.deleteUnit(analyticUnitId); } - await AnalyticUnit.remove(id); + await AnalyticUnit.remove(analyticUnitId); +} + +async function cancelAnalyticsTask(analyticUnitId: AnalyticUnit.AnalyticUnitId) { + try { + let task = new AnalyticsTask(analyticUnitId, AnalyticsTaskType.CANCEL); + await runTask(task); + } catch(e) { + console.log(`Can't cancel analytics task for "${analyticUnitId}": ${e.message}`); + } } export async function deleteNonDetectedSegments(id, payload) { diff --git a/server/src/services/analytics_service.ts b/server/src/services/analytics_service.ts index 8ce5b53..c352379 100644 --- a/server/src/services/analytics_service.ts +++ b/server/src/services/analytics_service.ts @@ -32,7 +32,7 @@ export class AnalyticsService { public async sendTask(task: AnalyticsTask): Promise { if(!this._ready) { - return Promise.reject("Analytics is not ready"); + throw new Error('Analytics is not ready'); } let method = task.type === AnalyticsTaskType.PUSH ? AnalyticsMessageMethod.DATA : AnalyticsMessageMethod.TASK diff --git a/server/src/services/data_puller.ts b/server/src/services/data_puller.ts index 4ab4209..ee9b535 100644 --- a/server/src/services/data_puller.ts +++ b/server/src/services/data_puller.ts @@ -165,7 +165,10 @@ export class DataPuller { } try { - const time = this._unitTimes[analyticUnit.id] + const time = this._unitTimes[analyticUnit.id]; + if(time === undefined) { + throw new Error(`Analytic unit ${analyticUnit.id} is deleted from puller`); + } const now = Date.now(); const res = await this.pullData(analyticUnit, time, now); this._grafanaAvailableConsoleReporter(true);