@oneuptime/common 8.0.5516 → 8.0.5547
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/DatabaseModels/AcmeChallenge.ts +3 -0
- package/Models/DatabaseModels/Domain.ts +6 -1
- package/Server/API/AcmeChallengeAPI.ts +64 -0
- package/Server/EnvironmentConfig.ts +54 -0
- package/Server/Infrastructure/Queue.ts +12 -16
- package/Server/Infrastructure/QueueWorker.ts +2 -6
- package/Server/Services/DomainService.ts +48 -40
- package/Server/Utils/AnalyticsDatabase/Statement.ts +8 -4
- package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +47 -15
- package/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.ts +13 -12
- package/Server/Utils/Monitor/MonitorAlert.ts +46 -1
- package/Server/Utils/Monitor/MonitorCriteriaDataExtractor.ts +208 -0
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +439 -0
- package/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.ts +141 -0
- package/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.ts +88 -0
- package/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.ts +196 -0
- package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +1123 -0
- package/Server/Utils/Monitor/MonitorIncident.ts +46 -1
- package/Server/Utils/Monitor/MonitorLogUtil.ts +44 -0
- package/Server/Utils/Monitor/MonitorMetricUtil.ts +482 -0
- package/Server/Utils/Monitor/MonitorResource.ts +185 -914
- package/Server/Utils/StartServer.ts +14 -6
- package/Types/Email.ts +3 -7
- package/Types/Monitor/IncomingMonitor/IncomingMonitorRequest.ts +2 -0
- package/Types/Monitor/LogMonitor/LogMonitorResponse.ts +2 -0
- package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +2 -0
- package/Types/Monitor/MonitorEvaluationSummary.ts +48 -0
- package/Types/Monitor/ServerMonitor/ServerMonitorResponse.ts +2 -0
- package/Types/Monitor/TraceMonitor/TraceMonitorResponse.ts +2 -0
- package/Types/Probe/ProbeApiIngestResponse.ts +2 -0
- package/Types/Probe/ProbeMonitorResponse.ts +2 -0
- package/build/dist/Models/DatabaseModels/AcmeChallenge.js +3 -0
- package/build/dist/Models/DatabaseModels/AcmeChallenge.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Domain.js +6 -1
- package/build/dist/Models/DatabaseModels/Domain.js.map +1 -1
- package/build/dist/Server/API/AcmeChallengeAPI.js +39 -0
- package/build/dist/Server/API/AcmeChallengeAPI.js.map +1 -0
- package/build/dist/Server/EnvironmentConfig.js +44 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Queue.js +8 -11
- package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
- package/build/dist/Server/Infrastructure/QueueWorker.js +2 -6
- package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
- package/build/dist/Server/Services/DomainService.js +31 -29
- package/build/dist/Server/Services/DomainService.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js +2 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +34 -16
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js +12 -12
- package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +42 -4
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js +119 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +312 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.js +109 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.js +45 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.js +132 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +583 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +42 -4
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorLogUtil.js +32 -0
- package/build/dist/Server/Utils/Monitor/MonitorLogUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +361 -0
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +134 -666
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Server/Utils/StartServer.js +7 -4
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Types/Email.js +2 -5
- package/build/dist/Types/Email.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorEvaluationSummary.js +2 -0
- package/build/dist/Types/Monitor/MonitorEvaluationSummary.js.map +1 -0
- package/package.json +5 -5
|
@@ -11,90 +11,25 @@ import MonitorProbeService from "../../Services/MonitorProbeService";
|
|
|
11
11
|
import MonitorService from "../../Services/MonitorService";
|
|
12
12
|
import MonitorStatusTimelineService from "../../Services/MonitorStatusTimelineService";
|
|
13
13
|
import logger from "../Logger";
|
|
14
|
-
import
|
|
15
|
-
import
|
|
16
|
-
import
|
|
17
|
-
import IncomingRequestCriteria from "./Criteria/IncomingRequestCriteria";
|
|
18
|
-
import SSLMonitorCriteria from "./Criteria/SSLMonitorCriteria";
|
|
19
|
-
import ServerMonitorCriteria from "./Criteria/ServerMonitorCriteria";
|
|
20
|
-
import SyntheticMonitoringCriteria from "./Criteria/SyntheticMonitor";
|
|
14
|
+
import MonitorCriteriaEvaluator from "./MonitorCriteriaEvaluator";
|
|
15
|
+
import MonitorLogUtil from "./MonitorLogUtil";
|
|
16
|
+
import MonitorMetricUtil from "./MonitorMetricUtil";
|
|
21
17
|
import SortOrder from "../../../Types/BaseDatabase/SortOrder";
|
|
22
18
|
import BadDataException from "../../../Types/Exception/BadDataException";
|
|
23
19
|
import Semaphore from "../../Infrastructure/Semaphore";
|
|
24
|
-
import { CheckOn } from "../../../Types/Monitor/CriteriaFilter";
|
|
25
20
|
import MonitorType, { MonitorTypeHelper, } from "../../../Types/Monitor/MonitorType";
|
|
26
|
-
import ObjectID from "../../../Types/ObjectID";
|
|
27
|
-
import Typeof from "../../../Types/Typeof";
|
|
28
21
|
import MonitorStatusTimeline from "../../../Models/DatabaseModels/MonitorStatusTimeline";
|
|
29
22
|
import OneUptimeDate from "../../../Types/Date";
|
|
30
|
-
import LogMonitorCriteria from "./Criteria/LogMonitorCriteria";
|
|
31
23
|
import TelemetryType from "../../../Types/Telemetry/TelemetryType";
|
|
32
|
-
import TraceMonitorCriteria from "./Criteria/TraceMonitorCriteria";
|
|
33
24
|
import MonitorIncident from "./MonitorIncident";
|
|
34
25
|
import MonitorAlert from "./MonitorAlert";
|
|
35
26
|
import MonitorStatusTimelineUtil from "./MonitorStatusTimeline";
|
|
36
|
-
import { MetricPointType, ServiceType, } from "../../../Models/AnalyticsModels/Metric";
|
|
37
|
-
import MetricService from "../../Services/MetricService";
|
|
38
|
-
import MonitorMetricType from "../../../Types/Monitor/MonitorMetricType";
|
|
39
|
-
import TelemetryUtil from "../Telemetry/Telemetry";
|
|
40
|
-
import MetricMonitorCriteria from "./Criteria/MetricMonitorCriteria";
|
|
41
|
-
import FilterCondition from "../../../Types/Filter/FilterCondition";
|
|
42
27
|
import CaptureSpan from "../Telemetry/CaptureSpan";
|
|
43
|
-
import MetricType from "../../../Models/DatabaseModels/MetricType";
|
|
44
|
-
import MonitorLogService from "../../Services/MonitorLogService";
|
|
45
28
|
import ExceptionMessages from "../../../Types/Exception/ExceptionMessages";
|
|
29
|
+
import MonitorStatusService from "../../Services/MonitorStatusService";
|
|
46
30
|
export default class MonitorResourceUtil {
|
|
47
|
-
static buildMonitorMetricAttributes(data) {
|
|
48
|
-
const attributes = {
|
|
49
|
-
monitorId: data.monitorId.toString(),
|
|
50
|
-
projectId: data.projectId.toString(),
|
|
51
|
-
};
|
|
52
|
-
if (data.extraAttributes) {
|
|
53
|
-
Object.assign(attributes, data.extraAttributes);
|
|
54
|
-
}
|
|
55
|
-
if (data.monitorName) {
|
|
56
|
-
attributes["monitorName"] = data.monitorName;
|
|
57
|
-
}
|
|
58
|
-
if (data.probeName) {
|
|
59
|
-
attributes["probeName"] = data.probeName;
|
|
60
|
-
}
|
|
61
|
-
return attributes;
|
|
62
|
-
}
|
|
63
|
-
static buildMonitorMetricRow(data) {
|
|
64
|
-
var _a;
|
|
65
|
-
const ingestionDate = OneUptimeDate.getCurrentDate();
|
|
66
|
-
const ingestionTimestamp = OneUptimeDate.toClickhouseDateTime(ingestionDate);
|
|
67
|
-
const timeUnixNano = OneUptimeDate.toUnixNano(ingestionDate).toString();
|
|
68
|
-
const attributes = Object.assign({}, data.attributes);
|
|
69
|
-
const attributeKeys = TelemetryUtil.getAttributeKeys(attributes);
|
|
70
|
-
return {
|
|
71
|
-
_id: ObjectID.generate().toString(),
|
|
72
|
-
createdAt: ingestionTimestamp,
|
|
73
|
-
updatedAt: ingestionTimestamp,
|
|
74
|
-
projectId: data.projectId.toString(),
|
|
75
|
-
serviceId: data.monitorId.toString(),
|
|
76
|
-
serviceType: ServiceType.Monitor,
|
|
77
|
-
name: data.metricName,
|
|
78
|
-
aggregationTemporality: null,
|
|
79
|
-
metricPointType: data.metricPointType || MetricPointType.Sum,
|
|
80
|
-
time: ingestionTimestamp,
|
|
81
|
-
startTime: null,
|
|
82
|
-
timeUnixNano: timeUnixNano,
|
|
83
|
-
startTimeUnixNano: null,
|
|
84
|
-
attributes: attributes,
|
|
85
|
-
attributeKeys: attributeKeys,
|
|
86
|
-
isMonotonic: null,
|
|
87
|
-
count: null,
|
|
88
|
-
sum: null,
|
|
89
|
-
min: null,
|
|
90
|
-
max: null,
|
|
91
|
-
bucketCounts: [],
|
|
92
|
-
explicitBounds: [],
|
|
93
|
-
value: (_a = data.value) !== null && _a !== void 0 ? _a : null,
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
31
|
static async monitorResource(dataToProcess) {
|
|
97
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
32
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
|
|
98
33
|
let mutex = null;
|
|
99
34
|
try {
|
|
100
35
|
mutex = await Semaphore.lock({
|
|
@@ -110,6 +45,38 @@ export default class MonitorResourceUtil {
|
|
|
110
45
|
criteriaMetId: undefined,
|
|
111
46
|
rootCause: null,
|
|
112
47
|
};
|
|
48
|
+
const evaluationSummary = {
|
|
49
|
+
evaluatedAt: OneUptimeDate.getCurrentDate(),
|
|
50
|
+
criteriaResults: [],
|
|
51
|
+
events: [],
|
|
52
|
+
};
|
|
53
|
+
response.evaluationSummary = evaluationSummary;
|
|
54
|
+
dataToProcess.evaluationSummary = evaluationSummary;
|
|
55
|
+
const monitorStatusNameCache = {};
|
|
56
|
+
const getMonitorStatusName = async (statusId) => {
|
|
57
|
+
var _a;
|
|
58
|
+
if (!statusId) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
const cacheKey = statusId.toString();
|
|
62
|
+
if (monitorStatusNameCache[cacheKey] !== undefined) {
|
|
63
|
+
return (_a = monitorStatusNameCache[cacheKey]) !== null && _a !== void 0 ? _a : null;
|
|
64
|
+
}
|
|
65
|
+
const monitorStatus = await MonitorStatusService.findOneBy({
|
|
66
|
+
query: {
|
|
67
|
+
_id: statusId,
|
|
68
|
+
},
|
|
69
|
+
select: {
|
|
70
|
+
name: true,
|
|
71
|
+
},
|
|
72
|
+
props: {
|
|
73
|
+
isRoot: true,
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
const statusName = (monitorStatus === null || monitorStatus === void 0 ? void 0 : monitorStatus.name) || null;
|
|
77
|
+
monitorStatusNameCache[cacheKey] = statusName;
|
|
78
|
+
return statusName;
|
|
79
|
+
};
|
|
113
80
|
logger.debug("Processing probe response");
|
|
114
81
|
logger.debug("Monitor ID: " + dataToProcess.monitorId);
|
|
115
82
|
logger.debug("Fetching Monitor...");
|
|
@@ -196,43 +163,57 @@ export default class MonitorResourceUtil {
|
|
|
196
163
|
});
|
|
197
164
|
}
|
|
198
165
|
}
|
|
199
|
-
|
|
166
|
+
const serverMonitorResponse = monitor.monitorType === MonitorType.Server &&
|
|
167
|
+
dataToProcess.requestReceivedAt
|
|
168
|
+
? dataToProcess
|
|
169
|
+
: undefined;
|
|
170
|
+
const incomingMonitorRequest = monitor.monitorType === MonitorType.IncomingRequest &&
|
|
200
171
|
dataToProcess.incomingRequestReceivedAt &&
|
|
201
172
|
!dataToProcess
|
|
202
|
-
.onlyCheckForIncomingRequestReceivedAt
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
173
|
+
.onlyCheckForIncomingRequestReceivedAt
|
|
174
|
+
? dataToProcess
|
|
175
|
+
: undefined;
|
|
176
|
+
let hasPersistedMonitorData = false;
|
|
177
|
+
const persistLatestMonitorPayload = async () => {
|
|
178
|
+
if (hasPersistedMonitorData) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
if (serverMonitorResponse) {
|
|
182
|
+
logger.debug(`${dataToProcess.monitorId.toString()} - Server request received at ${serverMonitorResponse.requestReceivedAt}`);
|
|
183
|
+
logger.debug(dataToProcess);
|
|
184
|
+
await MonitorService.updateOneById({
|
|
185
|
+
id: monitor.id,
|
|
186
|
+
data: {
|
|
187
|
+
serverMonitorRequestReceivedAt: serverMonitorResponse.requestReceivedAt,
|
|
188
|
+
serverMonitorResponse,
|
|
189
|
+
},
|
|
190
|
+
props: {
|
|
191
|
+
isRoot: true,
|
|
192
|
+
ignoreHooks: true,
|
|
193
|
+
},
|
|
194
|
+
});
|
|
195
|
+
logger.debug(`${dataToProcess.monitorId.toString()} - Monitor Server Response Updated`);
|
|
196
|
+
}
|
|
197
|
+
if (incomingMonitorRequest) {
|
|
198
|
+
logger.debug(`${dataToProcess.monitorId.toString()} - Incoming request received at ${incomingMonitorRequest.incomingRequestReceivedAt}`);
|
|
199
|
+
await MonitorService.updateOneById({
|
|
200
|
+
id: monitor.id,
|
|
201
|
+
data: {
|
|
202
|
+
incomingRequestMonitorHeartbeatCheckedAt: OneUptimeDate.getCurrentDate(),
|
|
203
|
+
incomingMonitorRequest: JSON.parse(JSON.stringify(incomingMonitorRequest)),
|
|
204
|
+
},
|
|
205
|
+
props: {
|
|
206
|
+
isRoot: true,
|
|
207
|
+
ignoreHooks: true,
|
|
208
|
+
},
|
|
209
|
+
});
|
|
210
|
+
logger.debug(`${dataToProcess.monitorId.toString()} - Monitor Incoming Request Updated`);
|
|
211
|
+
}
|
|
212
|
+
hasPersistedMonitorData = true;
|
|
213
|
+
};
|
|
233
214
|
logger.debug(`${dataToProcess.monitorId.toString()} - Saving monitor metrics`);
|
|
234
215
|
try {
|
|
235
|
-
await
|
|
216
|
+
await MonitorMetricUtil.saveMonitorMetrics({
|
|
236
217
|
monitorId: monitor.id,
|
|
237
218
|
projectId: monitor.projectId,
|
|
238
219
|
dataToProcess: dataToProcess,
|
|
@@ -249,6 +230,12 @@ export default class MonitorResourceUtil {
|
|
|
249
230
|
if (!((_b = monitorSteps.data) === null || _b === void 0 ? void 0 : _b.monitorStepsInstanceArray) ||
|
|
250
231
|
((_c = monitorSteps.data) === null || _c === void 0 ? void 0 : _c.monitorStepsInstanceArray.length) === 0) {
|
|
251
232
|
logger.debug(`${dataToProcess.monitorId.toString()} - No monitoring steps.`);
|
|
233
|
+
await persistLatestMonitorPayload();
|
|
234
|
+
MonitorLogUtil.saveMonitorLog({
|
|
235
|
+
monitorId: monitor.id,
|
|
236
|
+
projectId: monitor.projectId,
|
|
237
|
+
dataToProcess: dataToProcess,
|
|
238
|
+
});
|
|
252
239
|
return response;
|
|
253
240
|
}
|
|
254
241
|
logger.debug(`${dataToProcess.monitorId.toString()} - Auto resolving criteria instances.`);
|
|
@@ -310,6 +297,12 @@ export default class MonitorResourceUtil {
|
|
|
310
297
|
}
|
|
311
298
|
if (!monitorStep) {
|
|
312
299
|
logger.debug("No steps found, ignoring everything.");
|
|
300
|
+
await persistLatestMonitorPayload();
|
|
301
|
+
MonitorLogUtil.saveMonitorLog({
|
|
302
|
+
monitorId: monitor.id,
|
|
303
|
+
projectId: monitor.projectId,
|
|
304
|
+
dataToProcess: dataToProcess,
|
|
305
|
+
});
|
|
313
306
|
return response;
|
|
314
307
|
}
|
|
315
308
|
// now process the monitor step
|
|
@@ -324,11 +317,12 @@ export default class MonitorResourceUtil {
|
|
|
324
317
|
logger.debug(`Next Monitor Step ID: ${response.nextMonitorStepId}`);
|
|
325
318
|
// now process probe response monitors
|
|
326
319
|
logger.debug(`${dataToProcess.monitorId.toString()} - Processing monitor step...`);
|
|
327
|
-
response = await
|
|
320
|
+
response = await MonitorCriteriaEvaluator.processMonitorStep({
|
|
328
321
|
dataToProcess: dataToProcess,
|
|
329
322
|
monitorStep: monitorStep,
|
|
330
323
|
monitor: monitor,
|
|
331
324
|
probeApiIngestResponse: response,
|
|
325
|
+
evaluationSummary: evaluationSummary,
|
|
332
326
|
});
|
|
333
327
|
if (response.criteriaMetId && response.rootCause) {
|
|
334
328
|
logger.debug(`${dataToProcess.monitorId.toString()} - Criteria met: ${response.criteriaMetId}`);
|
|
@@ -366,21 +360,36 @@ export default class MonitorResourceUtil {
|
|
|
366
360
|
};
|
|
367
361
|
logger.debug(`${dataToProcess.monitorId.toString()} - Span query found.`);
|
|
368
362
|
}
|
|
369
|
-
|
|
363
|
+
const matchedCriteriaInstance = criteriaInstanceMap[response.criteriaMetId];
|
|
364
|
+
const monitorStatusTimelineChange = await MonitorStatusTimelineUtil.updateMonitorStatusTimeline({
|
|
370
365
|
monitor: monitor,
|
|
371
366
|
rootCause: response.rootCause,
|
|
372
367
|
dataToProcess: dataToProcess,
|
|
373
|
-
criteriaInstance:
|
|
368
|
+
criteriaInstance: matchedCriteriaInstance,
|
|
374
369
|
props: {
|
|
375
370
|
telemetryQuery: telemetryQuery,
|
|
376
371
|
},
|
|
377
372
|
});
|
|
373
|
+
if (monitorStatusTimelineChange) {
|
|
374
|
+
const changedStatusName = await getMonitorStatusName(((_o = matchedCriteriaInstance.data) === null || _o === void 0 ? void 0 : _o.monitorStatusId) ||
|
|
375
|
+
monitorStatusTimelineChange.monitorStatusId);
|
|
376
|
+
evaluationSummary.events.push({
|
|
377
|
+
type: "monitor-status-changed",
|
|
378
|
+
title: "Monitor status updated",
|
|
379
|
+
message: changedStatusName
|
|
380
|
+
? `Monitor status changed to "${changedStatusName}" because criteria "${((_p = matchedCriteriaInstance.data) === null || _p === void 0 ? void 0 : _p.name) || "Unnamed criteria"}" was met.`
|
|
381
|
+
: `Monitor status changed because criteria "${((_q = matchedCriteriaInstance.data) === null || _q === void 0 ? void 0 : _q.name) || "Unnamed criteria"}" was met.`,
|
|
382
|
+
relatedCriteriaId: (_r = matchedCriteriaInstance.data) === null || _r === void 0 ? void 0 : _r.id,
|
|
383
|
+
at: OneUptimeDate.getCurrentDate(),
|
|
384
|
+
});
|
|
385
|
+
}
|
|
378
386
|
await MonitorIncident.criteriaMetCreateIncidentsAndUpdateMonitorStatus({
|
|
379
387
|
monitor: monitor,
|
|
380
388
|
rootCause: response.rootCause,
|
|
381
389
|
dataToProcess: dataToProcess,
|
|
382
390
|
autoResolveCriteriaInstanceIdIncidentIdsDictionary,
|
|
383
|
-
criteriaInstance:
|
|
391
|
+
criteriaInstance: matchedCriteriaInstance,
|
|
392
|
+
evaluationSummary: evaluationSummary,
|
|
384
393
|
props: {
|
|
385
394
|
telemetryQuery: telemetryQuery,
|
|
386
395
|
},
|
|
@@ -391,6 +400,7 @@ export default class MonitorResourceUtil {
|
|
|
391
400
|
dataToProcess: dataToProcess,
|
|
392
401
|
autoResolveCriteriaInstanceIdAlertIdsDictionary,
|
|
393
402
|
criteriaInstance: criteriaInstanceAlertMap[response.criteriaMetId],
|
|
403
|
+
evaluationSummary: evaluationSummary,
|
|
394
404
|
props: {
|
|
395
405
|
telemetryQuery: telemetryQuery,
|
|
396
406
|
},
|
|
@@ -398,7 +408,7 @@ export default class MonitorResourceUtil {
|
|
|
398
408
|
}
|
|
399
409
|
else if (!response.criteriaMetId &&
|
|
400
410
|
monitorSteps.data.defaultMonitorStatusId &&
|
|
401
|
-
((
|
|
411
|
+
((_s = monitor.currentMonitorStatusId) === null || _s === void 0 ? void 0 : _s.toString()) !==
|
|
402
412
|
monitorSteps.data.defaultMonitorStatusId.toString()) {
|
|
403
413
|
logger.debug(`${dataToProcess.monitorId.toString()} - No criteria met. Change to default status.`);
|
|
404
414
|
await MonitorIncident.checkOpenIncidentsAndCloseIfResolved({
|
|
@@ -407,6 +417,7 @@ export default class MonitorResourceUtil {
|
|
|
407
417
|
rootCause: "No monitoring criteria met. Change to default status.",
|
|
408
418
|
criteriaInstance: null, // no criteria met!
|
|
409
419
|
dataToProcess: dataToProcess,
|
|
420
|
+
evaluationSummary: evaluationSummary,
|
|
410
421
|
});
|
|
411
422
|
// get last monitor status timeline.
|
|
412
423
|
const lastMonitorStatusTimeline = await MonitorStatusTimelineService.findOneBy({
|
|
@@ -452,6 +463,15 @@ export default class MonitorResourceUtil {
|
|
|
452
463
|
},
|
|
453
464
|
});
|
|
454
465
|
logger.debug(`${dataToProcess.monitorId.toString()} - Monitor status updated to default.`);
|
|
466
|
+
const defaultStatusName = await getMonitorStatusName(monitorSteps.data.defaultMonitorStatusId);
|
|
467
|
+
evaluationSummary.events.push({
|
|
468
|
+
type: "monitor-status-changed",
|
|
469
|
+
title: "Monitor status reverted",
|
|
470
|
+
message: defaultStatusName
|
|
471
|
+
? `Monitor status reverted to "${defaultStatusName}" because no monitoring criteria were met.`
|
|
472
|
+
: "Monitor status reverted to its default state because no monitoring criteria were met.",
|
|
473
|
+
at: OneUptimeDate.getCurrentDate(),
|
|
474
|
+
});
|
|
455
475
|
}
|
|
456
476
|
}
|
|
457
477
|
if (mutex) {
|
|
@@ -462,559 +482,13 @@ export default class MonitorResourceUtil {
|
|
|
462
482
|
logger.error(err);
|
|
463
483
|
}
|
|
464
484
|
}
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
return;
|
|
471
|
-
}
|
|
472
|
-
if (!data.projectId) {
|
|
473
|
-
return;
|
|
474
|
-
}
|
|
475
|
-
if (!data.dataToProcess) {
|
|
476
|
-
return;
|
|
477
|
-
}
|
|
478
|
-
const metricRows = [];
|
|
479
|
-
/*
|
|
480
|
-
* Metric name to serviceId map
|
|
481
|
-
* example: "cpu.usage" -> [serviceId1, serviceId2]
|
|
482
|
-
* since these are monitor metrics. They dont belong to any service so we can keep the array empty.
|
|
483
|
-
*/
|
|
484
|
-
const metricNameServiceNameMap = {};
|
|
485
|
-
if (data.dataToProcess.basicInfrastructureMetrics) {
|
|
486
|
-
// store cpu, memory, disk metrics.
|
|
487
|
-
if (data.dataToProcess.requestReceivedAt) {
|
|
488
|
-
let isOnline = true;
|
|
489
|
-
const differenceInMinutes = OneUptimeDate.getDifferenceInMinutes(data.dataToProcess.requestReceivedAt, OneUptimeDate.getCurrentDate());
|
|
490
|
-
if (differenceInMinutes > 2) {
|
|
491
|
-
isOnline = false;
|
|
492
|
-
}
|
|
493
|
-
const attributes = this.buildMonitorMetricAttributes({
|
|
494
|
-
monitorId: data.monitorId,
|
|
495
|
-
projectId: data.projectId,
|
|
496
|
-
monitorName: data.monitorName,
|
|
497
|
-
probeName: data.probeName,
|
|
498
|
-
});
|
|
499
|
-
const metricRow = this.buildMonitorMetricRow({
|
|
500
|
-
projectId: data.projectId,
|
|
501
|
-
monitorId: data.monitorId,
|
|
502
|
-
metricName: MonitorMetricType.IsOnline,
|
|
503
|
-
value: isOnline ? 1 : 0,
|
|
504
|
-
attributes: attributes,
|
|
505
|
-
metricPointType: MetricPointType.Sum,
|
|
506
|
-
});
|
|
507
|
-
metricRows.push(metricRow);
|
|
508
|
-
// add MetricType
|
|
509
|
-
const metricType = new MetricType();
|
|
510
|
-
metricType.name = MonitorMetricType.IsOnline;
|
|
511
|
-
metricType.description = CheckOn.IsOnline + " status for monitor";
|
|
512
|
-
metricType.unit = "";
|
|
513
|
-
// add to map
|
|
514
|
-
metricNameServiceNameMap[MonitorMetricType.IsOnline] = metricType;
|
|
515
|
-
}
|
|
516
|
-
const basicMetrics = data.dataToProcess.basicInfrastructureMetrics;
|
|
517
|
-
if (!basicMetrics) {
|
|
518
|
-
return;
|
|
519
|
-
}
|
|
520
|
-
if (basicMetrics.cpuMetrics) {
|
|
521
|
-
const attributes = this.buildMonitorMetricAttributes({
|
|
522
|
-
monitorId: data.monitorId,
|
|
523
|
-
projectId: data.projectId,
|
|
524
|
-
monitorName: data.monitorName,
|
|
525
|
-
probeName: data.probeName,
|
|
526
|
-
});
|
|
527
|
-
const metricRow = this.buildMonitorMetricRow({
|
|
528
|
-
projectId: data.projectId,
|
|
529
|
-
monitorId: data.monitorId,
|
|
530
|
-
metricName: MonitorMetricType.CPUUsagePercent,
|
|
531
|
-
value: (_a = basicMetrics.cpuMetrics.percentUsed) !== null && _a !== void 0 ? _a : null,
|
|
532
|
-
attributes: attributes,
|
|
533
|
-
metricPointType: MetricPointType.Sum,
|
|
534
|
-
});
|
|
535
|
-
metricRows.push(metricRow);
|
|
536
|
-
const metricType = new MetricType();
|
|
537
|
-
metricType.name = MonitorMetricType.CPUUsagePercent;
|
|
538
|
-
metricType.description = CheckOn.CPUUsagePercent + " of Server/VM";
|
|
539
|
-
metricType.unit = "%";
|
|
540
|
-
metricNameServiceNameMap[MonitorMetricType.CPUUsagePercent] =
|
|
541
|
-
metricType;
|
|
542
|
-
}
|
|
543
|
-
if (basicMetrics.memoryMetrics) {
|
|
544
|
-
const attributes = this.buildMonitorMetricAttributes({
|
|
545
|
-
monitorId: data.monitorId,
|
|
546
|
-
projectId: data.projectId,
|
|
547
|
-
monitorName: data.monitorName,
|
|
548
|
-
probeName: data.probeName,
|
|
549
|
-
});
|
|
550
|
-
const metricRow = this.buildMonitorMetricRow({
|
|
551
|
-
projectId: data.projectId,
|
|
552
|
-
monitorId: data.monitorId,
|
|
553
|
-
metricName: MonitorMetricType.MemoryUsagePercent,
|
|
554
|
-
value: (_b = basicMetrics.memoryMetrics.percentUsed) !== null && _b !== void 0 ? _b : null,
|
|
555
|
-
attributes: attributes,
|
|
556
|
-
metricPointType: MetricPointType.Sum,
|
|
557
|
-
});
|
|
558
|
-
metricRows.push(metricRow);
|
|
559
|
-
const metricType = new MetricType();
|
|
560
|
-
metricType.name = MonitorMetricType.MemoryUsagePercent;
|
|
561
|
-
metricType.description = CheckOn.MemoryUsagePercent + " of Server/VM";
|
|
562
|
-
metricType.unit = "%";
|
|
563
|
-
metricNameServiceNameMap[MonitorMetricType.MemoryUsagePercent] =
|
|
564
|
-
metricType;
|
|
565
|
-
}
|
|
566
|
-
if (basicMetrics.diskMetrics && basicMetrics.diskMetrics.length > 0) {
|
|
567
|
-
for (const diskMetric of basicMetrics.diskMetrics) {
|
|
568
|
-
const extraAttributes = {};
|
|
569
|
-
if (diskMetric.diskPath) {
|
|
570
|
-
extraAttributes["diskPath"] = diskMetric.diskPath;
|
|
571
|
-
}
|
|
572
|
-
const attributes = this.buildMonitorMetricAttributes({
|
|
573
|
-
monitorId: data.monitorId,
|
|
574
|
-
projectId: data.projectId,
|
|
575
|
-
monitorName: data.monitorName,
|
|
576
|
-
probeName: data.probeName,
|
|
577
|
-
extraAttributes: extraAttributes,
|
|
578
|
-
});
|
|
579
|
-
const metricRow = this.buildMonitorMetricRow({
|
|
580
|
-
projectId: data.projectId,
|
|
581
|
-
monitorId: data.monitorId,
|
|
582
|
-
metricName: MonitorMetricType.DiskUsagePercent,
|
|
583
|
-
value: (_c = diskMetric.percentUsed) !== null && _c !== void 0 ? _c : null,
|
|
584
|
-
attributes: attributes,
|
|
585
|
-
metricPointType: MetricPointType.Sum,
|
|
586
|
-
});
|
|
587
|
-
metricRows.push(metricRow);
|
|
588
|
-
const metricType = new MetricType();
|
|
589
|
-
metricType.name = MonitorMetricType.DiskUsagePercent;
|
|
590
|
-
metricType.description = CheckOn.DiskUsagePercent + " of Server/VM";
|
|
591
|
-
metricType.unit = "%";
|
|
592
|
-
metricNameServiceNameMap[MonitorMetricType.DiskUsagePercent] =
|
|
593
|
-
metricType;
|
|
594
|
-
}
|
|
595
|
-
}
|
|
596
|
-
}
|
|
597
|
-
if ((_d = data.dataToProcess.customCodeMonitorResponse) === null || _d === void 0 ? void 0 : _d.executionTimeInMS) {
|
|
598
|
-
const extraAttributes = {
|
|
599
|
-
probeId: data.dataToProcess.probeId.toString(),
|
|
600
|
-
};
|
|
601
|
-
const attributes = this.buildMonitorMetricAttributes({
|
|
602
|
-
monitorId: data.monitorId,
|
|
603
|
-
projectId: data.projectId,
|
|
604
|
-
extraAttributes: extraAttributes,
|
|
605
|
-
});
|
|
606
|
-
const metricRow = this.buildMonitorMetricRow({
|
|
607
|
-
projectId: data.projectId,
|
|
608
|
-
monitorId: data.monitorId,
|
|
609
|
-
metricName: MonitorMetricType.ExecutionTime,
|
|
610
|
-
value: (_f = (_e = data.dataToProcess.customCodeMonitorResponse) === null || _e === void 0 ? void 0 : _e.executionTimeInMS) !== null && _f !== void 0 ? _f : null,
|
|
611
|
-
attributes: attributes,
|
|
612
|
-
metricPointType: MetricPointType.Sum,
|
|
613
|
-
});
|
|
614
|
-
metricRows.push(metricRow);
|
|
615
|
-
const metricType = new MetricType();
|
|
616
|
-
metricType.name = MonitorMetricType.ExecutionTime;
|
|
617
|
-
metricType.description = CheckOn.ExecutionTime + " of this monitor";
|
|
618
|
-
metricType.unit = "ms";
|
|
619
|
-
metricNameServiceNameMap[MonitorMetricType.ExecutionTime] = metricType;
|
|
620
|
-
}
|
|
621
|
-
if (data.dataToProcess &&
|
|
622
|
-
data.dataToProcess.syntheticMonitorResponse &&
|
|
623
|
-
(data.dataToProcess.syntheticMonitorResponse ||
|
|
624
|
-
[]).length > 0) {
|
|
625
|
-
for (const syntheticMonitorResponse of data.dataToProcess.syntheticMonitorResponse || []) {
|
|
626
|
-
const extraAttributes = {
|
|
627
|
-
probeId: data.dataToProcess.probeId.toString(),
|
|
628
|
-
};
|
|
629
|
-
if (syntheticMonitorResponse.browserType) {
|
|
630
|
-
extraAttributes["browserType"] = syntheticMonitorResponse.browserType;
|
|
631
|
-
}
|
|
632
|
-
if (syntheticMonitorResponse.screenSizeType) {
|
|
633
|
-
extraAttributes["screenSizeType"] =
|
|
634
|
-
syntheticMonitorResponse.screenSizeType;
|
|
635
|
-
}
|
|
636
|
-
const attributes = this.buildMonitorMetricAttributes({
|
|
637
|
-
monitorId: data.monitorId,
|
|
638
|
-
projectId: data.projectId,
|
|
639
|
-
monitorName: data.monitorName,
|
|
640
|
-
probeName: data.probeName,
|
|
641
|
-
extraAttributes: extraAttributes,
|
|
642
|
-
});
|
|
643
|
-
const metricRow = this.buildMonitorMetricRow({
|
|
644
|
-
projectId: data.projectId,
|
|
645
|
-
monitorId: data.monitorId,
|
|
646
|
-
metricName: MonitorMetricType.ExecutionTime,
|
|
647
|
-
value: (_g = syntheticMonitorResponse.executionTimeInMS) !== null && _g !== void 0 ? _g : null,
|
|
648
|
-
attributes: attributes,
|
|
649
|
-
metricPointType: MetricPointType.Sum,
|
|
650
|
-
});
|
|
651
|
-
metricRows.push(metricRow);
|
|
652
|
-
const metricType = new MetricType();
|
|
653
|
-
metricType.name = MonitorMetricType.ExecutionTime;
|
|
654
|
-
metricType.description = CheckOn.ExecutionTime + " of this monitor";
|
|
655
|
-
metricType.unit = "ms";
|
|
656
|
-
metricNameServiceNameMap[MonitorMetricType.ExecutionTime] = metricType;
|
|
657
|
-
}
|
|
658
|
-
}
|
|
659
|
-
if (data.dataToProcess.responseTimeInMs) {
|
|
660
|
-
const extraAttributes = {
|
|
661
|
-
probeId: data.dataToProcess.probeId.toString(),
|
|
662
|
-
};
|
|
663
|
-
const attributes = this.buildMonitorMetricAttributes({
|
|
664
|
-
monitorId: data.monitorId,
|
|
665
|
-
projectId: data.projectId,
|
|
666
|
-
monitorName: data.monitorName,
|
|
667
|
-
probeName: data.probeName,
|
|
668
|
-
extraAttributes: extraAttributes,
|
|
669
|
-
});
|
|
670
|
-
const metricRow = this.buildMonitorMetricRow({
|
|
671
|
-
projectId: data.projectId,
|
|
672
|
-
monitorId: data.monitorId,
|
|
673
|
-
metricName: MonitorMetricType.ResponseTime,
|
|
674
|
-
value: (_h = data.dataToProcess.responseTimeInMs) !== null && _h !== void 0 ? _h : null,
|
|
675
|
-
attributes: attributes,
|
|
676
|
-
metricPointType: MetricPointType.Sum,
|
|
677
|
-
});
|
|
678
|
-
metricRows.push(metricRow);
|
|
679
|
-
const metricType = new MetricType();
|
|
680
|
-
metricType.name = MonitorMetricType.ResponseTime;
|
|
681
|
-
metricType.description = CheckOn.ResponseTime + " of this monitor";
|
|
682
|
-
metricType.unit = "ms";
|
|
683
|
-
metricNameServiceNameMap[MonitorMetricType.ResponseTime] = metricType;
|
|
684
|
-
}
|
|
685
|
-
if (data.dataToProcess.isOnline !== undefined) {
|
|
686
|
-
const extraAttributes = {
|
|
687
|
-
probeId: data.dataToProcess.probeId.toString(),
|
|
688
|
-
};
|
|
689
|
-
const attributes = this.buildMonitorMetricAttributes({
|
|
690
|
-
monitorId: data.monitorId,
|
|
691
|
-
projectId: data.projectId,
|
|
692
|
-
monitorName: data.monitorName,
|
|
693
|
-
probeName: data.probeName,
|
|
694
|
-
extraAttributes: extraAttributes,
|
|
695
|
-
});
|
|
696
|
-
const metricRow = this.buildMonitorMetricRow({
|
|
697
|
-
projectId: data.projectId,
|
|
698
|
-
monitorId: data.monitorId,
|
|
699
|
-
metricName: MonitorMetricType.IsOnline,
|
|
700
|
-
value: data.dataToProcess.isOnline ? 1 : 0,
|
|
701
|
-
attributes: attributes,
|
|
702
|
-
metricPointType: MetricPointType.Sum,
|
|
703
|
-
});
|
|
704
|
-
metricRows.push(metricRow);
|
|
705
|
-
const metricType = new MetricType();
|
|
706
|
-
metricType.name = MonitorMetricType.IsOnline;
|
|
707
|
-
metricType.description = CheckOn.IsOnline + " status for monitor";
|
|
708
|
-
metricType.unit = "";
|
|
709
|
-
metricNameServiceNameMap[MonitorMetricType.IsOnline] = metricType;
|
|
710
|
-
}
|
|
711
|
-
if (data.dataToProcess.responseCode) {
|
|
712
|
-
const extraAttributes = {
|
|
713
|
-
probeId: data.dataToProcess.probeId.toString(),
|
|
714
|
-
};
|
|
715
|
-
const attributes = this.buildMonitorMetricAttributes({
|
|
716
|
-
monitorId: data.monitorId,
|
|
717
|
-
projectId: data.projectId,
|
|
718
|
-
monitorName: data.monitorName,
|
|
719
|
-
probeName: data.probeName,
|
|
720
|
-
extraAttributes: extraAttributes,
|
|
721
|
-
});
|
|
722
|
-
const metricRow = this.buildMonitorMetricRow({
|
|
723
|
-
projectId: data.projectId,
|
|
724
|
-
monitorId: data.monitorId,
|
|
725
|
-
metricName: MonitorMetricType.ResponseStatusCode,
|
|
726
|
-
value: (_j = data.dataToProcess.responseCode) !== null && _j !== void 0 ? _j : null,
|
|
727
|
-
attributes: attributes,
|
|
728
|
-
metricPointType: MetricPointType.Sum,
|
|
729
|
-
});
|
|
730
|
-
metricRows.push(metricRow);
|
|
731
|
-
const metricType = new MetricType();
|
|
732
|
-
metricType.name = MonitorMetricType.ResponseStatusCode;
|
|
733
|
-
metricType.description = CheckOn.ResponseStatusCode + " for this monitor";
|
|
734
|
-
metricType.unit = "Status Code";
|
|
735
|
-
metricNameServiceNameMap[MonitorMetricType.ResponseStatusCode] =
|
|
736
|
-
metricType;
|
|
737
|
-
}
|
|
738
|
-
if (metricRows.length > 0) {
|
|
739
|
-
await MetricService.insertJsonRows(metricRows);
|
|
740
|
-
}
|
|
741
|
-
// index metrics
|
|
742
|
-
TelemetryUtil.indexMetricNameServiceNameMap({
|
|
743
|
-
projectId: data.projectId,
|
|
744
|
-
metricNameServiceNameMap: metricNameServiceNameMap,
|
|
745
|
-
}).catch((err) => {
|
|
746
|
-
logger.error(err);
|
|
747
|
-
});
|
|
748
|
-
// save monitor log.
|
|
749
|
-
const logIngestionDate = OneUptimeDate.getCurrentDate();
|
|
750
|
-
const logTimestamp = OneUptimeDate.toClickhouseDateTime(logIngestionDate);
|
|
751
|
-
const monitorLogRow = {
|
|
752
|
-
_id: ObjectID.generate().toString(),
|
|
753
|
-
createdAt: logTimestamp,
|
|
754
|
-
updatedAt: logTimestamp,
|
|
755
|
-
projectId: data.projectId.toString(),
|
|
756
|
-
monitorId: data.monitorId.toString(),
|
|
757
|
-
time: logTimestamp,
|
|
758
|
-
logBody: JSON.parse(JSON.stringify(data.dataToProcess)),
|
|
759
|
-
};
|
|
760
|
-
MonitorLogService.insertJsonRows([monitorLogRow]).catch((err) => {
|
|
761
|
-
logger.error(err);
|
|
762
|
-
});
|
|
763
|
-
}
|
|
764
|
-
static async processMonitorStep(input) {
|
|
765
|
-
// process monitor step here.
|
|
766
|
-
var _a, _b, _c;
|
|
767
|
-
const criteria = (_a = input.monitorStep.data) === null || _a === void 0 ? void 0 : _a.monitorCriteria;
|
|
768
|
-
if (!criteria || !criteria.data) {
|
|
769
|
-
// do nothing as there's no criteria to process.
|
|
770
|
-
return input.probeApiIngestResponse;
|
|
771
|
-
}
|
|
772
|
-
for (const criteriaInstance of criteria.data.monitorCriteriaInstanceArray) {
|
|
773
|
-
const rootCause = await MonitorResourceUtil.processMonitorCriteiaInstance({
|
|
774
|
-
dataToProcess: input.dataToProcess,
|
|
775
|
-
monitorStep: input.monitorStep,
|
|
776
|
-
monitor: input.monitor,
|
|
777
|
-
probeApiIngestResponse: input.probeApiIngestResponse,
|
|
778
|
-
criteriaInstance: criteriaInstance,
|
|
779
|
-
});
|
|
780
|
-
if (rootCause) {
|
|
781
|
-
input.probeApiIngestResponse.criteriaMetId = (_b = criteriaInstance.data) === null || _b === void 0 ? void 0 : _b.id;
|
|
782
|
-
input.probeApiIngestResponse.rootCause = `
|
|
783
|
-
**Created because the following criteria was met**:
|
|
784
|
-
|
|
785
|
-
**Criteria Name**: ${(_c = criteriaInstance.data) === null || _c === void 0 ? void 0 : _c.name}
|
|
786
|
-
`;
|
|
787
|
-
if (rootCause) {
|
|
788
|
-
input.probeApiIngestResponse.rootCause += `
|
|
789
|
-
**Filter Conditions Met**: ${rootCause}
|
|
790
|
-
`;
|
|
791
|
-
}
|
|
792
|
-
if (input.dataToProcess.failureCause) {
|
|
793
|
-
input.probeApiIngestResponse.rootCause += `
|
|
794
|
-
**Cause**: ${input.dataToProcess.failureCause || ""}
|
|
795
|
-
`;
|
|
796
|
-
}
|
|
797
|
-
break;
|
|
798
|
-
}
|
|
799
|
-
}
|
|
800
|
-
return input.probeApiIngestResponse;
|
|
801
|
-
}
|
|
802
|
-
static async processMonitorCriteiaInstance(input) {
|
|
803
|
-
/*
|
|
804
|
-
* returns root cause if any. Otherwise criteria is not met.
|
|
805
|
-
* process monitor criteria instance here.
|
|
806
|
-
*/
|
|
807
|
-
const rootCause = await MonitorResourceUtil.isMonitorInstanceCriteriaFiltersMet({
|
|
808
|
-
dataToProcess: input.dataToProcess,
|
|
809
|
-
monitorStep: input.monitorStep,
|
|
810
|
-
monitor: input.monitor,
|
|
811
|
-
probeApiIngestResponse: input.probeApiIngestResponse,
|
|
812
|
-
criteriaInstance: input.criteriaInstance,
|
|
485
|
+
await persistLatestMonitorPayload();
|
|
486
|
+
MonitorLogUtil.saveMonitorLog({
|
|
487
|
+
monitorId: monitor.id,
|
|
488
|
+
projectId: monitor.projectId,
|
|
489
|
+
dataToProcess: dataToProcess,
|
|
813
490
|
});
|
|
814
|
-
|
|
815
|
-
return rootCause;
|
|
816
|
-
}
|
|
817
|
-
static async isMonitorInstanceCriteriaFiltersMet(input) {
|
|
818
|
-
var _a, _b, _c, _d, _e;
|
|
819
|
-
// returns root cause if any. Otherwise criteria is not met.
|
|
820
|
-
let finalResult = "All filters met. ";
|
|
821
|
-
if (FilterCondition.Any === ((_a = input.criteriaInstance.data) === null || _a === void 0 ? void 0 : _a.filterCondition)) {
|
|
822
|
-
finalResult = null; // set to false as we need to check if any of the filters are met.
|
|
823
|
-
}
|
|
824
|
-
for (const criteriaFilter of ((_b = input.criteriaInstance.data) === null || _b === void 0 ? void 0 : _b.filters) || []) {
|
|
825
|
-
const rootCause = await MonitorResourceUtil.isMonitorInstanceCriteriaFilterMet({
|
|
826
|
-
dataToProcess: input.dataToProcess,
|
|
827
|
-
monitorStep: input.monitorStep,
|
|
828
|
-
monitor: input.monitor,
|
|
829
|
-
probeApiIngestResponse: input.probeApiIngestResponse,
|
|
830
|
-
criteriaInstance: input.criteriaInstance,
|
|
831
|
-
criteriaFilter: criteriaFilter,
|
|
832
|
-
});
|
|
833
|
-
const didMeetCriteria = Boolean(rootCause);
|
|
834
|
-
if (FilterCondition.Any === ((_c = input.criteriaInstance.data) === null || _c === void 0 ? void 0 : _c.filterCondition) &&
|
|
835
|
-
didMeetCriteria === true) {
|
|
836
|
-
finalResult = rootCause;
|
|
837
|
-
}
|
|
838
|
-
if (FilterCondition.All === ((_d = input.criteriaInstance.data) === null || _d === void 0 ? void 0 : _d.filterCondition) &&
|
|
839
|
-
didMeetCriteria === false) {
|
|
840
|
-
finalResult = null;
|
|
841
|
-
break;
|
|
842
|
-
}
|
|
843
|
-
if (FilterCondition.All === ((_e = input.criteriaInstance.data) === null || _e === void 0 ? void 0 : _e.filterCondition) &&
|
|
844
|
-
didMeetCriteria &&
|
|
845
|
-
rootCause) {
|
|
846
|
-
finalResult += `
|
|
847
|
-
|
|
848
|
-
- ${rootCause}`; // in markdown format.
|
|
849
|
-
}
|
|
850
|
-
}
|
|
851
|
-
return finalResult;
|
|
852
|
-
}
|
|
853
|
-
static async isMonitorInstanceCriteriaFilterMet(input) {
|
|
854
|
-
/*
|
|
855
|
-
* returns root cause if any. Otherwise criteria is not met.
|
|
856
|
-
* process monitor criteria filter here.
|
|
857
|
-
*/
|
|
858
|
-
var _a;
|
|
859
|
-
if (input.criteriaFilter.checkOn === CheckOn.JavaScriptExpression) {
|
|
860
|
-
let storageMap = {};
|
|
861
|
-
if (input.monitor.monitorType === MonitorType.API ||
|
|
862
|
-
input.monitor.monitorType === MonitorType.Website) {
|
|
863
|
-
// try to parse json
|
|
864
|
-
let responseBody = null;
|
|
865
|
-
try {
|
|
866
|
-
responseBody = JSON.parse(input.dataToProcess
|
|
867
|
-
.responseBody || "{}");
|
|
868
|
-
}
|
|
869
|
-
catch (err) {
|
|
870
|
-
logger.error(err);
|
|
871
|
-
responseBody = input.dataToProcess
|
|
872
|
-
.responseBody;
|
|
873
|
-
}
|
|
874
|
-
if (typeof responseBody === Typeof.String &&
|
|
875
|
-
(responseBody === null || responseBody === void 0 ? void 0 : responseBody.toString()) === "") {
|
|
876
|
-
// if empty string then set to empty object.
|
|
877
|
-
responseBody = {};
|
|
878
|
-
}
|
|
879
|
-
storageMap = {
|
|
880
|
-
responseBody: responseBody,
|
|
881
|
-
responseHeaders: input.dataToProcess
|
|
882
|
-
.responseHeaders,
|
|
883
|
-
responseStatusCode: input.dataToProcess
|
|
884
|
-
.responseCode,
|
|
885
|
-
responseTimeInMs: input.dataToProcess
|
|
886
|
-
.responseTimeInMs,
|
|
887
|
-
isOnline: input.dataToProcess.isOnline,
|
|
888
|
-
};
|
|
889
|
-
}
|
|
890
|
-
if (input.monitor.monitorType === MonitorType.IncomingRequest) {
|
|
891
|
-
storageMap = {
|
|
892
|
-
requestBody: input.dataToProcess
|
|
893
|
-
.requestBody,
|
|
894
|
-
requestHeaders: input.dataToProcess
|
|
895
|
-
.requestHeaders,
|
|
896
|
-
};
|
|
897
|
-
}
|
|
898
|
-
// now evaluate the expression.
|
|
899
|
-
let expression = input.criteriaFilter.value;
|
|
900
|
-
expression = VMUtil.replaceValueInPlace(storageMap, expression, false); // now pass this to the VM.
|
|
901
|
-
const code = `return Boolean(${expression});`;
|
|
902
|
-
let result = null;
|
|
903
|
-
try {
|
|
904
|
-
result = await VMUtil.runCodeInSandbox({
|
|
905
|
-
code: code,
|
|
906
|
-
options: {
|
|
907
|
-
args: {},
|
|
908
|
-
},
|
|
909
|
-
});
|
|
910
|
-
}
|
|
911
|
-
catch (err) {
|
|
912
|
-
logger.error(err);
|
|
913
|
-
return null;
|
|
914
|
-
}
|
|
915
|
-
if (result && result.returnValue) {
|
|
916
|
-
return `JavaScript Expression - ${expression} - evaluated to true.`;
|
|
917
|
-
}
|
|
918
|
-
return null; // if true then return null.
|
|
919
|
-
}
|
|
920
|
-
if (input.monitor.monitorType === MonitorType.API ||
|
|
921
|
-
input.monitor.monitorType === MonitorType.Website ||
|
|
922
|
-
input.monitor.monitorType === MonitorType.IP ||
|
|
923
|
-
input.monitor.monitorType === MonitorType.Ping ||
|
|
924
|
-
input.monitor.monitorType === MonitorType.Port) {
|
|
925
|
-
const apiRequestCriteriaResult = await APIRequestCriteria.isMonitorInstanceCriteriaFilterMet({
|
|
926
|
-
dataToProcess: input.dataToProcess,
|
|
927
|
-
criteriaFilter: input.criteriaFilter,
|
|
928
|
-
});
|
|
929
|
-
if (apiRequestCriteriaResult) {
|
|
930
|
-
return apiRequestCriteriaResult;
|
|
931
|
-
}
|
|
932
|
-
}
|
|
933
|
-
if (input.monitor.monitorType === MonitorType.CustomJavaScriptCode &&
|
|
934
|
-
input.dataToProcess.customCodeMonitorResponse) {
|
|
935
|
-
const criteriaResult = await CustomCodeMonitoringCriteria.isMonitorInstanceCriteriaFilterMet({
|
|
936
|
-
monitorResponse: input.dataToProcess
|
|
937
|
-
.customCodeMonitorResponse,
|
|
938
|
-
criteriaFilter: input.criteriaFilter,
|
|
939
|
-
});
|
|
940
|
-
if (criteriaResult) {
|
|
941
|
-
return criteriaResult;
|
|
942
|
-
}
|
|
943
|
-
}
|
|
944
|
-
if (input.monitor.monitorType === MonitorType.SyntheticMonitor &&
|
|
945
|
-
input.dataToProcess.syntheticMonitorResponse) {
|
|
946
|
-
const criteriaResult = await SyntheticMonitoringCriteria.isMonitorInstanceCriteriaFilterMet({
|
|
947
|
-
monitorResponse: input.dataToProcess
|
|
948
|
-
.syntheticMonitorResponse || [],
|
|
949
|
-
criteriaFilter: input.criteriaFilter,
|
|
950
|
-
});
|
|
951
|
-
if (criteriaResult) {
|
|
952
|
-
return criteriaResult;
|
|
953
|
-
}
|
|
954
|
-
}
|
|
955
|
-
if (input.monitor.monitorType === MonitorType.IncomingRequest) {
|
|
956
|
-
logger.debug(`${(_a = input.monitor.id) === null || _a === void 0 ? void 0 : _a.toString()} - Incoming Request Monitor. Checking criteria filter.`);
|
|
957
|
-
//check incoming request
|
|
958
|
-
const incomingRequestResult = await IncomingRequestCriteria.isMonitorInstanceCriteriaFilterMet({
|
|
959
|
-
dataToProcess: input.dataToProcess,
|
|
960
|
-
criteriaFilter: input.criteriaFilter,
|
|
961
|
-
});
|
|
962
|
-
if (incomingRequestResult) {
|
|
963
|
-
return incomingRequestResult;
|
|
964
|
-
}
|
|
965
|
-
}
|
|
966
|
-
if (input.monitor.monitorType === MonitorType.SSLCertificate) {
|
|
967
|
-
// check SSL monitor
|
|
968
|
-
const sslMonitorResult = await SSLMonitorCriteria.isMonitorInstanceCriteriaFilterMet({
|
|
969
|
-
dataToProcess: input.dataToProcess,
|
|
970
|
-
criteriaFilter: input.criteriaFilter,
|
|
971
|
-
});
|
|
972
|
-
if (sslMonitorResult) {
|
|
973
|
-
return sslMonitorResult;
|
|
974
|
-
}
|
|
975
|
-
}
|
|
976
|
-
if (input.monitor.monitorType === MonitorType.Server) {
|
|
977
|
-
// check server monitor
|
|
978
|
-
const serverMonitorResult = await ServerMonitorCriteria.isMonitorInstanceCriteriaFilterMet({
|
|
979
|
-
dataToProcess: input.dataToProcess,
|
|
980
|
-
criteriaFilter: input.criteriaFilter,
|
|
981
|
-
});
|
|
982
|
-
if (serverMonitorResult) {
|
|
983
|
-
return serverMonitorResult;
|
|
984
|
-
}
|
|
985
|
-
}
|
|
986
|
-
if (input.monitor.monitorType === MonitorType.Logs) {
|
|
987
|
-
// check server monitor
|
|
988
|
-
const logMonitorResult = await LogMonitorCriteria.isMonitorInstanceCriteriaFilterMet({
|
|
989
|
-
dataToProcess: input.dataToProcess,
|
|
990
|
-
criteriaFilter: input.criteriaFilter,
|
|
991
|
-
});
|
|
992
|
-
if (logMonitorResult) {
|
|
993
|
-
return logMonitorResult;
|
|
994
|
-
}
|
|
995
|
-
}
|
|
996
|
-
if (input.monitor.monitorType === MonitorType.Metrics) {
|
|
997
|
-
// check server monitor
|
|
998
|
-
const logMonitorResult = await MetricMonitorCriteria.isMonitorInstanceCriteriaFilterMet({
|
|
999
|
-
dataToProcess: input.dataToProcess,
|
|
1000
|
-
criteriaFilter: input.criteriaFilter,
|
|
1001
|
-
monitorStep: input.monitorStep,
|
|
1002
|
-
});
|
|
1003
|
-
if (logMonitorResult) {
|
|
1004
|
-
return logMonitorResult;
|
|
1005
|
-
}
|
|
1006
|
-
}
|
|
1007
|
-
if (input.monitor.monitorType === MonitorType.Traces) {
|
|
1008
|
-
// check server monitor
|
|
1009
|
-
const traceMonitorResult = await TraceMonitorCriteria.isMonitorInstanceCriteriaFilterMet({
|
|
1010
|
-
dataToProcess: input.dataToProcess,
|
|
1011
|
-
criteriaFilter: input.criteriaFilter,
|
|
1012
|
-
});
|
|
1013
|
-
if (traceMonitorResult) {
|
|
1014
|
-
return traceMonitorResult;
|
|
1015
|
-
}
|
|
1016
|
-
}
|
|
1017
|
-
return null;
|
|
491
|
+
return response;
|
|
1018
492
|
}
|
|
1019
493
|
}
|
|
1020
494
|
__decorate([
|
|
@@ -1023,10 +497,4 @@ __decorate([
|
|
|
1023
497
|
__metadata("design:paramtypes", [Object]),
|
|
1024
498
|
__metadata("design:returntype", Promise)
|
|
1025
499
|
], MonitorResourceUtil, "monitorResource", null);
|
|
1026
|
-
__decorate([
|
|
1027
|
-
CaptureSpan(),
|
|
1028
|
-
__metadata("design:type", Function),
|
|
1029
|
-
__metadata("design:paramtypes", [Object]),
|
|
1030
|
-
__metadata("design:returntype", Promise)
|
|
1031
|
-
], MonitorResourceUtil, "saveMonitorMetrics", null);
|
|
1032
500
|
//# sourceMappingURL=MonitorResource.js.map
|