@oneuptime/common 11.7.0 → 11.7.2
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/DashboardDomain.ts +1 -0
- package/Models/DatabaseModels/Incident.ts +2 -0
- package/Models/DatabaseModels/IncidentEpisode.ts +1 -0
- package/Models/DatabaseModels/IncidentEpisodePublicNote.ts +1 -0
- package/Models/DatabaseModels/IncidentEpisodeStateTimeline.ts +1 -0
- package/Models/DatabaseModels/IncidentPublicNote.ts +1 -0
- package/Models/DatabaseModels/IncidentStateTimeline.ts +1 -0
- package/Models/DatabaseModels/Monitor.ts +1 -0
- package/Models/DatabaseModels/MonitorStatusTimeline.ts +1 -0
- package/Models/DatabaseModels/NetworkSite.ts +1 -0
- package/Models/DatabaseModels/NetworkSiteStatusTimeline.ts +1 -0
- package/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.ts +1 -0
- package/Models/DatabaseModels/OnCallDutyPolicySchedule.ts +2 -0
- package/Models/DatabaseModels/Probe.ts +13 -13
- package/Models/DatabaseModels/ScheduledMaintenance.ts +1 -0
- package/Models/DatabaseModels/ScheduledMaintenancePublicNote.ts +1 -0
- package/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.ts +1 -0
- package/Models/DatabaseModels/ScheduledMaintenanceTemplate.ts +1 -0
- package/Models/DatabaseModels/StatusPage.ts +1 -0
- package/Models/DatabaseModels/StatusPageAnnouncement.ts +1 -0
- package/Models/DatabaseModels/StatusPageDomain.ts +1 -0
- package/Models/DatabaseModels/WorkspaceNotificationSummary.ts +1 -0
- package/Models/DatabaseModels/WorkspaceProjectAuthToken.ts +11 -0
- package/Server/API/BaseAPI.ts +17 -1
- package/Server/API/CommonAPI.ts +32 -0
- package/Server/API/MicrosoftTeamsAPI.ts +99 -2
- package/Server/API/ProbeAPI.ts +2 -0
- package/Server/API/SlackAPI.ts +62 -0
- package/Server/API/StatusPageAPI.ts +157 -192
- package/Server/Infrastructure/Postgres/SchemaMigrations/1785140242697-AddHotQueryIndexes.ts +89 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1785148065137-AddHotQueryIndexesSecondPass.ts +61 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1785240000000-RepairCrossProjectMonitorStatusReferences.ts +280 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
- package/Server/Services/DatabaseService.ts +11 -3
- package/Server/Services/MonitorGroupService.ts +145 -0
- package/Server/Services/MonitorService.ts +231 -30
- package/Server/Services/ProbeService.ts +319 -16
- package/Server/Services/StatusPageService.ts +72 -42
- package/Server/Services/WorkspaceNotificationRuleService.ts +232 -2
- package/Server/Utils/Database/PostgresErrorTranslator.ts +131 -0
- package/Server/Utils/Monitor/MonitorResource.ts +88 -35
- package/Server/Utils/Monitor/MonitorStatusTimeline.ts +21 -1
- package/Server/Utils/Monitor/MonitorStepsProjectValidator.ts +158 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +706 -6
- package/Tests/Models/DatabaseModels/ProbeColumnAccessControl.test.ts +103 -0
- package/Tests/Server/API/BaseAPIUpdateNoOp.test.ts +135 -0
- package/Tests/Server/API/CommonAPIAuthGuard.test.ts +317 -0
- package/Tests/Server/API/MicrosoftTeamsManifest.test.ts +228 -0
- package/Tests/Server/API/ProbeAPI.test.ts +6 -0
- package/Tests/Server/API/ZZVerifyChatsAuth.test.ts +167 -0
- package/Tests/Server/Services/AddHotQueryIndexesMigration.test.ts +255 -0
- package/Tests/Server/Services/AddHotQueryIndexesSecondPassMigration.test.ts +258 -0
- package/Tests/Server/Services/DatabaseServiceSanitizeUpdateData.test.ts +1 -1
- package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +121 -0
- package/Tests/Server/Services/HeartbeatWriteFastPathSafety.test.ts +200 -0
- package/Tests/Server/Services/HookFreeWriteSafetySecondPass.test.ts +181 -0
- package/Tests/Server/Services/MonitorGroupServiceBatchedStatuses.test.ts +513 -0
- package/Tests/Server/Services/MonitorResourceProbeAgreementReuse.test.ts +492 -0
- package/Tests/Server/Services/MonitorServiceProbeSelection.test.ts +401 -0
- package/Tests/Server/Services/MonitorStatusTimelineFastPath.test.ts +453 -0
- package/Tests/Server/Services/ProbeAuthKeyCacheAndHeartbeat.test.ts +679 -0
- package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +3 -3
- package/Tests/Server/Services/StatusPageDomainResolutionCache.test.ts +245 -0
- package/Tests/Server/Services/StatusPageOverviewTimelineWindow.test.ts +283 -0
- package/Tests/Server/Services/StatusPageServiceMcp.test.ts +17 -1
- package/Tests/Server/Services/StatusPageServiceMonitorGroupBatching.test.ts +331 -0
- package/Tests/Server/Services/UserOnCallLogClaimNotificationRule.test.ts +12 -12
- package/Tests/Server/Services/WorkspaceNotificationRuleChats.test.ts +1390 -0
- package/Tests/Server/Utils/AI/Insights/InsightFixRouting.test.ts +4 -4
- package/Tests/Server/Utils/AI/Insights/InsightScanner.test.ts +2 -2
- package/Tests/Server/Utils/AI/Insights/InsightStore.test.ts +1 -3
- package/Tests/Server/Utils/AI/Insights/InsightStoreHardening.test.ts +1 -3
- package/Tests/Server/Utils/AI/Insights/InsightTriage.test.ts +1 -1
- package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +5 -5
- package/Tests/Server/Utils/Alert/AlertPrivacyFilter.test.ts +187 -0
- package/Tests/Server/Utils/AlertEpisode/AlertEpisodePrivacyFilter.test.ts +170 -0
- package/Tests/Server/Utils/Database/PostgresErrorTranslator.test.ts +125 -0
- package/Tests/Server/Utils/Incident/IncidentPrivacyFilter.test.ts +264 -0
- package/Tests/Server/Utils/IncidentEpisode/IncidentEpisodePrivacyFilter.test.ts +175 -0
- package/Tests/Server/Utils/Monitor/MonitorStepsProjectValidator.test.ts +181 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +1 -1
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +2 -2
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsChannelsList.test.ts +341 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsChats.test.ts +2175 -0
- package/Tests/Server/Utils/Workspace/SlackChannelsList.test.ts +585 -0
- package/Tests/Types/Billing/MeteredPlan.test.ts +46 -0
- package/Tests/Types/DateUserTimezone.test.ts +205 -0
- package/Tests/Types/DateUserTimezoneOverridesBrowser.test.ts +73 -0
- package/Tests/Types/Workspace/NotificationRules/NotificationRuleCondition.test.ts +219 -1
- package/Tests/UI/Components/BulkUpdateForm.test.tsx +174 -0
- package/Tests/UI/Components/CardModelDetailEdit.test.tsx +315 -0
- package/Tests/UI/Components/ModelDetailSelect.test.tsx +229 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableBulkSelectAll.test.tsx +1258 -0
- package/Tests/UI/Components/ModelTableExportFromColumns.test.ts +153 -0
- package/Tests/UI/Components/MonacoLoader.test.ts +67 -0
- package/Tests/UI/Components/MonacoRuntime.test.ts +121 -0
- package/Tests/UI/Components/TableBulkCsvExport.test.tsx +212 -3
- package/Tests/UI/Components/TimePicker/TimePicker.test.tsx +11 -0
- package/Tests/UI/Utils/Project.test.ts +809 -0
- package/Tests/UI/Utils/TableColumnsToCsv.test.ts +360 -0
- package/Tests/Utils/Alerts/AlertMetricType.test.ts +143 -0
- package/Tests/Utils/Dashboard/VariableUrlState.test.ts +219 -0
- package/Tests/Utils/Incident/IncidentMetricType.test.ts +174 -0
- package/Tests/Utils/Monitor/MonitorProbeSelectionUtil.test.ts +145 -0
- package/Tests/Utils/StatusPage/ResourceUptime.test.ts +263 -0
- package/Types/Date.ts +119 -50
- package/Types/Workspace/NotificationRules/BaseNotificationRule.ts +4 -0
- package/Types/Workspace/NotificationRules/NotificationRuleCondition.ts +25 -10
- package/Types/Workspace/WorkspaceMessagePayload.ts +1 -0
- package/UI/Components/BulkUpdate/BulkUpdateForm.tsx +63 -8
- package/UI/Components/CodeEditor/CodeEditor.tsx +3 -0
- package/UI/Components/CodeEditor/MonacoLoader.ts +36 -0
- package/UI/Components/Forms/Fields/FormField.tsx +13 -3
- package/UI/Components/Forms/ModelForm.tsx +41 -18
- package/UI/Components/Input/Input.tsx +6 -1
- package/UI/Components/ModelDetail/CardModelDetail.tsx +23 -1
- package/UI/Components/ModelDetail/ModelDetail.tsx +46 -1
- package/UI/Components/ModelTable/BaseModelTable.tsx +300 -30
- package/UI/Components/ModelTable/Column.ts +12 -0
- package/UI/Components/ModelTable/ExportFromColumns.ts +57 -0
- package/UI/Components/Navbar/NavBar.tsx +66 -1
- package/UI/Components/Table/Table.tsx +52 -13
- package/UI/Components/Table/Types/Column.ts +18 -0
- package/UI/Components/TimePicker/TimePicker.tsx +8 -4
- package/UI/Utils/Project.ts +214 -18
- package/UI/Utils/TableColumnsToCsv.ts +86 -6
- package/UI/Utils/User.ts +19 -0
- package/UI/esbuild-config.js +34 -0
- package/Utils/Monitor/MonitorProbeSelectionUtil.ts +72 -0
- package/build/dist/Models/DatabaseModels/DashboardDomain.js +1 -0
- package/build/dist/Models/DatabaseModels/DashboardDomain.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Incident.js +2 -0
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisode.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisode.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Monitor.js +1 -0
- package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSite.js +1 -0
- package/build/dist/Models/DatabaseModels/NetworkSite.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSiteStatusTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/NetworkSiteStatusTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js +1 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js +2 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Probe.js +13 -13
- package/build/dist/Models/DatabaseModels/Probe.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPage.js +1 -0
- package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +1 -0
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageDomain.js +1 -0
- package/build/dist/Models/DatabaseModels/StatusPageDomain.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkspaceNotificationSummary.js +1 -0
- package/build/dist/Models/DatabaseModels/WorkspaceNotificationSummary.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkspaceProjectAuthToken.js.map +1 -1
- package/build/dist/Server/API/BaseAPI.js +12 -1
- package/build/dist/Server/API/BaseAPI.js.map +1 -1
- package/build/dist/Server/API/CommonAPI.js +21 -0
- package/build/dist/Server/API/CommonAPI.js.map +1 -1
- package/build/dist/Server/API/MicrosoftTeamsAPI.js +72 -2
- package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
- package/build/dist/Server/API/ProbeAPI.js +2 -0
- package/build/dist/Server/API/ProbeAPI.js.map +1 -1
- package/build/dist/Server/API/SlackAPI.js +44 -0
- package/build/dist/Server/API/SlackAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +98 -152
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785140242697-AddHotQueryIndexes.js +36 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785140242697-AddHotQueryIndexes.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785148065137-AddHotQueryIndexesSecondPass.js +26 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785148065137-AddHotQueryIndexesSecondPass.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785240000000-RepairCrossProjectMonitorStatusReferences.js +254 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785240000000-RepairCrossProjectMonitorStatusReferences.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +10 -2
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/MonitorGroupService.js +118 -0
- package/build/dist/Server/Services/MonitorGroupService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +198 -24
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/ProbeService.js +238 -9
- package/build/dist/Server/Services/ProbeService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +46 -39
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +178 -3
- package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js +80 -0
- package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +67 -29
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorStatusTimeline.js +31 -14
- package/build/dist/Server/Utils/Monitor/MonitorStatusTimeline.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorStepsProjectValidator.js +117 -0
- package/build/dist/Server/Utils/Monitor/MonitorStepsProjectValidator.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +549 -7
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Types/Date.js +106 -35
- package/build/dist/Types/Date.js.map +1 -1
- package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js +17 -7
- package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js.map +1 -1
- package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js +37 -11
- package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js.map +1 -1
- package/build/dist/UI/Components/CodeEditor/CodeEditor.js +2 -0
- package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
- package/build/dist/UI/Components/CodeEditor/MonacoLoader.js +34 -0
- package/build/dist/UI/Components/CodeEditor/MonacoLoader.js.map +1 -0
- package/build/dist/UI/Components/Forms/Fields/FormField.js +11 -3
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Forms/ModelForm.js +37 -17
- package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
- package/build/dist/UI/Components/Input/Input.js +6 -1
- package/build/dist/UI/Components/Input/Input.js.map +1 -1
- package/build/dist/UI/Components/ModelDetail/CardModelDetail.js +22 -1
- package/build/dist/UI/Components/ModelDetail/CardModelDetail.js.map +1 -1
- package/build/dist/UI/Components/ModelDetail/ModelDetail.js +31 -1
- package/build/dist/UI/Components/ModelDetail/ModelDetail.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +234 -21
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/ExportFromColumns.js +30 -0
- package/build/dist/UI/Components/ModelTable/ExportFromColumns.js.map +1 -0
- package/build/dist/UI/Components/Navbar/NavBar.js +39 -1
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/Table/Table.js +31 -11
- package/build/dist/UI/Components/Table/Table.js.map +1 -1
- package/build/dist/UI/Components/TimePicker/TimePicker.js +4 -4
- package/build/dist/UI/Components/TimePicker/TimePicker.js.map +1 -1
- package/build/dist/UI/Utils/Project.js +161 -15
- package/build/dist/UI/Utils/Project.js.map +1 -1
- package/build/dist/UI/Utils/TableColumnsToCsv.js +67 -6
- package/build/dist/UI/Utils/TableColumnsToCsv.js.map +1 -1
- package/build/dist/UI/Utils/User.js +19 -0
- package/build/dist/UI/Utils/User.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorProbeSelectionUtil.js +52 -0
- package/build/dist/Utils/Monitor/MonitorProbeSelectionUtil.js.map +1 -0
- package/package.json +4 -3
- package/Server/Infrastructure/Postgres/SchemaMigrations/1773414578773-MigrationName.ts +0 -79
- package/Server/Infrastructure/Postgres/SchemaMigrations/1773500000000-MigrationName.ts +0 -41
- package/Server/Infrastructure/Postgres/SchemaMigrations/1776886248361-MigrationName.ts +0 -17
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1773414578773-MigrationName.js +0 -34
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1773414578773-MigrationName.js.map +0 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1773500000000-MigrationName.js +0 -22
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1773500000000-MigrationName.js.map +0 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776886248361-MigrationName.js +0 -12
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776886248361-MigrationName.js.map +0 -1
|
@@ -7,6 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
|
+
import crypto from "crypto";
|
|
10
11
|
import DatabaseService from "./DatabaseService";
|
|
11
12
|
import ObjectID from "../../Types/ObjectID";
|
|
12
13
|
import Version from "../../Types/Version";
|
|
@@ -30,16 +31,197 @@ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
|
30
31
|
import { IsBillingEnabled } from "../EnvironmentConfig";
|
|
31
32
|
import GlobalCache from "../Infrastructure/GlobalCache";
|
|
32
33
|
import { createWhatsAppMessageFromTemplate } from "../Utils/WhatsAppTemplateUtil";
|
|
34
|
+
/*
|
|
35
|
+
* Cache namespace for the probe heartbeat throttle: holds the wall-clock of
|
|
36
|
+
* the last attempted lastAlive write per probe, so at most one Postgres
|
|
37
|
+
* write happens per probe per 30 seconds no matter how many requests the
|
|
38
|
+
* probe sends.
|
|
39
|
+
*/
|
|
40
|
+
const PROBE_LAST_ALIVE_CACHE_NAMESPACE = "probe-last-alive";
|
|
41
|
+
/*
|
|
42
|
+
* Cache namespace for probe authentication: probeId → SHA-256 of the
|
|
43
|
+
* probe's CURRENT key, written only after the key was verified against the
|
|
44
|
+
* database. Lets the probe-auth middleware skip its per-request Probe
|
|
45
|
+
* SELECT — the exact query that queues behind a starved connection pool and
|
|
46
|
+
* stalls heartbeats. Entries are deleted whenever a probe's key changes or
|
|
47
|
+
* the probe is deleted (see onUpdateSuccess / onDeleteSuccess below), and
|
|
48
|
+
* the TTL bounds the exposure if that invalidation is ever missed.
|
|
49
|
+
*/
|
|
50
|
+
const PROBE_AUTH_KEY_HASH_CACHE_NAMESPACE = "probe-auth-key-hash";
|
|
51
|
+
const PROBE_AUTH_KEY_HASH_CACHE_TTL_IN_SECONDS = 120;
|
|
52
|
+
/*
|
|
53
|
+
* Revocation sentinel. Invalidation WRITES this value (with the normal TTL)
|
|
54
|
+
* instead of deleting the key: a bare DELETE can be silently undone by an
|
|
55
|
+
* in-flight verification that DB-checked the OLD key just before a rotation
|
|
56
|
+
* committed and then re-cached it just after the delete ran. The sentinel —
|
|
57
|
+
* combined with verifyProbeKey's write-only-if-unchanged re-read below —
|
|
58
|
+
* makes the straggler skip its write, so invalidation wins the race. It can
|
|
59
|
+
* never equal a real SHA-256 hex digest, so on the auth path it always
|
|
60
|
+
* behaves as a cache miss.
|
|
61
|
+
*/
|
|
62
|
+
const PROBE_AUTH_KEY_REVOKED_SENTINEL = "revoked";
|
|
63
|
+
/*
|
|
64
|
+
* Upper bound for a single Redis cache operation on the probe request path.
|
|
65
|
+
* The ioredis client has no command timeout, so a stalled-but-open Redis
|
|
66
|
+
* socket would otherwise hang the probe-auth middleware forever with no
|
|
67
|
+
* error at all. Cache is an optimization here — on timeout we fall back to
|
|
68
|
+
* the database, exactly as we do when Redis rejects.
|
|
69
|
+
*/
|
|
70
|
+
const PROBE_CACHE_OPERATION_TIMEOUT_IN_MS = 2000;
|
|
33
71
|
export class Service extends DatabaseService {
|
|
34
72
|
constructor() {
|
|
35
73
|
super(Model);
|
|
36
74
|
}
|
|
75
|
+
/*
|
|
76
|
+
* Bounds a cache operation in time. Promise.race subscribes to both
|
|
77
|
+
* promises, so a late settlement of the losing cache operation is
|
|
78
|
+
* observed and can never surface as an unhandled rejection.
|
|
79
|
+
*/
|
|
80
|
+
async boundedCacheOperation(operationName, operation) {
|
|
81
|
+
let timer = undefined;
|
|
82
|
+
const timeout = new Promise((_resolve, reject) => {
|
|
83
|
+
timer = setTimeout(() => {
|
|
84
|
+
reject(new Error(`${operationName} timed out after ${PROBE_CACHE_OPERATION_TIMEOUT_IN_MS}ms`));
|
|
85
|
+
}, PROBE_CACHE_OPERATION_TIMEOUT_IN_MS);
|
|
86
|
+
});
|
|
87
|
+
try {
|
|
88
|
+
return await Promise.race([operation, timeout]);
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
if (timer) {
|
|
92
|
+
clearTimeout(timer);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
hashProbeKey(probeKey) {
|
|
97
|
+
return crypto.createHash("sha256").update(probeKey).digest("hex");
|
|
98
|
+
}
|
|
99
|
+
/*
|
|
100
|
+
* Verifies a probeId/probeKey pair, serving repeat verifications from
|
|
101
|
+
* cache. This runs on EVERY authenticated probe request (heartbeats,
|
|
102
|
+
* monitor list fetches, result ingest), so it must stay responsive even
|
|
103
|
+
* when the Postgres pool is saturated — which is exactly when the
|
|
104
|
+
* heartbeat matters most: if this check queues behind a starved pool, the
|
|
105
|
+
* probe's lastAlive goes stale and a healthy probe gets flagged
|
|
106
|
+
* Disconnected.
|
|
107
|
+
*
|
|
108
|
+
* Security invariants:
|
|
109
|
+
* - The cache stores only a SHA-256 hash of the key, never the key.
|
|
110
|
+
* - A cache entry is only ever written from a value that was JUST
|
|
111
|
+
* verified against the database.
|
|
112
|
+
* - A cache mismatch falls through to the database, so a rotated key
|
|
113
|
+
* works immediately.
|
|
114
|
+
* - Rotating or deleting a probe overwrites its cache entry cluster-wide
|
|
115
|
+
* with the revocation sentinel (GlobalCache is Redis-backed), and the
|
|
116
|
+
* write below is write-only-if-unchanged so an in-flight verification
|
|
117
|
+
* straddling the rotation cannot resurrect the old hash. The TTL caps
|
|
118
|
+
* the stale window if the invalidation write itself fails: a REVOKED
|
|
119
|
+
* key can then still authenticate for at most
|
|
120
|
+
* PROBE_AUTH_KEY_HASH_CACHE_TTL_IN_SECONDS.
|
|
121
|
+
* - Any cache failure (Redis down, slow, timeout) falls back to the
|
|
122
|
+
* database check — never open.
|
|
123
|
+
*/
|
|
124
|
+
async verifyProbeKey(data) {
|
|
125
|
+
var _a, _b, _c, _d;
|
|
126
|
+
if (!data.probeId) {
|
|
127
|
+
throw new BadDataException("probeId is required");
|
|
128
|
+
}
|
|
129
|
+
if (!data.probeKey) {
|
|
130
|
+
throw new BadDataException("probeKey is required");
|
|
131
|
+
}
|
|
132
|
+
const presentedKeyHash = this.hashProbeKey(data.probeKey);
|
|
133
|
+
try {
|
|
134
|
+
const cachedKeyHash = await this.boundedCacheOperation("Probe auth cache read", GlobalCache.getString(PROBE_AUTH_KEY_HASH_CACHE_NAMESPACE, data.probeId.toString()));
|
|
135
|
+
if (cachedKeyHash && cachedKeyHash === presentedKeyHash) {
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
logger.error("Error in reading probe auth cache", {
|
|
141
|
+
probeId: (_a = data.probeId) === null || _a === void 0 ? void 0 : _a.toString(),
|
|
142
|
+
});
|
|
143
|
+
logger.error(err, {
|
|
144
|
+
probeId: (_b = data.probeId) === null || _b === void 0 ? void 0 : _b.toString(),
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
// Cache miss, mismatch (e.g. key rotated), or cache failure: ask the DB.
|
|
148
|
+
const probe = await this.findOneBy({
|
|
149
|
+
query: {
|
|
150
|
+
_id: data.probeId.toString(),
|
|
151
|
+
key: data.probeKey,
|
|
152
|
+
},
|
|
153
|
+
select: {
|
|
154
|
+
_id: true,
|
|
155
|
+
},
|
|
156
|
+
props: {
|
|
157
|
+
isRoot: true,
|
|
158
|
+
},
|
|
159
|
+
});
|
|
160
|
+
if (!probe) {
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
try {
|
|
164
|
+
/*
|
|
165
|
+
* Write-only-if-unchanged: re-read the entry right before writing and
|
|
166
|
+
* skip the write when someone else changed it since our first read.
|
|
167
|
+
* The DB verification above can straddle a key rotation — its SELECT
|
|
168
|
+
* resolves against the pre-rotation row, the rotation commits and
|
|
169
|
+
* invalidates, and an unconditional write here would then re-cache
|
|
170
|
+
* the just-revoked key for a fresh TTL. Seeing the revocation
|
|
171
|
+
* sentinel (or any other concurrent write) means skip: the DB check
|
|
172
|
+
* stays the source of truth and caching resumes once the entry
|
|
173
|
+
* expires. The remaining race window is the microseconds between
|
|
174
|
+
* this re-read and the write — down from the full DB round-trip.
|
|
175
|
+
*/
|
|
176
|
+
const currentCacheValue = await this.boundedCacheOperation("Probe auth cache pre-write read", GlobalCache.getString(PROBE_AUTH_KEY_HASH_CACHE_NAMESPACE, data.probeId.toString()));
|
|
177
|
+
if (currentCacheValue === null ||
|
|
178
|
+
currentCacheValue === presentedKeyHash) {
|
|
179
|
+
await this.boundedCacheOperation("Probe auth cache write", GlobalCache.setString(PROBE_AUTH_KEY_HASH_CACHE_NAMESPACE, data.probeId.toString(), presentedKeyHash, {
|
|
180
|
+
expiresInSeconds: PROBE_AUTH_KEY_HASH_CACHE_TTL_IN_SECONDS,
|
|
181
|
+
}));
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
catch (err) {
|
|
185
|
+
// Next request re-verifies against the DB. Nothing is broken.
|
|
186
|
+
logger.error("Error in writing probe auth cache", {
|
|
187
|
+
probeId: (_c = data.probeId) === null || _c === void 0 ? void 0 : _c.toString(),
|
|
188
|
+
});
|
|
189
|
+
logger.error(err, {
|
|
190
|
+
probeId: (_d = data.probeId) === null || _d === void 0 ? void 0 : _d.toString(),
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
/*
|
|
196
|
+
* Replaces cached auth entries with the revocation sentinel so a rotated
|
|
197
|
+
* key stops working everywhere immediately (the cache is Redis-backed and
|
|
198
|
+
* shared by all pods). A sentinel WRITE rather than a delete: a deleted
|
|
199
|
+
* key can be silently re-created by an in-flight verification that
|
|
200
|
+
* DB-checked the old key just before the rotation committed, whereas the
|
|
201
|
+
* sentinel makes that straggler's write-only-if-unchanged check fail.
|
|
202
|
+
* Errors are logged loudly but not thrown: the entries also expire via
|
|
203
|
+
* TTL, and failing the surrounding update/delete over a cache hiccup
|
|
204
|
+
* would be worse than a bounded stale window.
|
|
205
|
+
*/
|
|
206
|
+
async invalidateProbeAuthCache(probeIds) {
|
|
207
|
+
for (const probeId of probeIds) {
|
|
208
|
+
try {
|
|
209
|
+
await this.boundedCacheOperation("Probe auth cache invalidation", GlobalCache.setString(PROBE_AUTH_KEY_HASH_CACHE_NAMESPACE, probeId.toString(), PROBE_AUTH_KEY_REVOKED_SENTINEL, {
|
|
210
|
+
expiresInSeconds: PROBE_AUTH_KEY_HASH_CACHE_TTL_IN_SECONDS,
|
|
211
|
+
}));
|
|
212
|
+
}
|
|
213
|
+
catch (err) {
|
|
214
|
+
logger.error(`CRITICAL: failed to invalidate probe auth cache for probe ${probeId.toString()} — a rotated/revoked probe key may keep authenticating for up to ${PROBE_AUTH_KEY_HASH_CACHE_TTL_IN_SECONDS}s`, { probeId: probeId === null || probeId === void 0 ? void 0 : probeId.toString() });
|
|
215
|
+
logger.error(err, { probeId: probeId === null || probeId === void 0 ? void 0 : probeId.toString() });
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
37
219
|
async saveLastAliveInCache(probeId, lastAlive) {
|
|
38
220
|
if (!probeId) {
|
|
39
221
|
throw new BadDataException("probeId is required");
|
|
40
222
|
}
|
|
41
223
|
try {
|
|
42
|
-
await
|
|
224
|
+
await this.boundedCacheOperation("Probe last-alive cache write", GlobalCache.setString(PROBE_LAST_ALIVE_CACHE_NAMESPACE, probeId.toString(), OneUptimeDate.toString(lastAlive)));
|
|
43
225
|
}
|
|
44
226
|
catch (err) {
|
|
45
227
|
logger.error("Error in saving last alive in cache", {
|
|
@@ -52,7 +234,7 @@ export class Service extends DatabaseService {
|
|
|
52
234
|
const now = OneUptimeDate.getCurrentDate();
|
|
53
235
|
try {
|
|
54
236
|
// before we hit the database, we need to check if the lastAlive was updated in Global Cache.
|
|
55
|
-
const previousLastAliveCheck = await
|
|
237
|
+
const previousLastAliveCheck = await this.boundedCacheOperation("Probe last-alive cache read", GlobalCache.getString(PROBE_LAST_ALIVE_CACHE_NAMESPACE, probeId.toString()));
|
|
56
238
|
if (!previousLastAliveCheck) {
|
|
57
239
|
await this.saveLastAliveInCache(probeId, now);
|
|
58
240
|
return true;
|
|
@@ -94,12 +276,39 @@ export class Service extends DatabaseService {
|
|
|
94
276
|
* hooks (onBeforeUpdate/onUpdateSuccess) are inert here. See
|
|
95
277
|
* ServiceService.updateLastSeen.
|
|
96
278
|
*/
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
279
|
+
try {
|
|
280
|
+
await this.updateColumnsByIdWithoutHooks({
|
|
281
|
+
id: probeId,
|
|
282
|
+
data: {
|
|
283
|
+
lastAlive: now,
|
|
284
|
+
},
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
catch (err) {
|
|
288
|
+
/*
|
|
289
|
+
* The 30s throttle stamp was written BEFORE this write was attempted
|
|
290
|
+
* (shouldSaveLastAlive sets it — deliberately, as dogpile
|
|
291
|
+
* protection). If we leave it in place after a FAILED write, every
|
|
292
|
+
* request for the next 30 seconds silently skips the retry, lastAlive
|
|
293
|
+
* quietly crosses the connection-status worker's staleness threshold,
|
|
294
|
+
* and a healthy probe gets flagged Disconnected. Clear the stamp so
|
|
295
|
+
* the very next request retries the write.
|
|
296
|
+
*/
|
|
297
|
+
await this.clearLastAliveThrottle(probeId);
|
|
298
|
+
throw err;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
// Best-effort: on failure the throttle simply expires on its own.
|
|
302
|
+
async clearLastAliveThrottle(probeId) {
|
|
303
|
+
try {
|
|
304
|
+
await this.boundedCacheOperation("Probe last-alive throttle clear", GlobalCache.deleteKey(PROBE_LAST_ALIVE_CACHE_NAMESPACE, probeId.toString()));
|
|
305
|
+
}
|
|
306
|
+
catch (err) {
|
|
307
|
+
logger.error("Error in clearing last alive throttle", {
|
|
308
|
+
probeId: probeId === null || probeId === void 0 ? void 0 : probeId.toString(),
|
|
309
|
+
});
|
|
310
|
+
logger.error(err, { probeId: probeId === null || probeId === void 0 ? void 0 : probeId.toString() });
|
|
311
|
+
}
|
|
103
312
|
}
|
|
104
313
|
async onBeforeCreate(createBy) {
|
|
105
314
|
if (!createBy.data.key) {
|
|
@@ -192,7 +401,16 @@ export class Service extends DatabaseService {
|
|
|
192
401
|
}
|
|
193
402
|
return { updateBy: updateBy, carryForward };
|
|
194
403
|
}
|
|
195
|
-
async onUpdateSuccess(onUpdate,
|
|
404
|
+
async onUpdateSuccess(onUpdate, updatedItemIds) {
|
|
405
|
+
/*
|
|
406
|
+
* Key rotation: the auth middleware trusts a cached hash of the key, so
|
|
407
|
+
* the moment the key column changes the cached entries for the updated
|
|
408
|
+
* probes must go — otherwise the OLD key keeps authenticating until the
|
|
409
|
+
* cache TTL runs out.
|
|
410
|
+
*/
|
|
411
|
+
if (onUpdate.updateBy.data.key !== undefined) {
|
|
412
|
+
await this.invalidateProbeAuthCache(updatedItemIds);
|
|
413
|
+
}
|
|
196
414
|
if (onUpdate.carryForward &&
|
|
197
415
|
onUpdate.carryForward.probesToNotifyOwners.length > 0) {
|
|
198
416
|
for (const probe of onUpdate.carryForward.probesToNotifyOwners) {
|
|
@@ -204,6 +422,11 @@ export class Service extends DatabaseService {
|
|
|
204
422
|
}
|
|
205
423
|
return Promise.resolve(onUpdate);
|
|
206
424
|
}
|
|
425
|
+
async onDeleteSuccess(onDelete, itemIdsBeforeDelete) {
|
|
426
|
+
// A deleted probe's key must stop authenticating.
|
|
427
|
+
await this.invalidateProbeAuthCache(itemIdsBeforeDelete);
|
|
428
|
+
return Promise.resolve(onDelete);
|
|
429
|
+
}
|
|
207
430
|
async notifyOwnersOnStatusChange(data) {
|
|
208
431
|
var _a, _b, _c, _d;
|
|
209
432
|
const probe = await this.findOneById({
|
|
@@ -345,6 +568,12 @@ __decorate([
|
|
|
345
568
|
__metadata("design:paramtypes", [Object, Array]),
|
|
346
569
|
__metadata("design:returntype", Promise)
|
|
347
570
|
], Service.prototype, "onUpdateSuccess", null);
|
|
571
|
+
__decorate([
|
|
572
|
+
CaptureSpan(),
|
|
573
|
+
__metadata("design:type", Function),
|
|
574
|
+
__metadata("design:paramtypes", [Object, Array]),
|
|
575
|
+
__metadata("design:returntype", Promise)
|
|
576
|
+
], Service.prototype, "onDeleteSuccess", null);
|
|
348
577
|
__decorate([
|
|
349
578
|
CaptureSpan(),
|
|
350
579
|
__metadata("design:type", Function),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProbeService.js","sourceRoot":"","sources":["../../../../Server/Services/ProbeService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ProbeService.js","sourceRoot":"","sources":["../../../../Server/Services/ProbeService.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,7 +45,7 @@ import StatusPageSubscriberNotificationMethod from "../../Types/StatusPage/Statu
|
|
|
45
45
|
import { StatusPageApiRoute } from "../../ServiceRoute";
|
|
46
46
|
import ProjectSMTPConfigService from "./ProjectSmtpConfigService";
|
|
47
47
|
import StatusPageResourceService from "./StatusPageResourceService";
|
|
48
|
-
import
|
|
48
|
+
import MonitorGroupService from "./MonitorGroupService";
|
|
49
49
|
import QueryHelper from "../Types/Database/QueryHelper";
|
|
50
50
|
import OneUptimeDate from "../../Types/Date";
|
|
51
51
|
import IncidentService from "./IncidentService";
|
|
@@ -71,6 +71,18 @@ export class Service extends DatabaseService {
|
|
|
71
71
|
* `clearStatusPageUrlCache` after writes to the underlying domain.
|
|
72
72
|
*/
|
|
73
73
|
this.statusPageUrlCache = new InMemoryTTLCache(10000);
|
|
74
|
+
/*
|
|
75
|
+
* Caches verified custom-domain -> statusPageId resolution. Every public
|
|
76
|
+
* status-page API call served on a custom domain (overview, incidents,
|
|
77
|
+
* announcements, polling — several per page view) starts with this lookup,
|
|
78
|
+
* and the mapping only changes when a customer provisions or removes a
|
|
79
|
+
* domain (which takes minutes anyway), so a 60s staleness window is the
|
|
80
|
+
* same tradeoff `statusPageUrlCache` above already accepts. Only
|
|
81
|
+
* SUCCESSFUL resolutions are cached: misses re-query, so a freshly
|
|
82
|
+
* verified domain works immediately and attacker-controlled Host headers
|
|
83
|
+
* cannot fill the cache with negative entries.
|
|
84
|
+
*/
|
|
85
|
+
this.statusPageDomainToIdCache = new InMemoryTTLCache(10000);
|
|
74
86
|
}
|
|
75
87
|
clearStatusPageUrlCache(statusPageId) {
|
|
76
88
|
if (statusPageId) {
|
|
@@ -79,6 +91,13 @@ export class Service extends DatabaseService {
|
|
|
79
91
|
}
|
|
80
92
|
this.statusPageUrlCache.clear();
|
|
81
93
|
}
|
|
94
|
+
clearStatusPageDomainToIdCache(fullDomain) {
|
|
95
|
+
if (fullDomain) {
|
|
96
|
+
this.statusPageDomainToIdCache.delete(fullDomain);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
this.statusPageDomainToIdCache.clear();
|
|
100
|
+
}
|
|
82
101
|
/*
|
|
83
102
|
* Mirrors `resolveStatusPageIdOrThrow` in `Common/Server/API/StatusPageAPI.ts`
|
|
84
103
|
* (module-private there), but returns null instead of throwing so callers can
|
|
@@ -91,6 +110,10 @@ export class Service extends DatabaseService {
|
|
|
91
110
|
return null;
|
|
92
111
|
}
|
|
93
112
|
if (statusPageIdOrDomain.includes(".")) {
|
|
113
|
+
const cachedStatusPageId = this.statusPageDomainToIdCache.get(statusPageIdOrDomain);
|
|
114
|
+
if (cachedStatusPageId) {
|
|
115
|
+
return new ObjectID(cachedStatusPageId);
|
|
116
|
+
}
|
|
94
117
|
const statusPageDomain = await StatusPageDomainService.findOneBy({
|
|
95
118
|
query: {
|
|
96
119
|
fullDomain: statusPageIdOrDomain,
|
|
@@ -108,6 +131,7 @@ export class Service extends DatabaseService {
|
|
|
108
131
|
if (!statusPageDomain || !statusPageDomain.statusPageId) {
|
|
109
132
|
return null;
|
|
110
133
|
}
|
|
134
|
+
this.statusPageDomainToIdCache.set(statusPageIdOrDomain, statusPageDomain.statusPageId.toString(), Service.DOMAIN_TO_ID_CACHE_TTL_MS);
|
|
111
135
|
return statusPageDomain.statusPageId;
|
|
112
136
|
}
|
|
113
137
|
try {
|
|
@@ -967,7 +991,10 @@ export class Service extends DatabaseService {
|
|
|
967
991
|
});
|
|
968
992
|
}
|
|
969
993
|
async getMonitorIdsOnStatusPage(data) {
|
|
970
|
-
const statusPageResources =
|
|
994
|
+
const statusPageResources = data.statusPageResources ||
|
|
995
|
+
(await this.getStatusPageResources({
|
|
996
|
+
statusPageId: data.statusPageId,
|
|
997
|
+
}));
|
|
971
998
|
const monitorGroupIds = statusPageResources
|
|
972
999
|
.map((resource) => {
|
|
973
1000
|
return resource.monitorGroupId;
|
|
@@ -984,29 +1011,11 @@ export class Service extends DatabaseService {
|
|
|
984
1011
|
.filter((id) => {
|
|
985
1012
|
return Boolean(id); // remove nulls
|
|
986
1013
|
});
|
|
1014
|
+
// Batched: one query for all monitor groups instead of one per group.
|
|
1015
|
+
const monitorIdsByGroupId = await MonitorGroupService.getMonitorIdsInMonitorGroups(monitorGroupIds);
|
|
987
1016
|
for (const monitorGroupId of monitorGroupIds) {
|
|
988
|
-
// get current status of monitors in the group.
|
|
989
1017
|
// get monitors in the group.
|
|
990
|
-
const
|
|
991
|
-
query: {
|
|
992
|
-
monitorGroupId: monitorGroupId,
|
|
993
|
-
},
|
|
994
|
-
select: {
|
|
995
|
-
monitorId: true,
|
|
996
|
-
},
|
|
997
|
-
props: {
|
|
998
|
-
isRoot: true,
|
|
999
|
-
},
|
|
1000
|
-
limit: LIMIT_PER_PROJECT,
|
|
1001
|
-
skip: 0,
|
|
1002
|
-
});
|
|
1003
|
-
const monitorsInGroupIds = groupResources
|
|
1004
|
-
.map((resource) => {
|
|
1005
|
-
return resource.monitorId;
|
|
1006
|
-
})
|
|
1007
|
-
.filter((id) => {
|
|
1008
|
-
return Boolean(id); // remove nulls
|
|
1009
|
-
});
|
|
1018
|
+
const monitorsInGroupIds = monitorIdsByGroupId[monitorGroupId.toString()] || [];
|
|
1010
1019
|
for (const monitorId of monitorsInGroupIds) {
|
|
1011
1020
|
if (!monitorsOnStatusPage.find((item) => {
|
|
1012
1021
|
return item.toString() === monitorId.toString();
|
|
@@ -1067,24 +1076,21 @@ export class Service extends DatabaseService {
|
|
|
1067
1076
|
}
|
|
1068
1077
|
async getMonitorGroupCurrentStatuses(data) {
|
|
1069
1078
|
const monitorGroupCurrentStatuses = {};
|
|
1079
|
+
/*
|
|
1080
|
+
* Batched: this used to issue one MonitorGroupResource query per status
|
|
1081
|
+
* page resource (not even per distinct group) on every badge render and
|
|
1082
|
+
* subscriber report. One query now serves all groups.
|
|
1083
|
+
*/
|
|
1084
|
+
const resourcesByGroupId = await MonitorGroupService.getMonitorGroupResourcesByGroupIds(data.statusPageResources
|
|
1085
|
+
.map((resource) => {
|
|
1086
|
+
return resource.monitorGroupId;
|
|
1087
|
+
})
|
|
1088
|
+
.filter((id) => {
|
|
1089
|
+
return Boolean(id); // remove nulls
|
|
1090
|
+
}));
|
|
1070
1091
|
for (const resource of data.statusPageResources) {
|
|
1071
1092
|
if (resource.monitorGroupId) {
|
|
1072
|
-
const monitorGroupResources =
|
|
1073
|
-
query: {
|
|
1074
|
-
monitorGroupId: resource.monitorGroupId,
|
|
1075
|
-
},
|
|
1076
|
-
select: {
|
|
1077
|
-
monitorId: true,
|
|
1078
|
-
monitor: {
|
|
1079
|
-
currentMonitorStatusId: true,
|
|
1080
|
-
},
|
|
1081
|
-
},
|
|
1082
|
-
skip: 0,
|
|
1083
|
-
limit: LIMIT_PER_PROJECT,
|
|
1084
|
-
props: {
|
|
1085
|
-
isRoot: true,
|
|
1086
|
-
},
|
|
1087
|
-
});
|
|
1093
|
+
const monitorGroupResources = resourcesByGroupId[resource.monitorGroupId.toString()] || [];
|
|
1088
1094
|
const statuses = monitorGroupResources
|
|
1089
1095
|
.filter((item) => {
|
|
1090
1096
|
return (item.monitor &&
|
|
@@ -1149,6 +1155,7 @@ export class Service extends DatabaseService {
|
|
|
1149
1155
|
return currentStatus;
|
|
1150
1156
|
}
|
|
1151
1157
|
}
|
|
1158
|
+
Service.DOMAIN_TO_ID_CACHE_TTL_MS = 60 * 1000;
|
|
1152
1159
|
__decorate([
|
|
1153
1160
|
CaptureSpan(),
|
|
1154
1161
|
__metadata("design:type", Function),
|