@oneuptime/common 8.0.5514 → 8.0.5544
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/UI/Components/Filters/FiltersForm.tsx +4 -1
- 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 +133 -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/build/dist/UI/Components/Filters/FiltersForm.js +2 -1
- package/build/dist/UI/Components/Filters/FiltersForm.js.map +1 -1
- 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,37 @@ 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
|
+
if (!statusId) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
const cacheKey = statusId.toString();
|
|
61
|
+
if (monitorStatusNameCache[cacheKey] !== undefined) {
|
|
62
|
+
return monitorStatusNameCache[cacheKey];
|
|
63
|
+
}
|
|
64
|
+
const monitorStatus = await MonitorStatusService.findOneBy({
|
|
65
|
+
query: {
|
|
66
|
+
_id: statusId,
|
|
67
|
+
},
|
|
68
|
+
select: {
|
|
69
|
+
name: true,
|
|
70
|
+
},
|
|
71
|
+
props: {
|
|
72
|
+
isRoot: true,
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
const statusName = (monitorStatus === null || monitorStatus === void 0 ? void 0 : monitorStatus.name) || null;
|
|
76
|
+
monitorStatusNameCache[cacheKey] = statusName;
|
|
77
|
+
return statusName;
|
|
78
|
+
};
|
|
113
79
|
logger.debug("Processing probe response");
|
|
114
80
|
logger.debug("Monitor ID: " + dataToProcess.monitorId);
|
|
115
81
|
logger.debug("Fetching Monitor...");
|
|
@@ -196,43 +162,57 @@ export default class MonitorResourceUtil {
|
|
|
196
162
|
});
|
|
197
163
|
}
|
|
198
164
|
}
|
|
199
|
-
|
|
165
|
+
const serverMonitorResponse = monitor.monitorType === MonitorType.Server &&
|
|
166
|
+
dataToProcess.requestReceivedAt
|
|
167
|
+
? dataToProcess
|
|
168
|
+
: undefined;
|
|
169
|
+
const incomingMonitorRequest = monitor.monitorType === MonitorType.IncomingRequest &&
|
|
200
170
|
dataToProcess.incomingRequestReceivedAt &&
|
|
201
171
|
!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
|
-
|
|
172
|
+
.onlyCheckForIncomingRequestReceivedAt
|
|
173
|
+
? dataToProcess
|
|
174
|
+
: undefined;
|
|
175
|
+
let hasPersistedMonitorData = false;
|
|
176
|
+
const persistLatestMonitorPayload = async () => {
|
|
177
|
+
if (hasPersistedMonitorData) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (serverMonitorResponse) {
|
|
181
|
+
logger.debug(`${dataToProcess.monitorId.toString()} - Server request received at ${serverMonitorResponse.requestReceivedAt}`);
|
|
182
|
+
logger.debug(dataToProcess);
|
|
183
|
+
await MonitorService.updateOneById({
|
|
184
|
+
id: monitor.id,
|
|
185
|
+
data: {
|
|
186
|
+
serverMonitorRequestReceivedAt: serverMonitorResponse.requestReceivedAt,
|
|
187
|
+
serverMonitorResponse,
|
|
188
|
+
},
|
|
189
|
+
props: {
|
|
190
|
+
isRoot: true,
|
|
191
|
+
ignoreHooks: true,
|
|
192
|
+
},
|
|
193
|
+
});
|
|
194
|
+
logger.debug(`${dataToProcess.monitorId.toString()} - Monitor Server Response Updated`);
|
|
195
|
+
}
|
|
196
|
+
if (incomingMonitorRequest) {
|
|
197
|
+
logger.debug(`${dataToProcess.monitorId.toString()} - Incoming request received at ${incomingMonitorRequest.incomingRequestReceivedAt}`);
|
|
198
|
+
await MonitorService.updateOneById({
|
|
199
|
+
id: monitor.id,
|
|
200
|
+
data: {
|
|
201
|
+
incomingRequestMonitorHeartbeatCheckedAt: OneUptimeDate.getCurrentDate(),
|
|
202
|
+
incomingMonitorRequest: JSON.parse(JSON.stringify(incomingMonitorRequest)),
|
|
203
|
+
},
|
|
204
|
+
props: {
|
|
205
|
+
isRoot: true,
|
|
206
|
+
ignoreHooks: true,
|
|
207
|
+
},
|
|
208
|
+
});
|
|
209
|
+
logger.debug(`${dataToProcess.monitorId.toString()} - Monitor Incoming Request Updated`);
|
|
210
|
+
}
|
|
211
|
+
hasPersistedMonitorData = true;
|
|
212
|
+
};
|
|
233
213
|
logger.debug(`${dataToProcess.monitorId.toString()} - Saving monitor metrics`);
|
|
234
214
|
try {
|
|
235
|
-
await
|
|
215
|
+
await MonitorMetricUtil.saveMonitorMetrics({
|
|
236
216
|
monitorId: monitor.id,
|
|
237
217
|
projectId: monitor.projectId,
|
|
238
218
|
dataToProcess: dataToProcess,
|
|
@@ -249,6 +229,12 @@ export default class MonitorResourceUtil {
|
|
|
249
229
|
if (!((_b = monitorSteps.data) === null || _b === void 0 ? void 0 : _b.monitorStepsInstanceArray) ||
|
|
250
230
|
((_c = monitorSteps.data) === null || _c === void 0 ? void 0 : _c.monitorStepsInstanceArray.length) === 0) {
|
|
251
231
|
logger.debug(`${dataToProcess.monitorId.toString()} - No monitoring steps.`);
|
|
232
|
+
await persistLatestMonitorPayload();
|
|
233
|
+
MonitorLogUtil.saveMonitorLog({
|
|
234
|
+
monitorId: monitor.id,
|
|
235
|
+
projectId: monitor.projectId,
|
|
236
|
+
dataToProcess: dataToProcess,
|
|
237
|
+
});
|
|
252
238
|
return response;
|
|
253
239
|
}
|
|
254
240
|
logger.debug(`${dataToProcess.monitorId.toString()} - Auto resolving criteria instances.`);
|
|
@@ -310,6 +296,12 @@ export default class MonitorResourceUtil {
|
|
|
310
296
|
}
|
|
311
297
|
if (!monitorStep) {
|
|
312
298
|
logger.debug("No steps found, ignoring everything.");
|
|
299
|
+
await persistLatestMonitorPayload();
|
|
300
|
+
MonitorLogUtil.saveMonitorLog({
|
|
301
|
+
monitorId: monitor.id,
|
|
302
|
+
projectId: monitor.projectId,
|
|
303
|
+
dataToProcess: dataToProcess,
|
|
304
|
+
});
|
|
313
305
|
return response;
|
|
314
306
|
}
|
|
315
307
|
// now process the monitor step
|
|
@@ -324,11 +316,12 @@ export default class MonitorResourceUtil {
|
|
|
324
316
|
logger.debug(`Next Monitor Step ID: ${response.nextMonitorStepId}`);
|
|
325
317
|
// now process probe response monitors
|
|
326
318
|
logger.debug(`${dataToProcess.monitorId.toString()} - Processing monitor step...`);
|
|
327
|
-
response = await
|
|
319
|
+
response = await MonitorCriteriaEvaluator.processMonitorStep({
|
|
328
320
|
dataToProcess: dataToProcess,
|
|
329
321
|
monitorStep: monitorStep,
|
|
330
322
|
monitor: monitor,
|
|
331
323
|
probeApiIngestResponse: response,
|
|
324
|
+
evaluationSummary: evaluationSummary,
|
|
332
325
|
});
|
|
333
326
|
if (response.criteriaMetId && response.rootCause) {
|
|
334
327
|
logger.debug(`${dataToProcess.monitorId.toString()} - Criteria met: ${response.criteriaMetId}`);
|
|
@@ -366,21 +359,36 @@ export default class MonitorResourceUtil {
|
|
|
366
359
|
};
|
|
367
360
|
logger.debug(`${dataToProcess.monitorId.toString()} - Span query found.`);
|
|
368
361
|
}
|
|
369
|
-
|
|
362
|
+
const matchedCriteriaInstance = criteriaInstanceMap[response.criteriaMetId];
|
|
363
|
+
const monitorStatusTimelineChange = await MonitorStatusTimelineUtil.updateMonitorStatusTimeline({
|
|
370
364
|
monitor: monitor,
|
|
371
365
|
rootCause: response.rootCause,
|
|
372
366
|
dataToProcess: dataToProcess,
|
|
373
|
-
criteriaInstance:
|
|
367
|
+
criteriaInstance: matchedCriteriaInstance,
|
|
374
368
|
props: {
|
|
375
369
|
telemetryQuery: telemetryQuery,
|
|
376
370
|
},
|
|
377
371
|
});
|
|
372
|
+
if (monitorStatusTimelineChange) {
|
|
373
|
+
const changedStatusName = await getMonitorStatusName(((_o = matchedCriteriaInstance.data) === null || _o === void 0 ? void 0 : _o.monitorStatusId) ||
|
|
374
|
+
monitorStatusTimelineChange.monitorStatusId);
|
|
375
|
+
evaluationSummary.events.push({
|
|
376
|
+
type: "monitor-status-changed",
|
|
377
|
+
title: "Monitor status updated",
|
|
378
|
+
message: changedStatusName
|
|
379
|
+
? `Monitor status changed to "${changedStatusName}" because criteria "${((_p = matchedCriteriaInstance.data) === null || _p === void 0 ? void 0 : _p.name) || "Unnamed criteria"}" was met.`
|
|
380
|
+
: `Monitor status changed because criteria "${((_q = matchedCriteriaInstance.data) === null || _q === void 0 ? void 0 : _q.name) || "Unnamed criteria"}" was met.`,
|
|
381
|
+
relatedCriteriaId: (_r = matchedCriteriaInstance.data) === null || _r === void 0 ? void 0 : _r.id,
|
|
382
|
+
at: OneUptimeDate.getCurrentDate(),
|
|
383
|
+
});
|
|
384
|
+
}
|
|
378
385
|
await MonitorIncident.criteriaMetCreateIncidentsAndUpdateMonitorStatus({
|
|
379
386
|
monitor: monitor,
|
|
380
387
|
rootCause: response.rootCause,
|
|
381
388
|
dataToProcess: dataToProcess,
|
|
382
389
|
autoResolveCriteriaInstanceIdIncidentIdsDictionary,
|
|
383
|
-
criteriaInstance:
|
|
390
|
+
criteriaInstance: matchedCriteriaInstance,
|
|
391
|
+
evaluationSummary: evaluationSummary,
|
|
384
392
|
props: {
|
|
385
393
|
telemetryQuery: telemetryQuery,
|
|
386
394
|
},
|
|
@@ -391,6 +399,7 @@ export default class MonitorResourceUtil {
|
|
|
391
399
|
dataToProcess: dataToProcess,
|
|
392
400
|
autoResolveCriteriaInstanceIdAlertIdsDictionary,
|
|
393
401
|
criteriaInstance: criteriaInstanceAlertMap[response.criteriaMetId],
|
|
402
|
+
evaluationSummary: evaluationSummary,
|
|
394
403
|
props: {
|
|
395
404
|
telemetryQuery: telemetryQuery,
|
|
396
405
|
},
|
|
@@ -398,7 +407,7 @@ export default class MonitorResourceUtil {
|
|
|
398
407
|
}
|
|
399
408
|
else if (!response.criteriaMetId &&
|
|
400
409
|
monitorSteps.data.defaultMonitorStatusId &&
|
|
401
|
-
((
|
|
410
|
+
((_s = monitor.currentMonitorStatusId) === null || _s === void 0 ? void 0 : _s.toString()) !==
|
|
402
411
|
monitorSteps.data.defaultMonitorStatusId.toString()) {
|
|
403
412
|
logger.debug(`${dataToProcess.monitorId.toString()} - No criteria met. Change to default status.`);
|
|
404
413
|
await MonitorIncident.checkOpenIncidentsAndCloseIfResolved({
|
|
@@ -407,6 +416,7 @@ export default class MonitorResourceUtil {
|
|
|
407
416
|
rootCause: "No monitoring criteria met. Change to default status.",
|
|
408
417
|
criteriaInstance: null, // no criteria met!
|
|
409
418
|
dataToProcess: dataToProcess,
|
|
419
|
+
evaluationSummary: evaluationSummary,
|
|
410
420
|
});
|
|
411
421
|
// get last monitor status timeline.
|
|
412
422
|
const lastMonitorStatusTimeline = await MonitorStatusTimelineService.findOneBy({
|
|
@@ -452,6 +462,15 @@ export default class MonitorResourceUtil {
|
|
|
452
462
|
},
|
|
453
463
|
});
|
|
454
464
|
logger.debug(`${dataToProcess.monitorId.toString()} - Monitor status updated to default.`);
|
|
465
|
+
const defaultStatusName = await getMonitorStatusName(monitorSteps.data.defaultMonitorStatusId);
|
|
466
|
+
evaluationSummary.events.push({
|
|
467
|
+
type: "monitor-status-changed",
|
|
468
|
+
title: "Monitor status reverted",
|
|
469
|
+
message: defaultStatusName
|
|
470
|
+
? `Monitor status reverted to "${defaultStatusName}" because no monitoring criteria were met.`
|
|
471
|
+
: "Monitor status reverted to its default state because no monitoring criteria were met.",
|
|
472
|
+
at: OneUptimeDate.getCurrentDate(),
|
|
473
|
+
});
|
|
455
474
|
}
|
|
456
475
|
}
|
|
457
476
|
if (mutex) {
|
|
@@ -462,559 +481,13 @@ export default class MonitorResourceUtil {
|
|
|
462
481
|
logger.error(err);
|
|
463
482
|
}
|
|
464
483
|
}
|
|
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,
|
|
484
|
+
await persistLatestMonitorPayload();
|
|
485
|
+
MonitorLogUtil.saveMonitorLog({
|
|
486
|
+
monitorId: monitor.id,
|
|
487
|
+
projectId: monitor.projectId,
|
|
488
|
+
dataToProcess: dataToProcess,
|
|
813
489
|
});
|
|
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;
|
|
490
|
+
return response;
|
|
1018
491
|
}
|
|
1019
492
|
}
|
|
1020
493
|
__decorate([
|
|
@@ -1023,10 +496,4 @@ __decorate([
|
|
|
1023
496
|
__metadata("design:paramtypes", [Object]),
|
|
1024
497
|
__metadata("design:returntype", Promise)
|
|
1025
498
|
], 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
499
|
//# sourceMappingURL=MonitorResource.js.map
|