mirror of
https://github.com/OneUptime/oneuptime.git
synced 2026-04-06 00:32:12 +02:00
refactor: Enhance error handling and logging in monitor criteria classes
This commit is contained in:
@@ -370,7 +370,7 @@
|
||||
<concurrent_threads_soft_limit_ratio_to_cores>2</concurrent_threads_soft_limit_ratio_to_cores>
|
||||
|
||||
<!-- Maximum number of concurrent queries. -->
|
||||
<max_concurrent_queries>1000</max_concurrent_queries>
|
||||
<max_concurrent_queries>10000</max_concurrent_queries>
|
||||
|
||||
<!-- Maximum memory usage (resident set size) for server process.
|
||||
Zero value or unset means default. Default is "max_server_memory_usage_to_ram_ratio" of available physical RAM.
|
||||
|
||||
@@ -10,6 +10,7 @@ import {
|
||||
import ProbeMonitorResponse from "Common/Types/Probe/ProbeMonitorResponse";
|
||||
import Typeof from "Common/Types/Typeof";
|
||||
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
||||
import logger from "../../Logger";
|
||||
|
||||
export default class APIRequestCriteria {
|
||||
@CaptureSpan()
|
||||
@@ -29,19 +30,27 @@ export default class APIRequestCriteria {
|
||||
input.criteriaFilter.eveluateOverTime &&
|
||||
input.criteriaFilter.evaluateOverTimeOptions
|
||||
) {
|
||||
overTimeValue = await EvaluateOverTime.getValueOverTime({
|
||||
monitorId: input.dataToProcess.monitorId!,
|
||||
evaluateOverTimeOptions: input.criteriaFilter.evaluateOverTimeOptions,
|
||||
metricType: input.criteriaFilter.checkOn,
|
||||
miscData: input.criteriaFilter.serverMonitorOptions as JSONObject,
|
||||
});
|
||||
try {
|
||||
overTimeValue = await EvaluateOverTime.getValueOverTime({
|
||||
monitorId: input.dataToProcess.monitorId!,
|
||||
evaluateOverTimeOptions: input.criteriaFilter.evaluateOverTimeOptions,
|
||||
metricType: input.criteriaFilter.checkOn,
|
||||
miscData: input.criteriaFilter.serverMonitorOptions as JSONObject,
|
||||
});
|
||||
|
||||
if (Array.isArray(overTimeValue) && overTimeValue.length === 0) {
|
||||
return null;
|
||||
}
|
||||
if (Array.isArray(overTimeValue) && overTimeValue.length === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (overTimeValue === undefined) {
|
||||
return null;
|
||||
if (overTimeValue === undefined) {
|
||||
return null;
|
||||
}
|
||||
} catch (err) {
|
||||
logger.error(
|
||||
`Error in getting over time value for ${input.criteriaFilter.checkOn}`,
|
||||
);
|
||||
logger.error(err);
|
||||
overTimeValue = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -128,7 +137,7 @@ export default class APIRequestCriteria {
|
||||
|
||||
if (input.criteriaFilter.checkOn === CheckOn.ResponseHeader) {
|
||||
const headerKeys: Array<string> = Object.keys(
|
||||
(input.dataToProcess as ProbeMonitorResponse).responseHeaders || {},
|
||||
(input.dataToProcess as ProbeMonitorResponse).responseHeaders || {}
|
||||
).map((key: string) => {
|
||||
return key.toLowerCase();
|
||||
});
|
||||
@@ -159,7 +168,7 @@ export default class APIRequestCriteria {
|
||||
|
||||
if (input.criteriaFilter.checkOn === CheckOn.ResponseHeaderValue) {
|
||||
const headerValues: Array<string> = Object.values(
|
||||
(input.dataToProcess as ProbeMonitorResponse).responseHeaders || {},
|
||||
(input.dataToProcess as ProbeMonitorResponse).responseHeaders || {}
|
||||
).map((key: string) => {
|
||||
return key.toLowerCase();
|
||||
});
|
||||
|
||||
@@ -24,15 +24,15 @@ export default class IncomingRequestCriteria {
|
||||
|
||||
logger.debug(
|
||||
"Checking IncomingRequestCriteria for Monitor: " +
|
||||
input.dataToProcess.monitorId.toString(),
|
||||
input.dataToProcess.monitorId.toString()
|
||||
);
|
||||
|
||||
logger.debug(
|
||||
"Data to process: " + JSON.stringify(input.dataToProcess, null, 2),
|
||||
"Data to process: " + JSON.stringify(input.dataToProcess, null, 2)
|
||||
);
|
||||
|
||||
logger.debug(
|
||||
"Criteria Filter: " + JSON.stringify(input.criteriaFilter, null, 2),
|
||||
"Criteria Filter: " + JSON.stringify(input.criteriaFilter, null, 2)
|
||||
);
|
||||
|
||||
let value: number | string | undefined = input.criteriaFilter.value;
|
||||
@@ -44,18 +44,26 @@ export default class IncomingRequestCriteria {
|
||||
input.criteriaFilter.eveluateOverTime &&
|
||||
input.criteriaFilter.evaluateOverTimeOptions
|
||||
) {
|
||||
overTimeValue = await EvaluateOverTime.getValueOverTime({
|
||||
monitorId: input.dataToProcess.monitorId!,
|
||||
evaluateOverTimeOptions: input.criteriaFilter.evaluateOverTimeOptions,
|
||||
metricType: input.criteriaFilter.checkOn,
|
||||
});
|
||||
try {
|
||||
overTimeValue = await EvaluateOverTime.getValueOverTime({
|
||||
monitorId: input.dataToProcess.monitorId!,
|
||||
evaluateOverTimeOptions: input.criteriaFilter.evaluateOverTimeOptions,
|
||||
metricType: input.criteriaFilter.checkOn,
|
||||
});
|
||||
|
||||
if (Array.isArray(overTimeValue) && overTimeValue.length === 0) {
|
||||
return null;
|
||||
}
|
||||
if (Array.isArray(overTimeValue) && overTimeValue.length === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (overTimeValue === undefined) {
|
||||
return null;
|
||||
if (overTimeValue === undefined) {
|
||||
return null;
|
||||
}
|
||||
} catch (err) {
|
||||
logger.error(
|
||||
`Error in getting over time value for ${input.criteriaFilter.checkOn}`
|
||||
);
|
||||
logger.error(err);
|
||||
overTimeValue = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,7 +83,7 @@ export default class IncomingRequestCriteria {
|
||||
if (input.criteriaFilter.checkOn === CheckOn.IncomingRequest) {
|
||||
logger.debug(
|
||||
"Checking IncomingRequest for Monitor: " +
|
||||
input.dataToProcess.monitorId.toString(),
|
||||
input.dataToProcess.monitorId.toString()
|
||||
);
|
||||
|
||||
const lastCheckTime: Date = (
|
||||
@@ -86,7 +94,7 @@ export default class IncomingRequestCriteria {
|
||||
|
||||
const differenceInMinutes: number = OneUptimeDate.getDifferenceInMinutes(
|
||||
lastCheckTime,
|
||||
OneUptimeDate.getCurrentDate(),
|
||||
OneUptimeDate.getCurrentDate()
|
||||
);
|
||||
|
||||
logger.debug("Difference in minutes: " + differenceInMinutes);
|
||||
@@ -111,13 +119,13 @@ export default class IncomingRequestCriteria {
|
||||
if (input.criteriaFilter.filterType === FilterType.RecievedInMinutes) {
|
||||
logger.debug(
|
||||
"Checking RecievedInMinutes for Monitor: " +
|
||||
input.dataToProcess.monitorId.toString(),
|
||||
input.dataToProcess.monitorId.toString()
|
||||
);
|
||||
if (value && differenceInMinutes <= (value as number)) {
|
||||
logger.debug(
|
||||
"RecievedInMinutes for Monitor: " +
|
||||
input.dataToProcess.monitorId.toString() +
|
||||
" is true",
|
||||
" is true"
|
||||
);
|
||||
return `Incoming request / heartbeat received in ${value} minutes.`;
|
||||
}
|
||||
@@ -127,13 +135,13 @@ export default class IncomingRequestCriteria {
|
||||
if (input.criteriaFilter.filterType === FilterType.NotRecievedInMinutes) {
|
||||
logger.debug(
|
||||
"Checking NotRecievedInMinutes for Monitor: " +
|
||||
input.dataToProcess.monitorId.toString(),
|
||||
input.dataToProcess.monitorId.toString()
|
||||
);
|
||||
if (value && differenceInMinutes > (value as number)) {
|
||||
logger.debug(
|
||||
"NotRecievedInMinutes for Monitor: " +
|
||||
input.dataToProcess.monitorId.toString() +
|
||||
" is true",
|
||||
" is true"
|
||||
);
|
||||
return `Incoming request / heartbeat not received in ${value} minutes.`;
|
||||
}
|
||||
@@ -188,7 +196,7 @@ export default class IncomingRequestCriteria {
|
||||
.onlyCheckForIncomingRequestReceivedAt
|
||||
) {
|
||||
const headerKeys: Array<string> = Object.keys(
|
||||
(input.dataToProcess as IncomingMonitorRequest).requestHeaders || {},
|
||||
(input.dataToProcess as IncomingMonitorRequest).requestHeaders || {}
|
||||
).map((key: string) => {
|
||||
return key.toLowerCase();
|
||||
});
|
||||
@@ -215,7 +223,7 @@ export default class IncomingRequestCriteria {
|
||||
.onlyCheckForIncomingRequestReceivedAt
|
||||
) {
|
||||
const headerValues: Array<string> = Object.values(
|
||||
(input.dataToProcess as IncomingMonitorRequest).requestHeaders || {},
|
||||
(input.dataToProcess as IncomingMonitorRequest).requestHeaders || {}
|
||||
).map((key: string) => {
|
||||
return key.toLowerCase();
|
||||
});
|
||||
|
||||
@@ -10,6 +10,7 @@ import SslMonitorResponse from "Common/Types/Monitor/SSLMonitor/SslMonitorRespon
|
||||
import ProbeMonitorResponse from "Common/Types/Probe/ProbeMonitorResponse";
|
||||
import EvaluateOverTime from "./EvaluateOverTime";
|
||||
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
||||
import logger from "../../Logger";
|
||||
|
||||
export default class ServerMonitorCriteria {
|
||||
@CaptureSpan()
|
||||
@@ -33,18 +34,26 @@ export default class ServerMonitorCriteria {
|
||||
input.criteriaFilter.eveluateOverTime &&
|
||||
input.criteriaFilter.evaluateOverTimeOptions
|
||||
) {
|
||||
overTimeValue = await EvaluateOverTime.getValueOverTime({
|
||||
monitorId: input.dataToProcess.monitorId!,
|
||||
evaluateOverTimeOptions: input.criteriaFilter.evaluateOverTimeOptions,
|
||||
metricType: input.criteriaFilter.checkOn,
|
||||
});
|
||||
try {
|
||||
overTimeValue = await EvaluateOverTime.getValueOverTime({
|
||||
monitorId: input.dataToProcess.monitorId!,
|
||||
evaluateOverTimeOptions: input.criteriaFilter.evaluateOverTimeOptions,
|
||||
metricType: input.criteriaFilter.checkOn,
|
||||
});
|
||||
|
||||
if (Array.isArray(overTimeValue) && overTimeValue.length === 0) {
|
||||
return null;
|
||||
}
|
||||
if (Array.isArray(overTimeValue) && overTimeValue.length === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (overTimeValue === undefined) {
|
||||
return null;
|
||||
if (overTimeValue === undefined) {
|
||||
return null;
|
||||
}
|
||||
} catch (err) {
|
||||
logger.error(
|
||||
`Error in getting over time value for ${input.criteriaFilter.checkOn}`
|
||||
);
|
||||
logger.error(err);
|
||||
overTimeValue = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,8 +76,8 @@ export default class ServerMonitorCriteria {
|
||||
!sslResponse.isSelfSigned &&
|
||||
OneUptimeDate.isAfter(
|
||||
sslResponse.expiresAt,
|
||||
OneUptimeDate.getCurrentDate(),
|
||||
),
|
||||
OneUptimeDate.getCurrentDate()
|
||||
)
|
||||
);
|
||||
|
||||
const isTrue: boolean =
|
||||
@@ -88,7 +97,7 @@ export default class ServerMonitorCriteria {
|
||||
|
||||
if (input.criteriaFilter.checkOn === CheckOn.IsSelfSignedCertificate) {
|
||||
const isSelfSigned: boolean = Boolean(
|
||||
sslResponse && sslResponse.isSelfSigned,
|
||||
sslResponse && sslResponse.isSelfSigned
|
||||
);
|
||||
const isTrue: boolean =
|
||||
input.criteriaFilter.filterType === FilterType.True;
|
||||
@@ -111,8 +120,8 @@ export default class ServerMonitorCriteria {
|
||||
sslResponse.expiresAt &&
|
||||
OneUptimeDate.isBefore(
|
||||
sslResponse.expiresAt,
|
||||
OneUptimeDate.getCurrentDate(),
|
||||
),
|
||||
OneUptimeDate.getCurrentDate()
|
||||
)
|
||||
);
|
||||
|
||||
const isTrue: boolean =
|
||||
@@ -140,8 +149,8 @@ export default class ServerMonitorCriteria {
|
||||
(sslResponse.isSelfSigned ||
|
||||
OneUptimeDate.isBefore(
|
||||
sslResponse.expiresAt,
|
||||
OneUptimeDate.getCurrentDate(),
|
||||
)),
|
||||
OneUptimeDate.getCurrentDate()
|
||||
))
|
||||
);
|
||||
const isTrue: boolean =
|
||||
input.criteriaFilter.filterType === FilterType.True;
|
||||
@@ -170,7 +179,7 @@ export default class ServerMonitorCriteria {
|
||||
expiresAt &&
|
||||
OneUptimeDate.getHoursBetweenTwoDates(
|
||||
OneUptimeDate.getCurrentDate(),
|
||||
expiresAt,
|
||||
expiresAt
|
||||
);
|
||||
|
||||
if (hours === null || hours === undefined) {
|
||||
@@ -196,7 +205,7 @@ export default class ServerMonitorCriteria {
|
||||
expiresAt &&
|
||||
OneUptimeDate.getDaysBetweenTwoDates(
|
||||
OneUptimeDate.getCurrentDate(),
|
||||
expiresAt,
|
||||
expiresAt
|
||||
);
|
||||
|
||||
if (days === null || days === undefined) {
|
||||
|
||||
@@ -32,19 +32,27 @@ export default class ServerMonitorCriteria {
|
||||
input.criteriaFilter.eveluateOverTime &&
|
||||
input.criteriaFilter.evaluateOverTimeOptions
|
||||
) {
|
||||
overTimeValue = await EvaluateOverTime.getValueOverTime({
|
||||
monitorId: input.dataToProcess.monitorId!,
|
||||
evaluateOverTimeOptions: input.criteriaFilter.evaluateOverTimeOptions,
|
||||
metricType: input.criteriaFilter.checkOn,
|
||||
miscData: input.criteriaFilter.serverMonitorOptions as JSONObject,
|
||||
});
|
||||
try {
|
||||
overTimeValue = await EvaluateOverTime.getValueOverTime({
|
||||
monitorId: input.dataToProcess.monitorId!,
|
||||
evaluateOverTimeOptions: input.criteriaFilter.evaluateOverTimeOptions,
|
||||
metricType: input.criteriaFilter.checkOn,
|
||||
miscData: input.criteriaFilter.serverMonitorOptions as JSONObject,
|
||||
});
|
||||
|
||||
if (Array.isArray(overTimeValue) && overTimeValue.length === 0) {
|
||||
return null;
|
||||
}
|
||||
if (Array.isArray(overTimeValue) && overTimeValue.length === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (overTimeValue === undefined) {
|
||||
return null;
|
||||
if (overTimeValue === undefined) {
|
||||
return null;
|
||||
}
|
||||
} catch (err) {
|
||||
logger.error(
|
||||
`Error in getting over time value for ${input.criteriaFilter.checkOn}`
|
||||
);
|
||||
logger.error(err);
|
||||
overTimeValue = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,7 +61,7 @@ export default class ServerMonitorCriteria {
|
||||
|
||||
const differenceInMinutes: number = OneUptimeDate.getDifferenceInMinutes(
|
||||
lastCheckTime,
|
||||
OneUptimeDate.getCurrentDate(),
|
||||
OneUptimeDate.getCurrentDate()
|
||||
);
|
||||
|
||||
let offlineIfNotCheckedInMinutes: number = 3;
|
||||
@@ -72,7 +80,7 @@ export default class ServerMonitorCriteria {
|
||||
logger.debug(`Check On: ${input.criteriaFilter.checkOn}`);
|
||||
logger.debug(`Difference in Minutes: ${differenceInMinutes}`);
|
||||
logger.debug(
|
||||
`Offline if not checked in minutes: ${offlineIfNotCheckedInMinutes}`,
|
||||
`Offline if not checked in minutes: ${offlineIfNotCheckedInMinutes}`
|
||||
);
|
||||
|
||||
if (
|
||||
@@ -169,7 +177,7 @@ export default class ServerMonitorCriteria {
|
||||
item.diskPath.trim().toLowerCase() ===
|
||||
diskPath.trim().toLowerCase()
|
||||
);
|
||||
},
|
||||
}
|
||||
)[0]?.percentFree || 0;
|
||||
|
||||
return CompareCriteria.compareCriteriaNumbers({
|
||||
@@ -194,7 +202,7 @@ export default class ServerMonitorCriteria {
|
||||
(input.dataToProcess as ServerMonitorResponse)?.processes?.map(
|
||||
(item: ServerProcess) => {
|
||||
return item.name.trim().toLowerCase();
|
||||
},
|
||||
}
|
||||
) || [];
|
||||
|
||||
if (processNames.includes(thresholdProcessName)) {
|
||||
@@ -209,7 +217,7 @@ export default class ServerMonitorCriteria {
|
||||
(input.dataToProcess as ServerMonitorResponse)?.processes?.map(
|
||||
(item: ServerProcess) => {
|
||||
return item.name.trim().toLowerCase();
|
||||
},
|
||||
}
|
||||
) || [];
|
||||
|
||||
if (!processNames.includes(thresholdProcessName)) {
|
||||
@@ -235,7 +243,7 @@ export default class ServerMonitorCriteria {
|
||||
(input.dataToProcess as ServerMonitorResponse)?.processes?.map(
|
||||
(item: ServerProcess) => {
|
||||
return item.pid.toString().trim().toLowerCase();
|
||||
},
|
||||
}
|
||||
) || [];
|
||||
|
||||
if (processPIDs.includes(thresholdProcessPID)) {
|
||||
@@ -250,7 +258,7 @@ export default class ServerMonitorCriteria {
|
||||
(input.dataToProcess as ServerMonitorResponse)?.processes?.map(
|
||||
(item: ServerProcess) => {
|
||||
return item.pid.toString().trim().toLowerCase();
|
||||
},
|
||||
}
|
||||
) || [];
|
||||
|
||||
if (!processPIDs.includes(thresholdProcessPID)) {
|
||||
@@ -278,7 +286,7 @@ export default class ServerMonitorCriteria {
|
||||
(input.dataToProcess as ServerMonitorResponse)?.processes?.map(
|
||||
(item: ServerProcess) => {
|
||||
return item.command.trim().toLowerCase();
|
||||
},
|
||||
}
|
||||
) || [];
|
||||
|
||||
if (processCommands.includes(thresholdProcessCommand)) {
|
||||
@@ -293,7 +301,7 @@ export default class ServerMonitorCriteria {
|
||||
(input.dataToProcess as ServerMonitorResponse)?.processes?.map(
|
||||
(item: ServerProcess) => {
|
||||
return item.command.trim().toLowerCase();
|
||||
},
|
||||
}
|
||||
) || [];
|
||||
|
||||
if (!processCommands.includes(thresholdProcessCommand)) {
|
||||
|
||||
Reference in New Issue
Block a user