@oneuptime/common 12.0.14 → 12.0.15
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/GlobalOidc.ts +20 -0
- package/Models/DatabaseModels/GlobalSso.ts +20 -0
- package/Models/DatabaseModels/MarketingConversion.ts +19 -9
- package/Models/DatabaseModels/NetworkDeviceLinkRule.ts +46 -0
- package/Models/DatabaseModels/StatusPage.ts +7 -4
- package/Server/API/StatusPageAPI.ts +29 -4
- package/Server/EnvironmentConfig.ts +7 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787800000000-AddScopeToNetworkDeviceLinkRule.ts +19 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787900000000-AddRestrictToAttachedProjectsToGlobalSso.ts +40 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -0
- package/Server/Middleware/SlackAuthorization.ts +43 -6
- package/Server/Middleware/UserAuthorization.ts +236 -26
- package/Server/Middleware/WhatsAppAuthorization.ts +43 -3
- package/Server/Services/GlobalOidcProjectService.ts +126 -1
- package/Server/Services/GlobalOidcService.ts +132 -0
- package/Server/Services/GlobalSsoProjectService.ts +126 -1
- package/Server/Services/GlobalSsoService.ts +132 -0
- package/Server/Services/UserEmailService.ts +4 -4
- package/Server/Utils/CronTab.ts +73 -0
- package/Server/Utils/GlobalSsoAuthorization.ts +175 -0
- package/Server/Utils/Marketing/ConversionUploadProvider.ts +35 -5
- package/Server/Utils/Marketing/Providers/GoogleAds.ts +1 -1
- package/Server/Utils/Marketing/Providers/LinkedIn.ts +1 -1
- package/Server/Utils/Marketing/Providers/Meta.ts +1 -1
- package/Server/Utils/Marketing/Providers/MicrosoftAds.ts +1 -1
- package/Server/Utils/Marketing/Providers/Reddit.ts +1 -1
- package/Server/Utils/Monitor/Criteria/APIRequestCriteria.ts +48 -33
- package/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.ts +35 -30
- package/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.ts +33 -28
- package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +475 -47
- package/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.ts +35 -30
- package/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.ts +34 -28
- package/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.ts +33 -28
- package/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.ts +69 -40
- package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +35 -29
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +8 -0
- package/Server/Utils/Monitor/MonitorResource.ts +161 -21
- package/Server/Utils/StatusPageContentSecurityPolicy.ts +56 -0
- package/Server/Utils/StatusPageCustomizationAccess.ts +117 -0
- package/Tests/Server/API/StatusPageCustomizationOrigin.test.ts +348 -0
- package/Tests/Server/Infrastructure/Postgres/FixTotpOtpUrlAlgorithmMigration.test.ts +9 -59
- package/Tests/Server/Infrastructure/Postgres/SchemaMigrationsOrdering.test.ts +227 -0
- package/Tests/Server/Middleware/SlackAuthorization.test.ts +149 -0
- package/Tests/Server/Middleware/UserAuthorization.test.ts +27 -13
- package/Tests/Server/Middleware/UserAuthorizationGlobalSsoGovernance.test.ts +1455 -0
- package/Tests/Server/Middleware/UserAuthorizationSSOProvider.test.ts +91 -2
- package/Tests/Server/Middleware/WhatsAppAuthorization.test.ts +233 -0
- package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +21 -8
- package/Tests/Server/Services/GlobalSsoProviderAuthorization.test.ts +1242 -0
- package/Tests/Server/Services/MonitorResourceProbeAgreementHydration.test.ts +459 -0
- package/Tests/Server/Services/MonitorResourceProbeAgreementReuse.test.ts +10 -0
- package/Tests/Server/Types/AnalyticsDatabase/AggregateUtilBucketTimestamp.test.ts +416 -0
- package/Tests/Server/Types/Database/QueryHelperManyToManyAndEmptyValues.test.ts +551 -0
- package/Tests/Server/Types/Database/SelectUtil.test.ts +348 -0
- package/Tests/Server/Utils/CronTab.test.ts +116 -0
- package/Tests/Server/Utils/GlobalSSOToken.test.ts +581 -0
- package/Tests/Server/Utils/GlobalSsoAuthorization.test.ts +1401 -0
- package/Tests/Server/Utils/Marketing/AdUploadableConversionTypes.test.ts +254 -0
- package/Tests/Server/Utils/Marketing/ConversionUploadProvider.test.ts +1 -1
- package/Tests/Server/Utils/Monitor/Criteria/APIRequestCriteriaEvaluateOverTime.test.ts +508 -0
- package/Tests/Server/Utils/Monitor/Criteria/APIRequestCriteriaPortTimings.test.ts +30 -9
- package/Tests/Server/Utils/Monitor/Criteria/EvaluateOverTime.test.ts +987 -0
- package/Tests/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.test.ts +916 -0
- package/Tests/Server/Utils/Monitor/Criteria/ProfileMonitorCriteria.test.ts +382 -0
- package/Tests/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.test.ts +1219 -0
- package/Tests/Server/Utils/Monitor/MonitorResourceIngestedStepSelection.test.ts +86 -0
- package/Tests/Server/Utils/StatusPageContentSecurityPolicy.test.ts +136 -0
- package/Tests/Server/Utils/StatusPageCustomizationAccess.test.ts +223 -0
- package/Tests/Types/Monitor/MonitorStepConfigHelpers.test.ts +165 -0
- package/Tests/Types/NetworkDevice/NetworkDeviceLinkRuleScope.test.ts +215 -0
- package/Tests/UI/Components/Forms/FormSubmitAnalytics.test.tsx +206 -0
- package/Tests/UI/Utils/AIChatExport/ConversationMarkdown.test.ts +774 -0
- package/Tests/UI/Utils/AIChatExport/MarkdownBlocks.test.ts +791 -0
- package/Tests/UI/Utils/AIChatExport/MarkdownSafety.test.ts +544 -0
- package/Tests/Utils/Analytics.test.ts +187 -0
- package/Tests/Utils/Monitor/MonitorMetricType.test.ts +80 -0
- package/Tests/Utils/Monitor/NetworkDeviceLinkRuleUtil.test.ts +1291 -0
- package/Tests/Utils/NetworkDiscovery/UnclaimedScanDiagnosis.test.ts +214 -0
- package/Types/Marketing/MarketingConversion.ts +12 -0
- package/Types/Monitor/CriteriaFilter.ts +9 -0
- package/Types/NetworkDevice/NetworkDeviceLinkRuleScope.ts +51 -0
- package/UI/Components/FormModal/BasicFormModal.tsx +12 -0
- package/UI/Components/Forms/BasicForm.tsx +13 -1
- package/UI/Components/Forms/BasicModelForm.tsx +2 -1
- package/UI/Components/Forms/ModelForm.tsx +10 -1
- package/UI/Components/Forms/Utils/FormAnalyticsName.ts +39 -0
- package/UI/Components/ModelFormModal/ModelFormModal.tsx +6 -1
- package/Utils/Analytics.ts +55 -2
- package/Utils/Monitor/MonitorMetricType.ts +40 -0
- package/Utils/Monitor/NetworkDeviceLinkRuleUtil.ts +587 -37
- package/Utils/NetworkDiscovery/UnclaimedScanDiagnosis.ts +115 -0
- package/build/dist/Models/DatabaseModels/GlobalOidc.js +21 -0
- package/build/dist/Models/DatabaseModels/GlobalOidc.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalSso.js +21 -0
- package/build/dist/Models/DatabaseModels/GlobalSso.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MarketingConversion.js +20 -10
- package/build/dist/Models/DatabaseModels/MarketingConversion.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceLinkRule.js +47 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceLinkRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPage.js +4 -4
- package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +25 -4
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +6 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787800000000-AddScopeToNetworkDeviceLinkRule.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787800000000-AddScopeToNetworkDeviceLinkRule.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787900000000-AddRestrictToAttachedProjectsToGlobalSso.js +29 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787900000000-AddRestrictToAttachedProjectsToGlobalSso.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +4 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/SlackAuthorization.js +28 -4
- package/build/dist/Server/Middleware/SlackAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/UserAuthorization.js +197 -22
- package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/WhatsAppAuthorization.js +32 -2
- package/build/dist/Server/Middleware/WhatsAppAuthorization.js.map +1 -1
- package/build/dist/Server/Services/GlobalOidcProjectService.js +105 -0
- package/build/dist/Server/Services/GlobalOidcProjectService.js.map +1 -1
- package/build/dist/Server/Services/GlobalOidcService.js +127 -0
- package/build/dist/Server/Services/GlobalOidcService.js.map +1 -1
- package/build/dist/Server/Services/GlobalSsoProjectService.js +105 -0
- package/build/dist/Server/Services/GlobalSsoProjectService.js.map +1 -1
- package/build/dist/Server/Services/GlobalSsoService.js +127 -0
- package/build/dist/Server/Services/GlobalSsoService.js.map +1 -1
- package/build/dist/Server/Services/UserEmailService.js +4 -4
- package/build/dist/Server/Utils/CronTab.js +66 -0
- package/build/dist/Server/Utils/CronTab.js.map +1 -1
- package/build/dist/Server/Utils/GlobalSsoAuthorization.js +112 -0
- package/build/dist/Server/Utils/GlobalSsoAuthorization.js.map +1 -0
- package/build/dist/Server/Utils/Marketing/ConversionUploadProvider.js +17 -1
- package/build/dist/Server/Utils/Marketing/ConversionUploadProvider.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/GoogleAds.js +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/GoogleAds.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/LinkedIn.js +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/LinkedIn.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/Meta.js +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/Meta.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/MicrosoftAds.js +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/MicrosoftAds.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/Reddit.js +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/Reddit.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js +37 -35
- package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.js +21 -25
- package/build/dist/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js +20 -22
- package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +370 -42
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.js +21 -25
- package/build/dist/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js +21 -25
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.js +21 -25
- package/build/dist/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js +64 -52
- package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +25 -29
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +8 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +123 -23
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Server/Utils/StatusPageContentSecurityPolicy.js +39 -0
- package/build/dist/Server/Utils/StatusPageContentSecurityPolicy.js.map +1 -0
- package/build/dist/Server/Utils/StatusPageCustomizationAccess.js +85 -0
- package/build/dist/Server/Utils/StatusPageCustomizationAccess.js.map +1 -0
- package/build/dist/Types/Marketing/MarketingConversion.js +10 -0
- package/build/dist/Types/Marketing/MarketingConversion.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +1 -0
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/NetworkDevice/NetworkDeviceLinkRuleScope.js +46 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceLinkRuleScope.js.map +1 -0
- package/build/dist/UI/Components/FormModal/BasicFormModal.js +2 -1
- package/build/dist/UI/Components/FormModal/BasicFormModal.js.map +1 -1
- package/build/dist/UI/Components/Forms/BasicForm.js +10 -1
- package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/BasicModelForm.js +2 -1
- package/build/dist/UI/Components/Forms/BasicModelForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/ModelForm.js +4 -1
- package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/Utils/FormAnalyticsName.js +33 -0
- package/build/dist/UI/Components/Forms/Utils/FormAnalyticsName.js.map +1 -0
- package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js +2 -1
- package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js.map +1 -1
- package/build/dist/Utils/Analytics.js +50 -2
- package/build/dist/Utils/Analytics.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js +37 -0
- package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Utils/Monitor/NetworkDeviceLinkRuleUtil.js +318 -37
- package/build/dist/Utils/Monitor/NetworkDeviceLinkRuleUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/UnclaimedScanDiagnosis.js +87 -0
- package/build/dist/Utils/NetworkDiscovery/UnclaimedScanDiagnosis.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import DataToProcess from "../DataToProcess";
|
|
2
2
|
import CompareCriteria from "./CompareCriteria";
|
|
3
|
-
import EvaluateOverTime from "./EvaluateOverTime";
|
|
3
|
+
import EvaluateOverTime, { OverTimeCriteriaValue } from "./EvaluateOverTime";
|
|
4
4
|
import { JSONObject } from "../../../../Types/JSON";
|
|
5
5
|
import {
|
|
6
6
|
CheckOn,
|
|
@@ -10,50 +10,65 @@ import {
|
|
|
10
10
|
import ProbeMonitorResponse from "../../../../Types/Probe/ProbeMonitorResponse";
|
|
11
11
|
import Typeof from "../../../../Types/Typeof";
|
|
12
12
|
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
13
|
-
import logger from "../../Logger";
|
|
14
13
|
|
|
15
14
|
export default class APIRequestCriteria {
|
|
16
15
|
@CaptureSpan()
|
|
17
16
|
public static async isMonitorInstanceCriteriaFilterMet(input: {
|
|
18
17
|
dataToProcess: DataToProcess;
|
|
19
18
|
criteriaFilter: CriteriaFilter;
|
|
19
|
+
/*
|
|
20
|
+
* The monitor's monitoringInterval cron. Over-time filters use it to
|
|
21
|
+
* work out how many samples a fully covered window should hold, so a
|
|
22
|
+
* monitor that has only just started is not mistaken for one whose
|
|
23
|
+
* whole window is breaching.
|
|
24
|
+
*/
|
|
25
|
+
monitoringInterval?: string | undefined;
|
|
20
26
|
}): Promise<string | null> {
|
|
21
27
|
// Server Monitoring Checks
|
|
22
28
|
|
|
23
29
|
let threshold: number | string | undefined | null =
|
|
24
30
|
input.criteriaFilter.value;
|
|
25
31
|
|
|
26
|
-
|
|
27
|
-
|
|
32
|
+
const overTime: OverTimeCriteriaValue =
|
|
33
|
+
await EvaluateOverTime.getOverTimeValueForCriteriaFilter({
|
|
34
|
+
projectId: (input.dataToProcess as ProbeMonitorResponse).projectId,
|
|
35
|
+
monitorId: input.dataToProcess.monitorId!,
|
|
36
|
+
criteriaFilter: input.criteriaFilter,
|
|
37
|
+
/*
|
|
38
|
+
* Only the disk-usage series carries a diskPath attribute, so
|
|
39
|
+
* scoping any other series by it would filter against an attribute
|
|
40
|
+
* no row has - and an empty window now means "cannot judge yet"
|
|
41
|
+
* rather than "compare the live value", which would silence the
|
|
42
|
+
* filter outright.
|
|
43
|
+
*/
|
|
44
|
+
miscData:
|
|
45
|
+
input.criteriaFilter.checkOn === CheckOn.DiskUsagePercent
|
|
46
|
+
? (input.criteriaFilter.serverMonitorOptions as JSONObject)
|
|
47
|
+
: undefined,
|
|
48
|
+
monitoringInterval: input.monitoringInterval,
|
|
49
|
+
});
|
|
28
50
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
miscData: input.criteriaFilter.serverMonitorOptions as JSONObject,
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
if (Array.isArray(overTimeValue) && overTimeValue.length === 0) {
|
|
43
|
-
overTimeValue = undefined;
|
|
44
|
-
}
|
|
45
|
-
} catch (err) {
|
|
46
|
-
logger.error(
|
|
47
|
-
`Error in getting over time value for ${input.criteriaFilter.checkOn}`,
|
|
48
|
-
);
|
|
49
|
-
logger.error(err);
|
|
50
|
-
overTimeValue = undefined;
|
|
51
|
-
}
|
|
51
|
+
/*
|
|
52
|
+
* The window could not back this over-time filter (nothing recorded yet,
|
|
53
|
+
* or the monitor has not been running long enough to cover it). Return
|
|
54
|
+
* the decision the no-data policy already made instead of falling
|
|
55
|
+
* through to the value that arrived with this one check - that fallback
|
|
56
|
+
* is what let "all values over the last N minutes" fire off a single
|
|
57
|
+
* bad reading.
|
|
58
|
+
*/
|
|
59
|
+
if (overTime.earlyReturn) {
|
|
60
|
+
return overTime.earlyReturn.result;
|
|
52
61
|
}
|
|
53
62
|
|
|
63
|
+
const overTimeValue:
|
|
64
|
+
| Array<number | boolean>
|
|
65
|
+
| number
|
|
66
|
+
| boolean
|
|
67
|
+
| undefined = overTime.value;
|
|
68
|
+
|
|
54
69
|
if (input.criteriaFilter.checkOn === CheckOn.IsOnline) {
|
|
55
70
|
const currentIsOnline: boolean | Array<boolean> =
|
|
56
|
-
(overTimeValue as Array<boolean>)
|
|
71
|
+
(overTimeValue as Array<boolean>) ??
|
|
57
72
|
(input.dataToProcess as ProbeMonitorResponse).isOnline;
|
|
58
73
|
|
|
59
74
|
return CompareCriteria.compareCriteriaBoolean({
|
|
@@ -64,7 +79,7 @@ export default class APIRequestCriteria {
|
|
|
64
79
|
|
|
65
80
|
if (input.criteriaFilter.checkOn === CheckOn.IsRequestTimeout) {
|
|
66
81
|
const currentIsTimeout: boolean | Array<boolean> =
|
|
67
|
-
(overTimeValue as Array<boolean>)
|
|
82
|
+
(overTimeValue as Array<boolean>) ??
|
|
68
83
|
(input.dataToProcess as ProbeMonitorResponse).isTimeout;
|
|
69
84
|
|
|
70
85
|
return CompareCriteria.compareCriteriaBoolean({
|
|
@@ -78,7 +93,7 @@ export default class APIRequestCriteria {
|
|
|
78
93
|
threshold = CompareCriteria.convertToNumber(threshold);
|
|
79
94
|
|
|
80
95
|
const value: Array<number> | number =
|
|
81
|
-
(overTimeValue as Array<number>)
|
|
96
|
+
(overTimeValue as Array<number>) ??
|
|
82
97
|
(input.dataToProcess as ProbeMonitorResponse).responseTimeInMs!;
|
|
83
98
|
|
|
84
99
|
return CompareCriteria.compareCriteriaNumbers({
|
|
@@ -124,7 +139,7 @@ export default class APIRequestCriteria {
|
|
|
124
139
|
).pingResponse?.packetLossPercent;
|
|
125
140
|
|
|
126
141
|
const value: Array<number> | number | undefined =
|
|
127
|
-
(overTimeValue as Array<number>)
|
|
142
|
+
(overTimeValue as Array<number>) ?? packetLossPercent;
|
|
128
143
|
|
|
129
144
|
if (value === undefined) {
|
|
130
145
|
return null;
|
|
@@ -146,7 +161,7 @@ export default class APIRequestCriteria {
|
|
|
146
161
|
).pingResponse?.jitterInMs;
|
|
147
162
|
|
|
148
163
|
const value: Array<number> | number | undefined =
|
|
149
|
-
(overTimeValue as Array<number>)
|
|
164
|
+
(overTimeValue as Array<number>) ?? jitterInMs;
|
|
150
165
|
|
|
151
166
|
if (value === undefined) {
|
|
152
167
|
return null;
|
|
@@ -169,7 +184,7 @@ export default class APIRequestCriteria {
|
|
|
169
184
|
threshold = CompareCriteria.convertToNumber(threshold);
|
|
170
185
|
|
|
171
186
|
const value: Array<number> | number =
|
|
172
|
-
(overTimeValue as Array<number>)
|
|
187
|
+
(overTimeValue as Array<number>) ??
|
|
173
188
|
(input.dataToProcess as ProbeMonitorResponse).responseCode!;
|
|
174
189
|
|
|
175
190
|
return CompareCriteria.compareCriteriaNumbers({
|
|
@@ -7,15 +7,21 @@ import {
|
|
|
7
7
|
} from "../../../../Types/Monitor/CriteriaFilter";
|
|
8
8
|
import DnsMonitorResponse from "../../../../Types/Monitor/DnsMonitor/DnsMonitorResponse";
|
|
9
9
|
import ProbeMonitorResponse from "../../../../Types/Probe/ProbeMonitorResponse";
|
|
10
|
-
import EvaluateOverTime from "./EvaluateOverTime";
|
|
10
|
+
import EvaluateOverTime, { OverTimeCriteriaValue } from "./EvaluateOverTime";
|
|
11
11
|
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
12
|
-
import logger from "../../Logger";
|
|
13
12
|
|
|
14
13
|
export default class DnsMonitorCriteria {
|
|
15
14
|
@CaptureSpan()
|
|
16
15
|
public static async isMonitorInstanceCriteriaFilterMet(input: {
|
|
17
16
|
dataToProcess: DataToProcess;
|
|
18
17
|
criteriaFilter: CriteriaFilter;
|
|
18
|
+
/*
|
|
19
|
+
* The monitor's monitoringInterval cron. Over-time filters use it to
|
|
20
|
+
* work out how many samples a fully covered window should hold, so a
|
|
21
|
+
* monitor that has only just started is not mistaken for one whose
|
|
22
|
+
* whole window is breaching.
|
|
23
|
+
*/
|
|
24
|
+
monitoringInterval?: string | undefined;
|
|
19
25
|
}): Promise<string | null> {
|
|
20
26
|
let threshold: number | string | undefined | null =
|
|
21
27
|
input.criteriaFilter.value;
|
|
@@ -26,37 +32,36 @@ export default class DnsMonitorCriteria {
|
|
|
26
32
|
const dnsResponse: DnsMonitorResponse | undefined =
|
|
27
33
|
dataToProcess.dnsResponse;
|
|
28
34
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
try {
|
|
37
|
-
overTimeValue = await EvaluateOverTime.getValueOverTime({
|
|
38
|
-
projectId: (input.dataToProcess as ProbeMonitorResponse).projectId,
|
|
39
|
-
monitorId: input.dataToProcess.monitorId!,
|
|
40
|
-
evaluateOverTimeOptions: input.criteriaFilter.evaluateOverTimeOptions,
|
|
41
|
-
metricType: input.criteriaFilter.checkOn,
|
|
42
|
-
});
|
|
35
|
+
const overTime: OverTimeCriteriaValue =
|
|
36
|
+
await EvaluateOverTime.getOverTimeValueForCriteriaFilter({
|
|
37
|
+
projectId: (input.dataToProcess as ProbeMonitorResponse).projectId,
|
|
38
|
+
monitorId: input.dataToProcess.monitorId!,
|
|
39
|
+
criteriaFilter: input.criteriaFilter,
|
|
40
|
+
monitoringInterval: input.monitoringInterval,
|
|
41
|
+
});
|
|
43
42
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
43
|
+
/*
|
|
44
|
+
* The window could not back this over-time filter (nothing recorded yet,
|
|
45
|
+
* or the monitor has not been running long enough to cover it). Return
|
|
46
|
+
* the decision the no-data policy already made instead of falling
|
|
47
|
+
* through to the value that arrived with this one check - that fallback
|
|
48
|
+
* is what let "all values over the last N minutes" fire off a single
|
|
49
|
+
* bad reading.
|
|
50
|
+
*/
|
|
51
|
+
if (overTime.earlyReturn) {
|
|
52
|
+
return overTime.earlyReturn.result;
|
|
54
53
|
}
|
|
55
54
|
|
|
55
|
+
const overTimeValue:
|
|
56
|
+
| Array<number | boolean>
|
|
57
|
+
| number
|
|
58
|
+
| boolean
|
|
59
|
+
| undefined = overTime.value;
|
|
60
|
+
|
|
56
61
|
// Check if DNS is online
|
|
57
62
|
if (input.criteriaFilter.checkOn === CheckOn.DnsIsOnline) {
|
|
58
63
|
const currentIsOnline: boolean | Array<boolean> =
|
|
59
|
-
(overTimeValue as Array<boolean>)
|
|
64
|
+
(overTimeValue as Array<boolean>) ??
|
|
60
65
|
(input.dataToProcess as ProbeMonitorResponse).isOnline;
|
|
61
66
|
|
|
62
67
|
return CompareCriteria.compareCriteriaBoolean({
|
|
@@ -74,9 +79,9 @@ export default class DnsMonitorCriteria {
|
|
|
74
79
|
}
|
|
75
80
|
|
|
76
81
|
const currentResponseTime: number | Array<number> =
|
|
77
|
-
(overTimeValue as Array<number>)
|
|
78
|
-
dnsResponse?.responseTimeInMs ||
|
|
79
|
-
|
|
82
|
+
(overTimeValue as Array<number>) ??
|
|
83
|
+
(dnsResponse?.responseTimeInMs ||
|
|
84
|
+
(input.dataToProcess as ProbeMonitorResponse).responseTimeInMs);
|
|
80
85
|
|
|
81
86
|
if (currentResponseTime === null || currentResponseTime === undefined) {
|
|
82
87
|
return null;
|
|
@@ -8,14 +8,20 @@ import {
|
|
|
8
8
|
import DomainMonitorResponse from "../../../../Types/Monitor/DomainMonitor/DomainMonitorResponse";
|
|
9
9
|
import ProbeMonitorResponse from "../../../../Types/Probe/ProbeMonitorResponse";
|
|
10
10
|
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
11
|
-
import EvaluateOverTime from "./EvaluateOverTime";
|
|
12
|
-
import logger from "../../Logger";
|
|
11
|
+
import EvaluateOverTime, { OverTimeCriteriaValue } from "./EvaluateOverTime";
|
|
13
12
|
|
|
14
13
|
export default class DomainMonitorCriteria {
|
|
15
14
|
@CaptureSpan()
|
|
16
15
|
public static async isMonitorInstanceCriteriaFilterMet(input: {
|
|
17
16
|
dataToProcess: DataToProcess;
|
|
18
17
|
criteriaFilter: CriteriaFilter;
|
|
18
|
+
/*
|
|
19
|
+
* The monitor's monitoringInterval cron. Over-time filters use it to
|
|
20
|
+
* work out how many samples a fully covered window should hold, so a
|
|
21
|
+
* monitor that has only just started is not mistaken for one whose
|
|
22
|
+
* whole window is breaching.
|
|
23
|
+
*/
|
|
24
|
+
monitoringInterval?: string | undefined;
|
|
19
25
|
}): Promise<string | null> {
|
|
20
26
|
let threshold: number | string | undefined | null =
|
|
21
27
|
input.criteriaFilter.value;
|
|
@@ -26,33 +32,32 @@ export default class DomainMonitorCriteria {
|
|
|
26
32
|
const domainResponse: DomainMonitorResponse | undefined =
|
|
27
33
|
dataToProcess.domainResponse;
|
|
28
34
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
try {
|
|
37
|
-
overTimeValue = await EvaluateOverTime.getValueOverTime({
|
|
38
|
-
projectId: dataToProcess.projectId,
|
|
39
|
-
monitorId: input.dataToProcess.monitorId!,
|
|
40
|
-
evaluateOverTimeOptions: input.criteriaFilter.evaluateOverTimeOptions,
|
|
41
|
-
metricType: input.criteriaFilter.checkOn,
|
|
42
|
-
});
|
|
35
|
+
const overTime: OverTimeCriteriaValue =
|
|
36
|
+
await EvaluateOverTime.getOverTimeValueForCriteriaFilter({
|
|
37
|
+
projectId: dataToProcess.projectId,
|
|
38
|
+
monitorId: input.dataToProcess.monitorId!,
|
|
39
|
+
criteriaFilter: input.criteriaFilter,
|
|
40
|
+
monitoringInterval: input.monitoringInterval,
|
|
41
|
+
});
|
|
43
42
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
43
|
+
/*
|
|
44
|
+
* The window could not back this over-time filter (nothing recorded yet,
|
|
45
|
+
* or the monitor has not been running long enough to cover it). Return
|
|
46
|
+
* the decision the no-data policy already made instead of falling
|
|
47
|
+
* through to the value that arrived with this one check - that fallback
|
|
48
|
+
* is what let "all values over the last N minutes" fire off a single
|
|
49
|
+
* bad reading.
|
|
50
|
+
*/
|
|
51
|
+
if (overTime.earlyReturn) {
|
|
52
|
+
return overTime.earlyReturn.result;
|
|
54
53
|
}
|
|
55
54
|
|
|
55
|
+
const overTimeValue:
|
|
56
|
+
| Array<number | boolean>
|
|
57
|
+
| number
|
|
58
|
+
| boolean
|
|
59
|
+
| undefined = overTime.value;
|
|
60
|
+
|
|
56
61
|
/*
|
|
57
62
|
* Whether the registration lookup itself succeeded. Without this, a
|
|
58
63
|
* domain whose TLD has no working WHOIS or RDAP service produces a
|
|
@@ -62,7 +67,7 @@ export default class DomainMonitorCriteria {
|
|
|
62
67
|
*/
|
|
63
68
|
if (input.criteriaFilter.checkOn === CheckOn.IsOnline) {
|
|
64
69
|
const currentIsOnline: boolean | Array<boolean> =
|
|
65
|
-
(overTimeValue as Array<boolean>)
|
|
70
|
+
(overTimeValue as Array<boolean>) ?? dataToProcess.isOnline;
|
|
66
71
|
|
|
67
72
|
return CompareCriteria.compareCriteriaBoolean({
|
|
68
73
|
value: currentIsOnline,
|
|
@@ -72,7 +77,7 @@ export default class DomainMonitorCriteria {
|
|
|
72
77
|
|
|
73
78
|
if (input.criteriaFilter.checkOn === CheckOn.IsRequestTimeout) {
|
|
74
79
|
const currentIsTimeout: boolean | Array<boolean> =
|
|
75
|
-
(overTimeValue as Array<boolean>)
|
|
80
|
+
(overTimeValue as Array<boolean>) ?? dataToProcess.isTimeout;
|
|
76
81
|
|
|
77
82
|
return CompareCriteria.compareCriteriaBoolean({
|
|
78
83
|
value: currentIsTimeout,
|