@oneuptime/common 12.0.12 → 12.0.14
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/DatabaseBaseModel/DatabaseBaseModel.ts +32 -5
- package/Models/DatabaseModels/NetworkDevice.ts +64 -0
- package/Models/DatabaseModels/OnCallDutyPolicySchedule.ts +14 -0
- package/Models/DatabaseModels/StatusPage.ts +59 -0
- package/Models/DatabaseModels/StatusPageOidc.ts +2 -0
- package/Models/DatabaseModels/UserCall.ts +94 -3
- package/Models/DatabaseModels/UserEmail.ts +94 -3
- package/Models/DatabaseModels/UserIncomingCallNumber.ts +94 -3
- package/Models/DatabaseModels/UserPush.ts +37 -0
- package/Models/DatabaseModels/UserSMS.ts +94 -3
- package/Models/DatabaseModels/UserWhatsApp.ts +93 -2
- package/Models/DatabaseModels/WorkspaceProjectAuthToken.ts +19 -2
- package/Server/API/AIChatAPI.ts +55 -56
- package/Server/API/BaseAPI.ts +79 -14
- package/Server/API/CommonAPI.ts +89 -0
- package/Server/API/MicrosoftTeamsAPI.ts +20 -9
- package/Server/API/SlackAPI.ts +13 -10
- package/Server/API/StatusPageAPI.ts +2197 -2128
- package/Server/API/TelemetryAPI.ts +72 -3
- package/Server/API/UserCallAPI.ts +53 -45
- package/Server/API/UserEmailAPI.ts +53 -44
- package/Server/API/UserIncomingCallNumberAPI.ts +48 -38
- package/Server/API/UserNotificationMethodAdminAPI.ts +481 -0
- package/Server/API/UserPushAPI.ts +126 -2
- package/Server/API/UserSmsAPI.ts +53 -44
- package/Server/API/UserWhatsAppAPI.ts +53 -50
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787142779538-MigrationName.ts +154 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787156982416-MigrationName.ts +17 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787500000000-AddEnableSearchEngineIndexingToStatusPage.ts +30 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787600000000-AddNetworkDeviceReachabilityColumns.ts +47 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787700000000-FixTotpOtpUrlAlgorithm.ts +45 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
- package/Server/Middleware/UserAuthorization.ts +11 -2
- package/Server/Middleware/VerificationCodeRateLimit.ts +586 -0
- package/Server/Services/AnalyticsDatabaseService.ts +169 -0
- package/Server/Services/ApiKeyPermissionService.ts +116 -2
- package/Server/Services/DatabaseService.ts +118 -6
- package/Server/Services/LogAggregationService.ts +39 -0
- package/Server/Services/LogService.ts +21 -0
- package/Server/Services/NetworkSiteService.ts +12 -0
- package/Server/Services/PushNotificationService.ts +127 -12
- package/Server/Services/SpanService.ts +21 -0
- package/Server/Services/TeamMemberService.ts +53 -13
- package/Server/Services/TraceAggregationService.ts +15 -0
- package/Server/Services/UserCallService.ts +55 -24
- package/Server/Services/UserEmailService.ts +83 -17
- package/Server/Services/UserIncomingCallNumberService.ts +49 -85
- package/Server/Services/UserNotificationMethodAdminService.ts +1527 -0
- package/Server/Services/UserNotificationRuleService.ts +26 -0
- package/Server/Services/UserPushService.ts +89 -0
- package/Server/Services/UserSmsService.ts +50 -17
- package/Server/Services/UserWhatsAppService.ts +48 -15
- package/Server/Services/WorkspaceNotificationRuleService.ts +172 -220
- package/Server/Types/AnalyticsDatabase/ModelPermission.ts +9 -0
- package/Server/Types/Database/Permissions/AccessControlPermission.ts +47 -16
- package/Server/Types/Database/QueryHelper.ts +30 -0
- package/Server/Utils/APIKey/AccessPermission.ts +16 -40
- package/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.ts +59 -0
- package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +144 -0
- package/Server/Utils/ChannelVerification.ts +510 -0
- package/Server/Utils/LogRedaction.ts +576 -0
- package/Server/Utils/Logger.ts +123 -46
- package/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.ts +13 -16
- package/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.ts +94 -23
- package/Server/Utils/Monitor/MonitorAlert.ts +24 -21
- package/Server/Utils/Monitor/MonitorIncident.ts +21 -18
- package/Server/Utils/Monitor/MonitorResource.ts +29 -9
- package/Server/Utils/Monitor/MonitorResourceContext.ts +107 -0
- package/Server/Utils/Monitor/MonitorStepResourceIdentity.ts +442 -0
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +28 -7
- package/Server/Utils/Monitor/SeriesResourceLabels.ts +3 -3
- package/Server/Utils/Monitor/SeriesResourceLinker.ts +96 -28
- package/Server/Utils/SessionReplay/SessionReplayGateCacheStore.ts +56 -10
- package/Server/Utils/StartServer.ts +30 -9
- package/Server/Utils/StatusPageSearchEngineIndexing.ts +33 -0
- package/Server/Utils/Telemetry/ResourceEntityFilter.ts +441 -0
- package/Server/Utils/TotpAuth.ts +137 -9
- package/Server/Utils/UserRegistrationToken.ts +182 -0
- package/Server/Utils/VerificationCode.ts +134 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +488 -46
- package/Tests/App/Dashboard/AdminNotificationRulesPage.test.tsx +173 -94
- package/Tests/App/Dashboard/AdminUserNotificationMethodsPage.test.tsx +1151 -0
- package/Tests/App/Dashboard/AdminUserOnCallPages.test.tsx +905 -0
- package/Tests/App/Dashboard/DashboardCommandPalette.test.tsx +338 -0
- package/Tests/App/Dashboard/InvestigationPanel.test.tsx +1 -1
- package/Tests/App/Dashboard/MonitorTypePicker.test.tsx +328 -0
- package/Tests/App/StatusPage/StatusPageIndexPageRobotsMeta.test.ts +130 -0
- package/Tests/Models/DatabaseModels/DatabaseBaseModelToJSONObjectCache.test.ts +180 -0
- package/Tests/Models/StatusPageEnableSearchEngineIndexing.test.ts +157 -0
- package/Tests/Models/UserPushCriticalAlertColumn.test.ts +172 -0
- package/Tests/Server/API/AIChatCancelAndFeedback.test.ts +23 -1
- package/Tests/Server/API/AIChatRouteAuthorization.test.ts +785 -0
- package/Tests/Server/API/BaseAPIApiKeyAuth.test.ts +21 -8
- package/Tests/Server/API/BaseAPIGetListParallel.test.ts +519 -0
- package/Tests/Server/API/CommonAPIAuthGuard.test.ts +290 -0
- package/Tests/Server/API/MicrosoftTeamsManifest.test.ts +7 -1
- package/Tests/Server/API/NotificationChannelVerificationAPI.test.ts +543 -0
- package/Tests/Server/API/StatusPageOverviewCache.test.ts +474 -0
- package/Tests/Server/API/StatusPageSeoSearchEngineIndexing.test.ts +189 -0
- package/Tests/Server/API/UserIncomingCallNumberApi.test.ts +108 -18
- package/Tests/Server/API/UserNotificationMethodAdminAPI.test.ts +963 -0
- package/Tests/Server/API/UserPushCriticalAlertsApi.test.ts +114 -0
- package/Tests/Server/API/UserSmsApi.test.ts +107 -14
- package/Tests/Server/API/UserTotpAuthAPI.test.ts +427 -0
- package/Tests/Server/Infrastructure/InMemoryTTLCache.test.ts +158 -0
- package/Tests/Server/Infrastructure/Postgres/DeviceRoleAndDeclaredLinkParentMigration.test.ts +9 -60
- package/Tests/Server/Infrastructure/Postgres/FixTotpOtpUrlAlgorithmMigration.test.ts +315 -0
- package/Tests/Server/Middleware/ProjectAuthorizationApiKeyMiddleware.test.ts +24 -15
- package/Tests/Server/Middleware/UserAuthorization.test.ts +79 -0
- package/Tests/Server/Middleware/VerificationCodeRateLimit.test.ts +775 -0
- package/Tests/Server/Services/AddNetworkDeviceReachabilityColumnsMigration.test.ts +280 -0
- package/Tests/Server/Services/AnalyticsDatabasePaginationStability.test.ts +33 -13
- package/Tests/Server/Services/AnalyticsDatabaseSortKeyBoundary.test.ts +658 -0
- package/Tests/Server/Services/ApiKeyPermissionService.test.ts +347 -0
- package/Tests/Server/Services/CriticalOnCallAlertDelivery.test.ts +458 -0
- package/Tests/Server/Services/CriticalPushAlertPayload.test.ts +301 -0
- package/Tests/Server/Services/DatabaseServiceAtomicIncrement.test.ts +143 -0
- package/Tests/Server/Services/DatabaseServiceUpdateDebugLogging.test.ts +282 -0
- package/Tests/Server/Services/DeliverNotificationForRuleExtraction.test.ts +1 -0
- package/Tests/Server/Services/LogAggregationScanMemory.test.ts +421 -0
- package/Tests/Server/Services/LogAggregationService.test.ts +2 -2
- package/Tests/Server/Services/NetworkSiteService.test.ts +56 -2
- package/Tests/Server/Services/NotificationChannelCodeIssuance.test.ts +401 -0
- package/Tests/Server/Services/PushNotificationDeliveryOptions.test.ts +204 -0
- package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +21 -1
- package/Tests/Server/Services/TeamMemberInviteRegistrationToken.test.ts +290 -0
- package/Tests/Server/Services/TelemetryResourceFacetFilters.test.ts +267 -0
- package/Tests/Server/Services/UserNotificationMethodAdminService.test.ts +948 -0
- package/Tests/Server/Services/UserNotificationRuleExecuteItem.test.ts +1 -0
- package/Tests/Server/Services/UserPushCriticalAlertToggle.test.ts +255 -0
- package/Tests/Server/Services/UserTotpAuthEnrolment.test.ts +218 -0
- package/Tests/Server/Services/WorkspaceNotificationRuleTestRuleChannels.test.ts +702 -0
- package/Tests/Server/TestingUtils/AuthenticatorApp.ts +248 -0
- package/Tests/Server/Types/Database/Permissions/AccessControlPermission.test.ts +165 -0
- package/Tests/Server/Types/Database/Permissions/NotificationChannelVerificationColumns.test.ts +135 -0
- package/Tests/Server/Types/Database/Permissions/OnCallScheduleRelationSelect.test.ts +504 -0
- package/Tests/Server/Types/Database/QueryHelperFindWithSameTextAnyOf.test.ts +91 -0
- package/Tests/Server/Types/Workflow/Components/JsonToText.test.ts +384 -0
- package/Tests/Server/Types/Workflow/Components/MergeJson.test.ts +403 -0
- package/Tests/Server/Utils/APIKey/AccessPermission.test.ts +48 -36
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +213 -0
- package/Tests/Server/Utils/Browser.test.ts +162 -0
- package/Tests/Server/Utils/ChannelVerification.test.ts +689 -0
- package/Tests/Server/Utils/Express.test.ts +371 -0
- package/Tests/Server/Utils/LogRedaction.test.ts +415 -0
- package/Tests/Server/Utils/LoggerCredentialLeak.test.ts +245 -0
- package/Tests/Server/Utils/Monitor/Criteria/CustomCodeMonitorCriteria.test.ts +707 -0
- package/Tests/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.test.ts +698 -0
- package/Tests/Server/Utils/Monitor/Criteria/IncomingEmailBodyCriteria.test.ts +243 -0
- package/Tests/Server/Utils/Monitor/Criteria/IncomingRequestBodyCriteria.test.ts +278 -0
- package/Tests/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.test.ts +374 -4
- package/Tests/Server/Utils/Monitor/MonitorAlertResourceLinking.test.ts +160 -20
- package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +13 -8
- package/Tests/Server/Utils/Monitor/MonitorIncidentResourceLinking.test.ts +162 -18
- package/Tests/Server/Utils/Monitor/MonitorResourceContext.test.ts +349 -0
- package/Tests/Server/Utils/Monitor/MonitorResourceIngestedStepSelection.test.ts +455 -0
- package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +690 -0
- package/Tests/Server/Utils/Monitor/MonitorSummaryPersistence.test.ts +7 -2
- package/Tests/Server/Utils/Monitor/NetworkDeviceReachabilityRoundTrip.test.ts +369 -0
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +86 -8
- package/Tests/Server/Utils/Monitor/SeriesResourceLinker.test.ts +92 -18
- package/Tests/Server/Utils/PrivacyFilterUtil.test.ts +64 -0
- package/Tests/Server/Utils/PushNotificationUtilCreators.test.ts +267 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayGateCacheStore.test.ts +207 -0
- package/Tests/Server/Utils/StartServerBodyVerify.test.ts +335 -0
- package/Tests/Server/Utils/StatusPageSearchEngineIndexing.test.ts +60 -0
- package/Tests/Server/Utils/Telemetry/OneuptimeLabel.test.ts +439 -0
- package/Tests/Server/Utils/Telemetry/ResourceEntityFilter.test.ts +435 -0
- package/Tests/Server/Utils/TotpAuth.test.ts +719 -0
- package/Tests/Server/Utils/UserRegistrationToken.test.ts +322 -0
- package/Tests/Server/Utils/VerificationCode.test.ts +296 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsChannelSend.test.ts +607 -62
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsInstalledTeamIdSpace.test.ts +778 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsTeamInstalls.test.ts +44 -10
- package/Tests/Types/API/HostnameFromAuthority.test.ts +164 -0
- package/Tests/Types/AutoRemediation/AutoRemediationSuggestionStatus.test.ts +192 -0
- package/Tests/Types/Call/CallRequest.test.ts +189 -0
- package/Tests/Types/Dashboard/DashboardSize.test.ts +226 -0
- package/Tests/Types/Database/AccessControl/ColumnAccessControlCache.test.ts +344 -0
- package/Tests/Types/Database/DatabasePropertyFindOperator.test.ts +518 -0
- package/Tests/Types/Database/TableColumnMetadataCache.test.ts +286 -0
- package/Tests/Types/Incident/IncidentSlaStatus.test.ts +191 -0
- package/Tests/Types/Metrics/MetricDashboardMetricType.test.ts +278 -0
- package/Tests/Types/Metrics/MetricPipelineRuleType.test.ts +517 -0
- package/Tests/Types/Monitor/IncomingMonitorDefaultCriteria.test.ts +470 -0
- package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +6 -4
- package/Tests/Types/Monitor/MonitorStep.test.ts +100 -0
- package/Tests/Types/Monitor/MonitorTypeKeywords.test.ts +360 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +262 -5
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +1 -1
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +1 -1
- package/Tests/Types/Monitor/ServiceAlertTemplates.test.ts +905 -0
- package/Tests/Types/Service/ServiceLanguage.test.ts +255 -0
- package/Tests/Types/StatusPage/SearchEngineIndexing.test.ts +86 -0
- package/Tests/Types/Telemetry/ResourceEntityFacet.test.ts +254 -0
- package/Tests/Types/TextRandomGeneration.test.ts +211 -0
- package/Tests/UI/Components/Button.test.tsx +175 -1
- package/Tests/UI/Components/CardSelect.test.tsx +1021 -0
- package/Tests/UI/Components/CodeBlockLanguages.test.tsx +236 -0
- package/Tests/UI/Components/CommandPalette/CommandPalette.test.tsx +568 -0
- package/Tests/UI/Components/CommandPalette/CommandPaletteKeyboard.test.tsx +239 -0
- package/Tests/UI/Components/CommandPalette/CommandPaletteProviders.test.tsx +400 -0
- package/Tests/UI/Components/CommandPalette/PaletteFilter.test.ts +234 -0
- package/Tests/UI/Components/CommandPalette/RecentCommands.test.ts +97 -0
- package/Tests/UI/Components/CountModelSideMenuItemGuard.test.tsx +198 -0
- package/Tests/UI/Components/FeedItemSafeMode.test.tsx +1 -1
- package/Tests/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.test.ts +267 -0
- package/Tests/UI/Components/List.test.tsx +9 -2
- package/Tests/UI/Components/ListLoadingStates.test.tsx +173 -0
- package/Tests/UI/Components/MarkdownLazy.test.tsx +113 -0
- package/Tests/UI/Components/MarkdownMermaidRetry.test.tsx +110 -0
- package/Tests/UI/Components/MasterPage.test.tsx +36 -1
- package/Tests/UI/Components/ModelTable/useCustomFieldColumns.test.tsx +8 -0
- package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +692 -0
- package/Tests/UI/Components/MoreMenuMotion.test.tsx +118 -0
- package/Tests/UI/Components/NavBarCommandKGating.test.tsx +178 -0
- package/Tests/UI/Components/OrderedStatesList.test.tsx +19 -2
- package/Tests/UI/Components/SideOverMotion.test.tsx +109 -0
- package/Tests/UI/Components/Skeleton.test.tsx +71 -0
- package/Tests/UI/Components/TableLoadingStates.test.tsx +279 -0
- package/Tests/UI/Components/Tabs.test.tsx +24 -0
- package/Tests/UI/Components/Toast.test.tsx +130 -7
- package/Tests/UI/Components/ToastStacking.test.tsx +198 -0
- package/Tests/UI/Utils/Dropdown.test.ts +423 -0
- package/Tests/UI/Utils/ModelAPITenantHeader.test.ts +122 -0
- package/Tests/UI/Utils/ModelListCache.test.ts +338 -0
- package/Tests/UI/Utils/ProjectListCacheInvalidation.test.ts +225 -0
- package/Tests/Utils/API.test.ts +16 -2
- package/Tests/Utils/Dashboard/Components/DashboardKubernetesResourceListShared.test.ts +347 -0
- package/Tests/Utils/Dashboard/Components/DashboardListSharedArgs.test.ts +259 -0
- package/Tests/Utils/Dashboard/Components/DashboardMonitorListComponent.test.ts +466 -0
- package/Tests/Utils/Monitor/MonitorMetricType.test.ts +66 -1
- package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +115 -6
- package/Tests/Utils/NetworkDevice/DeviceReachabilityUtil.test.ts +610 -0
- package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +114 -45
- package/Tests/Utils/Rum/UrlScrubberSegments.test.ts +362 -0
- package/Types/API/Hostname.ts +79 -0
- package/Types/Database/AccessControl/ColumnAccessControl.ts +33 -11
- package/Types/Database/AccessControl/ColumnBillingAccessControl.ts +33 -11
- package/Types/Database/DatabaseProperty.ts +38 -0
- package/Types/Database/TableColumn.ts +34 -7
- package/Types/Email/EmailTemplateType.ts +1 -0
- package/Types/Events/Recurring.ts +16 -1
- package/Types/Monitor/MonitorCriteriaInstance.ts +41 -20
- package/Types/Monitor/MonitorStep.ts +13 -1
- package/Types/Monitor/MonitorType.ts +345 -40
- package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +131 -8
- package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +48 -8
- package/Types/Monitor/SSLMonitor/SslMonitorResponse.ts +43 -0
- package/Types/Monitor/ServiceAlertTemplates.ts +1352 -0
- package/Types/Permission.ts +35 -0
- package/Types/PushNotification/AndroidNotificationChannel.ts +26 -0
- package/Types/PushNotification/PushNotificationMessage.ts +15 -0
- package/Types/PushNotification/PushNotificationRequest.ts +8 -16
- package/Types/Service/ServiceLanguage.ts +144 -0
- package/Types/StatusPage/SearchEngineIndexing.ts +61 -0
- package/Types/Telemetry/ResourceEntityFacet.ts +211 -0
- package/Types/Text.ts +111 -19
- package/UI/Components/Button/Button.tsx +27 -14
- package/UI/Components/CardSelect/CardSelect.tsx +714 -105
- package/UI/Components/CodeBlock/CodeBlock.tsx +54 -7
- package/UI/Components/CodeBlock/LanguageRegistry.ts +103 -0
- package/UI/Components/CommandPalette/CommandPalette.tsx +790 -0
- package/UI/Components/CommandPalette/PaletteFilter.ts +196 -0
- package/UI/Components/CommandPalette/PaletteRow.tsx +173 -0
- package/UI/Components/CommandPalette/RecentCommands.ts +57 -0
- package/UI/Components/CommandPalette/Types.ts +49 -0
- package/UI/Components/CommandPalette/UseProviderSearch.ts +129 -0
- package/UI/Components/Dropdown/Dropdown.tsx +6 -1
- package/UI/Components/EmptyState/EmptyState.tsx +8 -1
- package/UI/Components/Feed/FeedItem.tsx +1 -1
- package/UI/Components/Footer/Footer.tsx +32 -6
- package/UI/Components/Forms/Fields/FormField.tsx +3 -0
- package/UI/Components/Forms/Types/Field.ts +8 -0
- package/UI/Components/List/List.tsx +37 -5
- package/UI/Components/List/ListSkeleton.tsx +54 -0
- package/UI/Components/Loader/PageLoader.tsx +29 -8
- package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +26 -4
- package/UI/Components/Markdown.tsx/LazyMarkdownViewer.tsx +23 -2
- package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +71 -26
- package/UI/Components/MasterPage/MasterPage.tsx +24 -11
- package/UI/Components/Modal/Modal.tsx +2 -2
- package/UI/Components/ModelTable/BaseModelTable.tsx +1 -1
- package/UI/Components/ModelTable/useCustomFieldColumns.ts +11 -5
- package/UI/Components/MoreMenu/MoreMenu.tsx +39 -1
- package/UI/Components/Navbar/NavBar.tsx +14 -1
- package/UI/Components/OrderedStatesList/OrderedStatesList.tsx +50 -5
- package/UI/Components/SideMenu/CountModelSideMenuItem.tsx +40 -1
- package/UI/Components/SideOver/SideOver.tsx +37 -2
- package/UI/Components/Skeleton/Skeleton.tsx +53 -0
- package/UI/Components/Table/Table.tsx +74 -44
- package/UI/Components/Table/TableSkeletonRows.tsx +141 -0
- package/UI/Components/Tabs/Tab.tsx +1 -1
- package/UI/Components/Toast/Toast.tsx +118 -53
- package/UI/Components/Toast/ToastInit.tsx +82 -32
- package/UI/Styles/Theme.css +40 -0
- package/UI/Utils/ModelAPI/ModelAPI.ts +20 -10
- package/UI/Utils/ModelListCache.ts +188 -0
- package/UI/Utils/Project.ts +29 -0
- package/Utils/API.ts +6 -1
- package/Utils/Monitor/MonitorMetricType.ts +16 -1
- package/Utils/Monitor/NetworkTopologyUtil.ts +60 -8
- package/Utils/NetworkDevice/DeviceReachabilityUtil.ts +262 -0
- package/Utils/NetworkSite/SiteStatusRollupUtil.ts +41 -24
- package/Utils/Telemetry/CrossSignalScope.ts +75 -4
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js +20 -4
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +66 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js +14 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPage.js +60 -0
- package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageOidc.js +2 -0
- package/build/dist/Models/DatabaseModels/StatusPageOidc.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserCall.js +101 -3
- package/build/dist/Models/DatabaseModels/UserCall.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserEmail.js +101 -3
- package/build/dist/Models/DatabaseModels/UserEmail.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserIncomingCallNumber.js +101 -3
- package/build/dist/Models/DatabaseModels/UserIncomingCallNumber.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserPush.js +38 -0
- package/build/dist/Models/DatabaseModels/UserPush.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserSMS.js +101 -3
- package/build/dist/Models/DatabaseModels/UserSMS.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserWhatsApp.js +100 -2
- package/build/dist/Models/DatabaseModels/UserWhatsApp.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkspaceProjectAuthToken.js.map +1 -1
- package/build/dist/Server/API/AIChatAPI.js +48 -35
- package/build/dist/Server/API/AIChatAPI.js.map +1 -1
- package/build/dist/Server/API/BaseAPI.js +69 -13
- package/build/dist/Server/API/BaseAPI.js.map +1 -1
- package/build/dist/Server/API/CommonAPI.js +59 -0
- package/build/dist/Server/API/CommonAPI.js.map +1 -1
- package/build/dist/Server/API/MicrosoftTeamsAPI.js +20 -6
- package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
- package/build/dist/Server/API/SlackAPI.js +13 -10
- package/build/dist/Server/API/SlackAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +745 -673
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +34 -3
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/API/UserCallAPI.js +42 -38
- package/build/dist/Server/API/UserCallAPI.js.map +1 -1
- package/build/dist/Server/API/UserEmailAPI.js +42 -38
- package/build/dist/Server/API/UserEmailAPI.js.map +1 -1
- package/build/dist/Server/API/UserIncomingCallNumberAPI.js +37 -32
- package/build/dist/Server/API/UserIncomingCallNumberAPI.js.map +1 -1
- package/build/dist/Server/API/UserNotificationMethodAdminAPI.js +341 -0
- package/build/dist/Server/API/UserNotificationMethodAdminAPI.js.map +1 -0
- package/build/dist/Server/API/UserPushAPI.js +95 -2
- package/build/dist/Server/API/UserPushAPI.js.map +1 -1
- package/build/dist/Server/API/UserSmsAPI.js +42 -38
- package/build/dist/Server/API/UserSmsAPI.js.map +1 -1
- package/build/dist/Server/API/UserWhatsAppAPI.js +42 -40
- package/build/dist/Server/API/UserWhatsAppAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787142779538-MigrationName.js +89 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787142779538-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787156982416-MigrationName.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787156982416-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787500000000-AddEnableSearchEngineIndexingToStatusPage.js +23 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787500000000-AddEnableSearchEngineIndexingToStatusPage.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787600000000-AddNetworkDeviceReachabilityColumns.js +34 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787600000000-AddNetworkDeviceReachabilityColumns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787700000000-FixTotpOtpUrlAlgorithm.js +40 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787700000000-FixTotpOtpUrlAlgorithm.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/UserAuthorization.js +6 -2
- package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/VerificationCodeRateLimit.js +393 -0
- package/build/dist/Server/Middleware/VerificationCodeRateLimit.js.map +1 -0
- package/build/dist/Server/Services/AnalyticsDatabaseService.js +136 -0
- package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
- package/build/dist/Server/Services/ApiKeyPermissionService.js +90 -1
- package/build/dist/Server/Services/ApiKeyPermissionService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +89 -6
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/LogAggregationService.js +7 -0
- package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
- package/build/dist/Server/Services/LogService.js +16 -0
- package/build/dist/Server/Services/LogService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteService.js +12 -0
- package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
- package/build/dist/Server/Services/PushNotificationService.js +69 -30
- package/build/dist/Server/Services/PushNotificationService.js.map +1 -1
- package/build/dist/Server/Services/SpanService.js +16 -0
- package/build/dist/Server/Services/SpanService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +43 -7
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TraceAggregationService.js +2 -0
- package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
- package/build/dist/Server/Services/UserCallService.js +54 -22
- package/build/dist/Server/Services/UserCallService.js.map +1 -1
- package/build/dist/Server/Services/UserEmailService.js +78 -17
- package/build/dist/Server/Services/UserEmailService.js.map +1 -1
- package/build/dist/Server/Services/UserIncomingCallNumberService.js +45 -74
- package/build/dist/Server/Services/UserIncomingCallNumberService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationMethodAdminService.js +1117 -0
- package/build/dist/Server/Services/UserNotificationMethodAdminService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationRuleService.js +20 -0
- package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/UserPushService.js +77 -0
- package/build/dist/Server/Services/UserPushService.js.map +1 -1
- package/build/dist/Server/Services/UserSmsService.js +50 -17
- package/build/dist/Server/Services/UserSmsService.js.map +1 -1
- package/build/dist/Server/Services/UserWhatsAppService.js +48 -15
- package/build/dist/Server/Services/UserWhatsAppService.js.map +1 -1
- package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +137 -164
- package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js +9 -0
- package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/AccessControlPermission.js +21 -13
- package/build/dist/Server/Types/Database/Permissions/AccessControlPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js +27 -0
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Utils/APIKey/AccessPermission.js +9 -32
- package/build/dist/Server/Utils/APIKey/AccessPermission.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.js +46 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +87 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
- package/build/dist/Server/Utils/ChannelVerification.js +348 -0
- package/build/dist/Server/Utils/ChannelVerification.js.map +1 -0
- package/build/dist/Server/Utils/LogRedaction.js +449 -0
- package/build/dist/Server/Utils/LogRedaction.js.map +1 -0
- package/build/dist/Server/Utils/Logger.js +98 -45
- package/build/dist/Server/Utils/Logger.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js +13 -12
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.js +65 -13
- package/build/dist/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +20 -17
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +17 -14
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +20 -3
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js +95 -0
- package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js +313 -0
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +27 -7
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +3 -3
- package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js +67 -26
- package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js.map +1 -1
- package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCacheStore.js +29 -10
- package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCacheStore.js.map +1 -1
- package/build/dist/Server/Utils/StartServer.js +10 -7
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/StatusPageSearchEngineIndexing.js +24 -0
- package/build/dist/Server/Utils/StatusPageSearchEngineIndexing.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js +311 -0
- package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js.map +1 -0
- package/build/dist/Server/Utils/TotpAuth.js +127 -8
- package/build/dist/Server/Utils/TotpAuth.js.map +1 -1
- package/build/dist/Server/Utils/UserRegistrationToken.js +170 -0
- package/build/dist/Server/Utils/UserRegistrationToken.js.map +1 -0
- package/build/dist/Server/Utils/VerificationCode.js +120 -0
- package/build/dist/Server/Utils/VerificationCode.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +366 -37
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Types/API/Hostname.js +63 -0
- package/build/dist/Types/API/Hostname.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js +20 -6
- package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js +20 -6
- package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js.map +1 -1
- package/build/dist/Types/Database/DatabaseProperty.js +38 -0
- package/build/dist/Types/Database/DatabaseProperty.js.map +1 -1
- package/build/dist/Types/Database/TableColumn.js +24 -6
- package/build/dist/Types/Database/TableColumn.js.map +1 -1
- package/build/dist/Types/Email/EmailTemplateType.js +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/Events/Recurring.js +13 -1
- package/build/dist/Types/Events/Recurring.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +42 -21
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +9 -1
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorType.js +330 -31
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +77 -5
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +18 -6
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
- package/build/dist/Types/Monitor/ServiceAlertTemplates.js +1028 -0
- package/build/dist/Types/Monitor/ServiceAlertTemplates.js.map +1 -0
- package/build/dist/Types/Permission.js +33 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/PushNotification/AndroidNotificationChannel.js +27 -0
- package/build/dist/Types/PushNotification/AndroidNotificationChannel.js.map +1 -0
- package/build/dist/Types/Service/ServiceLanguage.js +96 -0
- package/build/dist/Types/Service/ServiceLanguage.js.map +1 -0
- package/build/dist/Types/StatusPage/SearchEngineIndexing.js +55 -0
- package/build/dist/Types/StatusPage/SearchEngineIndexing.js.map +1 -0
- package/build/dist/Types/Telemetry/ResourceEntityFacet.js +156 -0
- package/build/dist/Types/Telemetry/ResourceEntityFacet.js.map +1 -0
- package/build/dist/Types/Text.js +82 -17
- package/build/dist/Types/Text.js.map +1 -1
- package/build/dist/UI/Components/Button/Button.js +22 -14
- package/build/dist/UI/Components/Button/Button.js.map +1 -1
- package/build/dist/UI/Components/CardSelect/CardSelect.js +360 -40
- package/build/dist/UI/Components/CardSelect/CardSelect.js.map +1 -1
- package/build/dist/UI/Components/CodeBlock/CodeBlock.js +35 -3
- package/build/dist/UI/Components/CodeBlock/CodeBlock.js.map +1 -1
- package/build/dist/UI/Components/CodeBlock/LanguageRegistry.js +57 -0
- package/build/dist/UI/Components/CodeBlock/LanguageRegistry.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js +439 -0
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/PaletteFilter.js +135 -0
- package/build/dist/UI/Components/CommandPalette/PaletteFilter.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/PaletteRow.js +83 -0
- package/build/dist/UI/Components/CommandPalette/PaletteRow.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/RecentCommands.js +47 -0
- package/build/dist/UI/Components/CommandPalette/RecentCommands.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/Types.js +2 -0
- package/build/dist/UI/Components/CommandPalette/Types.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/UseProviderSearch.js +88 -0
- package/build/dist/UI/Components/CommandPalette/UseProviderSearch.js.map +1 -0
- package/build/dist/UI/Components/Dropdown/Dropdown.js +6 -1
- package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
- package/build/dist/UI/Components/EmptyState/EmptyState.js +1 -1
- package/build/dist/UI/Components/EmptyState/EmptyState.js.map +1 -1
- package/build/dist/UI/Components/Feed/FeedItem.js +1 -1
- package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
- package/build/dist/UI/Components/Footer/Footer.js +7 -4
- package/build/dist/UI/Components/Footer/Footer.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/List/List.js +19 -5
- package/build/dist/UI/Components/List/List.js.map +1 -1
- package/build/dist/UI/Components/List/ListSkeleton.js +21 -0
- package/build/dist/UI/Components/List/ListSkeleton.js.map +1 -0
- package/build/dist/UI/Components/Loader/PageLoader.js +15 -5
- package/build/dist/UI/Components/Loader/PageLoader.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +16 -3
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/LazyMarkdownViewer.js +13 -1
- package/build/dist/UI/Components/Markdown.tsx/LazyMarkdownViewer.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +52 -25
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
- package/build/dist/UI/Components/MasterPage/MasterPage.js +10 -2
- package/build/dist/UI/Components/MasterPage/MasterPage.js.map +1 -1
- package/build/dist/UI/Components/Modal/Modal.js +2 -2
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/useCustomFieldColumns.js +9 -2
- package/build/dist/UI/Components/ModelTable/useCustomFieldColumns.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js +32 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBar.js +5 -1
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js +29 -5
- package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js +23 -1
- package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js.map +1 -1
- package/build/dist/UI/Components/SideOver/SideOver.js +23 -2
- package/build/dist/UI/Components/SideOver/SideOver.js.map +1 -1
- package/build/dist/UI/Components/Skeleton/Skeleton.js +23 -0
- package/build/dist/UI/Components/Skeleton/Skeleton.js.map +1 -0
- package/build/dist/UI/Components/Table/Table.js +35 -24
- package/build/dist/UI/Components/Table/Table.js.map +1 -1
- package/build/dist/UI/Components/Table/TableSkeletonRows.js +52 -0
- package/build/dist/UI/Components/Table/TableSkeletonRows.js.map +1 -0
- package/build/dist/UI/Components/Tabs/Tab.js +1 -1
- package/build/dist/UI/Components/Tabs/Tab.js.map +1 -1
- package/build/dist/UI/Components/Toast/Toast.js +77 -23
- package/build/dist/UI/Components/Toast/Toast.js.map +1 -1
- package/build/dist/UI/Components/Toast/ToastInit.js +37 -15
- package/build/dist/UI/Components/Toast/ToastInit.js.map +1 -1
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +18 -9
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/ModelListCache.js +126 -0
- package/build/dist/UI/Utils/ModelListCache.js.map +1 -0
- package/build/dist/UI/Utils/Project.js +24 -1
- package/build/dist/UI/Utils/Project.js.map +1 -1
- package/build/dist/Utils/API.js +6 -1
- package/build/dist/Utils/API.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js +13 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +34 -7
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js +177 -0
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js.map +1 -0
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +23 -27
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -1
- package/build/dist/Utils/Telemetry/CrossSignalScope.js +44 -4
- package/build/dist/Utils/Telemetry/CrossSignalScope.js.map +1 -1
- package/jest.config.json +1 -1
- package/package.json +2 -3
- package/Server/Utils/Monitor/MonitorClusterContext.ts +0 -182
- package/Tests/__mocks__/otpauth.js +0 -30
- package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js +0 -141
- package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js.map +0 -1
package/Server/Utils/Logger.ts
CHANGED
|
@@ -5,6 +5,12 @@ import { SeverityNumber } from "@opentelemetry/api-logs";
|
|
|
5
5
|
import Exception from "../../Types/Exception/Exception";
|
|
6
6
|
import { JSONObject } from "../../Types/JSON";
|
|
7
7
|
import ConfigLogLevel from "../Types/ConfigLogLevel";
|
|
8
|
+
import {
|
|
9
|
+
REDACTED,
|
|
10
|
+
isSensitiveLogKey,
|
|
11
|
+
redactLogString,
|
|
12
|
+
redactLogValue,
|
|
13
|
+
} from "./LogRedaction";
|
|
8
14
|
|
|
9
15
|
export type LogBody = string | JSONObject | Exception | Error | unknown;
|
|
10
16
|
|
|
@@ -68,9 +74,10 @@ export default class logger {
|
|
|
68
74
|
private static readonly recentLogTrimSlack: number = 256;
|
|
69
75
|
private static readonly maxRecentLogMessageLength: number = 4000;
|
|
70
76
|
|
|
77
|
+
// `body` has already been through redactBody -- see the level methods.
|
|
71
78
|
private static record(level: string, body: LogBody): void {
|
|
72
79
|
try {
|
|
73
|
-
const message: string = this.
|
|
80
|
+
const message: string = this.serializeRedactedBody(body);
|
|
74
81
|
|
|
75
82
|
this.recentLogs.push({
|
|
76
83
|
time: new Date().toISOString(),
|
|
@@ -114,13 +121,71 @@ export default class logger {
|
|
|
114
121
|
return LogLevel;
|
|
115
122
|
}
|
|
116
123
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
124
|
+
/*
|
|
125
|
+
* Turns a body into a redacted copy, once, before it is handed to any sink.
|
|
126
|
+
* Every level method calls this and then passes the RESULT to console, to
|
|
127
|
+
* the recent-log buffer and to telemetry, so a log record is redacted a
|
|
128
|
+
* single time no matter how many places it ends up in.
|
|
129
|
+
*
|
|
130
|
+
* Objects come back as plain redacted copies, so console keeps printing them
|
|
131
|
+
* as objects rather than as a JSON string.
|
|
132
|
+
*
|
|
133
|
+
* Errors are special-cased: when nothing in the message or the stack needed
|
|
134
|
+
* redacting -- the overwhelmingly common case -- the original Error is
|
|
135
|
+
* returned untouched, so console still renders a real stack trace.
|
|
136
|
+
*/
|
|
137
|
+
private static redactBody(body: LogBody): LogBody {
|
|
138
|
+
try {
|
|
139
|
+
if (typeof body === "string") {
|
|
140
|
+
return redactLogString(body);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (body instanceof Exception || body instanceof Error) {
|
|
144
|
+
const originalStack: string = body.stack || "";
|
|
145
|
+
const message: string = redactLogString(body.message);
|
|
146
|
+
const stack: string = redactLogString(originalStack);
|
|
147
|
+
|
|
148
|
+
if (message === body.message && stack === originalStack) {
|
|
149
|
+
return body;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return stack || `${body.name}: ${message}`;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
return redactLogValue(body) as LogBody;
|
|
156
|
+
} catch {
|
|
157
|
+
// Never pass on a body we could not prove was redacted.
|
|
158
|
+
return REDACTED;
|
|
122
159
|
}
|
|
123
|
-
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// Serialization only. The body must already have been through redactBody.
|
|
163
|
+
private static serializeRedactedBody(body: LogBody): string {
|
|
164
|
+
try {
|
|
165
|
+
if (typeof body === "string") {
|
|
166
|
+
return body;
|
|
167
|
+
} else if (body instanceof Exception || body instanceof Error) {
|
|
168
|
+
return body.message;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/*
|
|
172
|
+
* redactBody swept every string inside this copy already, so stringifying
|
|
173
|
+
* it needs no second textual pass.
|
|
174
|
+
*/
|
|
175
|
+
const serialized: string | undefined = JSON.stringify(body);
|
|
176
|
+
|
|
177
|
+
return serialized === undefined ? "" : serialized;
|
|
178
|
+
} catch {
|
|
179
|
+
return REDACTED;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/*
|
|
184
|
+
* Redacts and serializes in one step, for callers outside the level methods
|
|
185
|
+
* that hold a raw body.
|
|
186
|
+
*/
|
|
187
|
+
public static serializeLogBody(body: LogBody): string {
|
|
188
|
+
return this.serializeRedactedBody(this.redactBody(body));
|
|
124
189
|
}
|
|
125
190
|
|
|
126
191
|
private static sanitizeAttributes(
|
|
@@ -136,7 +201,16 @@ export default class logger {
|
|
|
136
201
|
for (const key in attributes) {
|
|
137
202
|
const value: string | number | boolean | undefined = attributes[key];
|
|
138
203
|
|
|
139
|
-
if (value
|
|
204
|
+
if (value === undefined || value === null) {
|
|
205
|
+
continue;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// Attributes are a log sink too, and they travel to telemetry verbatim.
|
|
209
|
+
if (isSensitiveLogKey(key, value)) {
|
|
210
|
+
sanitized[key] = REDACTED;
|
|
211
|
+
} else if (typeof value === "string") {
|
|
212
|
+
sanitized[key] = redactLogString(value);
|
|
213
|
+
} else {
|
|
140
214
|
sanitized[key] = value;
|
|
141
215
|
}
|
|
142
216
|
}
|
|
@@ -151,16 +225,14 @@ export default class logger {
|
|
|
151
225
|
const logLevel: ConfigLogLevel = this.getLogLevel();
|
|
152
226
|
|
|
153
227
|
if (logLevel === ConfigLogLevel.DEBUG || logLevel === ConfigLogLevel.INFO) {
|
|
228
|
+
const body: LogBody = this.redactBody(message);
|
|
229
|
+
|
|
154
230
|
// eslint-disable-next-line no-console
|
|
155
|
-
console.info(
|
|
231
|
+
console.info(body);
|
|
156
232
|
|
|
157
|
-
this.record("INFO",
|
|
233
|
+
this.record("INFO", body);
|
|
158
234
|
|
|
159
|
-
this.
|
|
160
|
-
body: message,
|
|
161
|
-
severityNumber: SeverityNumber.INFO,
|
|
162
|
-
attributes,
|
|
163
|
-
});
|
|
235
|
+
this.emitRedacted(body, SeverityNumber.INFO, attributes);
|
|
164
236
|
}
|
|
165
237
|
}
|
|
166
238
|
|
|
@@ -173,16 +245,14 @@ export default class logger {
|
|
|
173
245
|
logLevel === ConfigLogLevel.WARN ||
|
|
174
246
|
logLevel === ConfigLogLevel.ERROR
|
|
175
247
|
) {
|
|
248
|
+
const body: LogBody = this.redactBody(message);
|
|
249
|
+
|
|
176
250
|
// eslint-disable-next-line no-console
|
|
177
|
-
console.error(
|
|
251
|
+
console.error(body);
|
|
178
252
|
|
|
179
|
-
this.record("ERROR",
|
|
253
|
+
this.record("ERROR", body);
|
|
180
254
|
|
|
181
|
-
this.
|
|
182
|
-
body: message,
|
|
183
|
-
severityNumber: SeverityNumber.ERROR,
|
|
184
|
-
attributes,
|
|
185
|
-
});
|
|
255
|
+
this.emitRedacted(body, SeverityNumber.ERROR, attributes);
|
|
186
256
|
}
|
|
187
257
|
}
|
|
188
258
|
|
|
@@ -194,16 +264,14 @@ export default class logger {
|
|
|
194
264
|
logLevel === ConfigLogLevel.INFO ||
|
|
195
265
|
logLevel === ConfigLogLevel.WARN
|
|
196
266
|
) {
|
|
267
|
+
const body: LogBody = this.redactBody(message);
|
|
268
|
+
|
|
197
269
|
// eslint-disable-next-line no-console
|
|
198
|
-
console.warn(
|
|
270
|
+
console.warn(body);
|
|
199
271
|
|
|
200
|
-
this.record("WARN",
|
|
272
|
+
this.record("WARN", body);
|
|
201
273
|
|
|
202
|
-
this.
|
|
203
|
-
body: message,
|
|
204
|
-
severityNumber: SeverityNumber.WARN,
|
|
205
|
-
attributes,
|
|
206
|
-
});
|
|
274
|
+
this.emitRedacted(body, SeverityNumber.WARN, attributes);
|
|
207
275
|
}
|
|
208
276
|
}
|
|
209
277
|
|
|
@@ -211,16 +279,14 @@ export default class logger {
|
|
|
211
279
|
const logLevel: ConfigLogLevel = this.getLogLevel();
|
|
212
280
|
|
|
213
281
|
if (logLevel === ConfigLogLevel.DEBUG) {
|
|
282
|
+
const body: LogBody = this.redactBody(message);
|
|
283
|
+
|
|
214
284
|
// eslint-disable-next-line no-console
|
|
215
|
-
console.debug(
|
|
285
|
+
console.debug(body);
|
|
216
286
|
|
|
217
|
-
this.record("DEBUG",
|
|
287
|
+
this.record("DEBUG", body);
|
|
218
288
|
|
|
219
|
-
this.
|
|
220
|
-
body: message,
|
|
221
|
-
severityNumber: SeverityNumber.DEBUG,
|
|
222
|
-
attributes,
|
|
223
|
-
});
|
|
289
|
+
this.emitRedacted(body, SeverityNumber.DEBUG, attributes);
|
|
224
290
|
}
|
|
225
291
|
}
|
|
226
292
|
|
|
@@ -229,6 +295,19 @@ export default class logger {
|
|
|
229
295
|
severityNumber: SeverityNumber;
|
|
230
296
|
attributes?: LogAttributes | undefined;
|
|
231
297
|
}): void {
|
|
298
|
+
this.emitRedacted(
|
|
299
|
+
this.redactBody(data.body),
|
|
300
|
+
data.severityNumber,
|
|
301
|
+
data.attributes,
|
|
302
|
+
);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
// `body` must already have been through redactBody.
|
|
306
|
+
private static emitRedacted(
|
|
307
|
+
body: LogBody,
|
|
308
|
+
severityNumber: SeverityNumber,
|
|
309
|
+
attributes?: LogAttributes | undefined,
|
|
310
|
+
): void {
|
|
232
311
|
try {
|
|
233
312
|
const logger: TelemetryLogger | null = OneUptimeTelemetry.getLogger();
|
|
234
313
|
|
|
@@ -243,7 +322,7 @@ export default class logger {
|
|
|
243
322
|
*/
|
|
244
323
|
const mergedAttributes: LogAttributes = {
|
|
245
324
|
...TelemetryContext.getAttributes(),
|
|
246
|
-
...(
|
|
325
|
+
...(attributes || {}),
|
|
247
326
|
};
|
|
248
327
|
|
|
249
328
|
const sanitizedAttributes:
|
|
@@ -251,8 +330,8 @@ export default class logger {
|
|
|
251
330
|
| undefined = this.sanitizeAttributes(mergedAttributes);
|
|
252
331
|
|
|
253
332
|
logger.emit({
|
|
254
|
-
body: this.
|
|
255
|
-
severityNumber:
|
|
333
|
+
body: this.serializeRedactedBody(body),
|
|
334
|
+
severityNumber: severityNumber,
|
|
256
335
|
...(sanitizedAttributes ? { attributes: sanitizedAttributes } : {}),
|
|
257
336
|
});
|
|
258
337
|
} catch {
|
|
@@ -264,16 +343,14 @@ export default class logger {
|
|
|
264
343
|
const logLevel: ConfigLogLevel = this.getLogLevel();
|
|
265
344
|
|
|
266
345
|
if (logLevel === ConfigLogLevel.DEBUG) {
|
|
346
|
+
const body: LogBody = this.redactBody(message);
|
|
347
|
+
|
|
267
348
|
// eslint-disable-next-line no-console
|
|
268
|
-
console.trace(
|
|
349
|
+
console.trace(body);
|
|
269
350
|
|
|
270
|
-
this.record("TRACE",
|
|
351
|
+
this.record("TRACE", body);
|
|
271
352
|
|
|
272
|
-
this.
|
|
273
|
-
body: message,
|
|
274
|
-
severityNumber: SeverityNumber.DEBUG,
|
|
275
|
-
attributes,
|
|
276
|
-
});
|
|
353
|
+
this.emitRedacted(body, SeverityNumber.DEBUG, attributes);
|
|
277
354
|
}
|
|
278
355
|
}
|
|
279
356
|
}
|
|
@@ -160,36 +160,33 @@ export default class IncomingRequestCriteria {
|
|
|
160
160
|
}
|
|
161
161
|
|
|
162
162
|
if (input.criteriaFilter.checkOn === CheckOn.RequestBody) {
|
|
163
|
-
let
|
|
163
|
+
let requestBody: string | JSONObject | undefined = (
|
|
164
164
|
input.dataToProcess as IncomingMonitorRequest
|
|
165
165
|
).requestBody;
|
|
166
166
|
|
|
167
|
-
if (
|
|
168
|
-
|
|
167
|
+
if (requestBody && typeof requestBody === Typeof.Object) {
|
|
168
|
+
requestBody = JSON.stringify(requestBody);
|
|
169
169
|
}
|
|
170
170
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
171
|
+
/*
|
|
172
|
+
* A request that carried no body is an empty body, not an unknown one.
|
|
173
|
+
* Normalising to "" (the same thing IncomingEmailCriteria does for the
|
|
174
|
+
* email fields) is what lets a "Not Contains" filter match a bodiless
|
|
175
|
+
* heartbeat ping - the default online criteria for this monitor type.
|
|
176
|
+
* "Contains" is unaffected: "" contains nothing.
|
|
177
|
+
*/
|
|
178
|
+
const body: string = (requestBody as string | undefined) || "";
|
|
174
179
|
|
|
175
180
|
// contains
|
|
176
181
|
if (input.criteriaFilter.filterType === FilterType.Contains) {
|
|
177
|
-
if (
|
|
178
|
-
value &&
|
|
179
|
-
responseBody &&
|
|
180
|
-
(responseBody as string).includes(value as string)
|
|
181
|
-
) {
|
|
182
|
+
if (value && body.includes(value as string)) {
|
|
182
183
|
return `Request body contains ${value}.`;
|
|
183
184
|
}
|
|
184
185
|
return null;
|
|
185
186
|
}
|
|
186
187
|
|
|
187
188
|
if (input.criteriaFilter.filterType === FilterType.NotContains) {
|
|
188
|
-
if (
|
|
189
|
-
value &&
|
|
190
|
-
responseBody &&
|
|
191
|
-
!(responseBody as string).includes(value as string)
|
|
192
|
-
) {
|
|
189
|
+
if (value && !body.includes(value as string)) {
|
|
193
190
|
return `Request body does not contain ${value}.`;
|
|
194
191
|
}
|
|
195
192
|
return null;
|
|
@@ -78,16 +78,8 @@ export default class ServerMonitorCriteria {
|
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
if (input.criteriaFilter.checkOn === CheckOn.IsValidCertificate) {
|
|
81
|
-
const isValidCertificate: boolean =
|
|
82
|
-
|
|
83
|
-
dataToProcess.isOnline &&
|
|
84
|
-
sslResponse.expiresAt &&
|
|
85
|
-
!sslResponse.isSelfSigned &&
|
|
86
|
-
OneUptimeDate.isAfter(
|
|
87
|
-
sslResponse.expiresAt,
|
|
88
|
-
OneUptimeDate.getCurrentDate(),
|
|
89
|
-
),
|
|
90
|
-
);
|
|
81
|
+
const isValidCertificate: boolean =
|
|
82
|
+
ServerMonitorCriteria.isValidCertificate(dataToProcess);
|
|
91
83
|
|
|
92
84
|
const isTrue: boolean =
|
|
93
85
|
input.criteriaFilter.filterType === FilterType.True;
|
|
@@ -100,7 +92,7 @@ export default class ServerMonitorCriteria {
|
|
|
100
92
|
}
|
|
101
93
|
|
|
102
94
|
if (!isValidCertificate && isFalse) {
|
|
103
|
-
return
|
|
95
|
+
return ServerMonitorCriteria.invalidCertificateReason(dataToProcess);
|
|
104
96
|
}
|
|
105
97
|
}
|
|
106
98
|
|
|
@@ -149,18 +141,19 @@ export default class ServerMonitorCriteria {
|
|
|
149
141
|
}
|
|
150
142
|
|
|
151
143
|
if (input.criteriaFilter.checkOn === CheckOn.IsNotAValidCertificate) {
|
|
144
|
+
/*
|
|
145
|
+
* The exact complement of IsValidCertificate, by construction.
|
|
146
|
+
*
|
|
147
|
+
* These two used to be computed independently, and both came out
|
|
148
|
+
* false whenever expiresAt was missing or unparseable - so a
|
|
149
|
+
* certificate the probe could not fully read satisfied NEITHER
|
|
150
|
+
* "valid" nor "not valid", every criterion went unmatched, and the
|
|
151
|
+
* monitor silently stayed at its default status. Deriving one from
|
|
152
|
+
* the other makes that state unreachable.
|
|
153
|
+
*/
|
|
152
154
|
const isNotValid: boolean =
|
|
153
|
-
!
|
|
154
|
-
|
|
155
|
-
Boolean(
|
|
156
|
-
sslResponse &&
|
|
157
|
-
sslResponse.expiresAt &&
|
|
158
|
-
(sslResponse.isSelfSigned ||
|
|
159
|
-
OneUptimeDate.isBefore(
|
|
160
|
-
sslResponse.expiresAt,
|
|
161
|
-
OneUptimeDate.getCurrentDate(),
|
|
162
|
-
)),
|
|
163
|
-
);
|
|
155
|
+
!ServerMonitorCriteria.isValidCertificate(dataToProcess);
|
|
156
|
+
|
|
164
157
|
const isTrue: boolean =
|
|
165
158
|
input.criteriaFilter.filterType === FilterType.True;
|
|
166
159
|
|
|
@@ -168,7 +161,7 @@ export default class ServerMonitorCriteria {
|
|
|
168
161
|
input.criteriaFilter.filterType === FilterType.False;
|
|
169
162
|
|
|
170
163
|
if (isNotValid && isTrue) {
|
|
171
|
-
return
|
|
164
|
+
return ServerMonitorCriteria.invalidCertificateReason(dataToProcess);
|
|
172
165
|
}
|
|
173
166
|
|
|
174
167
|
if (!isNotValid && isFalse) {
|
|
@@ -230,4 +223,82 @@ export default class ServerMonitorCriteria {
|
|
|
230
223
|
|
|
231
224
|
return null;
|
|
232
225
|
}
|
|
226
|
+
|
|
227
|
+
/*
|
|
228
|
+
* The single source of truth for "is this certificate trustworthy",
|
|
229
|
+
* shared by IsValidCertificate and IsNotAValidCertificate so the two can
|
|
230
|
+
* never both be false for the same response.
|
|
231
|
+
*
|
|
232
|
+
* The probe now records the strict-TLS verdict explicitly on
|
|
233
|
+
* sslResponse.isValidCertificate. Responses written before that field
|
|
234
|
+
* existed (rows already in MonitorProbe.lastMonitoringLog, and any probe
|
|
235
|
+
* still running an older build) do not carry it, so the pre-existing
|
|
236
|
+
* heuristic is kept as the fallback rather than treating those as
|
|
237
|
+
* invalid and flipping healthy monitors to Down on upgrade.
|
|
238
|
+
*/
|
|
239
|
+
private static isValidCertificate(
|
|
240
|
+
dataToProcess: ProbeMonitorResponse,
|
|
241
|
+
): boolean {
|
|
242
|
+
const sslResponse: SslMonitorResponse | undefined =
|
|
243
|
+
dataToProcess.sslResponse;
|
|
244
|
+
|
|
245
|
+
if (!sslResponse || !dataToProcess.isOnline) {
|
|
246
|
+
return false;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
if (sslResponse.isValidCertificate !== undefined) {
|
|
250
|
+
return Boolean(sslResponse.isValidCertificate);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// Legacy payload: fall back to what could be inferred before.
|
|
254
|
+
return Boolean(
|
|
255
|
+
sslResponse.expiresAt &&
|
|
256
|
+
!sslResponse.isSelfSigned &&
|
|
257
|
+
OneUptimeDate.isAfter(
|
|
258
|
+
sslResponse.expiresAt,
|
|
259
|
+
OneUptimeDate.getCurrentDate(),
|
|
260
|
+
),
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/*
|
|
265
|
+
* Names WHY the certificate is not trustworthy. The root cause is what
|
|
266
|
+
* reaches the incident and the person paged by it, so "SSL certificate is
|
|
267
|
+
* not valid" on its own is not good enough when the probe knows it was a
|
|
268
|
+
* hostname mismatch.
|
|
269
|
+
*/
|
|
270
|
+
private static invalidCertificateReason(
|
|
271
|
+
dataToProcess: ProbeMonitorResponse,
|
|
272
|
+
): string {
|
|
273
|
+
const sslResponse: SslMonitorResponse | undefined =
|
|
274
|
+
dataToProcess.sslResponse;
|
|
275
|
+
|
|
276
|
+
if (!dataToProcess.isOnline) {
|
|
277
|
+
return "SSL certificate could not be checked because the endpoint is not reachable.";
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
if (!sslResponse) {
|
|
281
|
+
return "SSL certificate is not valid.";
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
if (sslResponse.certificateValidationError) {
|
|
285
|
+
return `SSL certificate is not valid: ${sslResponse.certificateValidationError}`;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
if (sslResponse.isSelfSigned) {
|
|
289
|
+
return "SSL certificate is not valid: the certificate is self signed.";
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
if (
|
|
293
|
+
sslResponse.expiresAt &&
|
|
294
|
+
OneUptimeDate.isBefore(
|
|
295
|
+
sslResponse.expiresAt,
|
|
296
|
+
OneUptimeDate.getCurrentDate(),
|
|
297
|
+
)
|
|
298
|
+
) {
|
|
299
|
+
return "SSL certificate is not valid: the certificate has expired.";
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
return "SSL certificate is not valid.";
|
|
303
|
+
}
|
|
233
304
|
}
|
|
@@ -24,11 +24,11 @@ import NetworkDeviceOwnerUserService, {
|
|
|
24
24
|
import logger, { LogAttributes } from "../Logger";
|
|
25
25
|
import CaptureSpan from "../Telemetry/CaptureSpan";
|
|
26
26
|
import DataToProcess from "./DataToProcess";
|
|
27
|
-
import
|
|
28
|
-
MonitorClusterContext,
|
|
29
|
-
} from "./MonitorClusterContext";
|
|
27
|
+
import MonitorResourceContextUtil from "./MonitorResourceContext";
|
|
30
28
|
import MonitorTemplateUtil from "./MonitorTemplateUtil";
|
|
31
|
-
import SeriesResourceLinker
|
|
29
|
+
import SeriesResourceLinker, {
|
|
30
|
+
SeriesResolvedResourceIds,
|
|
31
|
+
} from "./SeriesResourceLinker";
|
|
32
32
|
import MonitorDependencySuppression, {
|
|
33
33
|
DependencySuppressionResult,
|
|
34
34
|
} from "./MonitorDependencySuppression";
|
|
@@ -322,15 +322,17 @@ export default class MonitorAlert {
|
|
|
322
322
|
}
|
|
323
323
|
|
|
324
324
|
/*
|
|
325
|
-
*
|
|
326
|
-
*
|
|
327
|
-
*
|
|
328
|
-
*
|
|
329
|
-
*
|
|
330
|
-
*
|
|
325
|
+
* Resolve the resources this monitor's own config names — its host,
|
|
326
|
+
* cluster, fleet, telemetry services, or the resource its metric
|
|
327
|
+
* filters scope it to — once per evaluation, so every alert created
|
|
328
|
+
* below is attached to them. Series labels cannot supply this: they
|
|
329
|
+
* only exist for grouped criteria, and most monitors (every shipped
|
|
330
|
+
* Host/Docker/Podman template, all Logs/Traces/Exceptions monitors)
|
|
331
|
+
* are ungrouped. No-op, and no round-trip, for monitor types whose
|
|
332
|
+
* config names no resource.
|
|
331
333
|
*/
|
|
332
|
-
const
|
|
333
|
-
await
|
|
334
|
+
const resourceContext: SeriesResolvedResourceIds =
|
|
335
|
+
await MonitorResourceContextUtil.resolveResourceContextForMonitor({
|
|
334
336
|
monitor: input.monitor,
|
|
335
337
|
});
|
|
336
338
|
|
|
@@ -556,21 +558,22 @@ export default class MonitorAlert {
|
|
|
556
558
|
model: alert,
|
|
557
559
|
seriesLabels,
|
|
558
560
|
projectId: input.monitor.projectId!,
|
|
561
|
+
monitorType: input.monitor.monitorType,
|
|
559
562
|
});
|
|
560
563
|
}
|
|
561
564
|
|
|
562
565
|
/*
|
|
563
|
-
* Deterministic
|
|
564
|
-
*
|
|
565
|
-
*
|
|
566
|
-
*
|
|
567
|
-
*
|
|
568
|
-
*
|
|
569
|
-
*
|
|
566
|
+
* Deterministic resource link from the monitor's step config
|
|
567
|
+
* (resolved once above). For most monitor types this — not the
|
|
568
|
+
* label path above — is what makes the per-resource Activity
|
|
569
|
+
* tabs and badge counts see monitor-created alerts, because
|
|
570
|
+
* their criteria are ungrouped and emit no series labels at
|
|
571
|
+
* all. Runs for both grouped and ungrouped alerts, and merges
|
|
572
|
+
* with whatever the labels resolved.
|
|
570
573
|
*/
|
|
571
|
-
SeriesResourceLinker.
|
|
574
|
+
SeriesResourceLinker.attachResolvedResources({
|
|
572
575
|
model: alert,
|
|
573
|
-
|
|
576
|
+
resolved: resourceContext,
|
|
574
577
|
});
|
|
575
578
|
|
|
576
579
|
alert.onCallDutyPolicies =
|
|
@@ -37,10 +37,10 @@ import MonitorSummarySnapshot from "../../../Types/Monitor/MonitorSummarySnapsho
|
|
|
37
37
|
import MonitorSummarySnapshotUtil from "../../../Utils/Monitor/MonitorSummarySnapshotUtil";
|
|
38
38
|
import { IncidentMemberRoleAssignment } from "../../../Types/Monitor/CriteriaIncident";
|
|
39
39
|
import { PerSeriesCriteriaMatch } from "../../../Types/Probe/ProbeApiIngestResponse";
|
|
40
|
-
import
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
import MonitorResourceContextUtil from "./MonitorResourceContext";
|
|
41
|
+
import SeriesResourceLinker, {
|
|
42
|
+
SeriesResolvedResourceIds,
|
|
43
|
+
} from "./SeriesResourceLinker";
|
|
44
44
|
|
|
45
45
|
export default class MonitorIncident {
|
|
46
46
|
@CaptureSpan()
|
|
@@ -364,15 +364,17 @@ export default class MonitorIncident {
|
|
|
364
364
|
}
|
|
365
365
|
|
|
366
366
|
/*
|
|
367
|
-
*
|
|
368
|
-
*
|
|
369
|
-
*
|
|
370
|
-
*
|
|
371
|
-
*
|
|
372
|
-
*
|
|
367
|
+
* Resolve the resources this monitor's own config names — its host,
|
|
368
|
+
* cluster, fleet, telemetry services, or the resource its metric
|
|
369
|
+
* filters scope it to — once per evaluation, so every incident
|
|
370
|
+
* created below is attached to them. Series labels cannot supply
|
|
371
|
+
* this: they only exist for grouped criteria, and most monitors
|
|
372
|
+
* (every shipped Host/Docker/Podman template, all Logs/Traces/
|
|
373
|
+
* Exceptions monitors) are ungrouped. No-op, and no round-trip, for
|
|
374
|
+
* monitor types whose config names no resource.
|
|
373
375
|
*/
|
|
374
|
-
const
|
|
375
|
-
await
|
|
376
|
+
const resourceContext: SeriesResolvedResourceIds =
|
|
377
|
+
await MonitorResourceContextUtil.resolveResourceContextForMonitor({
|
|
376
378
|
monitor: input.monitor,
|
|
377
379
|
});
|
|
378
380
|
|
|
@@ -656,19 +658,20 @@ export default class MonitorIncident {
|
|
|
656
658
|
model: incident,
|
|
657
659
|
seriesLabels,
|
|
658
660
|
projectId: input.monitor.projectId!,
|
|
661
|
+
monitorType: input.monitor.monitorType,
|
|
659
662
|
});
|
|
660
663
|
}
|
|
661
664
|
|
|
662
665
|
/*
|
|
663
|
-
* Deterministic
|
|
664
|
-
*
|
|
665
|
-
*
|
|
666
|
-
*
|
|
666
|
+
* Deterministic resource link from the monitor's step config
|
|
667
|
+
* (resolved once above). Runs for both grouped and ungrouped
|
|
668
|
+
* incidents and merges with anything the series-label path
|
|
669
|
+
* resolved, so the per-resource Activity tabs always see
|
|
667
670
|
* monitor-created incidents.
|
|
668
671
|
*/
|
|
669
|
-
SeriesResourceLinker.
|
|
672
|
+
SeriesResourceLinker.attachResolvedResources({
|
|
670
673
|
model: incident,
|
|
671
|
-
|
|
674
|
+
resolved: resourceContext,
|
|
672
675
|
});
|
|
673
676
|
|
|
674
677
|
incident.onCallDutyPolicies =
|
|
@@ -636,7 +636,16 @@ export default class MonitorResourceUtil {
|
|
|
636
636
|
}
|
|
637
637
|
}
|
|
638
638
|
|
|
639
|
-
|
|
639
|
+
/*
|
|
640
|
+
* The step this result was actually produced for. A probe result carries
|
|
641
|
+
* the monitorStepId it ran, and a monitor can have several steps whose
|
|
642
|
+
* criteria differ - so the step must be looked up, not assumed to be the
|
|
643
|
+
* first one. The lookup used to be performed and its result thrown away,
|
|
644
|
+
* which silently evaluated every result against step 0's criteria and fed
|
|
645
|
+
* step 0's id into checkProbeAgreement (so agreement compared this
|
|
646
|
+
* result against other probes' logs for the wrong step).
|
|
647
|
+
*/
|
|
648
|
+
let monitorStep: MonitorStep | undefined =
|
|
640
649
|
monitorSteps.data.monitorStepsInstanceArray[0];
|
|
641
650
|
|
|
642
651
|
logger.debug(
|
|
@@ -644,14 +653,25 @@ export default class MonitorResourceUtil {
|
|
|
644
653
|
);
|
|
645
654
|
|
|
646
655
|
if ((dataToProcess as ProbeMonitorResponse).monitorStepId) {
|
|
647
|
-
|
|
648
|
-
(
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
656
|
+
const ingestedMonitorStep: MonitorStep | undefined =
|
|
657
|
+
monitorSteps.data.monitorStepsInstanceArray.find(
|
|
658
|
+
(step: MonitorStep) => {
|
|
659
|
+
return (
|
|
660
|
+
step.id.toString() ===
|
|
661
|
+
(dataToProcess as ProbeMonitorResponse).monitorStepId.toString()
|
|
662
|
+
);
|
|
663
|
+
},
|
|
664
|
+
);
|
|
665
|
+
|
|
666
|
+
/*
|
|
667
|
+
* An id that matches no step is stale - the step was deleted after the
|
|
668
|
+
* probe was scheduled. Keep the existing behaviour there and fall back
|
|
669
|
+
* to the first step rather than dropping the result.
|
|
670
|
+
*/
|
|
671
|
+
if (ingestedMonitorStep) {
|
|
672
|
+
monitorStep = ingestedMonitorStep;
|
|
673
|
+
}
|
|
674
|
+
|
|
655
675
|
logger.debug(
|
|
656
676
|
`Found Monitor Step ID: ${(dataToProcess as ProbeMonitorResponse).monitorStepId}`,
|
|
657
677
|
);
|