@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,8 +2,11 @@ import ObjectID from "../ObjectID";
|
|
|
2
2
|
import MonitorStep from "./MonitorStep";
|
|
3
3
|
import MonitorCriteria from "./MonitorCriteria";
|
|
4
4
|
import MonitorCriteriaInstance from "./MonitorCriteriaInstance";
|
|
5
|
-
import
|
|
6
|
-
|
|
5
|
+
import {
|
|
6
|
+
buildHealthyCriteriaInstance,
|
|
7
|
+
buildUnhealthyCriteriaInstance,
|
|
8
|
+
} from "./Recommendation/RecommendationCriteriaBuilder";
|
|
9
|
+
import { FilterType, EvaluateOverTimeType } from "./CriteriaFilter";
|
|
7
10
|
import MonitorStepDockerMonitor from "./MonitorStepDockerMonitor";
|
|
8
11
|
import RollingTime from "../RollingTime/RollingTime";
|
|
9
12
|
import MetricsAggregationType from "../Metrics/MetricsAggregationType";
|
|
@@ -30,6 +33,33 @@ export interface DockerAlertTemplate {
|
|
|
30
33
|
getMonitorStep: (args: DockerAlertTemplateArgs) => MonitorStep;
|
|
31
34
|
}
|
|
32
35
|
|
|
36
|
+
/*
|
|
37
|
+
* What an incident/alert title says after the condition.
|
|
38
|
+
*
|
|
39
|
+
* Titles used to end in `- ${args.monitorName}`, and for a monitor created
|
|
40
|
+
* from the Recommendations page that name is ALREADY
|
|
41
|
+
* "<resource> - <template name>"
|
|
42
|
+
* (MonitorRecommendationUtil.getMonitorName), so the rendered title stated
|
|
43
|
+
* the same fact twice:
|
|
44
|
+
*
|
|
45
|
+
* "[Docker] High CPU Usage (>80%) - docker-host-01 - High Container CPU Usage"
|
|
46
|
+
*
|
|
47
|
+
* SeriesContextEnricher then appends the container identity on top of that,
|
|
48
|
+
* which pushes the one thing that differs between two alerts — WHICH
|
|
49
|
+
* container — off the end of a phone notification.
|
|
50
|
+
*
|
|
51
|
+
* The host is the half worth keeping, and it is the half the alert email
|
|
52
|
+
* never renders otherwise (the email shows the alert title, the affected
|
|
53
|
+
* SERIES, severity, root cause and description — never the monitor's own
|
|
54
|
+
* name), so name it directly. Guarded because the in-form template picker
|
|
55
|
+
* can build a step before a host is chosen (DockerMonitorStepForm passes
|
|
56
|
+
* `hostIdentifier || ""`), and a title ending in a bare dash reads like a
|
|
57
|
+
* bug.
|
|
58
|
+
*/
|
|
59
|
+
function dockerTitleSuffix(args: DockerAlertTemplateArgs): string {
|
|
60
|
+
return args.hostIdentifier ? ` - ${args.hostIdentifier}` : "";
|
|
61
|
+
}
|
|
62
|
+
|
|
33
63
|
/*
|
|
34
64
|
* Filter contract: the Docker agent stamps container identity as OTLP
|
|
35
65
|
* RESOURCE attributes, so ClickHouse stores them `resource.`-prefixed:
|
|
@@ -41,9 +71,16 @@ export interface DockerAlertTemplate {
|
|
|
41
71
|
* independently — one incident per container instead of one incident for
|
|
42
72
|
* the whole host, where the busiest container silences every other one.
|
|
43
73
|
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
74
|
+
* The Docker SWARM agent runs the SAME docker_stats receiver with no
|
|
75
|
+
* attribute-moving transform (DockerSwarmAgent/otel-collector-config.yaml:
|
|
76
|
+
* receivers `[docker_stats]`, processors `[memory_limiter, resource,
|
|
77
|
+
* batch]`, where `resource` only upserts `docker.swarm.cluster.name` and
|
|
78
|
+
* `oneuptime.agent.version`), so Swarm container identity is stored
|
|
79
|
+
* `resource.`-prefixed too. DockerSwarmAlertTemplates.ts groups by the bare
|
|
80
|
+
* `container.name`; that key matches no stored attribute, and
|
|
81
|
+
* aggregatePerSeriesFromRawMetrics labels a missing key "" — collapsing
|
|
82
|
+
* every Swarm container into ONE series with an empty label. Do not copy
|
|
83
|
+
* that spelling.
|
|
47
84
|
*/
|
|
48
85
|
|
|
49
86
|
export function buildDockerMonitorStep(args: {
|
|
@@ -103,59 +140,12 @@ export function buildDockerOfflineCriteriaInstance(args: {
|
|
|
103
140
|
incidentDescription?: string;
|
|
104
141
|
criteriaName?: string;
|
|
105
142
|
criteriaDescription?: string;
|
|
143
|
+
metricAggregationType?: EvaluateOverTimeType | undefined;
|
|
106
144
|
}): MonitorCriteriaInstance {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
const incidentDescription: string =
|
|
112
|
-
args.incidentDescription ||
|
|
113
|
-
`${args.monitorName} has triggered an alert condition. See root cause for detailed Docker container information.`;
|
|
114
|
-
|
|
115
|
-
instance.data = {
|
|
116
|
-
id: ObjectID.generate().toString(),
|
|
117
|
-
monitorStatusId: args.offlineMonitorStatusId,
|
|
118
|
-
filterCondition: FilterCondition.Any,
|
|
119
|
-
filters: [
|
|
120
|
-
{
|
|
121
|
-
checkOn: CheckOn.MetricValue,
|
|
122
|
-
filterType: args.filterType,
|
|
123
|
-
metricMonitorOptions: {
|
|
124
|
-
metricAggregationType: EvaluateOverTimeType.AnyValue,
|
|
125
|
-
metricAlias: args.metricAlias,
|
|
126
|
-
},
|
|
127
|
-
value: args.value,
|
|
128
|
-
},
|
|
129
|
-
],
|
|
130
|
-
incidents: [
|
|
131
|
-
{
|
|
132
|
-
title: incidentTitle,
|
|
133
|
-
description: incidentDescription,
|
|
134
|
-
incidentSeverityId: args.incidentSeverityId,
|
|
135
|
-
autoResolveIncident: true,
|
|
136
|
-
id: ObjectID.generate().toString(),
|
|
137
|
-
onCallPolicyIds: [],
|
|
138
|
-
},
|
|
139
|
-
],
|
|
140
|
-
alerts: [
|
|
141
|
-
{
|
|
142
|
-
title: incidentTitle,
|
|
143
|
-
description: incidentDescription,
|
|
144
|
-
alertSeverityId: args.alertSeverityId,
|
|
145
|
-
autoResolveAlert: true,
|
|
146
|
-
id: ObjectID.generate().toString(),
|
|
147
|
-
onCallPolicyIds: [],
|
|
148
|
-
},
|
|
149
|
-
],
|
|
150
|
-
changeMonitorStatus: true,
|
|
151
|
-
createIncidents: true,
|
|
152
|
-
createAlerts: true,
|
|
153
|
-
name: args.criteriaName || `${args.monitorName} - Unhealthy`,
|
|
154
|
-
description:
|
|
155
|
-
args.criteriaDescription || `Criteria for detecting unhealthy state.`,
|
|
156
|
-
};
|
|
157
|
-
|
|
158
|
-
return instance;
|
|
145
|
+
return buildUnhealthyCriteriaInstance({
|
|
146
|
+
...args,
|
|
147
|
+
resourceNoun: "container",
|
|
148
|
+
});
|
|
159
149
|
}
|
|
160
150
|
|
|
161
151
|
export function buildDockerOnlineCriteriaInstance(args: {
|
|
@@ -163,34 +153,12 @@ export function buildDockerOnlineCriteriaInstance(args: {
|
|
|
163
153
|
metricAlias: string;
|
|
164
154
|
filterType: FilterType;
|
|
165
155
|
value: number;
|
|
156
|
+
recoveryValue?: number | undefined;
|
|
157
|
+
marginFraction?: number | undefined;
|
|
158
|
+
isBinaryMetric?: boolean | undefined;
|
|
159
|
+
metricAggregationType?: EvaluateOverTimeType | undefined;
|
|
166
160
|
}): MonitorCriteriaInstance {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
instance.data = {
|
|
170
|
-
id: ObjectID.generate().toString(),
|
|
171
|
-
monitorStatusId: args.onlineMonitorStatusId,
|
|
172
|
-
filterCondition: FilterCondition.Any,
|
|
173
|
-
filters: [
|
|
174
|
-
{
|
|
175
|
-
checkOn: CheckOn.MetricValue,
|
|
176
|
-
filterType: args.filterType,
|
|
177
|
-
metricMonitorOptions: {
|
|
178
|
-
metricAggregationType: EvaluateOverTimeType.AnyValue,
|
|
179
|
-
metricAlias: args.metricAlias,
|
|
180
|
-
},
|
|
181
|
-
value: args.value,
|
|
182
|
-
},
|
|
183
|
-
],
|
|
184
|
-
incidents: [],
|
|
185
|
-
alerts: [],
|
|
186
|
-
changeMonitorStatus: true,
|
|
187
|
-
createIncidents: false,
|
|
188
|
-
createAlerts: false,
|
|
189
|
-
name: "Healthy",
|
|
190
|
-
description: "Criteria for healthy state.",
|
|
191
|
-
};
|
|
192
|
-
|
|
193
|
-
return instance;
|
|
161
|
+
return buildHealthyCriteriaInstance(args);
|
|
194
162
|
}
|
|
195
163
|
|
|
196
164
|
export function buildDockerMonitorConfig(args: {
|
|
@@ -234,13 +202,167 @@ export function buildDockerMonitorConfig(args: {
|
|
|
234
202
|
};
|
|
235
203
|
}
|
|
236
204
|
|
|
205
|
+
/*
|
|
206
|
+
* Two queries over the SAME cumulative counter, differenced per bucket.
|
|
207
|
+
*
|
|
208
|
+
* Some Docker signals are monotonic LIFETIME counters, not levels.
|
|
209
|
+
* `container.cpu.throttling_data.throttled_time` is the total nanoseconds
|
|
210
|
+
* the cgroup has ever been throttled; `container.restarts` is Docker's
|
|
211
|
+
* lifetime RestartCount. Thresholding either one directly has two failure
|
|
212
|
+
* modes, and BOTH shipped:
|
|
213
|
+
*
|
|
214
|
+
* - it fires on history. A container throttled once an hour ago, or that
|
|
215
|
+
* crash-looped last week, still reports a non-zero lifetime total
|
|
216
|
+
* forever — so "> 0" / "> 5" is true for essentially every container
|
|
217
|
+
* that has ever had a bad day. Sustained evaluation makes this worse,
|
|
218
|
+
* not better: every per-minute bucket of a lifetime counter breaches.
|
|
219
|
+
* - it can never recover. A monotonic counter cannot come back down, so
|
|
220
|
+
* the complementary healthy comparison ("= 0", "<= 4.5") is unreachable
|
|
221
|
+
* by construction. The alert stays open until a human closes it, and
|
|
222
|
+
* the next evaluation reopens it.
|
|
223
|
+
*
|
|
224
|
+
* The alerting path has no rate operator. `transformAsRate` on
|
|
225
|
+
* MetricQueryConfigData is CHART-only (MetricCharts.tsx is its only reader;
|
|
226
|
+
* monitorDocker never looks at it), and `transformValue` is a function, so
|
|
227
|
+
* it cannot survive the JSON round-trip a monitor step takes through
|
|
228
|
+
* Postgres. Nothing between ingest and alerting differences a cumulative
|
|
229
|
+
* OTLP sum either — OtelMetricsIngestService only RECORDS
|
|
230
|
+
* `aggregationTemporality`/`isMonotonic` so the browser can suggest a rate
|
|
231
|
+
* view. So the delta has to be built from what the worker does honour: two
|
|
232
|
+
* queries over the same metric, one Max and one Min, plus a formula
|
|
233
|
+
* subtracting them. `aggregatePerSeriesFromRawMetrics` buckets rows per
|
|
234
|
+
* (series, minute) using EACH query's own aggregation, so `max - min` is
|
|
235
|
+
* the counter's increase WITHIN each minute, and the criteria's
|
|
236
|
+
* `EvaluateOverTimeType.Sum` totals those increases across the window.
|
|
237
|
+
*
|
|
238
|
+
* READ THE THRESHOLD AGAINST THE AGENT'S SCRAPE INTERVAL. Two consequences:
|
|
239
|
+
*
|
|
240
|
+
* 1. The delta only sees growth BETWEEN samples inside one bucket. The
|
|
241
|
+
* shipped agent scrapes every 30s
|
|
242
|
+
* (DockerAgent/otel-collector-config.yaml), giving exactly two samples
|
|
243
|
+
* per one-minute bucket, so roughly HALF the window's growth is
|
|
244
|
+
* counted. That is not a rounding error — every threshold below is
|
|
245
|
+
* effectively "about twice this much real activity". It only ever
|
|
246
|
+
* UNDERCOUNTS, so ordinary data cannot manufacture a breach. Do not
|
|
247
|
+
* raise a threshold to "compensate"; it is already compensated for.
|
|
248
|
+
* 2. At a scrape interval of 60s or slower each bucket holds a single
|
|
249
|
+
* sample, `max - min` is identically 0, and every template built on
|
|
250
|
+
* this helper stops alerting entirely, silently. Anyone raising
|
|
251
|
+
* `collection_interval` past 30s has to revisit these.
|
|
252
|
+
*
|
|
253
|
+
* It CAN spike on a counter RESET. A container restart recreates the
|
|
254
|
+
* cgroup, so a bucket straddling the restart sees [large, small] and
|
|
255
|
+
* reports the whole pre-restart lifetime total as one minute of growth — a
|
|
256
|
+
* spurious alert that clears itself once that minute leaves the rolling
|
|
257
|
+
* window. Prometheus-style reset detection would need consecutive raw
|
|
258
|
+
* samples the worker never exposes, so this is accepted rather than fixed.
|
|
259
|
+
* It is bounded, unlike the permanent alert it replaces.
|
|
260
|
+
*
|
|
261
|
+
* If the formula fails to evaluate, appendFormulaResults pushes an empty
|
|
262
|
+
* result and NEITHER criteria fires (NoDataPolicy.Ignore): the monitor
|
|
263
|
+
* holds its previous status rather than flipping.
|
|
264
|
+
*/
|
|
265
|
+
export function buildDockerDeltaMonitorConfig(args: {
|
|
266
|
+
hostIdentifier: string;
|
|
267
|
+
metricName: string;
|
|
268
|
+
maxAlias: string;
|
|
269
|
+
minAlias: string;
|
|
270
|
+
resultAlias: string;
|
|
271
|
+
resultLegend: string;
|
|
272
|
+
/*
|
|
273
|
+
* A LABEL only, and only safe because MetricResultUnitConverter converts
|
|
274
|
+
* QUERY results and never formula results, and MetricMonitorCriteria
|
|
275
|
+
* defaults `thresholdUnit` to the formula's own `legendUnit` — so sample
|
|
276
|
+
* and threshold units match and no conversion runs. Leave it undefined
|
|
277
|
+
* for a dimensionless count.
|
|
278
|
+
*/
|
|
279
|
+
resultLegendUnit?: string | undefined;
|
|
280
|
+
/*
|
|
281
|
+
* Applied to the raw delta INSIDE the formula, e.g. 1000000 to express a
|
|
282
|
+
* nanosecond counter's growth in milliseconds. Scaled in the formula
|
|
283
|
+
* rather than via `legendUnit` for exactly the reason above: a formula's
|
|
284
|
+
* legendUnit converts nothing.
|
|
285
|
+
*/
|
|
286
|
+
scaleDivisor?: number | undefined;
|
|
287
|
+
rollingTime: RollingTime;
|
|
288
|
+
groupByAttributeKey?: string | undefined;
|
|
289
|
+
}): MonitorStepDockerMonitor {
|
|
290
|
+
const buildQueryConfig: (
|
|
291
|
+
alias: string,
|
|
292
|
+
aggregationType: MetricsAggregationType,
|
|
293
|
+
) => any = (alias: string, aggregationType: MetricsAggregationType): any => {
|
|
294
|
+
return {
|
|
295
|
+
metricAliasData: {
|
|
296
|
+
metricVariable: alias,
|
|
297
|
+
title: alias,
|
|
298
|
+
description: alias,
|
|
299
|
+
legend: alias,
|
|
300
|
+
// Unset so MetricResultUnitConverter passes the raw value through.
|
|
301
|
+
legendUnit: undefined,
|
|
302
|
+
},
|
|
303
|
+
metricQueryData: {
|
|
304
|
+
filterData: {
|
|
305
|
+
metricName: args.metricName,
|
|
306
|
+
attributes: {},
|
|
307
|
+
aggegationType: aggregationType,
|
|
308
|
+
aggregateBy: {},
|
|
309
|
+
},
|
|
310
|
+
/*
|
|
311
|
+
* Both halves MUST group identically. buildSeriesBreakdown joins
|
|
312
|
+
* the two queries by series fingerprint, so a key only one side
|
|
313
|
+
* carries splits them into fingerprints that never meet, the
|
|
314
|
+
* formula evaluates against an empty operand, and the monitor
|
|
315
|
+
* silently stops alerting.
|
|
316
|
+
*/
|
|
317
|
+
...(args.groupByAttributeKey
|
|
318
|
+
? { groupByAttributeKeys: [args.groupByAttributeKey] }
|
|
319
|
+
: {}),
|
|
320
|
+
},
|
|
321
|
+
};
|
|
322
|
+
};
|
|
323
|
+
|
|
324
|
+
const expression: string = args.scaleDivisor
|
|
325
|
+
? `(${args.maxAlias} - ${args.minAlias}) / ${args.scaleDivisor}`
|
|
326
|
+
: `${args.maxAlias} - ${args.minAlias}`;
|
|
327
|
+
|
|
328
|
+
return {
|
|
329
|
+
hostIdentifier: args.hostIdentifier,
|
|
330
|
+
containerFilters: {},
|
|
331
|
+
metricViewConfig: {
|
|
332
|
+
/*
|
|
333
|
+
* The Max query is FIRST so `queryConfigs[0]` still describes the
|
|
334
|
+
* underlying metric, the way it does for a single-query template.
|
|
335
|
+
*/
|
|
336
|
+
queryConfigs: [
|
|
337
|
+
buildQueryConfig(args.maxAlias, MetricsAggregationType.Max),
|
|
338
|
+
buildQueryConfig(args.minAlias, MetricsAggregationType.Min),
|
|
339
|
+
],
|
|
340
|
+
formulaConfigs: [
|
|
341
|
+
{
|
|
342
|
+
metricAliasData: {
|
|
343
|
+
metricVariable: args.resultAlias,
|
|
344
|
+
title: args.resultLegend,
|
|
345
|
+
description: args.resultLegend,
|
|
346
|
+
legend: args.resultLegend,
|
|
347
|
+
legendUnit: args.resultLegendUnit,
|
|
348
|
+
},
|
|
349
|
+
metricFormulaData: {
|
|
350
|
+
metricFormula: expression,
|
|
351
|
+
},
|
|
352
|
+
},
|
|
353
|
+
],
|
|
354
|
+
},
|
|
355
|
+
rollingTime: args.rollingTime,
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
|
|
237
359
|
// --- Template Definitions ---
|
|
238
360
|
|
|
239
361
|
const highCpuTemplate: DockerAlertTemplate = {
|
|
240
362
|
id: "docker-high-cpu",
|
|
241
363
|
name: "High Container CPU Usage",
|
|
242
364
|
description:
|
|
243
|
-
"Alert when container CPU usage
|
|
365
|
+
"Alert when a container's CPU usage stays above 80% of ONE CPU core for the whole window. This is the same number `docker stats` prints, so 100% is one full core and a container spread across several cores reads above 100. One alert per container.",
|
|
244
366
|
category: "Resource",
|
|
245
367
|
severity: "Warning",
|
|
246
368
|
getMonitorStep: (args: DockerAlertTemplateArgs): MonitorStep => {
|
|
@@ -268,11 +390,11 @@ const highCpuTemplate: DockerAlertTemplate = {
|
|
|
268
390
|
metricAlias,
|
|
269
391
|
filterType: FilterType.GreaterThan,
|
|
270
392
|
value: 80,
|
|
271
|
-
incidentTitle: `[Docker] High CPU Usage (>80%
|
|
272
|
-
incidentDescription: `A Docker container's CPU usage
|
|
273
|
-
criteriaName: "High CPU - Usage > 80%",
|
|
393
|
+
incidentTitle: `[Docker] High CPU Usage (>80% of one core)${dockerTitleSuffix(args)}`,
|
|
394
|
+
incidentDescription: `A Docker container's CPU usage stayed above 80% of a single CPU core for the whole evaluation window. \`container.cpu.utilization\` is the figure \`docker stats\` reports: 100% is one full core, NOT 100% of the host, so a container using two cores reads 200. On a multi-core host this threshold is therefore an absolute CPU budget rather than a share of the machine — raise it if this container is meant to use more than one core. Check the root cause for the container and the observed values.`,
|
|
395
|
+
criteriaName: "High CPU - Usage > 80% of one core",
|
|
274
396
|
criteriaDescription:
|
|
275
|
-
"Triggers when
|
|
397
|
+
"Triggers when a container's CPU usage stays above 80% of one CPU core across the monitoring window.",
|
|
276
398
|
}),
|
|
277
399
|
onlineCriteriaInstance: buildDockerOnlineCriteriaInstance({
|
|
278
400
|
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
@@ -288,7 +410,7 @@ const highMemoryTemplate: DockerAlertTemplate = {
|
|
|
288
410
|
id: "docker-high-memory",
|
|
289
411
|
name: "High Container Memory Usage",
|
|
290
412
|
description:
|
|
291
|
-
"Alert when container memory usage
|
|
413
|
+
"Alert when container memory usage stays above 85% of its memory limit — or of HOST memory, when the container was started without a limit. One alert per container.",
|
|
292
414
|
category: "Resource",
|
|
293
415
|
severity: "Warning",
|
|
294
416
|
getMonitorStep: (args: DockerAlertTemplateArgs): MonitorStep => {
|
|
@@ -316,11 +438,11 @@ const highMemoryTemplate: DockerAlertTemplate = {
|
|
|
316
438
|
metricAlias,
|
|
317
439
|
filterType: FilterType.GreaterThan,
|
|
318
440
|
value: 85,
|
|
319
|
-
incidentTitle: `[Docker] High Memory Usage (>85%)
|
|
320
|
-
incidentDescription: `A Docker container's memory usage
|
|
441
|
+
incidentTitle: `[Docker] High Memory Usage (>85%)${dockerTitleSuffix(args)}`,
|
|
442
|
+
incidentDescription: `A Docker container's memory usage stayed above 85% for the whole evaluation window. \`container.memory.percent\` divides by the container's memory limit when one is set and by the HOST's total memory when it is not, so check whether this container was started with \`--memory\` before treating this as an impending OOM kill: an unlimited container at 86% is using 86% of the machine and will not be OOM-killed for hitting a limit that does not exist. Check the root cause for the container and the observed values.`,
|
|
321
443
|
criteriaName: "High Memory - Usage > 85%",
|
|
322
444
|
criteriaDescription:
|
|
323
|
-
"Triggers when
|
|
445
|
+
"Triggers when a container's memory usage stays above 85% of its limit (or of host memory when unlimited) across the monitoring window.",
|
|
324
446
|
}),
|
|
325
447
|
onlineCriteriaInstance: buildDockerOnlineCriteriaInstance({
|
|
326
448
|
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
@@ -336,19 +458,44 @@ const containerRestartLoopTemplate: DockerAlertTemplate = {
|
|
|
336
458
|
id: "docker-restart-loop",
|
|
337
459
|
name: "Container Restart Loop",
|
|
338
460
|
description:
|
|
339
|
-
"Alert when a container
|
|
461
|
+
"Alert when a container's restart count climbs by more than 3 within fifteen minutes, indicating a crash loop. One alert per container.",
|
|
340
462
|
category: "Container",
|
|
341
463
|
severity: "Critical",
|
|
342
464
|
getMonitorStep: (args: DockerAlertTemplateArgs): MonitorStep => {
|
|
343
465
|
const metricAlias: string = "container_restarts";
|
|
344
466
|
|
|
345
467
|
return buildDockerMonitorStep({
|
|
346
|
-
|
|
468
|
+
/*
|
|
469
|
+
* `container.restarts` is Docker's LIFETIME RestartCount, not a
|
|
470
|
+
* windowed count, and nothing in the pipeline deltas it. Comparing it
|
|
471
|
+
* to a constant asks "has this container ever crash-looped" — true
|
|
472
|
+
* forever once true, and unrecoverable against a counter that only
|
|
473
|
+
* goes up. The loop signal is how much the counter GREW. See
|
|
474
|
+
* buildDockerDeltaMonitorConfig.
|
|
475
|
+
*/
|
|
476
|
+
dockerMonitor: buildDockerDeltaMonitorConfig({
|
|
347
477
|
hostIdentifier: args.hostIdentifier,
|
|
348
478
|
metricName: "container.restarts",
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
479
|
+
maxAlias: "container_restarts_max",
|
|
480
|
+
minAlias: "container_restarts_min",
|
|
481
|
+
resultAlias: metricAlias,
|
|
482
|
+
resultLegend: "Container Restarts (in window)",
|
|
483
|
+
/*
|
|
484
|
+
* Deliberately no resultLegendUnit: a restart count is
|
|
485
|
+
* dimensionless, and MetricMonitorCriteria reads a formula's
|
|
486
|
+
* legendUnit as the sample unit to convert from.
|
|
487
|
+
*/
|
|
488
|
+
/*
|
|
489
|
+
* Fifteen minutes, not five. The per-minute Max-minus-Min delta is
|
|
490
|
+
* a LOWER BOUND: the agent scrapes every 30s and buckets are one
|
|
491
|
+
* minute, so an isolated restart is only counted when it lands
|
|
492
|
+
* between the two samples of the SAME minute — roughly half are
|
|
493
|
+
* missed. Bursts inside one 30s gap are counted in full, and
|
|
494
|
+
* Docker's restart backoff (doubling, capped at 60s) puts a real
|
|
495
|
+
* crash loop at ~20 restarts per fifteen minutes, so the threshold
|
|
496
|
+
* below still clears with room to spare.
|
|
497
|
+
*/
|
|
498
|
+
rollingTime: RollingTime.Past15Minutes,
|
|
352
499
|
groupByAttributeKey: "resource.container.name",
|
|
353
500
|
}),
|
|
354
501
|
offlineCriteriaInstance: buildDockerOfflineCriteriaInstance({
|
|
@@ -358,18 +505,35 @@ const containerRestartLoopTemplate: DockerAlertTemplate = {
|
|
|
358
505
|
monitorName: args.monitorName,
|
|
359
506
|
metricAlias,
|
|
360
507
|
filterType: FilterType.GreaterThan,
|
|
361
|
-
value:
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
508
|
+
value: 3,
|
|
509
|
+
/*
|
|
510
|
+
* Sum over the window, not the sustained AllValues default: each
|
|
511
|
+
* sample is ONE MINUTE'S restart increment, and most minutes of a
|
|
512
|
+
* crash loop are zero, so "every bucket breached" is unreachable.
|
|
513
|
+
* The window total is the loop count. This is the semantics the
|
|
514
|
+
* docs have always described for this template ("> 3 / Sum" in
|
|
515
|
+
* App/FeatureSet/Docs/Content/en/monitor/docker-monitor.md) and
|
|
516
|
+
* which the code never implemented.
|
|
517
|
+
*/
|
|
518
|
+
metricAggregationType: EvaluateOverTimeType.Sum,
|
|
519
|
+
incidentTitle: `[Docker] Container Restart Loop Detected${dockerTitleSuffix(args)}`,
|
|
520
|
+
incidentDescription: `A Docker container restarted more than 3 times in the last fifteen minutes — it is crash-looping, not recovering from a one-off failure. Check the root cause for the specific container, then read that container's logs and its restart policy.`,
|
|
521
|
+
criteriaName: "Restart Loop - Restarts > 3 in 15 min",
|
|
365
522
|
criteriaDescription:
|
|
366
|
-
"Triggers when
|
|
523
|
+
"Triggers when a container's restart counter increases by more than 3 across the monitoring window.",
|
|
367
524
|
}),
|
|
368
525
|
onlineCriteriaInstance: buildDockerOnlineCriteriaInstance({
|
|
369
526
|
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
370
527
|
metricAlias,
|
|
371
528
|
filterType: FilterType.LessThanOrEqualTo,
|
|
372
|
-
value:
|
|
529
|
+
value: 3,
|
|
530
|
+
/*
|
|
531
|
+
* Must match the unhealthy side. A pair evaluating the same alias
|
|
532
|
+
* under different window aggregations is not complementary, and the
|
|
533
|
+
* dead band derived from 3 (recover at 2.7) would be measuring a
|
|
534
|
+
* different quantity from the one that fired.
|
|
535
|
+
*/
|
|
536
|
+
metricAggregationType: EvaluateOverTimeType.Sum,
|
|
373
537
|
}),
|
|
374
538
|
});
|
|
375
539
|
},
|
|
@@ -379,24 +543,30 @@ const highCpuThrottlingTemplate: DockerAlertTemplate = {
|
|
|
379
543
|
id: "docker-cpu-throttling",
|
|
380
544
|
name: "Container CPU Throttling",
|
|
381
545
|
description:
|
|
382
|
-
"Alert when a container
|
|
546
|
+
"Alert when a container accumulates more than a second of CPU throttling in five minutes, meaning it is hitting its CPU limit. One alert per container.",
|
|
383
547
|
category: "Resource",
|
|
384
548
|
severity: "Warning",
|
|
385
549
|
getMonitorStep: (args: DockerAlertTemplateArgs): MonitorStep => {
|
|
386
550
|
const metricAlias: string = "cpu_throttled";
|
|
387
551
|
|
|
388
552
|
return buildDockerMonitorStep({
|
|
389
|
-
|
|
553
|
+
/*
|
|
554
|
+
* throttled_time is a lifetime NANOSECOND counter, so this template
|
|
555
|
+
* alerts on how much it GREW in the window, not on its value. See
|
|
556
|
+
* buildDockerDeltaMonitorConfig for why the value itself is unusable,
|
|
557
|
+
* and for what the delta does and does not see.
|
|
558
|
+
*/
|
|
559
|
+
dockerMonitor: buildDockerDeltaMonitorConfig({
|
|
390
560
|
hostIdentifier: args.hostIdentifier,
|
|
391
561
|
metricName: "container.cpu.throttling_data.throttled_time",
|
|
392
|
-
|
|
562
|
+
maxAlias: "cpu_throttled_max",
|
|
563
|
+
minAlias: "cpu_throttled_min",
|
|
564
|
+
resultAlias: metricAlias,
|
|
565
|
+
resultLegend: "CPU Throttled Time",
|
|
566
|
+
resultLegendUnit: "ms",
|
|
567
|
+
// The counter is nanoseconds; report the growth in milliseconds.
|
|
568
|
+
scaleDivisor: 1000000,
|
|
393
569
|
rollingTime: RollingTime.Past5Minutes,
|
|
394
|
-
/*
|
|
395
|
-
* Max WITHIN each container's series, so throttled time is never
|
|
396
|
-
* summed across containers — grouping by container name attributes
|
|
397
|
-
* the throttling to the container that actually suffered it.
|
|
398
|
-
*/
|
|
399
|
-
aggregationType: MetricsAggregationType.Max,
|
|
400
570
|
groupByAttributeKey: "resource.container.name",
|
|
401
571
|
}),
|
|
402
572
|
offlineCriteriaInstance: buildDockerOfflineCriteriaInstance({
|
|
@@ -406,18 +576,36 @@ const highCpuThrottlingTemplate: DockerAlertTemplate = {
|
|
|
406
576
|
monitorName: args.monitorName,
|
|
407
577
|
metricAlias,
|
|
408
578
|
filterType: FilterType.GreaterThan,
|
|
409
|
-
value:
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
579
|
+
value: 1000,
|
|
580
|
+
/*
|
|
581
|
+
* Sum, not the AllValues default. Each sample here is ONE MINUTE'S
|
|
582
|
+
* growth, so "how much throttling in the window" is their total.
|
|
583
|
+
* AllValues would instead demand a full second of throttling in
|
|
584
|
+
* every single minute — a much rarer event than the one this
|
|
585
|
+
* template is named for, so the default would quietly disable it.
|
|
586
|
+
* Note the threshold is MEASURED, not real, throttling: at the
|
|
587
|
+
* agent's 30s scrape roughly half is captured, so 1000 ms here is
|
|
588
|
+
* about two seconds of actual throttling per five minutes.
|
|
589
|
+
*/
|
|
590
|
+
metricAggregationType: EvaluateOverTimeType.Sum,
|
|
591
|
+
incidentTitle: `[Docker] CPU Throttling Detected${dockerTitleSuffix(args)}`,
|
|
592
|
+
incidentDescription: `A Docker container accumulated more than 1000 ms of CPU throttling in the last 5 minutes. The container is hitting its CPU limit and the kernel's CFS quota is stalling it — throttling is silent, so it surfaces as latency rather than as an error. Consider raising the container's CPU limit or reducing its work. Check the root cause for the container and the throttled time observed.`,
|
|
593
|
+
criteriaName: "CPU Throttling - Throttled Time > 1000 ms per 5 min",
|
|
413
594
|
criteriaDescription:
|
|
414
|
-
"Triggers when
|
|
595
|
+
"Triggers when a container's CPU throttled time grows by more than 1000 ms over the monitoring window.",
|
|
415
596
|
}),
|
|
416
597
|
onlineCriteriaInstance: buildDockerOnlineCriteriaInstance({
|
|
417
598
|
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
418
599
|
metricAlias,
|
|
419
|
-
filterType: FilterType.
|
|
420
|
-
value:
|
|
600
|
+
filterType: FilterType.LessThanOrEqualTo,
|
|
601
|
+
value: 1000,
|
|
602
|
+
/*
|
|
603
|
+
* Must match the unhealthy side. A pair evaluating the same alias
|
|
604
|
+
* under different window aggregations is not complementary, and the
|
|
605
|
+
* dead band derived from 1000 (recover at 900) would be measuring a
|
|
606
|
+
* different quantity from the one that fired.
|
|
607
|
+
*/
|
|
608
|
+
metricAggregationType: EvaluateOverTimeType.Sum,
|
|
421
609
|
}),
|
|
422
610
|
});
|
|
423
611
|
},
|
|
@@ -427,7 +615,7 @@ const highProcessCountTemplate: DockerAlertTemplate = {
|
|
|
427
615
|
id: "docker-high-pids",
|
|
428
616
|
name: "High Container Process Count",
|
|
429
617
|
description:
|
|
430
|
-
"Alert when a container
|
|
618
|
+
"Alert when a container's task count (processes PLUS threads) stays above 2000, which may indicate a fork bomb, a thread leak, or an unbounded worker pool. One alert per container.",
|
|
431
619
|
category: "Container",
|
|
432
620
|
severity: "Warning",
|
|
433
621
|
getMonitorStep: (args: DockerAlertTemplateArgs): MonitorStep => {
|
|
@@ -449,23 +637,45 @@ const highProcessCountTemplate: DockerAlertTemplate = {
|
|
|
449
637
|
monitorName: args.monitorName,
|
|
450
638
|
metricAlias,
|
|
451
639
|
filterType: FilterType.GreaterThan,
|
|
452
|
-
value:
|
|
453
|
-
incidentTitle: `[Docker] High Process Count (>
|
|
454
|
-
incidentDescription: `A Docker container
|
|
455
|
-
criteriaName: "High PIDs - Count >
|
|
640
|
+
value: 2000,
|
|
641
|
+
incidentTitle: `[Docker] High Process/Thread Count (>2000)${dockerTitleSuffix(args)}`,
|
|
642
|
+
incidentDescription: `A Docker container held more than 2000 tasks for the whole evaluation window. \`container.pids.count\` reads the cgroup pids controller, which counts TASKS — kernel threads as well as processes — so a JVM, an nginx with a large worker pool, or a Go binary sits far above its process count. Sustained above 2000 usually means a fork bomb, a thread leak, or a pool sized without a ceiling. Check the root cause for the container and the observed counts.`,
|
|
643
|
+
criteriaName: "High PIDs - Task Count > 2000",
|
|
456
644
|
criteriaDescription:
|
|
457
|
-
"Triggers when container process count
|
|
645
|
+
"Triggers when a container's task (process + thread) count stays above 2000 across the monitoring window.",
|
|
458
646
|
}),
|
|
459
647
|
onlineCriteriaInstance: buildDockerOnlineCriteriaInstance({
|
|
460
648
|
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
461
649
|
metricAlias,
|
|
462
650
|
filterType: FilterType.LessThanOrEqualTo,
|
|
463
|
-
value:
|
|
651
|
+
value: 2000,
|
|
464
652
|
}),
|
|
465
653
|
});
|
|
466
654
|
},
|
|
467
655
|
};
|
|
468
656
|
|
|
657
|
+
/*
|
|
658
|
+
* KNOWN INERT — do not copy this shape, and do not assume it gives adopters
|
|
659
|
+
* container-down coverage.
|
|
660
|
+
*
|
|
661
|
+
* `container.uptime` is seconds-since-start from the docker_stats receiver,
|
|
662
|
+
* which only scrapes RUNNING containers, so the value is a positive double
|
|
663
|
+
* and `= 0` is unreachable. Absence cannot substitute either: a stopped
|
|
664
|
+
* container emits no datapoint, so it produces no series, and
|
|
665
|
+
* MonitorCriteriaEvaluator discards a grouped criteria whose per-series
|
|
666
|
+
* match list is empty — `onNoDataPolicy: Trigger` would be inert too. The
|
|
667
|
+
* worker's only absent-series injectors are host- and IoT-device-scoped
|
|
668
|
+
* (injectExpectedAbsentHostSeries / injectExpectedAbsentIoTDeviceSeries,
|
|
669
|
+
* gated by HostAbsenceSeries.getHostAbsenceGroupByKey).
|
|
670
|
+
*
|
|
671
|
+
* Real per-container down detection needs an absent-CONTAINER injector in
|
|
672
|
+
* App/FeatureSet/Workers/Jobs/TelemetryMonitor/MonitorTelemetryMonitor.ts.
|
|
673
|
+
* Until that exists this template cannot fire. Removing it is the honest
|
|
674
|
+
* alternative, but that also touches TemplateGroupByKeys.test.ts and six
|
|
675
|
+
* localised docs tables, so it is deliberately left for a follow-up rather
|
|
676
|
+
* than half-done here. PodmanAlertTemplates and DockerSwarmAlertTemplates
|
|
677
|
+
* carry the identical inert design.
|
|
678
|
+
*/
|
|
469
679
|
const containerUptimeTemplate: DockerAlertTemplate = {
|
|
470
680
|
id: "docker-container-down",
|
|
471
681
|
name: "Container Down (Low Uptime)",
|
|
@@ -493,7 +703,7 @@ const containerUptimeTemplate: DockerAlertTemplate = {
|
|
|
493
703
|
metricAlias,
|
|
494
704
|
filterType: FilterType.EqualTo,
|
|
495
705
|
value: 0,
|
|
496
|
-
incidentTitle: `[Docker] Container Down
|
|
706
|
+
incidentTitle: `[Docker] Container Down${dockerTitleSuffix(args)}`,
|
|
497
707
|
incidentDescription: `A Docker container has stopped running. The container uptime is zero, indicating it has crashed, been stopped, or been removed. Check the container status and logs for details.`,
|
|
498
708
|
criteriaName: "Container Down - Uptime = 0",
|
|
499
709
|
criteriaDescription: "Triggers when container uptime drops to zero.",
|