mirror of
https://github.com/OneUptime/oneuptime.git
synced 2026-01-11 19:56:44 +00:00
refactor: Enhance error handling and logging in monitor criteria classes
This commit is contained in:
parent
9c65febf9c
commit
851d4361e8
5 changed files with 108 additions and 74 deletions
|
|
@ -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)) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue