From afb878dce60f87dd863efee02396b237c47374ee Mon Sep 17 00:00:00 2001 From: Shailesh Baldaniya Date: Thu, 30 Sep 2021 21:20:30 +0530 Subject: [PATCH] Fix cancelJobByDataQuery for passing proper data query --- app/apps/server/bridges/scheduler.ts | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/app/apps/server/bridges/scheduler.ts b/app/apps/server/bridges/scheduler.ts index 856d7859eb71..a16dbc38101d 100644 --- a/app/apps/server/bridges/scheduler.ts +++ b/app/apps/server/bridges/scheduler.ts @@ -192,11 +192,12 @@ export class AppSchedulerBridge extends SchedulerBridge { * @returns Promise */ protected async cancelJobByDataQuery(data: object, appId: string): Promise { - this.orch.debugLog(`Canceling all jobs of App ${ appId } matching ${ JSON.stringify(data) }`); + const dataQuery = this.getQueryFromObject('data', data); + this.orch.debugLog(`Canceling all jobs of App ${ appId } matching ${ JSON.stringify(dataQuery) }`); await this.startScheduler(); const matcher = new RegExp(`_${ appId }$`); try { - await this.scheduler.cancel({ name: { $regex: matcher }, data }); + await this.scheduler.cancel({ name: { $regex: matcher }, ...dataQuery }); } catch (e) { console.error(e); } @@ -209,6 +210,23 @@ export class AppSchedulerBridge extends SchedulerBridge { } } + private getQueryFromObject(parent: string, data: object): object { + const query: { + [key: string]: any; + } = {}; + for (const [key, value] of Object.entries(data)) { + if (typeof value === 'object') { + const q = this.getQueryFromObject(key, value); + for (const [key, value] of Object.entries(q)) { + query[`${ parent }.${ key }`] = value; + } + } else { + query[`${ parent }.${ key }`] = value; + } + } + return query; + } + private decorateJobData(jobData: object | undefined, appId: string): object { return Object.assign({}, jobData, { appId }); }