@oneuptime/common 12.0.33 → 12.0.34
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/AnalyticsModels/RumSession.ts +117 -1
- package/Models/AnalyticsModels/RumSessionChunk.ts +13 -0
- package/Models/DatabaseModels/AlertCustomField.ts +77 -3
- package/Models/DatabaseModels/ApiKeyPermission.ts +3 -27
- package/Models/DatabaseModels/IncidentCustomField.ts +77 -3
- package/Models/DatabaseModels/InventoryItemCustomField.ts +77 -3
- package/Models/DatabaseModels/MonitorCustomField.ts +77 -3
- package/Models/DatabaseModels/OnCallDutyPolicyCustomField.ts +77 -3
- package/Models/DatabaseModels/RumApplication.ts +6 -6
- package/Models/DatabaseModels/ScheduledMaintenanceCustomField.ts +77 -3
- package/Models/DatabaseModels/StatusPageCustomField.ts +77 -3
- package/Models/DatabaseModels/TeamCustomField.ts +77 -3
- package/Models/DatabaseModels/TeamMember.ts +0 -9
- package/Models/DatabaseModels/TeamMemberCustomField.ts +77 -3
- package/Models/DatabaseModels/TeamPermission.ts +3 -24
- package/Models/DatabaseModels/TelemetryIngestionKey.ts +260 -0
- package/Models/DatabaseModels/UserTelegram.ts +0 -4
- package/Scripts/benchmark-fanin-capacity.js +181 -0
- package/Server/API/TelemetryAPI.ts +1284 -164
- package/Server/API/UserNotificationSettingAPI.ts +55 -0
- package/Server/API/UserTelegramAPI.ts +48 -4
- package/Server/EnvironmentConfig.ts +35 -2
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791300000000-AddTelemetryIngestionKeyType.ts +91 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.ts +67 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.ts +139 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.ts +121 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
- package/Server/Infrastructure/QueueWorker.ts +20 -14
- package/Server/Infrastructure/Semaphore.ts +2 -0
- package/Server/Middleware/TelemetryIngest.ts +453 -7
- package/Server/Services/AccessTokenService.ts +1 -0
- package/Server/Services/AlertCustomFieldService.ts +98 -0
- package/Server/Services/AlertService.ts +37 -0
- package/Server/Services/ApiKeyPermissionService.ts +461 -29
- package/Server/Services/CustomFieldMappingService.ts +879 -0
- package/Server/Services/GlobalConfigService.ts +194 -0
- package/Server/Services/IncidentCustomFieldService.ts +98 -0
- package/Server/Services/IncidentService.ts +35 -0
- package/Server/Services/MetricService.ts +194 -0
- package/Server/Services/MonitorService.ts +32 -0
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +78 -25
- package/Server/Services/ProjectService.ts +22 -0
- package/Server/Services/RoutineEmailSettingsService.ts +73 -0
- package/Server/Services/RumSessionReplayViewService.ts +104 -24
- package/Server/Services/ScheduledMaintenanceCustomFieldService.ts +98 -0
- package/Server/Services/ScheduledMaintenanceService.ts +32 -0
- package/Server/Services/TeamMemberService.ts +78 -0
- package/Server/Services/TeamPermissionService.ts +235 -3
- package/Server/Services/TelemetryIngestionKeyService.ts +722 -19
- package/Server/Services/UserNotificationSettingService.ts +34 -6
- package/Server/Services/UserTelegramService.ts +326 -5
- package/Server/Types/Database/QueryHelper.ts +2 -0
- package/Server/Utils/APIKey/AccessPermission.ts +5 -2
- package/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.ts +54 -0
- package/Server/Utils/CustomField/CustomFieldMappingRegistry.ts +415 -0
- package/Server/Utils/CustomField/CustomFieldMappingValidator.ts +335 -0
- package/Server/Utils/DataSource/EgressGuard.ts +177 -8
- package/Server/Utils/EmailRollup/EmailRollupConstants.ts +38 -5
- package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +57 -4
- package/Server/Utils/FrontendEnvironment.ts +40 -0
- package/Server/Utils/LogRedaction.ts +20 -0
- package/Server/Utils/Logger.ts +11 -0
- package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +338 -77
- package/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.ts +30 -4
- package/Server/Utils/Monitor/MonitorAlert.ts +29 -6
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +110 -15
- package/Server/Utils/Monitor/MonitorIncident.ts +22 -6
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +29 -0
- package/Server/Utils/Monitor/SeriesContextEnricher.ts +304 -0
- package/Server/Utils/SSRFProtection.ts +217 -10
- package/Server/Utils/SessionReplay/SessionReplayGateCache.ts +239 -138
- package/Server/Utils/SessionReplay/SessionReplayHealthCounters.ts +305 -0
- package/Server/Utils/SessionReplay/SessionReplayReadService.ts +1430 -289
- package/Server/Utils/StartServer.ts +2 -17
- package/Server/Utils/TelegramVerificationToken.ts +185 -0
- package/Server/Utils/Telemetry/PinServiceName.ts +197 -0
- package/Server/Utils/Telemetry/TelemetryFanInWriter.ts +38 -16
- package/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.ts +92 -0
- package/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.ts +217 -0
- package/Server/Utils/VM/VMAPI.ts +1 -0
- package/Server/Utils/VM/VMRunner.ts +975 -95
- package/Tests/App/AdminDashboard/AdminHeaderSmallScreens.test.tsx +202 -0
- package/Tests/App/Dashboard/DashboardHeaderSmallScreens.test.tsx +404 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +468 -0
- package/Tests/App/Dashboard/NotificationEmailPreferences.test.tsx +399 -0
- package/Tests/App/StatusPage/StatusPageLastUpdated.test.tsx +263 -0
- package/Tests/App/StatusPage/StatusPageOverviewLiveAndSearch.test.tsx +753 -0
- package/Tests/App/StatusPage/StatusPageResourceSearchBox.test.tsx +224 -0
- package/Tests/Models/AnalyticsModels/RumSessionReplayColumns.test.ts +262 -0
- package/Tests/Models/CustomFieldMappingColumns.test.ts +166 -0
- package/Tests/Models/DatabaseModels/SessionReplayModels.test.ts +20 -6
- package/Tests/ResponsiveVisibility.test.ts +115 -0
- package/Tests/ResponsiveVisibility.ts +183 -0
- package/Tests/Server/API/SessionReplayAPI.test.ts +1940 -216
- package/Tests/Server/API/UserNotificationSettingAPI.test.ts +186 -0
- package/Tests/Server/API/UserTelegramAPISecurity.test.ts +231 -0
- package/Tests/Server/EnvironmentConfigFrontendSecurity.test.ts +234 -0
- package/Tests/Server/Infrastructure/Postgres/CustomFieldValueMappingMigration.test.ts +202 -0
- package/Tests/Server/Infrastructure/Postgres/InventoryItemArchiveMigration.test.ts +41 -0
- package/Tests/Server/Infrastructure/Postgres/SessionReplayRecordEverySessionByDefaultMigration.test.ts +169 -0
- package/Tests/Server/Infrastructure/QueueWorkerTimeout.test.ts +210 -0
- package/Tests/Server/Infrastructure/TelemetryExporterDeploymentConfig.test.ts +130 -0
- package/Tests/Server/Middleware/ProjectAuthorizationApiKeyMiddleware.test.ts +4 -1
- package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +1163 -0
- package/Tests/Server/Middleware/TelemetryIngestTokenLog.test.ts +5 -3
- package/Tests/Server/Services/AddTelemetryIngestionKeyTypeMigration.test.ts +555 -0
- package/Tests/Server/Services/ApiKeyPermissionSecurity.test.ts +678 -0
- package/Tests/Server/Services/ApiKeyPermissionService.test.ts +276 -28
- package/Tests/Server/Services/CustomFieldDropdownOptionsColumnWidth.test.ts +431 -0
- package/Tests/Server/Services/CustomFieldMappingService.test.ts +850 -0
- package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +32 -0
- package/Tests/Server/Services/GlobalConfigService.test.ts +414 -1
- package/Tests/Server/Services/MetricRawEntityKeyPrune.test.ts +592 -0
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +226 -1
- package/Tests/Server/Services/RoutineEmailSettingsPostgres.test.ts +329 -0
- package/Tests/Server/Services/RumSessionReplayViewService.test.ts +267 -0
- package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +9 -0
- package/Tests/Server/Services/TeamMemberInviteRegistrationToken.test.ts +9 -0
- package/Tests/Server/Services/TeamPrivilegeEscalation.test.ts +834 -0
- package/Tests/Server/Services/TelemetryIngestionKeyPolicyResolution.test.ts +814 -0
- package/Tests/Server/Services/TelemetryIngestionKeyValidation.test.ts +998 -0
- package/Tests/Server/Services/UserNotificationSettingRollupRouting.test.ts +141 -0
- package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +18 -10
- package/Tests/Server/Services/UserTelegramVerificationSecurity.test.ts +688 -0
- package/Tests/Server/Utils/AI/SRE/Insights/FixRouting.test.ts +497 -0
- package/Tests/Server/Utils/AI/Toolbox/Serializer.test.ts +383 -0
- package/Tests/Server/Utils/APIKey/AccessPermission.test.ts +7 -3
- package/Tests/Server/Utils/AnalyticsDatabase/ClusterConfig.test.ts +315 -0
- package/Tests/Server/Utils/CustomField/CustomFieldMappingValidator.test.ts +437 -0
- package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +300 -11
- package/Tests/Server/Utils/EmailRollup/EmailRollupBurstWindow.test.ts +83 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerBehaviour.test.ts +1 -1
- package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerPreferences.test.ts +362 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +77 -1
- package/Tests/Server/Utils/FrontendEnvironment.test.ts +190 -0
- package/Tests/Server/Utils/LogRedaction.test.ts +26 -0
- package/Tests/Server/Utils/LoggerCredentialLeak.test.ts +23 -9
- package/Tests/Server/Utils/Monitor/Criteria/CompareCriteriaAggregation.test.ts +584 -0
- package/Tests/Server/Utils/Monitor/Criteria/IncomingRequestHeaderCriteria.test.ts +236 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +437 -0
- package/Tests/Server/Utils/Monitor/MonitorTemplateUtilSeriesContext.test.ts +176 -0
- package/Tests/Server/Utils/Monitor/SeriesContextEnricher.test.ts +356 -0
- package/Tests/Server/Utils/SSRFProtectionCloudServiceAddresses.test.ts +595 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayGateCachePolicy.test.ts +198 -1
- package/Tests/Server/Utils/SessionReplay/SessionReplayHealthCounters.test.ts +453 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayReadServiceQueries.test.ts +1378 -0
- package/Tests/Server/Utils/SessionReplayOriginAllowListRefactor.test.ts +420 -0
- package/Tests/Server/Utils/TelegramVerificationToken.test.ts +253 -0
- package/Tests/Server/Utils/Telemetry/PinServiceName.test.ts +666 -0
- package/Tests/Server/Utils/Telemetry/TelemetryFanInWriterCapacity.test.ts +458 -0
- package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +424 -0
- package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.test.ts +528 -0
- package/Tests/Server/Utils/TelemetryExporterEnvironment.test.ts +56 -0
- package/Tests/Server/Utils/VM/VMRunnerHostBridgeLatency.test.ts +74 -0
- package/Tests/Server/Utils/VM/VMRunnerPrivateNetworkWiring.test.ts +100 -7
- package/Tests/Server/Utils/VM/VMRunnerSsrf.test.ts +1176 -6
- package/Tests/Types/CustomField/CustomFieldMappingCatalog.test.ts +220 -0
- package/Tests/Types/CustomField/CustomFieldValueMapping.test.ts +348 -0
- package/Tests/Types/JSONFunctions.test.ts +260 -0
- package/Tests/Types/Monitor/CephAlertTemplates.test.ts +422 -53
- package/Tests/Types/Monitor/DockerAlertTemplates.test.ts +495 -15
- package/Tests/Types/Monitor/DockerSwarmAlertTemplates.test.ts +191 -45
- package/Tests/Types/Monitor/HostAlertTemplates.test.ts +370 -42
- package/Tests/Types/Monitor/IotAlertTemplates.test.ts +375 -20
- package/Tests/Types/Monitor/KubernetesAlertTemplates.test.ts +636 -42
- package/Tests/Types/Monitor/KubernetesMetricCatalog.test.ts +189 -0
- package/Tests/Types/Monitor/KubernetesTemplateGroupByKeys.test.ts +95 -14
- package/Tests/Types/Monitor/PodmanAlertTemplates.test.ts +190 -21
- package/Tests/Types/Monitor/ProxmoxAlertTemplates.test.ts +352 -22
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationAlertDebuggability.test.ts +363 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +93 -18
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.test.ts +259 -0
- package/Tests/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.test.ts +476 -0
- package/Tests/Types/Monitor/RumAlertTemplates.test.ts +136 -0
- package/Tests/Types/Monitor/SeriesContext/SeriesDebugHints.test.ts +661 -0
- package/Tests/Types/Monitor/SeriesContext/SeriesLabelDisplay.test.ts +507 -0
- package/Tests/Types/Monitor/ServiceAlertTemplates.test.ts +270 -0
- package/Tests/Types/Monitor/TemplateGroupByKeys.test.ts +38 -10
- package/Tests/Types/Monitor/Utils/RecommendationCriteriaAssertions.ts +102 -0
- package/Tests/Types/NotificationSetting/RoutineEmailEvents.test.ts +47 -0
- package/Tests/Types/Rum/SessionReplayApiContracts.test.ts +608 -0
- package/Tests/Types/Rum/SessionReplayCustomEvents.test.ts +434 -0
- package/Tests/Types/WebsiteRequest.test.ts +285 -3
- package/Tests/UI/Components/Charts/ChartBucketIdentity.test.ts +16 -3
- package/Tests/UI/Components/Charts/ChartTrailingBucketGap.test.ts +691 -0
- package/Tests/UI/Components/ComponentsModal.test.tsx +12 -4
- package/Tests/UI/Components/ComponentsModalUsability.test.tsx +518 -0
- package/Tests/UI/Components/CustomFields/CustomFieldsDetailMapping.test.tsx +324 -0
- package/Tests/UI/Components/CustomFields/MapFromCustomFieldInput.test.tsx +176 -0
- package/Tests/UI/Components/Graphs/DayUptimeGraph.test.tsx +484 -0
- package/Tests/UI/Components/HeaderRightRail.test.tsx +157 -0
- package/Tests/UI/Components/IconDropdownItem.test.tsx +102 -0
- package/Tests/UI/Components/JSONTablePrototypePollution.test.tsx +117 -0
- package/Tests/UI/Components/KeyboardShortcutsModal.test.tsx +214 -0
- package/Tests/UI/Components/ModelTable/ModelTableWrapContent.test.tsx +561 -0
- package/Tests/UI/Components/MonitorGraphs/UptimeBarDayModal.test.tsx +302 -0
- package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +28 -12
- package/Tests/UI/Components/ShortcutDialogGuard.test.tsx +74 -0
- package/Tests/UI/Components/StatusPage/ResourceGroupSectionAutoExpand.test.tsx +248 -0
- package/Tests/UI/Components/TableCellWrapping.test.tsx +625 -0
- package/Tests/UI/Components/TableLoadingStates.test.tsx +205 -0
- package/Tests/UI/Components/Workflow/NodePlacement.test.ts +148 -0
- package/Tests/UI/Components/Workflow/Workflow.test.tsx +981 -0
- package/Tests/UI/ConfigBrowserTelemetry.test.ts +70 -0
- package/Tests/UI/Rum/ChunkLoader.test.ts +1036 -2
- package/Tests/UI/Rum/FidelityNotices.test.ts +187 -0
- package/Tests/UI/Rum/InactivityMap.test.ts +341 -0
- package/Tests/UI/Rum/PrivacySummaryCard.test.tsx +259 -0
- package/Tests/UI/Rum/RecordingHealthCard.test.tsx +855 -0
- package/Tests/UI/Rum/RecordingHealthStrip.test.tsx +594 -0
- package/Tests/UI/Rum/ReplayCard.test.tsx +451 -0
- package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +536 -0
- package/Tests/UI/Rum/ReplayEngine.test.ts +2503 -0
- package/Tests/UI/Rum/ReplayEngineTypes.test.ts +171 -0
- package/Tests/UI/Rum/ReplayHeader.test.tsx +711 -0
- package/Tests/UI/Rum/ReplayLink.test.tsx +119 -0
- package/Tests/UI/Rum/ReplayPinControl.test.tsx +408 -0
- package/Tests/UI/Rum/ReplayPlaybackIntent.test.ts +152 -0
- package/Tests/UI/Rum/ReplayRail.test.tsx +1296 -0
- package/Tests/UI/Rum/ReplayRailDetail.test.tsx +900 -0
- package/Tests/UI/Rum/ReplayScrubber.test.tsx +763 -147
- package/Tests/UI/Rum/ReplaySignalTypes.test.ts +189 -0
- package/Tests/UI/Rum/ReplaySignals.test.ts +1579 -0
- package/Tests/UI/Rum/ReplayStage.test.tsx +396 -473
- package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +918 -0
- package/Tests/UI/Rum/ReplayTimeline.test.tsx +696 -0
- package/Tests/UI/Rum/SessionReplayEmptyState.test.tsx +499 -0
- package/Tests/UI/Rum/SessionReplaySearchBar.test.tsx +346 -0
- package/Tests/UI/Rum/SessionReplaySetupGuide.test.tsx +545 -0
- package/Tests/UI/Rum/SessionReplayTable.test.tsx +991 -0
- package/Tests/UI/Rum/TargetedCapturePanel.test.tsx +254 -0
- package/Tests/UI/Telemetry/BrowserExporterIsolation.test.ts +71 -0
- package/Tests/UI/Utils/GlobalKeyboardShortcut.test.ts +344 -0
- package/Tests/Utils/API.test.ts +308 -0
- package/Tests/Utils/HTTPResponseBodyReader.test.ts +323 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveryScanStatus.test.ts +117 -0
- package/Tests/Utils/Rum/ChunkMath.test.ts +83 -0
- package/Tests/Utils/Rum/SessionReplayHealthDiagnosis.test.ts +993 -0
- package/Tests/Utils/Rum/SessionReplayStringMap.test.ts +245 -0
- package/Tests/Utils/StatusPage/ResourceSearch.test.ts +631 -0
- package/Tests/Utils/Telemetry/OriginAllowList.test.ts +633 -0
- package/Tests/Utils/Uptime/DayUptimeGraphUtil.test.ts +461 -0
- package/Tests/Utils/ValueFormatter.test.ts +148 -0
- package/Types/CustomField/CustomFieldMappingCatalog.ts +161 -0
- package/Types/CustomField/CustomFieldMappingSourceResource.ts +19 -0
- package/Types/CustomField/CustomFieldValueMapping.ts +288 -0
- package/Types/Icon/IconProp.ts +1 -0
- package/Types/JSONFunctions.ts +189 -43
- package/Types/Monitor/CephAlertTemplates.ts +157 -195
- package/Types/Monitor/DockerAlertTemplates.ts +338 -128
- package/Types/Monitor/DockerSwarmAlertTemplates.ts +95 -112
- package/Types/Monitor/HostAlertTemplates.ts +302 -130
- package/Types/Monitor/IotAlertTemplates.ts +112 -104
- package/Types/Monitor/KubernetesAlertTemplates.ts +415 -224
- package/Types/Monitor/KubernetesMetricCatalog.ts +23 -19
- package/Types/Monitor/PodmanAlertTemplates.ts +116 -163
- package/Types/Monitor/ProxmoxAlertTemplates.ts +217 -99
- package/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.ts +98 -6
- package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +44 -7
- package/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.ts +383 -0
- package/Types/Monitor/RumAlertTemplates.ts +46 -7
- package/Types/Monitor/SeriesContext/SeriesDebugHints.ts +596 -0
- package/Types/Monitor/SeriesContext/SeriesLabelDisplay.ts +554 -0
- package/Types/Monitor/ServiceAlertTemplates.ts +98 -11
- package/Types/Monitor/UptimeHistoryLabels.ts +56 -0
- package/Types/NotificationSetting/RoutineEmailEvents.ts +30 -0
- package/Types/Rum/SessionReplay.ts +209 -0
- package/Types/Rum/SessionReplayApi.ts +722 -0
- package/Types/Rum/SessionReplayCaptureTrigger.ts +21 -12
- package/Types/Rum/SessionReplayConsentMode.ts +11 -7
- package/Types/Rum/SessionReplayCustomEvents.ts +549 -0
- package/Types/Rum/SessionReplayHealth.ts +238 -0
- package/Types/Telemetry/TelemetryIngestSurface.ts +95 -0
- package/Types/Telemetry/TelemetryIngestionKeyPolicy.ts +75 -0
- package/Types/Telemetry/TelemetryIngestionKeyType.ts +29 -0
- package/Types/WebsiteRequest.ts +85 -3
- package/UI/Components/Charts/Area/AreaChart.tsx +13 -2
- package/UI/Components/Charts/Bar/BarChart.tsx +6 -2
- package/UI/Components/Charts/Line/LineChart.tsx +13 -2
- package/UI/Components/Charts/Types/XAxis/XAxis.ts +29 -0
- package/UI/Components/Charts/Utils/DataPoint.ts +22 -3
- package/UI/Components/Charts/Utils/TimeAnnotation.ts +76 -9
- package/UI/Components/Charts/Utils/XAxis.ts +217 -0
- package/UI/Components/CustomFields/CustomFieldsDetail.tsx +143 -25
- package/UI/Components/CustomFields/MapFromCustomFieldInput.tsx +216 -0
- package/UI/Components/Graphs/DayUptimeGraph.tsx +173 -8
- package/UI/Components/Graphs/UptimeBarTooltip.tsx +22 -278
- package/UI/Components/Graphs/UptimeDaySummary.tsx +327 -0
- package/UI/Components/Header/Header.tsx +25 -9
- package/UI/Components/Header/IconDropdown/IconDropdownItem.tsx +10 -1
- package/UI/Components/Header/IconDropdown/IconDropdownMenu.tsx +6 -1
- package/UI/Components/Header/ProjectPicker/ProjectPicker.tsx +6 -1
- package/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.tsx +6 -1
- package/UI/Components/Icon/Icon.tsx +11 -0
- package/UI/Components/JSONTable/JSONTable.tsx +2 -2
- package/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.tsx +125 -0
- package/UI/Components/KeyboardShortcut/Screenshots/README.md +19 -0
- package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-command-palette.png +0 -0
- package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-dialog-dark.png +0 -0
- package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-dialog.png +0 -0
- package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-help-menu.png +0 -0
- package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-narrow.png +0 -0
- package/UI/Components/ModelTable/Column.ts +15 -0
- package/UI/Components/Monitor/SeriesDebugCommandsViewer.tsx +64 -0
- package/UI/Components/Monitor/SeriesLabelsViewer.tsx +93 -0
- package/UI/Components/MonitorGraphs/Uptime.tsx +14 -2
- package/UI/Components/MonitorGraphs/UptimeBarDayModal.tsx +63 -10
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +44 -0
- package/UI/Components/StatusPage/ResourceGroupSection.tsx +40 -0
- package/UI/Components/Table/CellClassName.ts +81 -0
- package/UI/Components/Table/TableRow.tsx +20 -14
- package/UI/Components/Table/TableSkeletonRows.tsx +9 -9
- package/UI/Components/Table/Types/Column.ts +36 -0
- package/UI/Components/Tooltip/Tooltip.tsx +11 -1
- package/UI/Components/Workflow/ComponentsModal.tsx +60 -39
- package/UI/Components/Workflow/NodePlacement.ts +57 -0
- package/UI/Components/Workflow/Workflow.tsx +47 -18
- package/UI/Config.ts +15 -33
- package/UI/Utils/GlobalKeyboardShortcut.ts +208 -0
- package/UI/Utils/Telemetry/BrowserTelemetryConfig.ts +28 -0
- package/UI/Utils/Telemetry/Telemetry.ts +10 -8
- package/Utils/API.ts +129 -3
- package/Utils/HTTPResponseBodyReader.ts +221 -0
- package/Utils/NetworkDiscovery/DiscoveryScanStatus.ts +77 -0
- package/Utils/Rum/ChunkMath.ts +106 -0
- package/Utils/Rum/SessionReplayHealth.ts +732 -0
- package/Utils/Rum/SessionReplayStringMap.ts +226 -0
- package/Utils/Schema/ModelSchema.ts +1 -0
- package/Utils/StatusPage/ResourceSearch.ts +290 -0
- package/Utils/Telemetry/OriginAllowList.ts +355 -0
- package/Utils/Uptime/DayUptimeGraphUtil.ts +205 -0
- package/Utils/ValueFormatter.ts +35 -1
- package/build/dist/Models/AnalyticsModels/RumSession.js +102 -19
- package/build/dist/Models/AnalyticsModels/RumSession.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/RumSessionChunk.js +11 -9
- package/build/dist/Models/AnalyticsModels/RumSessionChunk.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/AlertCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ApiKeyPermission.js +3 -27
- package/build/dist/Models/DatabaseModels/ApiKeyPermission.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/IncidentCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/InventoryItemCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/InventoryItemCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/MonitorCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RumApplication.js +6 -6
- package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/StatusPageCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TeamCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/TeamCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TeamMember.js +0 -9
- package/build/dist/Models/DatabaseModels/TeamMember.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TeamMemberCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/TeamMemberCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TeamPermission.js +3 -24
- package/build/dist/Models/DatabaseModels/TeamPermission.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js +267 -0
- package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserTelegram.js +0 -4
- package/build/dist/Models/DatabaseModels/UserTelegram.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +769 -109
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/API/UserNotificationSettingAPI.js +35 -0
- package/build/dist/Server/API/UserNotificationSettingAPI.js.map +1 -0
- package/build/dist/Server/API/UserTelegramAPI.js +28 -6
- package/build/dist/Server/API/UserTelegramAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +29 -2
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791300000000-AddTelemetryIngestionKeyType.js +60 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791300000000-AddTelemetryIngestionKeyType.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.js +53 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.js +82 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.js +46 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/QueueWorker.js +19 -7
- package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
- package/build/dist/Server/Infrastructure/Semaphore.js +1 -0
- package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
- package/build/dist/Server/Middleware/TelemetryIngest.js +315 -8
- package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
- package/build/dist/Server/Services/AccessTokenService.js +1 -0
- package/build/dist/Server/Services/AccessTokenService.js.map +1 -1
- package/build/dist/Server/Services/AlertCustomFieldService.js +93 -0
- package/build/dist/Server/Services/AlertCustomFieldService.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +34 -0
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/ApiKeyPermissionService.js +331 -28
- package/build/dist/Server/Services/ApiKeyPermissionService.js.map +1 -1
- package/build/dist/Server/Services/CustomFieldMappingService.js +614 -0
- package/build/dist/Server/Services/CustomFieldMappingService.js.map +1 -0
- package/build/dist/Server/Services/GlobalConfigService.js +133 -0
- package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
- package/build/dist/Server/Services/IncidentCustomFieldService.js +93 -0
- package/build/dist/Server/Services/IncidentCustomFieldService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +32 -0
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/MetricService.js +163 -0
- package/build/dist/Server/Services/MetricService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +29 -0
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +79 -27
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +22 -0
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/RoutineEmailSettingsService.js +69 -0
- package/build/dist/Server/Services/RoutineEmailSettingsService.js.map +1 -0
- package/build/dist/Server/Services/RumSessionReplayViewService.js +86 -24
- package/build/dist/Server/Services/RumSessionReplayViewService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceCustomFieldService.js +93 -0
- package/build/dist/Server/Services/ScheduledMaintenanceCustomFieldService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +29 -0
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +62 -2
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TeamPermissionService.js +166 -3
- package/build/dist/Server/Services/TeamPermissionService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryIngestionKeyService.js +562 -18
- package/build/dist/Server/Services/TelemetryIngestionKeyService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationSettingService.js +26 -6
- package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
- package/build/dist/Server/Services/UserTelegramService.js +257 -4
- package/build/dist/Server/Services/UserTelegramService.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Utils/APIKey/AccessPermission.js +2 -2
- package/build/dist/Server/Utils/APIKey/AccessPermission.js.map +1 -1
- package/build/dist/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.js +27 -0
- package/build/dist/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.js.map +1 -0
- package/build/dist/Server/Utils/CustomField/CustomFieldMappingRegistry.js +226 -0
- package/build/dist/Server/Utils/CustomField/CustomFieldMappingRegistry.js.map +1 -0
- package/build/dist/Server/Utils/CustomField/CustomFieldMappingValidator.js +189 -0
- package/build/dist/Server/Utils/CustomField/CustomFieldMappingValidator.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/EgressGuard.js +121 -7
- package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js +38 -5
- package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +44 -2
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -1
- package/build/dist/Server/Utils/FrontendEnvironment.js +33 -0
- package/build/dist/Server/Utils/FrontendEnvironment.js.map +1 -0
- package/build/dist/Server/Utils/LogRedaction.js +20 -0
- package/build/dist/Server/Utils/LogRedaction.js.map +1 -1
- package/build/dist/Server/Utils/Logger.js +10 -0
- package/build/dist/Server/Utils/Logger.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +287 -68
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js +20 -4
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +29 -6
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +88 -13
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +22 -6
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +22 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesContextEnricher.js +237 -0
- package/build/dist/Server/Utils/Monitor/SeriesContextEnricher.js.map +1 -0
- package/build/dist/Server/Utils/SSRFProtection.js +136 -9
- package/build/dist/Server/Utils/SSRFProtection.js.map +1 -1
- package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js +174 -89
- package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js.map +1 -1
- package/build/dist/Server/Utils/SessionReplay/SessionReplayHealthCounters.js +223 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayHealthCounters.js.map +1 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +945 -164
- package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -1
- package/build/dist/Server/Utils/StartServer.js +3 -14
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/TelegramVerificationToken.js +129 -0
- package/build/dist/Server/Utils/TelegramVerificationToken.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/PinServiceName.js +163 -0
- package/build/dist/Server/Utils/Telemetry/PinServiceName.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js +28 -15
- package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js +64 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.js +171 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.js.map +1 -0
- package/build/dist/Server/Utils/VM/VMAPI.js.map +1 -1
- package/build/dist/Server/Utils/VM/VMRunner.js +780 -69
- package/build/dist/Server/Utils/VM/VMRunner.js.map +1 -1
- package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js +60 -0
- package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldMappingSourceResource.js +20 -0
- package/build/dist/Types/CustomField/CustomFieldMappingSourceResource.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldValueMapping.js +141 -0
- package/build/dist/Types/CustomField/CustomFieldValueMapping.js.map +1 -0
- package/build/dist/Types/Icon/IconProp.js +1 -0
- package/build/dist/Types/Icon/IconProp.js.map +1 -1
- package/build/dist/Types/JSONFunctions.js +118 -37
- package/build/dist/Types/JSONFunctions.js.map +1 -1
- package/build/dist/Types/Monitor/CephAlertTemplates.js +130 -171
- package/build/dist/Types/Monitor/CephAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/DockerAlertTemplates.js +286 -121
- package/build/dist/Types/Monitor/DockerAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js +84 -105
- package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/HostAlertTemplates.js +250 -122
- package/build/dist/Types/Monitor/HostAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/IotAlertTemplates.js +81 -81
- package/build/dist/Types/Monitor/IotAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +375 -215
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/KubernetesMetricCatalog.js +19 -19
- package/build/dist/Types/Monitor/KubernetesMetricCatalog.js.map +1 -1
- package/build/dist/Types/Monitor/PodmanAlertTemplates.js +104 -153
- package/build/dist/Types/Monitor/PodmanAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +156 -91
- package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js +67 -6
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +38 -7
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.js +261 -0
- package/build/dist/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.js.map +1 -0
- package/build/dist/Types/Monitor/RumAlertTemplates.js +46 -7
- package/build/dist/Types/Monitor/RumAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js +422 -0
- package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js.map +1 -0
- package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js +441 -0
- package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js.map +1 -0
- package/build/dist/Types/Monitor/ServiceAlertTemplates.js +79 -15
- package/build/dist/Types/Monitor/ServiceAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/UptimeHistoryLabels.js +17 -0
- package/build/dist/Types/Monitor/UptimeHistoryLabels.js.map +1 -0
- package/build/dist/Types/NotificationSetting/RoutineEmailEvents.js +29 -0
- package/build/dist/Types/NotificationSetting/RoutineEmailEvents.js.map +1 -0
- package/build/dist/Types/Rum/SessionReplay.js +117 -0
- package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplayApi.js +181 -0
- package/build/dist/Types/Rum/SessionReplayApi.js.map +1 -0
- package/build/dist/Types/Rum/SessionReplayCaptureTrigger.js +21 -12
- package/build/dist/Types/Rum/SessionReplayCaptureTrigger.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplayConsentMode.js +11 -7
- package/build/dist/Types/Rum/SessionReplayConsentMode.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplayCustomEvents.js +172 -0
- package/build/dist/Types/Rum/SessionReplayCustomEvents.js.map +1 -0
- package/build/dist/Types/Rum/SessionReplayHealth.js +37 -0
- package/build/dist/Types/Rum/SessionReplayHealth.js.map +1 -0
- package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +85 -0
- package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -0
- package/build/dist/Types/Telemetry/TelemetryIngestionKeyPolicy.js +15 -0
- package/build/dist/Types/Telemetry/TelemetryIngestionKeyPolicy.js.map +1 -0
- package/build/dist/Types/Telemetry/TelemetryIngestionKeyType.js +30 -0
- package/build/dist/Types/Telemetry/TelemetryIngestionKeyType.js.map +1 -0
- package/build/dist/Types/WebsiteRequest.js +55 -3
- package/build/dist/Types/WebsiteRequest.js.map +1 -1
- package/build/dist/UI/Components/Charts/Area/AreaChart.js +13 -2
- package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js +6 -2
- package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Line/LineChart.js +13 -2
- package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Types/XAxis/XAxis.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/DataPoint.js +15 -3
- package/build/dist/UI/Components/Charts/Utils/DataPoint.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js +40 -9
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/XAxis.js +186 -0
- package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +80 -6
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
- package/build/dist/UI/Components/CustomFields/MapFromCustomFieldInput.js +118 -0
- package/build/dist/UI/Components/CustomFields/MapFromCustomFieldInput.js.map +1 -0
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +112 -7
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
- package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js +5 -162
- package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js.map +1 -1
- package/build/dist/UI/Components/Graphs/UptimeDaySummary.js +181 -0
- package/build/dist/UI/Components/Graphs/UptimeDaySummary.js.map +1 -0
- package/build/dist/UI/Components/Header/Header.js +2 -3
- package/build/dist/UI/Components/Header/Header.js.map +1 -1
- package/build/dist/UI/Components/Header/IconDropdown/IconDropdownItem.js +2 -1
- package/build/dist/UI/Components/Header/IconDropdown/IconDropdownItem.js.map +1 -1
- package/build/dist/UI/Components/Header/IconDropdown/IconDropdownMenu.js +7 -1
- package/build/dist/UI/Components/Header/IconDropdown/IconDropdownMenu.js.map +1 -1
- package/build/dist/UI/Components/Header/ProjectPicker/ProjectPicker.js +7 -1
- package/build/dist/UI/Components/Header/ProjectPicker/ProjectPicker.js.map +1 -1
- package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.js +7 -1
- package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +5 -0
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/JSONTable/JSONTable.js +2 -2
- package/build/dist/UI/Components/JSONTable/JSONTable.js.map +1 -1
- package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.js +35 -0
- package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.js.map +1 -0
- package/build/dist/UI/Components/Monitor/SeriesDebugCommandsViewer.js +34 -0
- package/build/dist/UI/Components/Monitor/SeriesDebugCommandsViewer.js.map +1 -0
- package/build/dist/UI/Components/Monitor/SeriesLabelsViewer.js +49 -0
- package/build/dist/UI/Components/Monitor/SeriesLabelsViewer.js.map +1 -0
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js +1 -1
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
- package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js +32 -6
- package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +38 -0
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
- package/build/dist/UI/Components/StatusPage/ResourceGroupSection.js +22 -1
- package/build/dist/UI/Components/StatusPage/ResourceGroupSection.js.map +1 -1
- package/build/dist/UI/Components/Table/CellClassName.js +55 -0
- package/build/dist/UI/Components/Table/CellClassName.js.map +1 -0
- package/build/dist/UI/Components/Table/TableRow.js +16 -13
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/UI/Components/Table/TableSkeletonRows.js +9 -8
- package/build/dist/UI/Components/Table/TableSkeletonRows.js.map +1 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js +25 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentsModal.js +47 -30
- package/build/dist/UI/Components/Workflow/ComponentsModal.js.map +1 -1
- package/build/dist/UI/Components/Workflow/NodePlacement.js +37 -0
- package/build/dist/UI/Components/Workflow/NodePlacement.js.map +1 -0
- package/build/dist/UI/Components/Workflow/Workflow.js +35 -18
- package/build/dist/UI/Components/Workflow/Workflow.js.map +1 -1
- package/build/dist/UI/Config.js +10 -20
- package/build/dist/UI/Config.js.map +1 -1
- package/build/dist/UI/Utils/GlobalKeyboardShortcut.js +138 -0
- package/build/dist/UI/Utils/GlobalKeyboardShortcut.js.map +1 -0
- package/build/dist/UI/Utils/Telemetry/BrowserTelemetryConfig.js +14 -0
- package/build/dist/UI/Utils/Telemetry/BrowserTelemetryConfig.js.map +1 -0
- package/build/dist/UI/Utils/Telemetry/Telemetry.js +7 -5
- package/build/dist/UI/Utils/Telemetry/Telemetry.js.map +1 -1
- package/build/dist/Utils/API.js +67 -5
- package/build/dist/Utils/API.js.map +1 -1
- package/build/dist/Utils/HTTPResponseBodyReader.js +157 -0
- package/build/dist/Utils/HTTPResponseBodyReader.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js +69 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js.map +1 -0
- package/build/dist/Utils/Rum/ChunkMath.js +76 -0
- package/build/dist/Utils/Rum/ChunkMath.js.map +1 -1
- package/build/dist/Utils/Rum/SessionReplayHealth.js +534 -0
- package/build/dist/Utils/Rum/SessionReplayHealth.js.map +1 -0
- package/build/dist/Utils/Rum/SessionReplayStringMap.js +165 -0
- package/build/dist/Utils/Rum/SessionReplayStringMap.js.map +1 -0
- package/build/dist/Utils/Schema/ModelSchema.js +1 -0
- package/build/dist/Utils/Schema/ModelSchema.js.map +1 -1
- package/build/dist/Utils/StatusPage/ResourceSearch.js +200 -0
- package/build/dist/Utils/StatusPage/ResourceSearch.js.map +1 -0
- package/build/dist/Utils/Telemetry/OriginAllowList.js +299 -0
- package/build/dist/Utils/Telemetry/OriginAllowList.js.map +1 -0
- package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js +147 -0
- package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js.map +1 -0
- package/build/dist/Utils/ValueFormatter.js +32 -1
- package/build/dist/Utils/ValueFormatter.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,13 +2,13 @@ import ObjectID from "../ObjectID";
|
|
|
2
2
|
import MonitorStep from "./MonitorStep";
|
|
3
3
|
import MonitorCriteria from "./MonitorCriteria";
|
|
4
4
|
import MonitorCriteriaInstance from "./MonitorCriteriaInstance";
|
|
5
|
-
import FilterCondition from "../Filter/FilterCondition";
|
|
6
5
|
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
AdditionalCriteriaFilterSpec,
|
|
7
|
+
buildHealthyCriteriaInstance,
|
|
8
|
+
buildUnhealthyCriteriaInstance,
|
|
9
|
+
} from "./Recommendation/RecommendationCriteriaBuilder";
|
|
10
|
+
import FilterCondition from "../Filter/FilterCondition";
|
|
11
|
+
import { FilterType, EvaluateOverTimeType } from "./CriteriaFilter";
|
|
12
12
|
import MonitorStepCephMonitor from "./MonitorStepCephMonitor";
|
|
13
13
|
import RollingTime from "../RollingTime/RollingTime";
|
|
14
14
|
import MetricsAggregationType from "../Metrics/MetricsAggregationType";
|
|
@@ -64,10 +64,14 @@ export function buildCephMonitorStep(args: {
|
|
|
64
64
|
onlineCriteriaInstance: MonitorCriteriaInstance;
|
|
65
65
|
/*
|
|
66
66
|
* Optional extra unhealthy tiers, evaluated AFTER the primary offline
|
|
67
|
-
* instance and before the online instance. Criteria are first-match-
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* template
|
|
67
|
+
* instance and before the online instance. Criteria are first-match-wins,
|
|
68
|
+
* so pass tiers worst-first.
|
|
69
|
+
*
|
|
70
|
+
* Every tier in one template shares ONE severity: the create flow re-stamps
|
|
71
|
+
* each criteria instance with the recommendation's single declared severity
|
|
72
|
+
* (MonitorRecommendationUtil.applyNotificationSettingsToMonitorStep), so a
|
|
73
|
+
* tier that means something milder than the template's own severity must be
|
|
74
|
+
* its own template instead. No shipped template uses this today.
|
|
71
75
|
*/
|
|
72
76
|
additionalOfflineCriteriaInstances?: Array<MonitorCriteriaInstance>;
|
|
73
77
|
}): MonitorStep {
|
|
@@ -136,78 +140,19 @@ export function buildCephOfflineCriteriaInstance(args: {
|
|
|
136
140
|
incidentDescription?: string;
|
|
137
141
|
criteriaName?: string;
|
|
138
142
|
criteriaDescription?: string;
|
|
143
|
+
metricAggregationType?: EvaluateOverTimeType | undefined;
|
|
139
144
|
/*
|
|
140
145
|
* Extra OR'd filters (the instance is FilterCondition.Any) — fires when
|
|
141
146
|
* EITHER the primary alias or any additional alias breaches, e.g.
|
|
142
147
|
* PG_DAMAGED OR OSD_SCRUB_ERRORS.
|
|
143
148
|
*/
|
|
144
|
-
additionalFilters?: Array<
|
|
149
|
+
additionalFilters?: Array<AdditionalCriteriaFilterSpec> | undefined;
|
|
150
|
+
treatNoDataAsZero?: boolean | undefined;
|
|
145
151
|
}): MonitorCriteriaInstance {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
const incidentDescription: string =
|
|
151
|
-
args.incidentDescription ||
|
|
152
|
-
`${args.monitorName} has triggered an alert condition. See root cause for detailed Ceph cluster information.`;
|
|
153
|
-
|
|
154
|
-
instance.data = {
|
|
155
|
-
id: ObjectID.generate().toString(),
|
|
156
|
-
monitorStatusId: args.offlineMonitorStatusId,
|
|
157
|
-
filterCondition: FilterCondition.Any,
|
|
158
|
-
filters: [
|
|
159
|
-
{
|
|
160
|
-
checkOn: CheckOn.MetricValue,
|
|
161
|
-
filterType: args.filterType,
|
|
162
|
-
metricMonitorOptions: {
|
|
163
|
-
metricAggregationType: EvaluateOverTimeType.AnyValue,
|
|
164
|
-
metricAlias: args.metricAlias,
|
|
165
|
-
},
|
|
166
|
-
value: args.value,
|
|
167
|
-
},
|
|
168
|
-
...(args.additionalFilters || []).map(
|
|
169
|
-
(filter: CephCriteriaFilterSpec) => {
|
|
170
|
-
return {
|
|
171
|
-
checkOn: CheckOn.MetricValue,
|
|
172
|
-
filterType: filter.filterType,
|
|
173
|
-
metricMonitorOptions: {
|
|
174
|
-
metricAggregationType: EvaluateOverTimeType.AnyValue,
|
|
175
|
-
metricAlias: filter.metricAlias,
|
|
176
|
-
},
|
|
177
|
-
value: filter.value,
|
|
178
|
-
};
|
|
179
|
-
},
|
|
180
|
-
),
|
|
181
|
-
],
|
|
182
|
-
incidents: [
|
|
183
|
-
{
|
|
184
|
-
title: incidentTitle,
|
|
185
|
-
description: incidentDescription,
|
|
186
|
-
incidentSeverityId: args.incidentSeverityId,
|
|
187
|
-
autoResolveIncident: true,
|
|
188
|
-
id: ObjectID.generate().toString(),
|
|
189
|
-
onCallPolicyIds: [],
|
|
190
|
-
},
|
|
191
|
-
],
|
|
192
|
-
alerts: [
|
|
193
|
-
{
|
|
194
|
-
title: incidentTitle,
|
|
195
|
-
description: incidentDescription,
|
|
196
|
-
alertSeverityId: args.alertSeverityId,
|
|
197
|
-
autoResolveAlert: true,
|
|
198
|
-
id: ObjectID.generate().toString(),
|
|
199
|
-
onCallPolicyIds: [],
|
|
200
|
-
},
|
|
201
|
-
],
|
|
202
|
-
changeMonitorStatus: true,
|
|
203
|
-
createIncidents: true,
|
|
204
|
-
createAlerts: true,
|
|
205
|
-
name: args.criteriaName || `${args.monitorName} - Unhealthy`,
|
|
206
|
-
description:
|
|
207
|
-
args.criteriaDescription || `Criteria for detecting unhealthy state.`,
|
|
208
|
-
};
|
|
209
|
-
|
|
210
|
-
return instance;
|
|
152
|
+
return buildUnhealthyCriteriaInstance({
|
|
153
|
+
...args,
|
|
154
|
+
resourceNoun: "Ceph cluster",
|
|
155
|
+
});
|
|
211
156
|
}
|
|
212
157
|
|
|
213
158
|
export function buildCephOnlineCriteriaInstance(args: {
|
|
@@ -215,12 +160,16 @@ export function buildCephOnlineCriteriaInstance(args: {
|
|
|
215
160
|
metricAlias: string;
|
|
216
161
|
filterType: FilterType;
|
|
217
162
|
value: number;
|
|
163
|
+
recoveryValue?: number | undefined;
|
|
164
|
+
marginFraction?: number | undefined;
|
|
165
|
+
isBinaryMetric?: boolean | undefined;
|
|
166
|
+
metricAggregationType?: EvaluateOverTimeType | undefined;
|
|
218
167
|
/*
|
|
219
168
|
* Extra filters for multi-alias recovery. Pass FilterCondition.All with
|
|
220
169
|
* them so the monitor only recovers when EVERY watched health check has
|
|
221
170
|
* cleared (the complement of the offline instance's Any).
|
|
222
171
|
*/
|
|
223
|
-
additionalFilters?: Array<
|
|
172
|
+
additionalFilters?: Array<AdditionalCriteriaFilterSpec> | undefined;
|
|
224
173
|
filterCondition?: FilterCondition | undefined;
|
|
225
174
|
/*
|
|
226
175
|
* Health-detail series exist only while the check is active, so the
|
|
@@ -230,52 +179,7 @@ export function buildCephOnlineCriteriaInstance(args: {
|
|
|
230
179
|
*/
|
|
231
180
|
treatNoDataAsZero?: boolean | undefined;
|
|
232
181
|
}): MonitorCriteriaInstance {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
const onNoDataPolicy: NoDataPolicy | undefined = args.treatNoDataAsZero
|
|
236
|
-
? NoDataPolicy.TreatAsZero
|
|
237
|
-
: undefined;
|
|
238
|
-
|
|
239
|
-
instance.data = {
|
|
240
|
-
id: ObjectID.generate().toString(),
|
|
241
|
-
monitorStatusId: args.onlineMonitorStatusId,
|
|
242
|
-
filterCondition: args.filterCondition || FilterCondition.Any,
|
|
243
|
-
filters: [
|
|
244
|
-
{
|
|
245
|
-
checkOn: CheckOn.MetricValue,
|
|
246
|
-
filterType: args.filterType,
|
|
247
|
-
metricMonitorOptions: {
|
|
248
|
-
metricAggregationType: EvaluateOverTimeType.AnyValue,
|
|
249
|
-
metricAlias: args.metricAlias,
|
|
250
|
-
onNoDataPolicy: onNoDataPolicy,
|
|
251
|
-
},
|
|
252
|
-
value: args.value,
|
|
253
|
-
},
|
|
254
|
-
...(args.additionalFilters || []).map(
|
|
255
|
-
(filter: CephCriteriaFilterSpec) => {
|
|
256
|
-
return {
|
|
257
|
-
checkOn: CheckOn.MetricValue,
|
|
258
|
-
filterType: filter.filterType,
|
|
259
|
-
metricMonitorOptions: {
|
|
260
|
-
metricAggregationType: EvaluateOverTimeType.AnyValue,
|
|
261
|
-
metricAlias: filter.metricAlias,
|
|
262
|
-
onNoDataPolicy: onNoDataPolicy,
|
|
263
|
-
},
|
|
264
|
-
value: filter.value,
|
|
265
|
-
};
|
|
266
|
-
},
|
|
267
|
-
),
|
|
268
|
-
],
|
|
269
|
-
incidents: [],
|
|
270
|
-
alerts: [],
|
|
271
|
-
changeMonitorStatus: true,
|
|
272
|
-
createIncidents: false,
|
|
273
|
-
createAlerts: false,
|
|
274
|
-
name: "Healthy",
|
|
275
|
-
description: "Criteria for healthy state.",
|
|
276
|
-
};
|
|
277
|
-
|
|
278
|
-
return instance;
|
|
182
|
+
return buildHealthyCriteriaInstance(args);
|
|
279
183
|
}
|
|
280
184
|
|
|
281
185
|
export function buildCephMonitorConfig(args: {
|
|
@@ -338,14 +242,20 @@ export interface CephFormulaQuery {
|
|
|
338
242
|
* cancels: `(Σnum × scrapes) / (Σden × scrapes)`. Every Ceph metric comes
|
|
339
243
|
* from ONE receiver — the prometheus scrape of the active ceph-mgr — so
|
|
340
244
|
* all Ceph ratios are same-receiver and use `Sum`/`Sum`. (`Avg`/`Avg` is
|
|
341
|
-
* the cross-receiver variant; not needed here.)
|
|
342
|
-
*
|
|
343
|
-
*
|
|
344
|
-
*
|
|
345
|
-
*
|
|
346
|
-
*
|
|
347
|
-
*
|
|
348
|
-
*
|
|
245
|
+
* the cross-receiver variant; not needed here.)
|
|
246
|
+
*
|
|
247
|
+
* DIFFERENCE formulas (e.g. pg_total − pg_active) are the exception and
|
|
248
|
+
* must be GROUPED and reduced with `Max`/`Max`. The scrape multiple k
|
|
249
|
+
* cancels in a ratio but merely scales a difference: ungrouped Sum/Sum
|
|
250
|
+
* preserves the SIGN (k·Σtotal − k·Σactive = k·Σinactive, so the > 0 fire
|
|
251
|
+
* / = 0 recover thresholds still trip correctly) while multiplying the
|
|
252
|
+
* VALUE the alert prints — a cluster with 3 inactive PGs alerted "6" at a
|
|
253
|
+
* 30s scrape interval. Grouping by the series label and reducing with
|
|
254
|
+
* `Max` de-duplicates the scrapes inside a (series, minute) bucket and
|
|
255
|
+
* makes the difference that series' exact count. Ungrouped `Max` would be
|
|
256
|
+
* WRONG for per-pool metrics — each side collapses to the largest pool's
|
|
257
|
+
* value, hiding non-zero differences in every other pool — so the
|
|
258
|
+
* group-by and the aggregation always change together.
|
|
349
259
|
*/
|
|
350
260
|
export function buildCephFormulaMonitorConfig(args: {
|
|
351
261
|
clusterIdentifier: string;
|
|
@@ -774,7 +684,7 @@ const pgDegradedTemplate: CephAlertTemplate = {
|
|
|
774
684
|
id: "ceph-pg-degraded",
|
|
775
685
|
name: "Degraded Placement Groups",
|
|
776
686
|
description:
|
|
777
|
-
"Alert when any placement groups are degraded — objects have fewer replicas than configured.",
|
|
687
|
+
"Alert when any placement groups are degraded — objects have fewer replicas than configured. One incident per pool (grouped by pool_id — pool data series carry no name label).",
|
|
778
688
|
category: "PG",
|
|
779
689
|
severity: "Warning",
|
|
780
690
|
getMonitorStep: (args: CephAlertTemplateArgs): MonitorStep => {
|
|
@@ -787,10 +697,19 @@ const pgDegradedTemplate: CephAlertTemplate = {
|
|
|
787
697
|
metricAlias,
|
|
788
698
|
rollingTime: RollingTime.Past5Minutes,
|
|
789
699
|
/*
|
|
790
|
-
*
|
|
791
|
-
*
|
|
700
|
+
* Max PER POOL. ceph_pg_degraded is a per-pool gauge (pool_id
|
|
701
|
+
* label — CephMetricCatalog marks it defaultResourceScope Pool),
|
|
702
|
+
* never a cluster-wide total. Grouping is what makes the reported
|
|
703
|
+
* number the pool's OWN degraded count instead of the largest
|
|
704
|
+
* pool's count presented as a cluster total, and it is what lets
|
|
705
|
+
* the fan-out name the pool on the incident. Max (not Sum) is the
|
|
706
|
+
* right per-bucket reduction: the agent scrapes every 30s
|
|
707
|
+
* (CephAgent/otel-collector-config.yaml) and buckets are one
|
|
708
|
+
* minute wide, so a bucket holds two identical samples of the same
|
|
709
|
+
* gauge and Sum would double them.
|
|
792
710
|
*/
|
|
793
711
|
aggregationType: MetricsAggregationType.Max,
|
|
712
|
+
groupByAttributeKey: "pool_id",
|
|
794
713
|
}),
|
|
795
714
|
offlineCriteriaInstance: buildCephOfflineCriteriaInstance({
|
|
796
715
|
offlineMonitorStatusId: args.offlineMonitorStatusId,
|
|
@@ -801,7 +720,7 @@ const pgDegradedTemplate: CephAlertTemplate = {
|
|
|
801
720
|
filterType: FilterType.GreaterThan,
|
|
802
721
|
value: 0,
|
|
803
722
|
incidentTitle: `[Ceph] Degraded Placement Groups - ${args.monitorName}`,
|
|
804
|
-
incidentDescription: `
|
|
723
|
+
incidentDescription: `This Ceph pool has degraded placement groups — some objects currently have fewer replicas than the configured replication factor. This usually follows an OSD failure or restart and should clear as recovery completes. If the count does not trend down, run \`ceph pg dump_stuck degraded\` and \`ceph osd tree\` to find the OSDs blocking recovery. The affected pool_id is on this alert; match it to a pool name with \`ceph df\`.`,
|
|
805
724
|
criteriaName: "PG Degraded - Count > 0",
|
|
806
725
|
criteriaDescription:
|
|
807
726
|
"Triggers when the number of degraded placement groups is above zero.",
|
|
@@ -820,7 +739,7 @@ const pgUndersizedTemplate: CephAlertTemplate = {
|
|
|
820
739
|
id: "ceph-pg-undersized",
|
|
821
740
|
name: "Undersized Placement Groups",
|
|
822
741
|
description:
|
|
823
|
-
"Alert when any placement groups are undersized — mapped to fewer OSDs than their replica count.",
|
|
742
|
+
"Alert when any placement groups are undersized — mapped to fewer OSDs than their replica count. One incident per pool (grouped by pool_id — pool data series carry no name label).",
|
|
824
743
|
category: "PG",
|
|
825
744
|
severity: "Warning",
|
|
826
745
|
getMonitorStep: (args: CephAlertTemplateArgs): MonitorStep => {
|
|
@@ -833,10 +752,15 @@ const pgUndersizedTemplate: CephAlertTemplate = {
|
|
|
833
752
|
metricAlias,
|
|
834
753
|
rollingTime: RollingTime.Past5Minutes,
|
|
835
754
|
/*
|
|
836
|
-
*
|
|
837
|
-
*
|
|
755
|
+
* Max PER POOL — same contract as ceph-pg-degraded above.
|
|
756
|
+
* ceph_pg_undersized is a per-pool gauge (pool_id label), so
|
|
757
|
+
* without the group-by the alert reported the worst single pool's
|
|
758
|
+
* count as a cluster total and could never name the pool. Max
|
|
759
|
+
* de-duplicates the two 30s scrapes that land in one minute
|
|
760
|
+
* bucket; Sum would double them.
|
|
838
761
|
*/
|
|
839
762
|
aggregationType: MetricsAggregationType.Max,
|
|
763
|
+
groupByAttributeKey: "pool_id",
|
|
840
764
|
}),
|
|
841
765
|
offlineCriteriaInstance: buildCephOfflineCriteriaInstance({
|
|
842
766
|
offlineMonitorStatusId: args.offlineMonitorStatusId,
|
|
@@ -847,7 +771,7 @@ const pgUndersizedTemplate: CephAlertTemplate = {
|
|
|
847
771
|
filterType: FilterType.GreaterThan,
|
|
848
772
|
value: 0,
|
|
849
773
|
incidentTitle: `[Ceph] Undersized Placement Groups - ${args.monitorName}`,
|
|
850
|
-
incidentDescription: `
|
|
774
|
+
incidentDescription: `This Ceph pool has undersized placement groups — they are mapped to fewer OSDs than their configured replica count, so full redundancy cannot be restored. Sustained undersized PGs usually mean the cluster lacks enough OSDs (or failure domains) to satisfy the CRUSH rule. Check for down/out OSDs with \`ceph osd tree\` and verify the pool's replication settings against available capacity. The affected pool_id is on this alert; match it to a pool name with \`ceph df\`.`,
|
|
851
775
|
criteriaName: "PG Undersized - Count > 0",
|
|
852
776
|
criteriaDescription:
|
|
853
777
|
"Triggers when the number of undersized placement groups is above zero.",
|
|
@@ -866,7 +790,7 @@ const pgInactiveTemplate: CephAlertTemplate = {
|
|
|
866
790
|
id: "ceph-pg-inactive",
|
|
867
791
|
name: "Inactive Placement Groups",
|
|
868
792
|
description:
|
|
869
|
-
"Alert when any placement groups are not active (ceph_pg_total − ceph_pg_active > 0). Inactive PGs cannot serve I/O — client requests to them hang.",
|
|
793
|
+
"Alert when any placement groups are not active (ceph_pg_total − ceph_pg_active > 0). Inactive PGs cannot serve I/O — client requests to them hang. One incident per pool (grouped by pool_id — pool data series carry no name label).",
|
|
870
794
|
category: "PG",
|
|
871
795
|
severity: "Critical",
|
|
872
796
|
getMonitorStep: (args: CephAlertTemplateArgs): MonitorStep => {
|
|
@@ -882,19 +806,32 @@ const pgInactiveTemplate: CephAlertTemplate = {
|
|
|
882
806
|
formula: "pg_total - pg_active",
|
|
883
807
|
resultAlias: metricAlias,
|
|
884
808
|
resultLegend: "Inactive PGs",
|
|
809
|
+
resultLegendUnit: "count",
|
|
885
810
|
rollingTime: RollingTime.Past5Minutes,
|
|
886
811
|
/*
|
|
887
|
-
*
|
|
888
|
-
*
|
|
889
|
-
*
|
|
890
|
-
*
|
|
891
|
-
*
|
|
892
|
-
*
|
|
893
|
-
*
|
|
894
|
-
*
|
|
895
|
-
*
|
|
812
|
+
* Max/Max PER POOL.
|
|
813
|
+
*
|
|
814
|
+
* ceph_pg_total and ceph_pg_active are PER-POOL series (pool_id
|
|
815
|
+
* label, since Nautilus). The threshold comparison was always
|
|
816
|
+
* right under the old ungrouped Sum/Sum, but the NUMBER was not:
|
|
817
|
+
* an ungrouped one-minute bucket sums over pools AND over the
|
|
818
|
+
* scrapes inside that minute. The shipped agent scrapes every 30s
|
|
819
|
+
* (CephAgent/otel-collector-config.yaml), so a cluster with 3
|
|
820
|
+
* inactive PGs was alerted as "6" — and as a different multiple in
|
|
821
|
+
* each bucket, because bucket boundaries do not divide the scrape
|
|
822
|
+
* train evenly. The scrape multiple cancels for a RATIO; for a
|
|
823
|
+
* DIFFERENCE it scales the result.
|
|
824
|
+
*
|
|
825
|
+
* Grouping by pool_id and reducing with Max fixes both: Max
|
|
826
|
+
* de-duplicates the identical scrapes inside a (pool, minute)
|
|
827
|
+
* bucket, the difference is that pool's exact inactive count, and
|
|
828
|
+
* the fan-out names the pool the operator has to run
|
|
829
|
+
* `ceph pg dump_stuck inactive` against. Ungrouped Max would still
|
|
830
|
+
* be wrong — it collapses each side to the largest pool — which is
|
|
831
|
+
* why the group-by and the aggregation must change together.
|
|
896
832
|
*/
|
|
897
|
-
aggregationType: MetricsAggregationType.
|
|
833
|
+
aggregationType: MetricsAggregationType.Max,
|
|
834
|
+
groupByAttributeKey: "pool_id",
|
|
898
835
|
}),
|
|
899
836
|
offlineCriteriaInstance: buildCephOfflineCriteriaInstance({
|
|
900
837
|
offlineMonitorStatusId: args.offlineMonitorStatusId,
|
|
@@ -905,7 +842,7 @@ const pgInactiveTemplate: CephAlertTemplate = {
|
|
|
905
842
|
filterType: FilterType.GreaterThan,
|
|
906
843
|
value: 0,
|
|
907
844
|
incidentTitle: `[Ceph] CRITICAL: Inactive Placement Groups - ${args.monitorName}`,
|
|
908
|
-
incidentDescription: `
|
|
845
|
+
incidentDescription: `This Ceph pool has placement groups that are not active. Inactive PGs cannot serve reads or writes — client I/O to them hangs until they recover. This typically follows the loss of too many OSDs in a failure domain. Run \`ceph pg dump_stuck inactive\` and \`ceph health detail\` to identify the stuck PGs and the OSDs they are waiting on, and restore those OSDs immediately. The affected pool_id is on this alert; match it to a pool name with \`ceph df\`.`,
|
|
909
846
|
criteriaName: "PG Inactive - Count > 0",
|
|
910
847
|
criteriaDescription:
|
|
911
848
|
"Triggers when the number of inactive placement groups (total minus active) is above zero.",
|
|
@@ -1479,41 +1416,45 @@ const osdFullTemplate: CephAlertTemplate = {
|
|
|
1479
1416
|
};
|
|
1480
1417
|
|
|
1481
1418
|
const monDiskSpaceTemplate: CephAlertTemplate = {
|
|
1419
|
+
/*
|
|
1420
|
+
* Id kept so already-dismissed recommendations stay dismissed
|
|
1421
|
+
* (`recommendationId` is `${resourceType}:${templateId}`). Name and
|
|
1422
|
+
* description narrowed: this template is the Critical tier only.
|
|
1423
|
+
*
|
|
1424
|
+
* The Warning tier used to ride along here as an
|
|
1425
|
+
* `additionalOfflineCriteriaInstances` entry. It could not work:
|
|
1426
|
+
* `MonitorRecommendationUtil.applyNotificationSettingsToMonitorStep`
|
|
1427
|
+
* re-stamps EVERY criteria instance in the step with the ONE severity the
|
|
1428
|
+
* recommendation declares, so a MON_DISK_LOW condition — a mon disk with
|
|
1429
|
+
* days of headroom — opened an incident at the project's top severity and
|
|
1430
|
+
* paged whatever on-call policy is attached to Critical, while the card
|
|
1431
|
+
* promised Warning. One recommendation carries one severity; two tiers
|
|
1432
|
+
* need two recommendations.
|
|
1433
|
+
*/
|
|
1482
1434
|
id: "ceph-mon-disk-space",
|
|
1483
|
-
name: "Monitor Disk
|
|
1435
|
+
name: "Monitor Disk Critically Low",
|
|
1484
1436
|
description:
|
|
1485
|
-
"Alert when a Ceph monitor's database disk
|
|
1437
|
+
"Alert when a Ceph monitor's database disk crosses the MON_DISK_CRIT threshold (default 5% free). A full monitor disk crashes the monitor and risks quorum. Pair with Monitor Disk Space Low for the earlier warning tier.",
|
|
1486
1438
|
category: "Cluster Health",
|
|
1487
1439
|
severity: "Critical",
|
|
1488
1440
|
getMonitorStep: (args: CephAlertTemplateArgs): MonitorStep => {
|
|
1489
|
-
const
|
|
1490
|
-
const lowAlias: string = "mon_disk_low";
|
|
1441
|
+
const metricAlias: string = "mon_disk_crit";
|
|
1491
1442
|
|
|
1492
1443
|
return buildCephMonitorStep({
|
|
1493
|
-
cephMonitor:
|
|
1444
|
+
cephMonitor: buildCephMonitorConfig({
|
|
1494
1445
|
clusterIdentifier: args.clusterIdentifier,
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
alias: critAlias,
|
|
1498
|
-
metricName: "ceph_health_detail",
|
|
1499
|
-
attributes: { name: "MON_DISK_CRIT" },
|
|
1500
|
-
},
|
|
1501
|
-
{
|
|
1502
|
-
alias: lowAlias,
|
|
1503
|
-
metricName: "ceph_health_detail",
|
|
1504
|
-
attributes: { name: "MON_DISK_LOW" },
|
|
1505
|
-
},
|
|
1506
|
-
],
|
|
1446
|
+
metricName: "ceph_health_detail",
|
|
1447
|
+
metricAlias,
|
|
1507
1448
|
rollingTime: RollingTime.Past5Minutes,
|
|
1508
1449
|
aggregationType: MetricsAggregationType.Max,
|
|
1450
|
+
attributes: { name: "MON_DISK_CRIT" },
|
|
1509
1451
|
}),
|
|
1510
|
-
// Critical tier first — criteria are evaluated first-match-wins.
|
|
1511
1452
|
offlineCriteriaInstance: buildCephOfflineCriteriaInstance({
|
|
1512
1453
|
offlineMonitorStatusId: args.offlineMonitorStatusId,
|
|
1513
1454
|
incidentSeverityId: args.defaultIncidentSeverityId,
|
|
1514
1455
|
alertSeverityId: args.defaultAlertSeverityId,
|
|
1515
1456
|
monitorName: args.monitorName,
|
|
1516
|
-
metricAlias
|
|
1457
|
+
metricAlias,
|
|
1517
1458
|
filterType: FilterType.GreaterThan,
|
|
1518
1459
|
value: 0,
|
|
1519
1460
|
incidentTitle: `[Ceph] CRITICAL: Monitor Disk Critically Low - ${args.monitorName}`,
|
|
@@ -1522,35 +1463,55 @@ const monDiskSpaceTemplate: CephAlertTemplate = {
|
|
|
1522
1463
|
criteriaDescription:
|
|
1523
1464
|
"Triggers when the MON_DISK_CRIT health check is active.",
|
|
1524
1465
|
}),
|
|
1525
|
-
additionalOfflineCriteriaInstances: [
|
|
1526
|
-
buildCephOfflineCriteriaInstance({
|
|
1527
|
-
offlineMonitorStatusId: args.offlineMonitorStatusId,
|
|
1528
|
-
incidentSeverityId: args.defaultIncidentSeverityId,
|
|
1529
|
-
alertSeverityId: args.defaultAlertSeverityId,
|
|
1530
|
-
monitorName: args.monitorName,
|
|
1531
|
-
metricAlias: lowAlias,
|
|
1532
|
-
filterType: FilterType.GreaterThan,
|
|
1533
|
-
value: 0,
|
|
1534
|
-
incidentTitle: `[Ceph] Monitor Disk Space Low - ${args.monitorName}`,
|
|
1535
|
-
incidentDescription: `A Ceph monitor's database disk is running low on space (MON_DISK_LOW health check; default 30% free). The monitor keeps working, but if the disk keeps filling it will cross the critical threshold and eventually crash, putting quorum at risk. Free space on the affected monitor host: compact the mon store (\`ceph tell mon.<id> compact\`), clean up logs, or grow the volume. Run \`ceph health detail\` to see which monitor is affected.`,
|
|
1536
|
-
criteriaName: "Mon Disk Low - MON_DISK_LOW Active",
|
|
1537
|
-
criteriaDescription:
|
|
1538
|
-
"Triggers when the MON_DISK_LOW health check is active.",
|
|
1539
|
-
}),
|
|
1540
|
-
],
|
|
1541
1466
|
onlineCriteriaInstance: buildCephOnlineCriteriaInstance({
|
|
1542
1467
|
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
1543
|
-
metricAlias
|
|
1468
|
+
metricAlias,
|
|
1469
|
+
filterType: FilterType.EqualTo,
|
|
1470
|
+
value: 0,
|
|
1471
|
+
treatNoDataAsZero: true,
|
|
1472
|
+
}),
|
|
1473
|
+
});
|
|
1474
|
+
},
|
|
1475
|
+
};
|
|
1476
|
+
|
|
1477
|
+
const monDiskLowTemplate: CephAlertTemplate = {
|
|
1478
|
+
id: "ceph-mon-disk-low",
|
|
1479
|
+
name: "Monitor Disk Space Low",
|
|
1480
|
+
description:
|
|
1481
|
+
"Alert when a Ceph monitor's database disk crosses the MON_DISK_LOW threshold (default 30% free) — the warning tier before MON_DISK_CRIT.",
|
|
1482
|
+
category: "Cluster Health",
|
|
1483
|
+
severity: "Warning",
|
|
1484
|
+
getMonitorStep: (args: CephAlertTemplateArgs): MonitorStep => {
|
|
1485
|
+
const metricAlias: string = "mon_disk_low";
|
|
1486
|
+
|
|
1487
|
+
return buildCephMonitorStep({
|
|
1488
|
+
cephMonitor: buildCephMonitorConfig({
|
|
1489
|
+
clusterIdentifier: args.clusterIdentifier,
|
|
1490
|
+
metricName: "ceph_health_detail",
|
|
1491
|
+
metricAlias,
|
|
1492
|
+
rollingTime: RollingTime.Past5Minutes,
|
|
1493
|
+
aggregationType: MetricsAggregationType.Max,
|
|
1494
|
+
attributes: { name: "MON_DISK_LOW" },
|
|
1495
|
+
}),
|
|
1496
|
+
offlineCriteriaInstance: buildCephOfflineCriteriaInstance({
|
|
1497
|
+
offlineMonitorStatusId: args.offlineMonitorStatusId,
|
|
1498
|
+
incidentSeverityId: args.defaultIncidentSeverityId,
|
|
1499
|
+
alertSeverityId: args.defaultAlertSeverityId,
|
|
1500
|
+
monitorName: args.monitorName,
|
|
1501
|
+
metricAlias,
|
|
1502
|
+
filterType: FilterType.GreaterThan,
|
|
1503
|
+
value: 0,
|
|
1504
|
+
incidentTitle: `[Ceph] Monitor Disk Space Low - ${args.monitorName}`,
|
|
1505
|
+
incidentDescription: `A Ceph monitor's database disk is running low on space (MON_DISK_LOW health check; default 30% free). The monitor keeps working, but if the disk keeps filling it will cross the critical threshold and eventually crash, putting quorum at risk. Free space on the affected monitor host: compact the mon store (\`ceph tell mon.<id> compact\`), clean up logs, or grow the volume. Run \`ceph health detail\` to see which monitor is affected.`,
|
|
1506
|
+
criteriaName: "Mon Disk Low - MON_DISK_LOW Active",
|
|
1507
|
+
criteriaDescription:
|
|
1508
|
+
"Triggers when the MON_DISK_LOW health check is active.",
|
|
1509
|
+
}),
|
|
1510
|
+
onlineCriteriaInstance: buildCephOnlineCriteriaInstance({
|
|
1511
|
+
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
1512
|
+
metricAlias,
|
|
1544
1513
|
filterType: FilterType.EqualTo,
|
|
1545
1514
|
value: 0,
|
|
1546
|
-
additionalFilters: [
|
|
1547
|
-
{
|
|
1548
|
-
metricAlias: lowAlias,
|
|
1549
|
-
filterType: FilterType.EqualTo,
|
|
1550
|
-
value: 0,
|
|
1551
|
-
},
|
|
1552
|
-
],
|
|
1553
|
-
filterCondition: FilterCondition.All,
|
|
1554
1515
|
treatNoDataAsZero: true,
|
|
1555
1516
|
}),
|
|
1556
1517
|
});
|
|
@@ -1626,6 +1587,7 @@ export function getAllCephAlertTemplates(): Array<CephAlertTemplate> {
|
|
|
1626
1587
|
osdBackfillfullTemplate,
|
|
1627
1588
|
osdFullTemplate,
|
|
1628
1589
|
monDiskSpaceTemplate,
|
|
1590
|
+
monDiskLowTemplate,
|
|
1629
1591
|
daemonSlowOpsTemplate,
|
|
1630
1592
|
];
|
|
1631
1593
|
}
|