@oneuptime/common 7.0.5092 → 7.0.5096
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.
|
@@ -2,6 +2,15 @@ import MonitorType from "../../../Types/Monitor/MonitorType";
|
|
|
2
2
|
import { JSONObject } from "../../../Types/JSON";
|
|
3
3
|
import ProbeMonitorResponse from "../../../Types/Probe/ProbeMonitorResponse";
|
|
4
4
|
import IncomingMonitorRequest from "../../../Types/Monitor/IncomingMonitor/IncomingMonitorRequest";
|
|
5
|
+
import ServerMonitorResponse, {
|
|
6
|
+
ServerProcess,
|
|
7
|
+
} from "../../../Types/Monitor/ServerMonitor/ServerMonitorResponse";
|
|
8
|
+
import BasicInfrastructureMetrics, {
|
|
9
|
+
BasicDiskMetrics,
|
|
10
|
+
} from "../../../Types/Infrastructure/BasicMetrics";
|
|
11
|
+
import SslMonitorResponse from "../../../Types/Monitor/SSLMonitor/SslMonitorResponse";
|
|
12
|
+
import CustomCodeMonitorResponse from "../../../Types/Monitor/CustomCodeMonitor/CustomCodeMonitorResponse";
|
|
13
|
+
import SyntheticMonitorResponse from "../../../Types/Monitor/SyntheticMonitors/SyntheticMonitorResponse";
|
|
5
14
|
import Typeof from "../../../Types/Typeof";
|
|
6
15
|
import VMUtil from "../VM/VMAPI";
|
|
7
16
|
import DataToProcess from "./DataToProcess";
|
|
@@ -63,8 +72,137 @@ export default class MonitorTemplateUtil {
|
|
|
63
72
|
.requestBody,
|
|
64
73
|
requestHeaders: (data.dataToProcess as IncomingMonitorRequest)
|
|
65
74
|
.requestHeaders,
|
|
75
|
+
requestMethod: (data.dataToProcess as IncomingMonitorRequest)
|
|
76
|
+
.requestMethod,
|
|
77
|
+
incomingRequestReceivedAt: (
|
|
78
|
+
data.dataToProcess as IncomingMonitorRequest
|
|
79
|
+
).incomingRequestReceivedAt,
|
|
66
80
|
} as JSONObject;
|
|
67
81
|
}
|
|
82
|
+
|
|
83
|
+
if (
|
|
84
|
+
data.monitorType === MonitorType.Ping ||
|
|
85
|
+
data.monitorType === MonitorType.IP ||
|
|
86
|
+
data.monitorType === MonitorType.Port
|
|
87
|
+
) {
|
|
88
|
+
storageMap = {
|
|
89
|
+
isOnline: (data.dataToProcess as ProbeMonitorResponse).isOnline,
|
|
90
|
+
responseTimeInMs: (data.dataToProcess as ProbeMonitorResponse)
|
|
91
|
+
.responseTimeInMs,
|
|
92
|
+
failureCause: (data.dataToProcess as ProbeMonitorResponse)
|
|
93
|
+
.failureCause,
|
|
94
|
+
isTimeout: (data.dataToProcess as ProbeMonitorResponse).isTimeout,
|
|
95
|
+
} as JSONObject;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (data.monitorType === MonitorType.SSLCertificate) {
|
|
99
|
+
const sslResponse: SslMonitorResponse | undefined = (
|
|
100
|
+
data.dataToProcess as ProbeMonitorResponse
|
|
101
|
+
).sslResponse;
|
|
102
|
+
storageMap = {
|
|
103
|
+
isOnline: (data.dataToProcess as ProbeMonitorResponse).isOnline,
|
|
104
|
+
isSelfSigned: sslResponse?.isSelfSigned,
|
|
105
|
+
createdAt: sslResponse?.createdAt,
|
|
106
|
+
expiresAt: sslResponse?.expiresAt,
|
|
107
|
+
commonName: sslResponse?.commonName,
|
|
108
|
+
organizationalUnit: sslResponse?.organizationalUnit,
|
|
109
|
+
organization: sslResponse?.organization,
|
|
110
|
+
locality: sslResponse?.locality,
|
|
111
|
+
state: sslResponse?.state,
|
|
112
|
+
country: sslResponse?.country,
|
|
113
|
+
serialNumber: sslResponse?.serialNumber,
|
|
114
|
+
fingerprint: sslResponse?.fingerprint,
|
|
115
|
+
fingerprint256: sslResponse?.fingerprint256,
|
|
116
|
+
failureCause: (data.dataToProcess as ProbeMonitorResponse)
|
|
117
|
+
.failureCause,
|
|
118
|
+
} as JSONObject;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
if (data.monitorType === MonitorType.Server) {
|
|
122
|
+
const serverResponse: ServerMonitorResponse =
|
|
123
|
+
data.dataToProcess as ServerMonitorResponse;
|
|
124
|
+
const infraMetrics: BasicInfrastructureMetrics | undefined =
|
|
125
|
+
serverResponse.basicInfrastructureMetrics;
|
|
126
|
+
|
|
127
|
+
storageMap = {
|
|
128
|
+
hostname: serverResponse.hostname,
|
|
129
|
+
requestReceivedAt: serverResponse.requestReceivedAt,
|
|
130
|
+
failureCause: serverResponse.failureCause,
|
|
131
|
+
} as JSONObject;
|
|
132
|
+
|
|
133
|
+
// Add CPU metrics if available
|
|
134
|
+
if (infraMetrics?.cpuMetrics) {
|
|
135
|
+
storageMap["cpuUsagePercent"] = infraMetrics.cpuMetrics.percentUsed;
|
|
136
|
+
storageMap["cpuCores"] = infraMetrics.cpuMetrics.cores;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// Add memory metrics if available
|
|
140
|
+
if (infraMetrics?.memoryMetrics) {
|
|
141
|
+
storageMap["memoryUsagePercent"] =
|
|
142
|
+
infraMetrics.memoryMetrics.percentUsed;
|
|
143
|
+
storageMap["memoryFreePercent"] =
|
|
144
|
+
infraMetrics.memoryMetrics.percentFree;
|
|
145
|
+
storageMap["memoryTotalBytes"] = infraMetrics.memoryMetrics.total;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Add disk metrics if available
|
|
149
|
+
if (infraMetrics?.diskMetrics) {
|
|
150
|
+
storageMap["diskMetrics"] = infraMetrics.diskMetrics.map(
|
|
151
|
+
(disk: BasicDiskMetrics) => {
|
|
152
|
+
return {
|
|
153
|
+
diskPath: disk.diskPath,
|
|
154
|
+
usagePercent: disk.percentUsed,
|
|
155
|
+
freePercent: disk.percentFree,
|
|
156
|
+
totalBytes: disk.total,
|
|
157
|
+
};
|
|
158
|
+
},
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// Add processes if available
|
|
163
|
+
if (serverResponse.processes) {
|
|
164
|
+
storageMap["processes"] = serverResponse.processes.map(
|
|
165
|
+
(process: ServerProcess) => {
|
|
166
|
+
return {
|
|
167
|
+
pid: process.pid,
|
|
168
|
+
name: process.name,
|
|
169
|
+
command: process.command,
|
|
170
|
+
};
|
|
171
|
+
},
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
if (
|
|
177
|
+
data.monitorType === MonitorType.SyntheticMonitor ||
|
|
178
|
+
data.monitorType === MonitorType.CustomJavaScriptCode
|
|
179
|
+
) {
|
|
180
|
+
const customCodeResponse: CustomCodeMonitorResponse | undefined = (
|
|
181
|
+
data.dataToProcess as ProbeMonitorResponse
|
|
182
|
+
).customCodeMonitorResponse;
|
|
183
|
+
const syntheticResponse: SyntheticMonitorResponse[] | undefined = (
|
|
184
|
+
data.dataToProcess as ProbeMonitorResponse
|
|
185
|
+
).syntheticMonitorResponse;
|
|
186
|
+
|
|
187
|
+
storageMap = {
|
|
188
|
+
executionTimeInMs: customCodeResponse?.executionTimeInMS,
|
|
189
|
+
result: customCodeResponse?.result,
|
|
190
|
+
scriptError: customCodeResponse?.scriptError,
|
|
191
|
+
logMessages: customCodeResponse?.logMessages || [],
|
|
192
|
+
failureCause: (data.dataToProcess as ProbeMonitorResponse)
|
|
193
|
+
.failureCause,
|
|
194
|
+
} as JSONObject;
|
|
195
|
+
|
|
196
|
+
// Add synthetic monitor specific fields if available
|
|
197
|
+
if (syntheticResponse && syntheticResponse.length > 0) {
|
|
198
|
+
const firstResponse: SyntheticMonitorResponse = syntheticResponse[0]!;
|
|
199
|
+
if (firstResponse) {
|
|
200
|
+
storageMap["screenshots"] = firstResponse.screenshots;
|
|
201
|
+
storageMap["browserType"] = firstResponse.browserType;
|
|
202
|
+
storageMap["screenSizeType"] = firstResponse.screenSizeType;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
68
206
|
} catch (err) {
|
|
69
207
|
logger.error(err);
|
|
70
208
|
}
|
|
@@ -46,8 +46,108 @@ export default class MonitorTemplateUtil {
|
|
|
46
46
|
.requestBody,
|
|
47
47
|
requestHeaders: data.dataToProcess
|
|
48
48
|
.requestHeaders,
|
|
49
|
+
requestMethod: data.dataToProcess
|
|
50
|
+
.requestMethod,
|
|
51
|
+
incomingRequestReceivedAt: data.dataToProcess.incomingRequestReceivedAt,
|
|
49
52
|
};
|
|
50
53
|
}
|
|
54
|
+
if (data.monitorType === MonitorType.Ping ||
|
|
55
|
+
data.monitorType === MonitorType.IP ||
|
|
56
|
+
data.monitorType === MonitorType.Port) {
|
|
57
|
+
storageMap = {
|
|
58
|
+
isOnline: data.dataToProcess.isOnline,
|
|
59
|
+
responseTimeInMs: data.dataToProcess
|
|
60
|
+
.responseTimeInMs,
|
|
61
|
+
failureCause: data.dataToProcess
|
|
62
|
+
.failureCause,
|
|
63
|
+
isTimeout: data.dataToProcess.isTimeout,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
if (data.monitorType === MonitorType.SSLCertificate) {
|
|
67
|
+
const sslResponse = data.dataToProcess.sslResponse;
|
|
68
|
+
storageMap = {
|
|
69
|
+
isOnline: data.dataToProcess.isOnline,
|
|
70
|
+
isSelfSigned: sslResponse === null || sslResponse === void 0 ? void 0 : sslResponse.isSelfSigned,
|
|
71
|
+
createdAt: sslResponse === null || sslResponse === void 0 ? void 0 : sslResponse.createdAt,
|
|
72
|
+
expiresAt: sslResponse === null || sslResponse === void 0 ? void 0 : sslResponse.expiresAt,
|
|
73
|
+
commonName: sslResponse === null || sslResponse === void 0 ? void 0 : sslResponse.commonName,
|
|
74
|
+
organizationalUnit: sslResponse === null || sslResponse === void 0 ? void 0 : sslResponse.organizationalUnit,
|
|
75
|
+
organization: sslResponse === null || sslResponse === void 0 ? void 0 : sslResponse.organization,
|
|
76
|
+
locality: sslResponse === null || sslResponse === void 0 ? void 0 : sslResponse.locality,
|
|
77
|
+
state: sslResponse === null || sslResponse === void 0 ? void 0 : sslResponse.state,
|
|
78
|
+
country: sslResponse === null || sslResponse === void 0 ? void 0 : sslResponse.country,
|
|
79
|
+
serialNumber: sslResponse === null || sslResponse === void 0 ? void 0 : sslResponse.serialNumber,
|
|
80
|
+
fingerprint: sslResponse === null || sslResponse === void 0 ? void 0 : sslResponse.fingerprint,
|
|
81
|
+
fingerprint256: sslResponse === null || sslResponse === void 0 ? void 0 : sslResponse.fingerprint256,
|
|
82
|
+
failureCause: data.dataToProcess
|
|
83
|
+
.failureCause,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
if (data.monitorType === MonitorType.Server) {
|
|
87
|
+
const serverResponse = data.dataToProcess;
|
|
88
|
+
const infraMetrics = serverResponse.basicInfrastructureMetrics;
|
|
89
|
+
storageMap = {
|
|
90
|
+
hostname: serverResponse.hostname,
|
|
91
|
+
requestReceivedAt: serverResponse.requestReceivedAt,
|
|
92
|
+
failureCause: serverResponse.failureCause,
|
|
93
|
+
};
|
|
94
|
+
// Add CPU metrics if available
|
|
95
|
+
if (infraMetrics === null || infraMetrics === void 0 ? void 0 : infraMetrics.cpuMetrics) {
|
|
96
|
+
storageMap["cpuUsagePercent"] = infraMetrics.cpuMetrics.percentUsed;
|
|
97
|
+
storageMap["cpuCores"] = infraMetrics.cpuMetrics.cores;
|
|
98
|
+
}
|
|
99
|
+
// Add memory metrics if available
|
|
100
|
+
if (infraMetrics === null || infraMetrics === void 0 ? void 0 : infraMetrics.memoryMetrics) {
|
|
101
|
+
storageMap["memoryUsagePercent"] =
|
|
102
|
+
infraMetrics.memoryMetrics.percentUsed;
|
|
103
|
+
storageMap["memoryFreePercent"] =
|
|
104
|
+
infraMetrics.memoryMetrics.percentFree;
|
|
105
|
+
storageMap["memoryTotalBytes"] = infraMetrics.memoryMetrics.total;
|
|
106
|
+
}
|
|
107
|
+
// Add disk metrics if available
|
|
108
|
+
if (infraMetrics === null || infraMetrics === void 0 ? void 0 : infraMetrics.diskMetrics) {
|
|
109
|
+
storageMap["diskMetrics"] = infraMetrics.diskMetrics.map((disk) => {
|
|
110
|
+
return {
|
|
111
|
+
diskPath: disk.diskPath,
|
|
112
|
+
usagePercent: disk.percentUsed,
|
|
113
|
+
freePercent: disk.percentFree,
|
|
114
|
+
totalBytes: disk.total,
|
|
115
|
+
};
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
// Add processes if available
|
|
119
|
+
if (serverResponse.processes) {
|
|
120
|
+
storageMap["processes"] = serverResponse.processes.map((process) => {
|
|
121
|
+
return {
|
|
122
|
+
pid: process.pid,
|
|
123
|
+
name: process.name,
|
|
124
|
+
command: process.command,
|
|
125
|
+
};
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (data.monitorType === MonitorType.SyntheticMonitor ||
|
|
130
|
+
data.monitorType === MonitorType.CustomJavaScriptCode) {
|
|
131
|
+
const customCodeResponse = data.dataToProcess.customCodeMonitorResponse;
|
|
132
|
+
const syntheticResponse = data.dataToProcess.syntheticMonitorResponse;
|
|
133
|
+
storageMap = {
|
|
134
|
+
executionTimeInMs: customCodeResponse === null || customCodeResponse === void 0 ? void 0 : customCodeResponse.executionTimeInMS,
|
|
135
|
+
result: customCodeResponse === null || customCodeResponse === void 0 ? void 0 : customCodeResponse.result,
|
|
136
|
+
scriptError: customCodeResponse === null || customCodeResponse === void 0 ? void 0 : customCodeResponse.scriptError,
|
|
137
|
+
logMessages: (customCodeResponse === null || customCodeResponse === void 0 ? void 0 : customCodeResponse.logMessages) || [],
|
|
138
|
+
failureCause: data.dataToProcess
|
|
139
|
+
.failureCause,
|
|
140
|
+
};
|
|
141
|
+
// Add synthetic monitor specific fields if available
|
|
142
|
+
if (syntheticResponse && syntheticResponse.length > 0) {
|
|
143
|
+
const firstResponse = syntheticResponse[0];
|
|
144
|
+
if (firstResponse) {
|
|
145
|
+
storageMap["screenshots"] = firstResponse.screenshots;
|
|
146
|
+
storageMap["browserType"] = firstResponse.browserType;
|
|
147
|
+
storageMap["screenSizeType"] = firstResponse.screenSizeType;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
51
151
|
}
|
|
52
152
|
catch (err) {
|
|
53
153
|
logger.error(err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonitorTemplateUtil.js","sourceRoot":"","sources":["../../../../../Server/Utils/Monitor/MonitorTemplateUtil.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"MonitorTemplateUtil.js","sourceRoot":"","sources":["../../../../../Server/Utils/Monitor/MonitorTemplateUtil.ts"],"names":[],"mappings":"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"}
|