From 45777a4e3e9195e01b7cbbf623b19b49fc145090 Mon Sep 17 00:00:00 2001 From: MarcosPierasNL <pieras.marcos@gmail.com> Date: Wed, 29 Jan 2025 14:14:59 +0100 Subject: [PATCH 1/5] feat: adds multiple queries --- src/readers/insightProcessor.ts | 9 +++++++-- src/readers/queryService.ts | 12 ++++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/readers/insightProcessor.ts b/src/readers/insightProcessor.ts index 10c7068..9b7e25f 100644 --- a/src/readers/insightProcessor.ts +++ b/src/readers/insightProcessor.ts @@ -84,9 +84,14 @@ export const insightProcessor = async () => { if (insight.userId == null) return; const ss = await ums.getUserSaveState(insight.userId, insight.saveStateId); + const activeQuery = ss.queries.activeQueryId; + if (activeQuery == null || activeQuery == -1) { + log.error('No active query found in SaveState:', ss); + return; + } const visualizations = ss.visualizations.openVisualizationArray; - const visualQuery = ss.queries[0].graph; - const queryBuilderSettings = ss.queries[0].settings; + const visualQuery = ss.queries.openQueryArray[activeQuery].graph; + const queryBuilderSettings = ss.queries.openQueryArray[activeQuery].settings; const convertedQuery = Query2BackendQuery(ss.id, visualQuery, queryBuilderSettings, []); const query = query2Cypher(convertedQuery); if (query == null) return; diff --git a/src/readers/queryService.ts b/src/readers/queryService.ts index 9da7bad..daf852c 100644 --- a/src/readers/queryService.ts +++ b/src/readers/queryService.ts @@ -104,8 +104,16 @@ export const queryServiceReader = async (frontendPublisher: RabbitMqBroker, mlPu publisher.publishErrorToFrontend('Invalid SaveState'); return; } + log.info('queries :', ss); - const visualQuery = ss.queries[0].graph; + const activeQuery = ss.queries.activeQueryId; + if (activeQuery == null || activeQuery == -1) { + log.error('No active query found in SaveState:', ss); + publisher.publishErrorToFrontend('No active query found'); + return; + } + + const visualQuery = ss.queries.openQueryArray[activeQuery].graph; //ss.queries[0].graph; log.debug('Received query request:', message, headers, visualQuery); if (visualQuery.nodes.length === 0) { log.info('Empty query received'); @@ -121,7 +129,7 @@ export const queryServiceReader = async (frontendPublisher: RabbitMqBroker, mlPu return; } - const queryBuilderSettings = ss.queries[0].settings; + const queryBuilderSettings = ss.queries.openQueryArray[activeQuery].settings; //ss.queries[0].settings; const ml = message.ml; const convertedQuery = Query2BackendQuery(ss.id, visualQuery, queryBuilderSettings, ml); -- GitLab From 8dc624bc19702c9c5f35c44a33397de45a8d2808 Mon Sep 17 00:00:00 2001 From: Dennis Collaris <d.collaris@me.com> Date: Mon, 3 Feb 2025 16:59:48 +0100 Subject: [PATCH 2/5] style: remove debugging line --- src/readers/queryService.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/readers/queryService.ts b/src/readers/queryService.ts index daf852c..cf913ac 100644 --- a/src/readers/queryService.ts +++ b/src/readers/queryService.ts @@ -104,7 +104,6 @@ export const queryServiceReader = async (frontendPublisher: RabbitMqBroker, mlPu publisher.publishErrorToFrontend('Invalid SaveState'); return; } - log.info('queries :', ss); const activeQuery = ss.queries.activeQueryId; if (activeQuery == null || activeQuery == -1) { -- GitLab From 4c8b1c675f72592ad5ad24b857f148d1188345ad Mon Sep 17 00:00:00 2001 From: Dennis Collaris <d.collaris@me.com> Date: Mon, 3 Feb 2025 17:02:39 +0100 Subject: [PATCH 3/5] fix: run all save state queries in insight processor, not only the active one --- src/readers/insightProcessor.ts | 119 ++++++++++++++++---------------- 1 file changed, 59 insertions(+), 60 deletions(-) diff --git a/src/readers/insightProcessor.ts b/src/readers/insightProcessor.ts index 9b7e25f..c891cd1 100644 --- a/src/readers/insightProcessor.ts +++ b/src/readers/insightProcessor.ts @@ -84,70 +84,69 @@ export const insightProcessor = async () => { if (insight.userId == null) return; const ss = await ums.getUserSaveState(insight.userId, insight.saveStateId); - const activeQuery = ss.queries.activeQueryId; - if (activeQuery == null || activeQuery == -1) { - log.error('No active query found in SaveState:', ss); - return; - } + const queries = ss.queries.openQueryArray; const visualizations = ss.visualizations.openVisualizationArray; - const visualQuery = ss.queries.openQueryArray[activeQuery].graph; - const queryBuilderSettings = ss.queries.openQueryArray[activeQuery].settings; - const convertedQuery = Query2BackendQuery(ss.id, visualQuery, queryBuilderSettings, []); - const query = query2Cypher(convertedQuery); - if (query == null) return; - try { - const result = await queryService(ss.dbConnections[0], query); - - insight.status = false; - - if (insight.alarmMode === 'always') { - insight.status = true; - } else if (insight.alarmMode === 'diff') { - insight = await diffCheck(insight, ss, result); - } else if (insight.alarmMode === 'conditional' && insight.conditionsCheck && insight.conditionsCheck.length > 0) { - insight = statCheck(insight, result); - } - - if (insight.userId == null) return; // fixes ts but never is the case - await ums.updateInsight(insight.userId, insight.id, insight); - - if (insight.status || message.force) { - if (insight.status) log.debug('Insight passed the check'); - if (message.force) log.debug('Forced insight processing'); - editor.read(async () => { - const cleanUpDom = setUpDom(); - let html = $generateHtmlFromNodes(editor); - cleanUpDom(); - - html = await populateTemplate(html, result, visualizations); - - for (const recipient of insight.recipients) { - if (mail == null) { - log.warn('Mail is not configured. Insight processor will be disabled'); - return; + for (const queryIndex in queries) { + const visualQuery = ss.queries.openQueryArray[queryIndex].graph; + const queryBuilderSettings = ss.queries.openQueryArray[queryIndex].settings; + const convertedQuery = Query2BackendQuery(ss.id, visualQuery, queryBuilderSettings, []); + const query = query2Cypher(convertedQuery); + if (query == null) return; + try { + const result = await queryService(ss.dbConnections[0], query); + + insight.status = false; + + if (insight.alarmMode === 'always') { + insight.status = true; + } else if (insight.alarmMode === 'diff') { + insight = await diffCheck(insight, ss, result); + } else if (insight.alarmMode === 'conditional' && insight.conditionsCheck && insight.conditionsCheck.length > 0) { + insight = statCheck(insight, result); + } + + if (insight.userId == null) return; // fixes ts but never is the case + await ums.updateInsight(insight.userId, insight.id, insight); + + if (insight.status || message.force) { + if (insight.status) log.debug('Insight passed the check'); + if (message.force) log.debug('Forced insight processing'); + + editor.read(async () => { + const cleanUpDom = setUpDom(); + let html = $generateHtmlFromNodes(editor); + cleanUpDom(); + + html = await populateTemplate(html, result, visualizations); + + for (const recipient of insight.recipients) { + if (mail == null) { + log.warn('Mail is not configured. Insight processor will be disabled'); + return; + } + + if (DEBUG_EMAIL) { + log.warn('DEBUG: Would have sent mail to', recipient); + continue; + } + + log.debug('Sending mail to', recipient); + await mail.sendMail({ + to: recipient, + from: SMTP_USER, + subject: `GraphPolaris report: ${insight.name}`, + html: html, + }); + log.info('Mail sent to ', recipient); } - - if (DEBUG_EMAIL) { - log.warn('DEBUG: Would have sent mail to', recipient); - continue; - } - - log.debug('Sending mail to', recipient); - await mail.sendMail({ - to: recipient, - from: SMTP_USER, - subject: `GraphPolaris report: ${insight.name}`, - html: html, - }); - log.info('Mail sent to ', recipient); - } - }); - } else { - log.debug('WARN: Insight did not pass the check'); + }); + } else { + log.debug('WARN: Insight did not pass the check'); + } + } catch (err) { + log.error('Error processing insight', err); } - } catch (err) { - log.error('Error processing insight', err); } }); }; -- GitLab From e15aaab1f19bbf9a0e4a845deeb5d7e7a3c674f6 Mon Sep 17 00:00:00 2001 From: Leonardo <leomilho@gmail.com> Date: Tue, 4 Feb 2025 12:16:57 +0100 Subject: [PATCH 4/5] fix: fixes for multiplequery rebase --- src/readers/insightProcessor.ts | 6 +++--- src/readers/queryService.ts | 13 ++++++++++--- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/readers/insightProcessor.ts b/src/readers/insightProcessor.ts index c891cd1..ad60515 100644 --- a/src/readers/insightProcessor.ts +++ b/src/readers/insightProcessor.ts @@ -84,12 +84,12 @@ export const insightProcessor = async () => { if (insight.userId == null) return; const ss = await ums.getUserSaveState(insight.userId, insight.saveStateId); - const queries = ss.queries.openQueryArray; + const queries = ss.queryStates.openQueryArray; const visualizations = ss.visualizations.openVisualizationArray; for (const queryIndex in queries) { - const visualQuery = ss.queries.openQueryArray[queryIndex].graph; - const queryBuilderSettings = ss.queries.openQueryArray[queryIndex].settings; + const visualQuery = ss.queryStates.openQueryArray[queryIndex].graph; + const queryBuilderSettings = ss.queryStates.openQueryArray[queryIndex].settings; const convertedQuery = Query2BackendQuery(ss.id, visualQuery, queryBuilderSettings, []); const query = query2Cypher(convertedQuery); if (query == null) return; diff --git a/src/readers/queryService.ts b/src/readers/queryService.ts index cf913ac..e94fa07 100644 --- a/src/readers/queryService.ts +++ b/src/readers/queryService.ts @@ -105,14 +105,21 @@ export const queryServiceReader = async (frontendPublisher: RabbitMqBroker, mlPu return; } - const activeQuery = ss.queries.activeQueryId; + const activeQuery = ss.queryStates.activeQueryId; if (activeQuery == null || activeQuery == -1) { log.error('No active query found in SaveState:', ss); publisher.publishErrorToFrontend('No active query found'); return; } - const visualQuery = ss.queries.openQueryArray[activeQuery].graph; //ss.queries[0].graph; + const activeQueryInfo = ss.queryStates.openQueryArray.find(q => q.id === activeQuery); + if (activeQueryInfo == null) { + log.error('Active query not found in SaveState:', ss.queryStates.activeQueryId, ss.queryStates.openQueryArray); + publisher.publishErrorToFrontend('Active query not found'); + return; + } + + const visualQuery = activeQueryInfo.graph; //ss.queries[0].graph; log.debug('Received query request:', message, headers, visualQuery); if (visualQuery.nodes.length === 0) { log.info('Empty query received'); @@ -128,7 +135,7 @@ export const queryServiceReader = async (frontendPublisher: RabbitMqBroker, mlPu return; } - const queryBuilderSettings = ss.queries.openQueryArray[activeQuery].settings; //ss.queries[0].settings; + const queryBuilderSettings = activeQueryInfo.settings; //ss.queries[0].settings; const ml = message.ml; const convertedQuery = Query2BackendQuery(ss.id, visualQuery, queryBuilderSettings, ml); -- GitLab From b6adb8b5ae4530bf6156ed73f176daa81c15f82b Mon Sep 17 00:00:00 2001 From: Leonardo <leomilho@gmail.com> Date: Thu, 6 Feb 2025 16:39:47 +0100 Subject: [PATCH 5/5] feat: allow optionally to choose which query ID to use for query --- src/readers/queryService.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/readers/queryService.ts b/src/readers/queryService.ts index e94fa07..2179987 100644 --- a/src/readers/queryService.ts +++ b/src/readers/queryService.ts @@ -105,7 +105,16 @@ export const queryServiceReader = async (frontendPublisher: RabbitMqBroker, mlPu return; } - const activeQuery = ss.queryStates.activeQueryId; + let activeQuery = ss.queryStates.activeQueryId; + if (message.queryID) { + if (ss.queryStates.openQueryArray.find(q => q.id === message.queryID) == null) { + log.error('Query not found in SaveState:', message.queryID, ss.queryStates.openQueryArray); + publisher.publishErrorToFrontend('Query not found'); + return; + } + activeQuery = message.queryID; + } + if (activeQuery == null || activeQuery == -1) { log.error('No active query found in SaveState:', ss); publisher.publishErrorToFrontend('No active query found'); -- GitLab