@oneuptime/common 7.0.3357 → 7.0.3377
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/Server/Utils/Monitor/Criteria/APIRequestCriteria.ts +4 -1
- package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +81 -0
- package/Server/Utils/Monitor/DataToProcess.ts +3 -1
- package/Server/Utils/Monitor/MonitorResource.ts +14 -0
- package/Types/Monitor/CriteriaFilter.ts +8 -0
- package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +11 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +89 -0
- package/Types/Monitor/MonitorStep.ts +26 -0
- package/Types/Monitor/MonitorStepMetricMonitor.ts +28 -0
- package/Types/Monitor/MonitorType.ts +1 -2
- package/Types/RollingTime/RollingTime.ts +24 -0
- package/Types/RollingTime/RollingTimeUtil.ts +98 -0
- package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +2 -1
- package/UI/Components/Date/StartAndEndDate.tsx +65 -71
- package/UI/Components/Filters/DateFilter.tsx +1 -1
- package/UI/Components/RollingTimePicker/RollingTimePicker.tsx +58 -0
- package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js +2 -1
- package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js +51 -0
- package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +11 -0
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +2 -0
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/Monitor/MetricMonitor/MetricMonitorResponse.js +2 -0
- package/build/dist/Types/Monitor/MetricMonitor/MetricMonitorResponse.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +76 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +18 -1
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepMetricMonitor.js +19 -0
- package/build/dist/Types/Monitor/MonitorStepMetricMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorType.js +1 -2
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/RollingTime/RollingTime.js +25 -0
- package/build/dist/Types/RollingTime/RollingTime.js.map +1 -0
- package/build/dist/Types/RollingTime/RollingTimeUtil.js +74 -0
- package/build/dist/Types/RollingTime/RollingTimeUtil.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +1 -1
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
- package/build/dist/UI/Components/Date/StartAndEndDate.js +33 -46
- package/build/dist/UI/Components/Date/StartAndEndDate.js.map +1 -1
- package/build/dist/UI/Components/Filters/DateFilter.js +1 -1
- package/build/dist/UI/Components/Filters/DateFilter.js.map +1 -1
- package/build/dist/UI/Components/RollingTimePicker/RollingTimePicker.js +32 -0
- package/build/dist/UI/Components/RollingTimePicker/RollingTimePicker.js.map +1 -0
- package/package.json +2 -2
|
@@ -70,7 +70,10 @@ export default class APIRequestCriteria {
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
//check response code
|
|
73
|
-
if (
|
|
73
|
+
if (
|
|
74
|
+
input.criteriaFilter.checkOn === CheckOn.ResponseStatusCode &&
|
|
75
|
+
(input.dataToProcess as ProbeMonitorResponse).responseCode
|
|
76
|
+
) {
|
|
74
77
|
threshold = CompareCriteria.convertToNumber(threshold);
|
|
75
78
|
|
|
76
79
|
const value: Array<number> | number =
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import AggregateModel from "../../../../Types/BaseDatabase/AggregatedModel";
|
|
2
|
+
import AggregatedResult from "../../../../Types/BaseDatabase/AggregatedResult";
|
|
3
|
+
import MetricQueryConfigData from "../../../../Types/Metrics/MetricQueryConfigData";
|
|
4
|
+
import MetricMonitorResponse from "../../../../Types/Monitor/MetricMonitor/MetricMonitorResponse";
|
|
5
|
+
import DataToProcess from "../DataToProcess";
|
|
6
|
+
import CompareCriteria from "./CompareCriteria";
|
|
7
|
+
import { CheckOn, CriteriaFilter } from "Common/Types/Monitor/CriteriaFilter";
|
|
8
|
+
|
|
9
|
+
export default class MetricMonitorCriteria {
|
|
10
|
+
public static async isMonitorInstanceCriteriaFilterMet(input: {
|
|
11
|
+
dataToProcess: DataToProcess;
|
|
12
|
+
criteriaFilter: CriteriaFilter;
|
|
13
|
+
}): Promise<string | null> {
|
|
14
|
+
// Metric Monitoring Checks
|
|
15
|
+
|
|
16
|
+
let threshold: number | string | undefined | null =
|
|
17
|
+
input.criteriaFilter.value;
|
|
18
|
+
|
|
19
|
+
if (input.criteriaFilter.checkOn === CheckOn.MetricValue) {
|
|
20
|
+
threshold = CompareCriteria.convertToNumber(threshold);
|
|
21
|
+
|
|
22
|
+
const metricAggregaredResult: Array<AggregatedResult> =
|
|
23
|
+
(input.dataToProcess as MetricMonitorResponse).metricResult || [];
|
|
24
|
+
|
|
25
|
+
const metricAlias: string =
|
|
26
|
+
input.criteriaFilter.metricMonitorOptions?.metricAlias || "";
|
|
27
|
+
|
|
28
|
+
const aggregatedResult: AggregatedResult | undefined =
|
|
29
|
+
metricAggregaredResult && metricAggregaredResult.length > 0
|
|
30
|
+
? metricAggregaredResult[0]
|
|
31
|
+
: undefined;
|
|
32
|
+
|
|
33
|
+
if (metricAlias) {
|
|
34
|
+
// find the index of the alias in the dataToProcess.
|
|
35
|
+
const indexOfAlias: number = (
|
|
36
|
+
input.dataToProcess as MetricMonitorResponse
|
|
37
|
+
).metricViewConfig.queryConfigs.findIndex(
|
|
38
|
+
(queryConfig: MetricQueryConfigData) => {
|
|
39
|
+
return queryConfig.metricAliasData?.metricVariable === metricAlias;
|
|
40
|
+
},
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
// now get the aggregated result for that alias
|
|
44
|
+
if (indexOfAlias !== -1) {
|
|
45
|
+
const aggregatedResultForAlias: AggregatedResult | undefined =
|
|
46
|
+
metricAggregaredResult[indexOfAlias];
|
|
47
|
+
if (aggregatedResultForAlias) {
|
|
48
|
+
const numbers: Array<number> = aggregatedResultForAlias.data.map(
|
|
49
|
+
(data: AggregateModel) => {
|
|
50
|
+
return data.value;
|
|
51
|
+
},
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
return CompareCriteria.compareCriteriaNumbers({
|
|
55
|
+
value: numbers,
|
|
56
|
+
threshold: threshold as number,
|
|
57
|
+
criteriaFilter: input.criteriaFilter,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// if there's no alias then this is the default case
|
|
64
|
+
if (aggregatedResult) {
|
|
65
|
+
const numbers: Array<number> = aggregatedResult.data.map(
|
|
66
|
+
(data: AggregateModel) => {
|
|
67
|
+
return data.value;
|
|
68
|
+
},
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
return CompareCriteria.compareCriteriaNumbers({
|
|
72
|
+
value: numbers,
|
|
73
|
+
threshold: threshold as number,
|
|
74
|
+
criteriaFilter: input.criteriaFilter,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -3,12 +3,14 @@ import ServerMonitorResponse from "Common/Types/Monitor/ServerMonitor/ServerMoni
|
|
|
3
3
|
import ProbeMonitorResponse from "Common/Types/Probe/ProbeMonitorResponse";
|
|
4
4
|
import LogMonitorResponse from "Common/Types/Monitor/LogMonitor/LogMonitorResponse";
|
|
5
5
|
import TraceMonitorResponse from "Common/Types/Monitor/TraceMonitor/TraceMonitorResponse";
|
|
6
|
+
import MetricMonitorResponse from "../../../Types/Monitor/MetricMonitor/MetricMonitorResponse";
|
|
6
7
|
|
|
7
8
|
type DataToProcess =
|
|
8
9
|
| ProbeMonitorResponse
|
|
9
10
|
| IncomingMonitorRequest
|
|
10
11
|
| ServerMonitorResponse
|
|
11
12
|
| LogMonitorResponse
|
|
12
|
-
| TraceMonitorResponse
|
|
13
|
+
| TraceMonitorResponse
|
|
14
|
+
| MetricMonitorResponse;
|
|
13
15
|
|
|
14
16
|
export default DataToProcess;
|
|
@@ -55,6 +55,7 @@ import Metric, {
|
|
|
55
55
|
import MetricService from "../../Services/MetricService";
|
|
56
56
|
import MonitorMetricType from "../../../Types/Monitor/MonitorMetricType";
|
|
57
57
|
import TelemetryUtil from "../Telemetry/Telemetry";
|
|
58
|
+
import MetricMonitorCriteria from "./Criteria/MetricMonitorCriteria";
|
|
58
59
|
|
|
59
60
|
export default class MonitorResourceUtil {
|
|
60
61
|
public static async monitorResource(
|
|
@@ -1273,6 +1274,19 @@ export default class MonitorResourceUtil {
|
|
|
1273
1274
|
}
|
|
1274
1275
|
}
|
|
1275
1276
|
|
|
1277
|
+
if (input.monitor.monitorType === MonitorType.Metrics) {
|
|
1278
|
+
// check server monitor
|
|
1279
|
+
const logMonitorResult: string | null =
|
|
1280
|
+
await MetricMonitorCriteria.isMonitorInstanceCriteriaFilterMet({
|
|
1281
|
+
dataToProcess: input.dataToProcess,
|
|
1282
|
+
criteriaFilter: input.criteriaFilter,
|
|
1283
|
+
});
|
|
1284
|
+
|
|
1285
|
+
if (logMonitorResult) {
|
|
1286
|
+
return logMonitorResult;
|
|
1287
|
+
}
|
|
1288
|
+
}
|
|
1289
|
+
|
|
1276
1290
|
if (input.monitor.monitorType === MonitorType.Traces) {
|
|
1277
1291
|
// check server monitor
|
|
1278
1292
|
const traceMonitorResult: string | null =
|
|
@@ -38,12 +38,19 @@ export enum CheckOn {
|
|
|
38
38
|
|
|
39
39
|
// Trace monitors.
|
|
40
40
|
SpanCount = "Span Count",
|
|
41
|
+
|
|
42
|
+
// Metric Monitors.
|
|
43
|
+
MetricValue = "Metric Value",
|
|
41
44
|
}
|
|
42
45
|
|
|
43
46
|
export interface ServerMonitorOptions {
|
|
44
47
|
diskPath?: string | undefined;
|
|
45
48
|
}
|
|
46
49
|
|
|
50
|
+
export interface MetricMonitorOptions {
|
|
51
|
+
metricAlias?: string | undefined;
|
|
52
|
+
}
|
|
53
|
+
|
|
47
54
|
export enum EvaluateOverTimeType {
|
|
48
55
|
Average = "Average",
|
|
49
56
|
Sum = "Sum",
|
|
@@ -73,6 +80,7 @@ export interface EvaluateOverTimeOptions {
|
|
|
73
80
|
export interface CriteriaFilter {
|
|
74
81
|
checkOn: CheckOn;
|
|
75
82
|
serverMonitorOptions?: ServerMonitorOptions | undefined;
|
|
83
|
+
metricMonitorOptions?: MetricMonitorOptions | undefined;
|
|
76
84
|
filterType: FilterType | undefined;
|
|
77
85
|
value: string | number | undefined;
|
|
78
86
|
eveluateOverTime?: boolean | undefined;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import AggregatedResult from "../../BaseDatabase/AggregatedResult";
|
|
2
|
+
import InBetween from "../../BaseDatabase/InBetween";
|
|
3
|
+
import MetricsViewConfig from "../../Metrics/MetricsViewConfig";
|
|
4
|
+
import ObjectID from "../../ObjectID";
|
|
5
|
+
|
|
6
|
+
export default interface MetricMonitorResponse {
|
|
7
|
+
startAndEndDate?: InBetween<Date>;
|
|
8
|
+
metricResult: Array<AggregatedResult>;
|
|
9
|
+
metricViewConfig: MetricsViewConfig;
|
|
10
|
+
monitorId: ObjectID;
|
|
11
|
+
}
|
|
@@ -59,6 +59,9 @@ export default class MonitorCriteriaInstance extends DatabaseProperty {
|
|
|
59
59
|
monitorType: MonitorType;
|
|
60
60
|
monitorStatusId: ObjectID;
|
|
61
61
|
monitorName: string;
|
|
62
|
+
metricOptions?: {
|
|
63
|
+
metricAliases: Array<string>;
|
|
64
|
+
};
|
|
62
65
|
}): MonitorCriteriaInstance | null {
|
|
63
66
|
if (arg.monitorType === MonitorType.IncomingRequest) {
|
|
64
67
|
const monitorCriteriaInstance: MonitorCriteriaInstance =
|
|
@@ -114,6 +117,41 @@ export default class MonitorCriteriaInstance extends DatabaseProperty {
|
|
|
114
117
|
return monitorCriteriaInstance;
|
|
115
118
|
}
|
|
116
119
|
|
|
120
|
+
if (arg.monitorType === MonitorType.Metrics) {
|
|
121
|
+
const monitorCriteriaInstance: MonitorCriteriaInstance =
|
|
122
|
+
new MonitorCriteriaInstance();
|
|
123
|
+
|
|
124
|
+
monitorCriteriaInstance.data = {
|
|
125
|
+
id: ObjectID.generate().toString(),
|
|
126
|
+
monitorStatusId: arg.monitorStatusId,
|
|
127
|
+
filterCondition: FilterCondition.Any,
|
|
128
|
+
filters: [
|
|
129
|
+
{
|
|
130
|
+
checkOn: CheckOn.MetricValue,
|
|
131
|
+
filterType: FilterType.GreaterThan,
|
|
132
|
+
metricMonitorOptions: {
|
|
133
|
+
metricAlias:
|
|
134
|
+
arg.metricOptions &&
|
|
135
|
+
arg.metricOptions.metricAliases &&
|
|
136
|
+
arg.metricOptions.metricAliases.length > 0
|
|
137
|
+
? arg.metricOptions.metricAliases[0]
|
|
138
|
+
: undefined,
|
|
139
|
+
},
|
|
140
|
+
value: 0, // if there are some logs then monitor is online.
|
|
141
|
+
},
|
|
142
|
+
],
|
|
143
|
+
incidents: [],
|
|
144
|
+
alerts: [],
|
|
145
|
+
changeMonitorStatus: true,
|
|
146
|
+
createIncidents: false,
|
|
147
|
+
createAlerts: false,
|
|
148
|
+
name: `Check if ${arg.monitorName} is online`,
|
|
149
|
+
description: `This criteria checks if the ${arg.monitorName} is online`,
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
return monitorCriteriaInstance;
|
|
153
|
+
}
|
|
154
|
+
|
|
117
155
|
if (arg.monitorType === MonitorType.Traces) {
|
|
118
156
|
const monitorCriteriaInstance: MonitorCriteriaInstance =
|
|
119
157
|
new MonitorCriteriaInstance();
|
|
@@ -278,6 +316,9 @@ export default class MonitorCriteriaInstance extends DatabaseProperty {
|
|
|
278
316
|
incidentSeverityId: ObjectID;
|
|
279
317
|
alertSeverityId: ObjectID;
|
|
280
318
|
monitorName: string;
|
|
319
|
+
metricOptions?: {
|
|
320
|
+
metricAliases: Array<string>;
|
|
321
|
+
};
|
|
281
322
|
}): MonitorCriteriaInstance {
|
|
282
323
|
const monitorCriteriaInstance: MonitorCriteriaInstance =
|
|
283
324
|
new MonitorCriteriaInstance();
|
|
@@ -415,6 +456,54 @@ export default class MonitorCriteriaInstance extends DatabaseProperty {
|
|
|
415
456
|
};
|
|
416
457
|
}
|
|
417
458
|
|
|
459
|
+
if (arg.monitorType === MonitorType.Metrics) {
|
|
460
|
+
monitorCriteriaInstance.data = {
|
|
461
|
+
id: ObjectID.generate().toString(),
|
|
462
|
+
monitorStatusId: arg.monitorStatusId,
|
|
463
|
+
filterCondition: FilterCondition.Any,
|
|
464
|
+
filters: [
|
|
465
|
+
{
|
|
466
|
+
checkOn: CheckOn.MetricValue,
|
|
467
|
+
filterType: FilterType.EqualTo,
|
|
468
|
+
metricMonitorOptions: {
|
|
469
|
+
metricAlias:
|
|
470
|
+
arg.metricOptions &&
|
|
471
|
+
arg.metricOptions.metricAliases &&
|
|
472
|
+
arg.metricOptions.metricAliases.length > 0
|
|
473
|
+
? arg.metricOptions.metricAliases[0]
|
|
474
|
+
: undefined,
|
|
475
|
+
},
|
|
476
|
+
value: 0, // if there are no logs then the monitor is offline
|
|
477
|
+
},
|
|
478
|
+
],
|
|
479
|
+
incidents: [
|
|
480
|
+
{
|
|
481
|
+
title: `${arg.monitorName} is offline`,
|
|
482
|
+
description: `${arg.monitorName} is currently offline.`,
|
|
483
|
+
incidentSeverityId: arg.incidentSeverityId,
|
|
484
|
+
autoResolveIncident: true,
|
|
485
|
+
id: ObjectID.generate().toString(),
|
|
486
|
+
onCallPolicyIds: [],
|
|
487
|
+
},
|
|
488
|
+
],
|
|
489
|
+
alerts: [
|
|
490
|
+
{
|
|
491
|
+
title: `${arg.monitorName} is offline`,
|
|
492
|
+
description: `${arg.monitorName} is currently offline.`,
|
|
493
|
+
alertSeverityId: arg.alertSeverityId,
|
|
494
|
+
autoResolveAlert: true,
|
|
495
|
+
id: ObjectID.generate().toString(),
|
|
496
|
+
onCallPolicyIds: [],
|
|
497
|
+
},
|
|
498
|
+
],
|
|
499
|
+
createAlerts: false,
|
|
500
|
+
changeMonitorStatus: true,
|
|
501
|
+
createIncidents: true,
|
|
502
|
+
name: `Check if ${arg.monitorName} is offline`,
|
|
503
|
+
description: `This criteria checks if the ${arg.monitorName} is offline`,
|
|
504
|
+
};
|
|
505
|
+
}
|
|
506
|
+
|
|
418
507
|
if (arg.monitorType === MonitorType.Traces) {
|
|
419
508
|
monitorCriteriaInstance.data = {
|
|
420
509
|
id: ObjectID.generate().toString(),
|
|
@@ -20,6 +20,9 @@ import { FindOperator } from "typeorm";
|
|
|
20
20
|
import MonitorStepTraceMonitor, {
|
|
21
21
|
MonitorStepTraceMonitorUtil,
|
|
22
22
|
} from "./MonitorStepTraceMonitor";
|
|
23
|
+
import MonitorStepMetricMonitor, {
|
|
24
|
+
MonitorStepMetricMonitorUtil,
|
|
25
|
+
} from "./MonitorStepMetricMonitor";
|
|
23
26
|
|
|
24
27
|
export interface MonitorStepType {
|
|
25
28
|
id: string;
|
|
@@ -50,6 +53,9 @@ export interface MonitorStepType {
|
|
|
50
53
|
|
|
51
54
|
// trace monitor type.
|
|
52
55
|
traceMonitor?: MonitorStepTraceMonitor | undefined;
|
|
56
|
+
|
|
57
|
+
// Metric Monitor
|
|
58
|
+
metricMonitor: MonitorStepMetricMonitor | undefined;
|
|
53
59
|
}
|
|
54
60
|
|
|
55
61
|
export default class MonitorStep extends DatabaseProperty {
|
|
@@ -72,6 +78,7 @@ export default class MonitorStep extends DatabaseProperty {
|
|
|
72
78
|
browserTypes: undefined,
|
|
73
79
|
logMonitor: undefined,
|
|
74
80
|
traceMonitor: undefined,
|
|
81
|
+
metricMonitor: undefined,
|
|
75
82
|
};
|
|
76
83
|
}
|
|
77
84
|
|
|
@@ -99,6 +106,7 @@ export default class MonitorStep extends DatabaseProperty {
|
|
|
99
106
|
browserTypes: undefined,
|
|
100
107
|
logMonitor: undefined,
|
|
101
108
|
traceMonitor: undefined,
|
|
109
|
+
metricMonitor: undefined,
|
|
102
110
|
};
|
|
103
111
|
|
|
104
112
|
return monitorStep;
|
|
@@ -165,6 +173,13 @@ export default class MonitorStep extends DatabaseProperty {
|
|
|
165
173
|
return this;
|
|
166
174
|
}
|
|
167
175
|
|
|
176
|
+
public setMetricMonitor(
|
|
177
|
+
metricMonitor: MonitorStepMetricMonitor,
|
|
178
|
+
): MonitorStep {
|
|
179
|
+
this.data!.metricMonitor = metricMonitor;
|
|
180
|
+
return this;
|
|
181
|
+
}
|
|
182
|
+
|
|
168
183
|
public setTraceMonitor(traceMonitor: MonitorStepTraceMonitor): MonitorStep {
|
|
169
184
|
this.data!.traceMonitor = traceMonitor;
|
|
170
185
|
return this;
|
|
@@ -285,6 +300,9 @@ export default class MonitorStep extends DatabaseProperty {
|
|
|
285
300
|
this.data.logMonitor || MonitorStepLogMonitorUtil.getDefault(),
|
|
286
301
|
)
|
|
287
302
|
: undefined,
|
|
303
|
+
metricMonitor: this.data.metricMonitor
|
|
304
|
+
? MonitorStepMetricMonitorUtil.toJSON(this.data.metricMonitor)
|
|
305
|
+
: undefined,
|
|
288
306
|
traceMonitor: this.data.traceMonitor
|
|
289
307
|
? MonitorStepTraceMonitorUtil.toJSON(
|
|
290
308
|
this.data.traceMonitor ||
|
|
@@ -383,6 +401,9 @@ export default class MonitorStep extends DatabaseProperty {
|
|
|
383
401
|
logMonitor: json["logMonitor"]
|
|
384
402
|
? (json["logMonitor"] as JSONObject)
|
|
385
403
|
: undefined,
|
|
404
|
+
metricMonitor: json["metricMonitor"]
|
|
405
|
+
? (json["metricMonitor"] as JSONObject)
|
|
406
|
+
: undefined,
|
|
386
407
|
traceMonitor: json["traceMonitor"]
|
|
387
408
|
? (json["traceMonitor"] as JSONObject)
|
|
388
409
|
: undefined,
|
|
@@ -396,6 +417,11 @@ export default class MonitorStep extends DatabaseProperty {
|
|
|
396
417
|
monitorStep.data.traceMonitor = MonitorStepTraceMonitorUtil.getDefault();
|
|
397
418
|
}
|
|
398
419
|
|
|
420
|
+
if (monitorStep.data && !monitorStep.data?.metricMonitor) {
|
|
421
|
+
monitorStep.data.metricMonitor =
|
|
422
|
+
MonitorStepMetricMonitorUtil.getDefault();
|
|
423
|
+
}
|
|
424
|
+
|
|
399
425
|
return monitorStep;
|
|
400
426
|
}
|
|
401
427
|
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { JSONObject } from "../JSON";
|
|
2
|
+
import MetricsViewConfig from "../Metrics/MetricsViewConfig";
|
|
3
|
+
import RollingTime from "../RollingTime/RollingTime";
|
|
4
|
+
|
|
5
|
+
export default interface MonitorStepMetricMonitor {
|
|
6
|
+
metricViewConfig: MetricsViewConfig;
|
|
7
|
+
rollingTime: RollingTime;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export class MonitorStepMetricMonitorUtil {
|
|
11
|
+
public static getDefault(): MonitorStepMetricMonitor {
|
|
12
|
+
return {
|
|
13
|
+
metricViewConfig: {
|
|
14
|
+
queryConfigs: [],
|
|
15
|
+
formulaConfigs: [],
|
|
16
|
+
},
|
|
17
|
+
rollingTime: RollingTime.Past1Minute,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
public static fromJSON(json: JSONObject): MonitorStepMetricMonitor {
|
|
22
|
+
return json as any as MonitorStepMetricMonitor;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public static toJSON(monitor: MonitorStepMetricMonitor): JSONObject {
|
|
26
|
+
return monitor as any as JSONObject;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -115,7 +115,6 @@ export class MonitorTypeHelper {
|
|
|
115
115
|
description:
|
|
116
116
|
"This monitor type lets you monitor traces from any source.",
|
|
117
117
|
},
|
|
118
|
-
// ,
|
|
119
118
|
// {
|
|
120
119
|
// monitorType: MonitorType.Metrics,
|
|
121
120
|
// title: "Metrics",
|
|
@@ -205,7 +204,7 @@ export class MonitorTypeHelper {
|
|
|
205
204
|
return monitorType !== MonitorType.Manual;
|
|
206
205
|
}
|
|
207
206
|
|
|
208
|
-
public static
|
|
207
|
+
public static doesMonitorTypeHaveGraphs(monitorType: MonitorType): boolean {
|
|
209
208
|
if (
|
|
210
209
|
monitorType === MonitorType.Website ||
|
|
211
210
|
monitorType === MonitorType.API ||
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
enum RollingTime {
|
|
2
|
+
Past1Minute = "Past 1 Minute",
|
|
3
|
+
Past5Minutes = "Past 5 Minutes",
|
|
4
|
+
Past10Minutes = "Past 10 Minutes",
|
|
5
|
+
Past15Minutes = "Past 15 Minutes",
|
|
6
|
+
Past30Minutes = "Past 30 Minutes",
|
|
7
|
+
Past1Hour = "Past 1 Hour",
|
|
8
|
+
Past2Hours = "Past 2 Hours",
|
|
9
|
+
Past3Hours = "Past 3 Hours",
|
|
10
|
+
Past6Hours = "Past 6 Hours",
|
|
11
|
+
Past12Hours = "Past 12 Hours",
|
|
12
|
+
Past1Hours = "Past 1 Day",
|
|
13
|
+
Past2Days = "Past 2 Days",
|
|
14
|
+
Past3Days = "Past 3 Days",
|
|
15
|
+
Past7Days = "Past 7 Days",
|
|
16
|
+
Past14Days = "Past 14 Days",
|
|
17
|
+
Past30Days = "Past 30 Days",
|
|
18
|
+
Past60Days = "Past 60 Days",
|
|
19
|
+
Past90Days = "Past 90 Days",
|
|
20
|
+
Past180Days = "Past 180 Days",
|
|
21
|
+
Past365Days = "Past 365 Days",
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export default RollingTime;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import InBetween from "../BaseDatabase/InBetween";
|
|
2
|
+
import OneUptimeDate from "../Date";
|
|
3
|
+
import RollingTime from "./RollingTime";
|
|
4
|
+
|
|
5
|
+
export default class RollingTimeUtil {
|
|
6
|
+
public static getDefault(): RollingTime {
|
|
7
|
+
return RollingTime.Past1Minute;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
public static convertToStartAndEndDate(
|
|
11
|
+
rollingTime: RollingTime,
|
|
12
|
+
): InBetween<Date> {
|
|
13
|
+
const endDate: Date = OneUptimeDate.getCurrentDate();
|
|
14
|
+
let startDate: Date = OneUptimeDate.getCurrentDate();
|
|
15
|
+
|
|
16
|
+
if (rollingTime === RollingTime.Past1Minute) {
|
|
17
|
+
startDate = OneUptimeDate.addRemoveMinutes(endDate, -1);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if (rollingTime === RollingTime.Past5Minutes) {
|
|
21
|
+
startDate = OneUptimeDate.addRemoveMinutes(endDate, -5);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (rollingTime === RollingTime.Past10Minutes) {
|
|
25
|
+
startDate = OneUptimeDate.addRemoveMinutes(endDate, -10);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (rollingTime === RollingTime.Past15Minutes) {
|
|
29
|
+
startDate = OneUptimeDate.addRemoveMinutes(endDate, -15);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (rollingTime === RollingTime.Past30Minutes) {
|
|
33
|
+
startDate = OneUptimeDate.addRemoveMinutes(endDate, -30);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (rollingTime === RollingTime.Past1Hour) {
|
|
37
|
+
startDate = OneUptimeDate.addRemoveHours(endDate, -1);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (rollingTime === RollingTime.Past2Hours) {
|
|
41
|
+
startDate = OneUptimeDate.addRemoveHours(endDate, -2);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (rollingTime === RollingTime.Past3Hours) {
|
|
45
|
+
startDate = OneUptimeDate.addRemoveHours(endDate, -3);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (rollingTime === RollingTime.Past6Hours) {
|
|
49
|
+
startDate = OneUptimeDate.addRemoveHours(endDate, -6);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (rollingTime === RollingTime.Past12Hours) {
|
|
53
|
+
startDate = OneUptimeDate.addRemoveHours(endDate, -12);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (rollingTime === RollingTime.Past1Hours) {
|
|
57
|
+
startDate = OneUptimeDate.addRemoveDays(endDate, -1);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (rollingTime === RollingTime.Past2Days) {
|
|
61
|
+
startDate = OneUptimeDate.addRemoveDays(endDate, -2);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (rollingTime === RollingTime.Past3Days) {
|
|
65
|
+
startDate = OneUptimeDate.addRemoveDays(endDate, -3);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (rollingTime === RollingTime.Past7Days) {
|
|
69
|
+
startDate = OneUptimeDate.addRemoveDays(endDate, -7);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (rollingTime === RollingTime.Past14Days) {
|
|
73
|
+
startDate = OneUptimeDate.addRemoveDays(endDate, -14);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (rollingTime === RollingTime.Past30Days) {
|
|
77
|
+
startDate = OneUptimeDate.addRemoveDays(endDate, -30);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (rollingTime === RollingTime.Past60Days) {
|
|
81
|
+
startDate = OneUptimeDate.addRemoveDays(endDate, -60);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (rollingTime === RollingTime.Past90Days) {
|
|
85
|
+
startDate = OneUptimeDate.addRemoveDays(endDate, -90);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (rollingTime === RollingTime.Past180Days) {
|
|
89
|
+
startDate = OneUptimeDate.addRemoveDays(endDate, -180);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (rollingTime === RollingTime.Past365Days) {
|
|
93
|
+
startDate = OneUptimeDate.addRemoveDays(endDate, -365);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return new InBetween(startDate, endDate);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -20,6 +20,7 @@ export interface ComponentProps {
|
|
|
20
20
|
charts: Array<Chart>;
|
|
21
21
|
hideCard?: boolean | undefined;
|
|
22
22
|
heightInPx?: number | undefined;
|
|
23
|
+
chartCssClass?: string | undefined;
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
const ChartGroup: FunctionComponent<ComponentProps> = (
|
|
@@ -35,7 +36,7 @@ const ChartGroup: FunctionComponent<ComponentProps> = (
|
|
|
35
36
|
return (
|
|
36
37
|
<div
|
|
37
38
|
key={index}
|
|
38
|
-
className={`p-6 ${props.hideCard ? "" : "rounded-md bg-white shadow"}`}
|
|
39
|
+
className={`p-6 ${props.hideCard ? "" : "rounded-md bg-white shadow"} ${props.chartCssClass || ""}`}
|
|
39
40
|
>
|
|
40
41
|
<h2
|
|
41
42
|
data-testid="card-details-heading"
|