From a2f083bd12d8126f4638fa3744ae85d23cd164aa Mon Sep 17 00:00:00 2001 From: Simon Larsen Date: Sun, 14 May 2023 14:30:26 +0100 Subject: [PATCH] fix probe responses --- Common/Types/Monitor/MonitorCriteria.ts | 14 +++---- .../Types/Monitor/MonitorCriteriaInstance.ts | 15 ++++++- Common/Types/Monitor/MonitorStep.ts | 5 +-- Common/Types/Monitor/MonitorSteps.ts | 5 +-- Common/Utils/API.ts | 1 + CommonServer/Types/Database/QueryHelper.ts | 3 +- Probe/Jobs/Monitor/FetchList.ts | 3 -- .../Utils/Monitors/MonitorTypes/ApiMonitor.ts | 1 + ProbeAPI/API/Monitor.ts | 2 - ProbeAPI/Service/ProbeMonitorResponse.ts | 41 +++++++++++-------- 10 files changed, 48 insertions(+), 42 deletions(-) diff --git a/Common/Types/Monitor/MonitorCriteria.ts b/Common/Types/Monitor/MonitorCriteria.ts index 1662cde6b8..7dd8b9e22e 100644 --- a/Common/Types/Monitor/MonitorCriteria.ts +++ b/Common/Types/Monitor/MonitorCriteria.ts @@ -31,12 +31,6 @@ export default class MonitorCriteria extends DatabaseProperty { monitorCriteria.data = { monitorCriteriaInstanceArray: [ - MonitorCriteriaInstance.getDefaultOnlineMonitorCriteriaInstance( - { - monitorType: arg.monitorType, - monitorStatusId: arg.onlineMonitorStatusId, - } - ), MonitorCriteriaInstance.getDefaultOfflineMonitorCriteriaInstance( { monitorType: arg.monitorType, @@ -44,6 +38,12 @@ export default class MonitorCriteria extends DatabaseProperty { incidentSeverityId: arg.defaultIncidentSeverityId, } ), + MonitorCriteriaInstance.getDefaultOnlineMonitorCriteriaInstance( + { + monitorType: arg.monitorType, + monitorStatusId: arg.onlineMonitorStatusId, + } + ), ], }; @@ -155,7 +155,7 @@ export default class MonitorCriteria extends DatabaseProperty { ): JSONObject | null { if (value && value instanceof MonitorCriteria) { return (value as MonitorCriteria).toJSON(); - }else if (value){ + } else if (value) { return JSONFunctions.serialize(value as any); } diff --git a/Common/Types/Monitor/MonitorCriteriaInstance.ts b/Common/Types/Monitor/MonitorCriteriaInstance.ts index c8fe442304..5b17a8f5cb 100644 --- a/Common/Types/Monitor/MonitorCriteriaInstance.ts +++ b/Common/Types/Monitor/MonitorCriteriaInstance.ts @@ -75,6 +75,17 @@ export default class MonitorCriteriaInstance extends DatabaseProperty { description: 'This criteria cheks if the monitor is online', }; + if ( + arg.monitorType === MonitorType.Website || + arg.monitorType === MonitorType.API + ) { + monitorCriteriaInstance.data.filters.push({ + checkOn: CheckOn.ResponseStatusCode, + filterType: FilterType.EqualTo, + value: 200, + }); + } + return monitorCriteriaInstance; } @@ -438,8 +449,8 @@ export default class MonitorCriteriaInstance extends DatabaseProperty { ): JSONObject | null { if (value && value instanceof MonitorCriteriaInstance) { return (value as MonitorCriteriaInstance).toJSON(); - }else if(value){ - return JSONFunctions.serialize(value as any); + } else if (value) { + return JSONFunctions.serialize(value as any); } return null; diff --git a/Common/Types/Monitor/MonitorStep.ts b/Common/Types/Monitor/MonitorStep.ts index dc7673cb8b..69faa06a0b 100644 --- a/Common/Types/Monitor/MonitorStep.ts +++ b/Common/Types/Monitor/MonitorStep.ts @@ -235,13 +235,10 @@ export default class MonitorStep extends DatabaseProperty { ): JSONObject | null { if (value && value instanceof MonitorStep) { return (value as MonitorStep).toJSON(); - } - - else if(value) { + } else if (value) { return JSONFunctions.serialize(value as any); } - return null; } diff --git a/Common/Types/Monitor/MonitorSteps.ts b/Common/Types/Monitor/MonitorSteps.ts index ab194ca2df..0179f7ae7e 100644 --- a/Common/Types/Monitor/MonitorSteps.ts +++ b/Common/Types/Monitor/MonitorSteps.ts @@ -169,12 +169,10 @@ export default class MonitorSteps extends DatabaseProperty { ): JSONObject | null { if (value && value instanceof MonitorSteps) { return (value as MonitorSteps).toJSON(); - } - else if(value) { + } else if (value) { return JSONFunctions.serialize(value as any); } - return null; } @@ -184,7 +182,6 @@ export default class MonitorSteps extends DatabaseProperty { if (value) { return MonitorSteps.fromJSON(value); } - return null; } diff --git a/Common/Utils/API.ts b/Common/Utils/API.ts index 286e1fa0fb..68092d245c 100644 --- a/Common/Utils/API.ts +++ b/Common/Utils/API.ts @@ -249,6 +249,7 @@ export default class API { } private static getErrorResponse(error: AxiosError): HTTPErrorResponse { + if (error.response) { return new HTTPErrorResponse( error.response.status, diff --git a/CommonServer/Types/Database/QueryHelper.ts b/CommonServer/Types/Database/QueryHelper.ts index ca8a9ef3b5..23d5d4ad47 100644 --- a/CommonServer/Types/Database/QueryHelper.ts +++ b/CommonServer/Types/Database/QueryHelper.ts @@ -58,8 +58,7 @@ export default class QueryHelper { // construct string const constructQuery: Function = (alias: string): string => { - - let query: string = "("; + let query: string = '('; query += rid .map((item: string) => { diff --git a/Probe/Jobs/Monitor/FetchList.ts b/Probe/Jobs/Monitor/FetchList.ts index 6ae03e0045..fa0a8f7745 100644 --- a/Probe/Jobs/Monitor/FetchList.ts +++ b/Probe/Jobs/Monitor/FetchList.ts @@ -20,7 +20,6 @@ RunCron( runOnStartup: false, }, async () => { - // run a set timeout function randomly between 1 to 5 seconds, so same probes do not hit the server at the same time setTimeout(async () => { @@ -61,7 +60,5 @@ RunCron( await Promise.allSettled(monitoringPromises); }, Math.floor(Math.random() * 5000) + 1000); - - } ); diff --git a/Probe/Utils/Monitors/MonitorTypes/ApiMonitor.ts b/Probe/Utils/Monitors/MonitorTypes/ApiMonitor.ts index 4874fe6984..6c17bf4b06 100644 --- a/Probe/Utils/Monitors/MonitorTypes/ApiMonitor.ts +++ b/Probe/Utils/Monitors/MonitorTypes/ApiMonitor.ts @@ -46,6 +46,7 @@ export default class ApiMonitor { return { url: url, requestHeaders: options.requestHeaders || {}, + // if server is responding, it is online. isOnline: true, isSecure: url.protocol === Protocol.HTTPS, responseTimeInMS: responseTimeInMS, diff --git a/ProbeAPI/API/Monitor.ts b/ProbeAPI/API/Monitor.ts index 1385839a2f..2e2fdb8666 100644 --- a/ProbeAPI/API/Monitor.ts +++ b/ProbeAPI/API/Monitor.ts @@ -109,8 +109,6 @@ router.post( }); - console.log("ITEMS LENGTH", monitors.length); - // return the list of monitors to be monitored return Response.sendEntityArrayResponse( diff --git a/ProbeAPI/Service/ProbeMonitorResponse.ts b/ProbeAPI/Service/ProbeMonitorResponse.ts index c7b2657dd0..54d4901670 100644 --- a/ProbeAPI/Service/ProbeMonitorResponse.ts +++ b/ProbeAPI/Service/ProbeMonitorResponse.ts @@ -266,6 +266,14 @@ export default class ProbeMonitorResponseService { probeApiIngestResponse: ProbeApiIngestResponse; criteriaInstance: MonitorCriteriaInstance; }): Promise { + let finalResult: boolean = true; + + if ( + FilterCondition.Any === input.criteriaInstance.data?.filterCondition + ) { + finalResult = false; // set to false as we need to check if any of the filters are met. + } + for (const criteriaFilter of input.criteriaInstance.data?.filters || []) { const criteriaResult: boolean = @@ -291,11 +299,12 @@ export default class ProbeMonitorResponseService { input.criteriaInstance.data?.filterCondition && criteriaResult === false ) { - return false; + finalResult = false; + break; } } - return false; + return finalResult; } private static async isMonitorInstanceCriteriaFilterMet(input: { @@ -352,7 +361,7 @@ export default class ProbeMonitorResponseService { if ( input.probeMonitorResponse.responseTimeInMs && input.probeMonitorResponse.responseTimeInMs > - (input.criteriaFilter.value as number) + (value as number) ) { return true; } @@ -363,7 +372,7 @@ export default class ProbeMonitorResponseService { if ( input.probeMonitorResponse.responseTimeInMs && input.probeMonitorResponse.responseTimeInMs < - (input.criteriaFilter.value as number) + (value as number) ) { return true; } @@ -374,7 +383,7 @@ export default class ProbeMonitorResponseService { if ( input.probeMonitorResponse.responseTimeInMs && input.probeMonitorResponse.responseTimeInMs === - (input.criteriaFilter.value as number) + (value as number) ) { return true; } @@ -385,7 +394,7 @@ export default class ProbeMonitorResponseService { if ( input.probeMonitorResponse.responseTimeInMs && input.probeMonitorResponse.responseTimeInMs !== - (input.criteriaFilter.value as number) + (value as number) ) { return true; } @@ -399,7 +408,7 @@ export default class ProbeMonitorResponseService { if ( input.probeMonitorResponse.responseTimeInMs && input.probeMonitorResponse.responseTimeInMs >= - (input.criteriaFilter.value as number) + (value as number) ) { return true; } @@ -412,7 +421,7 @@ export default class ProbeMonitorResponseService { if ( input.probeMonitorResponse.responseTimeInMs && input.probeMonitorResponse.responseTimeInMs <= - (input.criteriaFilter.value as number) + (value as number) ) { return true; } @@ -442,8 +451,7 @@ export default class ProbeMonitorResponseService { if (input.criteriaFilter.filterType === FilterType.GreaterThan) { if ( input.probeMonitorResponse.responseCode && - input.probeMonitorResponse.responseCode > - (input.criteriaFilter.value as number) + input.probeMonitorResponse.responseCode > (value as number) ) { return true; } @@ -453,8 +461,7 @@ export default class ProbeMonitorResponseService { if (input.criteriaFilter.filterType === FilterType.LessThan) { if ( input.probeMonitorResponse.responseCode && - input.probeMonitorResponse.responseCode < - (input.criteriaFilter.value as number) + input.probeMonitorResponse.responseCode < (value as number) ) { return true; } @@ -465,7 +472,7 @@ export default class ProbeMonitorResponseService { if ( input.probeMonitorResponse.responseCode && input.probeMonitorResponse.responseCode === - (input.criteriaFilter.value as number) + (value as number) ) { return true; } @@ -476,7 +483,7 @@ export default class ProbeMonitorResponseService { if ( input.probeMonitorResponse.responseCode && input.probeMonitorResponse.responseCode !== - (input.criteriaFilter.value as number) + (value as number) ) { return true; } @@ -489,8 +496,7 @@ export default class ProbeMonitorResponseService { ) { if ( input.probeMonitorResponse.responseCode && - input.probeMonitorResponse.responseCode >= - (input.criteriaFilter.value as number) + input.probeMonitorResponse.responseCode >= (value as number) ) { return true; } @@ -502,8 +508,7 @@ export default class ProbeMonitorResponseService { ) { if ( input.probeMonitorResponse.responseCode && - input.probeMonitorResponse.responseCode <= - (input.criteriaFilter.value as number) + input.probeMonitorResponse.responseCode <= (value as number) ) { return true; }