@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
|
@@ -0,0 +1,583 @@
|
|
|
1
|
+
import logger from "../Logger";
|
|
2
|
+
import OneUptimeDate from "../../../Types/Date";
|
|
3
|
+
import { CheckOn } from "../../../Types/Monitor/CriteriaFilter";
|
|
4
|
+
import Typeof from "../../../Types/Typeof";
|
|
5
|
+
import MonitorCriteriaMessageFormatter from "./MonitorCriteriaMessageFormatter";
|
|
6
|
+
import MonitorCriteriaDataExtractor from "./MonitorCriteriaDataExtractor";
|
|
7
|
+
import MonitorCriteriaExpectationBuilder from "./MonitorCriteriaExpectationBuilder";
|
|
8
|
+
export default class MonitorCriteriaObservationBuilder {
|
|
9
|
+
static describeFilterObservation(input) {
|
|
10
|
+
const { criteriaFilter } = input;
|
|
11
|
+
switch (criteriaFilter.checkOn) {
|
|
12
|
+
case CheckOn.ResponseTime:
|
|
13
|
+
return MonitorCriteriaObservationBuilder.describeResponseTimeObservation(input);
|
|
14
|
+
case CheckOn.ResponseStatusCode:
|
|
15
|
+
return MonitorCriteriaObservationBuilder.describeResponseStatusCodeObservation(input);
|
|
16
|
+
case CheckOn.ResponseHeader:
|
|
17
|
+
return MonitorCriteriaObservationBuilder.describeResponseHeaderObservation(input);
|
|
18
|
+
case CheckOn.ResponseHeaderValue:
|
|
19
|
+
return MonitorCriteriaObservationBuilder.describeResponseHeaderValueObservation(input);
|
|
20
|
+
case CheckOn.ResponseBody:
|
|
21
|
+
return MonitorCriteriaObservationBuilder.describeResponseBodyObservation(input);
|
|
22
|
+
case CheckOn.IsOnline:
|
|
23
|
+
return MonitorCriteriaObservationBuilder.describeIsOnlineObservation(input);
|
|
24
|
+
case CheckOn.IsRequestTimeout:
|
|
25
|
+
return MonitorCriteriaObservationBuilder.describeIsTimeoutObservation(input);
|
|
26
|
+
case CheckOn.IncomingRequest:
|
|
27
|
+
return MonitorCriteriaObservationBuilder.describeIncomingRequestObservation(input);
|
|
28
|
+
case CheckOn.RequestBody:
|
|
29
|
+
return MonitorCriteriaObservationBuilder.describeRequestBodyObservation(input);
|
|
30
|
+
case CheckOn.RequestHeader:
|
|
31
|
+
return MonitorCriteriaObservationBuilder.describeRequestHeaderObservation(input);
|
|
32
|
+
case CheckOn.RequestHeaderValue:
|
|
33
|
+
return MonitorCriteriaObservationBuilder.describeRequestHeaderValueObservation(input);
|
|
34
|
+
case CheckOn.JavaScriptExpression:
|
|
35
|
+
return MonitorCriteriaObservationBuilder.describeJavaScriptExpressionObservation(input);
|
|
36
|
+
case CheckOn.CPUUsagePercent:
|
|
37
|
+
return MonitorCriteriaObservationBuilder.describeCpuUsageObservation(input);
|
|
38
|
+
case CheckOn.MemoryUsagePercent:
|
|
39
|
+
return MonitorCriteriaObservationBuilder.describeMemoryUsageObservation(input);
|
|
40
|
+
case CheckOn.DiskUsagePercent:
|
|
41
|
+
return MonitorCriteriaObservationBuilder.describeDiskUsageObservation(input);
|
|
42
|
+
case CheckOn.ServerProcessName:
|
|
43
|
+
return MonitorCriteriaObservationBuilder.describeServerProcessNameObservation(input);
|
|
44
|
+
case CheckOn.ServerProcessPID:
|
|
45
|
+
return MonitorCriteriaObservationBuilder.describeServerProcessPidObservation(input);
|
|
46
|
+
case CheckOn.ServerProcessCommand:
|
|
47
|
+
return MonitorCriteriaObservationBuilder.describeServerProcessCommandObservation(input);
|
|
48
|
+
case CheckOn.ExpiresInHours:
|
|
49
|
+
return MonitorCriteriaObservationBuilder.describeCertificateExpiresInHoursObservation(input);
|
|
50
|
+
case CheckOn.ExpiresInDays:
|
|
51
|
+
return MonitorCriteriaObservationBuilder.describeCertificateExpiresInDaysObservation(input);
|
|
52
|
+
case CheckOn.IsSelfSignedCertificate:
|
|
53
|
+
return MonitorCriteriaObservationBuilder.describeIsSelfSignedObservation(input);
|
|
54
|
+
case CheckOn.IsExpiredCertificate:
|
|
55
|
+
return MonitorCriteriaObservationBuilder.describeIsExpiredObservation(input);
|
|
56
|
+
case CheckOn.IsValidCertificate:
|
|
57
|
+
return MonitorCriteriaObservationBuilder.describeIsValidObservation(input);
|
|
58
|
+
case CheckOn.IsNotAValidCertificate:
|
|
59
|
+
return MonitorCriteriaObservationBuilder.describeIsInvalidObservation(input);
|
|
60
|
+
case CheckOn.ResultValue:
|
|
61
|
+
return MonitorCriteriaObservationBuilder.describeResultValueObservation(input);
|
|
62
|
+
case CheckOn.Error:
|
|
63
|
+
return MonitorCriteriaObservationBuilder.describeErrorObservation(input);
|
|
64
|
+
case CheckOn.ExecutionTime:
|
|
65
|
+
return MonitorCriteriaObservationBuilder.describeExecutionTimeObservation(input);
|
|
66
|
+
case CheckOn.ScreenSizeType:
|
|
67
|
+
return MonitorCriteriaObservationBuilder.describeScreenSizeObservation(input);
|
|
68
|
+
case CheckOn.BrowserType:
|
|
69
|
+
return MonitorCriteriaObservationBuilder.describeBrowserObservation(input);
|
|
70
|
+
case CheckOn.LogCount:
|
|
71
|
+
return MonitorCriteriaObservationBuilder.describeLogCountObservation(input);
|
|
72
|
+
case CheckOn.SpanCount:
|
|
73
|
+
return MonitorCriteriaObservationBuilder.describeSpanCountObservation(input);
|
|
74
|
+
case CheckOn.MetricValue:
|
|
75
|
+
return MonitorCriteriaObservationBuilder.describeMetricValueObservation(input);
|
|
76
|
+
default:
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
static describeResponseTimeObservation(input) {
|
|
81
|
+
var _a;
|
|
82
|
+
const probeResponse = MonitorCriteriaDataExtractor.getProbeMonitorResponse(input.dataToProcess);
|
|
83
|
+
if (!probeResponse) {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
const responseTime = (_a = probeResponse.responseTimeInMs) !== null && _a !== void 0 ? _a : undefined;
|
|
87
|
+
if (responseTime === undefined || responseTime === null) {
|
|
88
|
+
return "Response time metric was not recorded";
|
|
89
|
+
}
|
|
90
|
+
const formatted = MonitorCriteriaMessageFormatter.formatNumber(responseTime, {
|
|
91
|
+
maximumFractionDigits: 2,
|
|
92
|
+
});
|
|
93
|
+
const evaluationWindow = MonitorCriteriaExpectationBuilder.getEvaluationWindowDescription(input.criteriaFilter);
|
|
94
|
+
let message = `Response Time (in ms) was ${formatted !== null && formatted !== void 0 ? formatted : responseTime} ms`;
|
|
95
|
+
if (evaluationWindow) {
|
|
96
|
+
message += ` ${evaluationWindow}`;
|
|
97
|
+
}
|
|
98
|
+
return message;
|
|
99
|
+
}
|
|
100
|
+
static describeResponseStatusCodeObservation(input) {
|
|
101
|
+
const probeResponse = MonitorCriteriaDataExtractor.getProbeMonitorResponse(input.dataToProcess);
|
|
102
|
+
if (!probeResponse) {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
if (probeResponse.responseCode === undefined) {
|
|
106
|
+
return "Response status code was not recorded";
|
|
107
|
+
}
|
|
108
|
+
return `Response Status Code was ${probeResponse.responseCode}.`;
|
|
109
|
+
}
|
|
110
|
+
static describeResponseHeaderObservation(input) {
|
|
111
|
+
const probeResponse = MonitorCriteriaDataExtractor.getProbeMonitorResponse(input.dataToProcess);
|
|
112
|
+
if (!probeResponse) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
const headers = Object.keys(probeResponse.responseHeaders || {}).map((header) => {
|
|
116
|
+
return header.toLowerCase();
|
|
117
|
+
});
|
|
118
|
+
if (!headers.length) {
|
|
119
|
+
return "Response headers were empty.";
|
|
120
|
+
}
|
|
121
|
+
return `Response headers present: ${MonitorCriteriaMessageFormatter.formatList(headers)}.`;
|
|
122
|
+
}
|
|
123
|
+
static describeResponseHeaderValueObservation(input) {
|
|
124
|
+
const probeResponse = MonitorCriteriaDataExtractor.getProbeMonitorResponse(input.dataToProcess);
|
|
125
|
+
if (!probeResponse) {
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
const headerValues = Object.values(probeResponse.responseHeaders || {}).map((value) => {
|
|
129
|
+
return value.toLowerCase();
|
|
130
|
+
});
|
|
131
|
+
if (!headerValues.length) {
|
|
132
|
+
return "Response header values were empty.";
|
|
133
|
+
}
|
|
134
|
+
return `Response header values: ${MonitorCriteriaMessageFormatter.formatList(headerValues)}.`;
|
|
135
|
+
}
|
|
136
|
+
static describeResponseBodyObservation(input) {
|
|
137
|
+
const probeResponse = MonitorCriteriaDataExtractor.getProbeMonitorResponse(input.dataToProcess);
|
|
138
|
+
if (!probeResponse) {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
if (!probeResponse.responseBody) {
|
|
142
|
+
return "Response body was empty.";
|
|
143
|
+
}
|
|
144
|
+
let bodyAsString;
|
|
145
|
+
if (typeof probeResponse.responseBody === Typeof.Object) {
|
|
146
|
+
try {
|
|
147
|
+
bodyAsString = JSON.stringify(probeResponse.responseBody);
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
logger.error(err);
|
|
151
|
+
bodyAsString = "[object]";
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
bodyAsString = probeResponse.responseBody;
|
|
156
|
+
}
|
|
157
|
+
return `Response body sample: ${MonitorCriteriaMessageFormatter.formatSnippet(bodyAsString)}.`;
|
|
158
|
+
}
|
|
159
|
+
static describeIsOnlineObservation(input) {
|
|
160
|
+
const probeResponse = MonitorCriteriaDataExtractor.getProbeMonitorResponse(input.dataToProcess);
|
|
161
|
+
if (probeResponse && probeResponse.isOnline !== undefined) {
|
|
162
|
+
return `Monitor reported ${probeResponse.isOnline ? "online" : "offline"} status at ${OneUptimeDate.getDateAsLocalFormattedString(probeResponse.monitoredAt)}.`;
|
|
163
|
+
}
|
|
164
|
+
const serverResponse = MonitorCriteriaDataExtractor.getServerMonitorResponse(input.dataToProcess);
|
|
165
|
+
if (serverResponse) {
|
|
166
|
+
const lastHeartbeat = serverResponse.requestReceivedAt;
|
|
167
|
+
const timeNow = serverResponse.timeNow || OneUptimeDate.getCurrentDate();
|
|
168
|
+
const minutesSinceHeartbeat = OneUptimeDate.getDifferenceInMinutes(lastHeartbeat, timeNow);
|
|
169
|
+
const formattedMinutes = MonitorCriteriaMessageFormatter.formatNumber(minutesSinceHeartbeat, {
|
|
170
|
+
maximumFractionDigits: 2,
|
|
171
|
+
});
|
|
172
|
+
return `Server heartbeat last received ${formattedMinutes !== null && formattedMinutes !== void 0 ? formattedMinutes : minutesSinceHeartbeat} minutes ago.`;
|
|
173
|
+
}
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
static describeIsTimeoutObservation(input) {
|
|
177
|
+
const probeResponse = MonitorCriteriaDataExtractor.getProbeMonitorResponse(input.dataToProcess);
|
|
178
|
+
if (probeResponse && probeResponse.isTimeout !== undefined) {
|
|
179
|
+
return probeResponse.isTimeout
|
|
180
|
+
? "Request timed out."
|
|
181
|
+
: "Request completed before timeout.";
|
|
182
|
+
}
|
|
183
|
+
return "Timeout information was unavailable.";
|
|
184
|
+
}
|
|
185
|
+
static describeIncomingRequestObservation(input) {
|
|
186
|
+
const incomingRequest = MonitorCriteriaDataExtractor.getIncomingMonitorRequest(input.dataToProcess);
|
|
187
|
+
if (!incomingRequest) {
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
const lastHeartbeat = incomingRequest.incomingRequestReceivedAt;
|
|
191
|
+
const checkedAt = incomingRequest.checkedAt || OneUptimeDate.getCurrentDate();
|
|
192
|
+
const minutesSinceHeartbeat = OneUptimeDate.getDifferenceInMinutes(lastHeartbeat, checkedAt);
|
|
193
|
+
const formattedMinutes = MonitorCriteriaMessageFormatter.formatNumber(minutesSinceHeartbeat, {
|
|
194
|
+
maximumFractionDigits: 2,
|
|
195
|
+
});
|
|
196
|
+
return `Last incoming request was ${formattedMinutes !== null && formattedMinutes !== void 0 ? formattedMinutes : minutesSinceHeartbeat} minutes ago (checked at ${OneUptimeDate.getDateAsLocalFormattedString(checkedAt)}).`;
|
|
197
|
+
}
|
|
198
|
+
static describeRequestBodyObservation(input) {
|
|
199
|
+
const incomingRequest = MonitorCriteriaDataExtractor.getIncomingMonitorRequest(input.dataToProcess);
|
|
200
|
+
if (!incomingRequest) {
|
|
201
|
+
return null;
|
|
202
|
+
}
|
|
203
|
+
const requestBody = incomingRequest.requestBody;
|
|
204
|
+
if (!requestBody) {
|
|
205
|
+
return "Request body was empty.";
|
|
206
|
+
}
|
|
207
|
+
let requestBodyAsString;
|
|
208
|
+
if (typeof requestBody === Typeof.Object) {
|
|
209
|
+
try {
|
|
210
|
+
requestBodyAsString = JSON.stringify(requestBody);
|
|
211
|
+
}
|
|
212
|
+
catch (err) {
|
|
213
|
+
logger.error(err);
|
|
214
|
+
requestBodyAsString = "[object]";
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
requestBodyAsString = requestBody;
|
|
219
|
+
}
|
|
220
|
+
return `Request body sample: ${MonitorCriteriaMessageFormatter.formatSnippet(requestBodyAsString)}.`;
|
|
221
|
+
}
|
|
222
|
+
static describeRequestHeaderObservation(input) {
|
|
223
|
+
const incomingRequest = MonitorCriteriaDataExtractor.getIncomingMonitorRequest(input.dataToProcess);
|
|
224
|
+
if (!incomingRequest) {
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
const headers = Object.keys(incomingRequest.requestHeaders || {}).map((header) => {
|
|
228
|
+
return header.toLowerCase();
|
|
229
|
+
});
|
|
230
|
+
if (!headers.length) {
|
|
231
|
+
return "Request headers were empty.";
|
|
232
|
+
}
|
|
233
|
+
return `Request headers present: ${MonitorCriteriaMessageFormatter.formatList(headers)}.`;
|
|
234
|
+
}
|
|
235
|
+
static describeRequestHeaderValueObservation(input) {
|
|
236
|
+
const incomingRequest = MonitorCriteriaDataExtractor.getIncomingMonitorRequest(input.dataToProcess);
|
|
237
|
+
if (!incomingRequest) {
|
|
238
|
+
return null;
|
|
239
|
+
}
|
|
240
|
+
const headerValues = Object.values(incomingRequest.requestHeaders || {}).map((value) => {
|
|
241
|
+
return value.toLowerCase();
|
|
242
|
+
});
|
|
243
|
+
if (!headerValues.length) {
|
|
244
|
+
return "Request header values were empty.";
|
|
245
|
+
}
|
|
246
|
+
return `Request header values: ${MonitorCriteriaMessageFormatter.formatList(headerValues)}.`;
|
|
247
|
+
}
|
|
248
|
+
static describeJavaScriptExpressionObservation(input) {
|
|
249
|
+
if (!input.criteriaFilter.value) {
|
|
250
|
+
return "JavaScript expression evaluated to false.";
|
|
251
|
+
}
|
|
252
|
+
return `JavaScript expression "${input.criteriaFilter.value}" evaluated to false.`;
|
|
253
|
+
}
|
|
254
|
+
static describeCpuUsageObservation(input) {
|
|
255
|
+
const serverResponse = MonitorCriteriaDataExtractor.getServerMonitorResponse(input.dataToProcess);
|
|
256
|
+
if (!serverResponse) {
|
|
257
|
+
return null;
|
|
258
|
+
}
|
|
259
|
+
const cpuMetrics = serverResponse.basicInfrastructureMetrics;
|
|
260
|
+
if (!cpuMetrics || !cpuMetrics.cpuMetrics) {
|
|
261
|
+
return "CPU usage metrics were unavailable.";
|
|
262
|
+
}
|
|
263
|
+
const cpuPercent = MonitorCriteriaMessageFormatter.formatPercentage(cpuMetrics.cpuMetrics.percentUsed);
|
|
264
|
+
const coreInfo = cpuMetrics.cpuMetrics.cores
|
|
265
|
+
? ` across ${cpuMetrics.cpuMetrics.cores} core${cpuMetrics.cpuMetrics.cores > 1 ? "s" : ""}`
|
|
266
|
+
: "";
|
|
267
|
+
return `CPU Usage (in %) was ${cpuPercent !== null && cpuPercent !== void 0 ? cpuPercent : "unavailable"}${coreInfo}.`;
|
|
268
|
+
}
|
|
269
|
+
static describeMemoryUsageObservation(input) {
|
|
270
|
+
const serverResponse = MonitorCriteriaDataExtractor.getServerMonitorResponse(input.dataToProcess);
|
|
271
|
+
if (!serverResponse) {
|
|
272
|
+
return null;
|
|
273
|
+
}
|
|
274
|
+
const memoryMetrics = serverResponse.basicInfrastructureMetrics;
|
|
275
|
+
if (!memoryMetrics || !memoryMetrics.memoryMetrics) {
|
|
276
|
+
return "Memory usage metrics were unavailable.";
|
|
277
|
+
}
|
|
278
|
+
const percentUsed = MonitorCriteriaMessageFormatter.formatPercentage(memoryMetrics.memoryMetrics.percentUsed);
|
|
279
|
+
const used = MonitorCriteriaMessageFormatter.formatBytes(memoryMetrics.memoryMetrics.used);
|
|
280
|
+
const total = MonitorCriteriaMessageFormatter.formatBytes(memoryMetrics.memoryMetrics.total);
|
|
281
|
+
return `Memory Usage (in %) was ${percentUsed !== null && percentUsed !== void 0 ? percentUsed : "unavailable"} (${used !== null && used !== void 0 ? used : "?"} used of ${total !== null && total !== void 0 ? total : "?"}).`;
|
|
282
|
+
}
|
|
283
|
+
static describeDiskUsageObservation(input) {
|
|
284
|
+
var _a, _b;
|
|
285
|
+
const serverResponse = MonitorCriteriaDataExtractor.getServerMonitorResponse(input.dataToProcess);
|
|
286
|
+
if (!serverResponse) {
|
|
287
|
+
return null;
|
|
288
|
+
}
|
|
289
|
+
const diskPath = ((_a = input.criteriaFilter.serverMonitorOptions) === null || _a === void 0 ? void 0 : _a.diskPath) || "/";
|
|
290
|
+
const diskMetric = serverResponse.basicInfrastructureMetrics;
|
|
291
|
+
if (!diskMetric || !((_b = diskMetric.diskMetrics) === null || _b === void 0 ? void 0 : _b.length)) {
|
|
292
|
+
return `Disk metrics for path ${diskPath} were unavailable.`;
|
|
293
|
+
}
|
|
294
|
+
const matchedDisk = diskMetric.diskMetrics.find((disk) => {
|
|
295
|
+
return (disk.diskPath.trim().toLowerCase() === diskPath.trim().toLowerCase());
|
|
296
|
+
});
|
|
297
|
+
if (!matchedDisk) {
|
|
298
|
+
return `Disk metrics did not include path ${diskPath}.`;
|
|
299
|
+
}
|
|
300
|
+
const percentUsedValue = MonitorCriteriaMessageFormatter.computeDiskUsagePercent(matchedDisk);
|
|
301
|
+
const percentUsed = MonitorCriteriaMessageFormatter.formatPercentage(percentUsedValue !== null && percentUsedValue !== void 0 ? percentUsedValue : undefined);
|
|
302
|
+
const used = MonitorCriteriaMessageFormatter.formatBytes(matchedDisk.used);
|
|
303
|
+
const total = MonitorCriteriaMessageFormatter.formatBytes(matchedDisk.total);
|
|
304
|
+
const free = MonitorCriteriaMessageFormatter.formatBytes(matchedDisk.free);
|
|
305
|
+
return `Disk Usage (in %) on disk ${diskPath} was ${percentUsed !== null && percentUsed !== void 0 ? percentUsed : "unavailable"} (${used !== null && used !== void 0 ? used : "?"} used of ${total !== null && total !== void 0 ? total : "?"}, free ${free !== null && free !== void 0 ? free : "?"}).`;
|
|
306
|
+
}
|
|
307
|
+
static describeServerProcessNameObservation(input) {
|
|
308
|
+
var _a;
|
|
309
|
+
const serverResponse = MonitorCriteriaDataExtractor.getServerMonitorResponse(input.dataToProcess);
|
|
310
|
+
if (!serverResponse) {
|
|
311
|
+
return null;
|
|
312
|
+
}
|
|
313
|
+
const thresholdName = ((_a = input.criteriaFilter.value) !== null && _a !== void 0 ? _a : "")
|
|
314
|
+
.toString()
|
|
315
|
+
.trim()
|
|
316
|
+
.toLowerCase();
|
|
317
|
+
const processes = serverResponse.processes || [];
|
|
318
|
+
const matchingProcesses = processes.filter((process) => {
|
|
319
|
+
return process.name.trim().toLowerCase() === thresholdName;
|
|
320
|
+
});
|
|
321
|
+
if (matchingProcesses.length > 0) {
|
|
322
|
+
const summary = matchingProcesses
|
|
323
|
+
.map((process) => {
|
|
324
|
+
return `${process.name} (pid ${process.pid})`;
|
|
325
|
+
})
|
|
326
|
+
.join(", ");
|
|
327
|
+
return `Process ${input.criteriaFilter.value} is running (${summary}).`;
|
|
328
|
+
}
|
|
329
|
+
const processSummary = MonitorCriteriaMessageFormatter.describeProcesses(processes);
|
|
330
|
+
if (processSummary) {
|
|
331
|
+
return `Process ${input.criteriaFilter.value} was not running. Active processes: ${processSummary}.`;
|
|
332
|
+
}
|
|
333
|
+
return `Process ${input.criteriaFilter.value} was not running.`;
|
|
334
|
+
}
|
|
335
|
+
static describeServerProcessPidObservation(input) {
|
|
336
|
+
var _a;
|
|
337
|
+
const serverResponse = MonitorCriteriaDataExtractor.getServerMonitorResponse(input.dataToProcess);
|
|
338
|
+
if (!serverResponse) {
|
|
339
|
+
return null;
|
|
340
|
+
}
|
|
341
|
+
const thresholdPid = ((_a = input.criteriaFilter.value) !== null && _a !== void 0 ? _a : "")
|
|
342
|
+
.toString()
|
|
343
|
+
.trim()
|
|
344
|
+
.toLowerCase();
|
|
345
|
+
const processes = serverResponse.processes || [];
|
|
346
|
+
const matchingProcesses = processes.filter((process) => {
|
|
347
|
+
return process.pid.toString().trim().toLowerCase() === thresholdPid;
|
|
348
|
+
});
|
|
349
|
+
if (matchingProcesses.length > 0) {
|
|
350
|
+
const summary = matchingProcesses
|
|
351
|
+
.map((process) => {
|
|
352
|
+
return `${process.name} (pid ${process.pid})`;
|
|
353
|
+
})
|
|
354
|
+
.join(", ");
|
|
355
|
+
return `Process with PID ${input.criteriaFilter.value} is running (${summary}).`;
|
|
356
|
+
}
|
|
357
|
+
const processSummary = MonitorCriteriaMessageFormatter.describeProcesses(processes);
|
|
358
|
+
if (processSummary) {
|
|
359
|
+
return `Process with PID ${input.criteriaFilter.value} was not running. Active processes: ${processSummary}.`;
|
|
360
|
+
}
|
|
361
|
+
return `Process with PID ${input.criteriaFilter.value} was not running.`;
|
|
362
|
+
}
|
|
363
|
+
static describeServerProcessCommandObservation(input) {
|
|
364
|
+
var _a;
|
|
365
|
+
const serverResponse = MonitorCriteriaDataExtractor.getServerMonitorResponse(input.dataToProcess);
|
|
366
|
+
if (!serverResponse) {
|
|
367
|
+
return null;
|
|
368
|
+
}
|
|
369
|
+
const thresholdCommand = ((_a = input.criteriaFilter.value) !== null && _a !== void 0 ? _a : "")
|
|
370
|
+
.toString()
|
|
371
|
+
.trim()
|
|
372
|
+
.toLowerCase();
|
|
373
|
+
const processes = serverResponse.processes || [];
|
|
374
|
+
const matchingProcesses = processes.filter((process) => {
|
|
375
|
+
return process.command.trim().toLowerCase() === thresholdCommand;
|
|
376
|
+
});
|
|
377
|
+
if (matchingProcesses.length > 0) {
|
|
378
|
+
const summary = matchingProcesses
|
|
379
|
+
.map((process) => {
|
|
380
|
+
return `${process.command} (pid ${process.pid})`;
|
|
381
|
+
})
|
|
382
|
+
.join(", ");
|
|
383
|
+
return `Process with command ${input.criteriaFilter.value} is running (${summary}).`;
|
|
384
|
+
}
|
|
385
|
+
const processSummary = MonitorCriteriaMessageFormatter.describeProcesses(processes);
|
|
386
|
+
if (processSummary) {
|
|
387
|
+
return `Process with command ${input.criteriaFilter.value} was not running. Active processes: ${processSummary}.`;
|
|
388
|
+
}
|
|
389
|
+
return `Process with command ${input.criteriaFilter.value} was not running.`;
|
|
390
|
+
}
|
|
391
|
+
static describeCertificateExpiresInHoursObservation(input) {
|
|
392
|
+
const sslResponse = MonitorCriteriaDataExtractor.getSslResponse(input.dataToProcess);
|
|
393
|
+
if (!sslResponse || !sslResponse.expiresAt) {
|
|
394
|
+
return "SSL certificate expiration time was unavailable.";
|
|
395
|
+
}
|
|
396
|
+
const hoursRemaining = OneUptimeDate.getHoursBetweenTwoDates(OneUptimeDate.getCurrentDate(), sslResponse.expiresAt);
|
|
397
|
+
const formattedHours = MonitorCriteriaMessageFormatter.formatNumber(hoursRemaining, {
|
|
398
|
+
maximumFractionDigits: 2,
|
|
399
|
+
});
|
|
400
|
+
return `SSL certificate expires at ${OneUptimeDate.getDateAsLocalFormattedString(sslResponse.expiresAt)} (${formattedHours !== null && formattedHours !== void 0 ? formattedHours : hoursRemaining} hours remaining).`;
|
|
401
|
+
}
|
|
402
|
+
static describeCertificateExpiresInDaysObservation(input) {
|
|
403
|
+
const sslResponse = MonitorCriteriaDataExtractor.getSslResponse(input.dataToProcess);
|
|
404
|
+
if (!sslResponse || !sslResponse.expiresAt) {
|
|
405
|
+
return "SSL certificate expiration time was unavailable.";
|
|
406
|
+
}
|
|
407
|
+
const daysRemaining = OneUptimeDate.getDaysBetweenTwoDates(OneUptimeDate.getCurrentDate(), sslResponse.expiresAt);
|
|
408
|
+
const formattedDays = MonitorCriteriaMessageFormatter.formatNumber(daysRemaining, {
|
|
409
|
+
maximumFractionDigits: 2,
|
|
410
|
+
});
|
|
411
|
+
return `SSL certificate expires at ${OneUptimeDate.getDateAsLocalFormattedString(sslResponse.expiresAt)} (${formattedDays !== null && formattedDays !== void 0 ? formattedDays : daysRemaining} days remaining).`;
|
|
412
|
+
}
|
|
413
|
+
static describeIsSelfSignedObservation(input) {
|
|
414
|
+
const sslResponse = MonitorCriteriaDataExtractor.getSslResponse(input.dataToProcess);
|
|
415
|
+
if (!sslResponse || sslResponse.isSelfSigned === undefined) {
|
|
416
|
+
return "SSL certificate self-signed status was unavailable.";
|
|
417
|
+
}
|
|
418
|
+
return sslResponse.isSelfSigned
|
|
419
|
+
? "SSL certificate is self signed."
|
|
420
|
+
: "SSL certificate is not self signed.";
|
|
421
|
+
}
|
|
422
|
+
static describeIsExpiredObservation(input) {
|
|
423
|
+
const sslResponse = MonitorCriteriaDataExtractor.getSslResponse(input.dataToProcess);
|
|
424
|
+
if (!sslResponse || !sslResponse.expiresAt) {
|
|
425
|
+
return "SSL certificate expiration time was unavailable.";
|
|
426
|
+
}
|
|
427
|
+
const isExpired = OneUptimeDate.isBefore(sslResponse.expiresAt, OneUptimeDate.getCurrentDate());
|
|
428
|
+
return isExpired
|
|
429
|
+
? "SSL certificate is expired."
|
|
430
|
+
: "SSL certificate is not expired.";
|
|
431
|
+
}
|
|
432
|
+
static describeIsValidObservation(input) {
|
|
433
|
+
const probeResponse = MonitorCriteriaDataExtractor.getProbeMonitorResponse(input.dataToProcess);
|
|
434
|
+
const sslResponse = probeResponse === null || probeResponse === void 0 ? void 0 : probeResponse.sslResponse;
|
|
435
|
+
const isValid = Boolean(sslResponse &&
|
|
436
|
+
(probeResponse === null || probeResponse === void 0 ? void 0 : probeResponse.isOnline) &&
|
|
437
|
+
sslResponse.expiresAt &&
|
|
438
|
+
!sslResponse.isSelfSigned &&
|
|
439
|
+
OneUptimeDate.isAfter(sslResponse.expiresAt, OneUptimeDate.getCurrentDate()));
|
|
440
|
+
if (!sslResponse) {
|
|
441
|
+
return "SSL certificate details were unavailable.";
|
|
442
|
+
}
|
|
443
|
+
return isValid
|
|
444
|
+
? "SSL certificate is valid."
|
|
445
|
+
: "SSL certificate is not valid.";
|
|
446
|
+
}
|
|
447
|
+
static describeIsInvalidObservation(input) {
|
|
448
|
+
const probeResponse = MonitorCriteriaDataExtractor.getProbeMonitorResponse(input.dataToProcess);
|
|
449
|
+
const sslResponse = probeResponse === null || probeResponse === void 0 ? void 0 : probeResponse.sslResponse;
|
|
450
|
+
const isInvalid = !sslResponse ||
|
|
451
|
+
!(probeResponse === null || probeResponse === void 0 ? void 0 : probeResponse.isOnline) ||
|
|
452
|
+
Boolean(sslResponse &&
|
|
453
|
+
sslResponse.expiresAt &&
|
|
454
|
+
(sslResponse.isSelfSigned ||
|
|
455
|
+
OneUptimeDate.isBefore(sslResponse.expiresAt, OneUptimeDate.getCurrentDate())));
|
|
456
|
+
if (!sslResponse) {
|
|
457
|
+
return "SSL certificate details were unavailable.";
|
|
458
|
+
}
|
|
459
|
+
return isInvalid
|
|
460
|
+
? "SSL certificate is not valid."
|
|
461
|
+
: "SSL certificate is valid.";
|
|
462
|
+
}
|
|
463
|
+
static describeExecutionTimeObservation(input) {
|
|
464
|
+
const syntheticResponses = MonitorCriteriaDataExtractor.getSyntheticMonitorResponses(input.dataToProcess);
|
|
465
|
+
const executionTimes = syntheticResponses
|
|
466
|
+
.map((response) => {
|
|
467
|
+
return response.executionTimeInMS;
|
|
468
|
+
})
|
|
469
|
+
.filter((value) => {
|
|
470
|
+
return typeof value === "number" && !isNaN(value);
|
|
471
|
+
});
|
|
472
|
+
if (executionTimes.length > 0) {
|
|
473
|
+
const summary = MonitorCriteriaMessageFormatter.summarizeNumericSeries(executionTimes);
|
|
474
|
+
if (summary) {
|
|
475
|
+
return `Execution Time (in ms) recorded ${summary}.`;
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
const customCodeResponse = MonitorCriteriaDataExtractor.getCustomCodeMonitorResponse(input.dataToProcess);
|
|
479
|
+
if (customCodeResponse) {
|
|
480
|
+
const formatted = MonitorCriteriaMessageFormatter.formatNumber(customCodeResponse.executionTimeInMS, { maximumFractionDigits: 2 });
|
|
481
|
+
return `Execution Time (in ms) was ${formatted !== null && formatted !== void 0 ? formatted : customCodeResponse.executionTimeInMS} ms.`;
|
|
482
|
+
}
|
|
483
|
+
return "Execution time was unavailable.";
|
|
484
|
+
}
|
|
485
|
+
static describeResultValueObservation(input) {
|
|
486
|
+
const syntheticResponses = MonitorCriteriaDataExtractor.getSyntheticMonitorResponses(input.dataToProcess);
|
|
487
|
+
const resultValues = syntheticResponses
|
|
488
|
+
.map((response) => {
|
|
489
|
+
return MonitorCriteriaMessageFormatter.formatResultValue(response.result);
|
|
490
|
+
})
|
|
491
|
+
.filter((value) => {
|
|
492
|
+
return value !== "undefined";
|
|
493
|
+
});
|
|
494
|
+
if (resultValues.length > 0) {
|
|
495
|
+
const uniqueResults = Array.from(new Set(resultValues));
|
|
496
|
+
return `Result Value samples: ${MonitorCriteriaMessageFormatter.formatList(uniqueResults)}.`;
|
|
497
|
+
}
|
|
498
|
+
const customCodeResponse = MonitorCriteriaDataExtractor.getCustomCodeMonitorResponse(input.dataToProcess);
|
|
499
|
+
if (customCodeResponse && customCodeResponse.result !== undefined) {
|
|
500
|
+
const formatted = MonitorCriteriaMessageFormatter.formatResultValue(customCodeResponse.result);
|
|
501
|
+
return `Result Value was ${MonitorCriteriaMessageFormatter.formatSnippet(formatted)}.`;
|
|
502
|
+
}
|
|
503
|
+
return "Result value was unavailable.";
|
|
504
|
+
}
|
|
505
|
+
static describeErrorObservation(input) {
|
|
506
|
+
var _a;
|
|
507
|
+
const syntheticResponses = MonitorCriteriaDataExtractor.getSyntheticMonitorResponses(input.dataToProcess);
|
|
508
|
+
const errors = syntheticResponses
|
|
509
|
+
.map((response) => {
|
|
510
|
+
return response.scriptError;
|
|
511
|
+
})
|
|
512
|
+
.filter((value) => {
|
|
513
|
+
return Boolean(value);
|
|
514
|
+
})
|
|
515
|
+
.map((error) => {
|
|
516
|
+
return MonitorCriteriaMessageFormatter.formatSnippet(error, 80);
|
|
517
|
+
});
|
|
518
|
+
if (errors.length > 0) {
|
|
519
|
+
return `Script errors: ${MonitorCriteriaMessageFormatter.formatList(errors)}.`;
|
|
520
|
+
}
|
|
521
|
+
const customCodeResponse = MonitorCriteriaDataExtractor.getCustomCodeMonitorResponse(input.dataToProcess);
|
|
522
|
+
if (customCodeResponse === null || customCodeResponse === void 0 ? void 0 : customCodeResponse.scriptError) {
|
|
523
|
+
return `Script error: ${MonitorCriteriaMessageFormatter.formatSnippet(customCodeResponse.scriptError, 80)}.`;
|
|
524
|
+
}
|
|
525
|
+
if ((_a = customCodeResponse === null || customCodeResponse === void 0 ? void 0 : customCodeResponse.logMessages) === null || _a === void 0 ? void 0 : _a.length) {
|
|
526
|
+
return `Script log messages: ${MonitorCriteriaMessageFormatter.formatList(customCodeResponse.logMessages)}.`;
|
|
527
|
+
}
|
|
528
|
+
return "No script errors were reported.";
|
|
529
|
+
}
|
|
530
|
+
static describeScreenSizeObservation(input) {
|
|
531
|
+
const syntheticResponses = MonitorCriteriaDataExtractor.getSyntheticMonitorResponses(input.dataToProcess);
|
|
532
|
+
if (!syntheticResponses.length) {
|
|
533
|
+
return "Synthetic monitor results were unavailable.";
|
|
534
|
+
}
|
|
535
|
+
const screenSizes = Array.from(new Set(syntheticResponses.map((response) => {
|
|
536
|
+
return response.screenSizeType;
|
|
537
|
+
})));
|
|
538
|
+
return `Synthetic monitor screen sizes: ${MonitorCriteriaMessageFormatter.formatList(screenSizes)}.`;
|
|
539
|
+
}
|
|
540
|
+
static describeBrowserObservation(input) {
|
|
541
|
+
const syntheticResponses = MonitorCriteriaDataExtractor.getSyntheticMonitorResponses(input.dataToProcess);
|
|
542
|
+
if (!syntheticResponses.length) {
|
|
543
|
+
return "Synthetic monitor results were unavailable.";
|
|
544
|
+
}
|
|
545
|
+
const browsers = Array.from(new Set(syntheticResponses.map((response) => {
|
|
546
|
+
return response.browserType;
|
|
547
|
+
})));
|
|
548
|
+
return `Synthetic monitor browsers: ${MonitorCriteriaMessageFormatter.formatList(browsers)}.`;
|
|
549
|
+
}
|
|
550
|
+
static describeLogCountObservation(input) {
|
|
551
|
+
const logResponse = MonitorCriteriaDataExtractor.getLogMonitorResponse(input.dataToProcess);
|
|
552
|
+
if (!logResponse) {
|
|
553
|
+
return null;
|
|
554
|
+
}
|
|
555
|
+
return `Log count was ${logResponse.logCount}.`;
|
|
556
|
+
}
|
|
557
|
+
static describeSpanCountObservation(input) {
|
|
558
|
+
const traceResponse = MonitorCriteriaDataExtractor.getTraceMonitorResponse(input.dataToProcess);
|
|
559
|
+
if (!traceResponse) {
|
|
560
|
+
return null;
|
|
561
|
+
}
|
|
562
|
+
return `Span count was ${traceResponse.spanCount}.`;
|
|
563
|
+
}
|
|
564
|
+
static describeMetricValueObservation(input) {
|
|
565
|
+
const metricValues = MonitorCriteriaDataExtractor.extractMetricValues({
|
|
566
|
+
criteriaFilter: input.criteriaFilter,
|
|
567
|
+
dataToProcess: input.dataToProcess,
|
|
568
|
+
monitorStep: input.monitorStep,
|
|
569
|
+
});
|
|
570
|
+
if (!metricValues) {
|
|
571
|
+
return null;
|
|
572
|
+
}
|
|
573
|
+
if (!metricValues.values.length) {
|
|
574
|
+
return `Metric Value${metricValues.alias ? ` (${metricValues.alias})` : ""} returned no data points.`;
|
|
575
|
+
}
|
|
576
|
+
const summary = MonitorCriteriaMessageFormatter.summarizeNumericSeries(metricValues.values);
|
|
577
|
+
if (!summary) {
|
|
578
|
+
return null;
|
|
579
|
+
}
|
|
580
|
+
return `Metric Value${metricValues.alias ? ` (${metricValues.alias})` : ""} recorded ${summary}.`;
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
//# sourceMappingURL=MonitorCriteriaObservationBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MonitorCriteriaObservationBuilder.js","sourceRoot":"","sources":["../../../../../Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts"],"names":[],"mappings":"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"}
|