@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 MonitorStepHostMonitor from "./MonitorStepHostMonitor";
|
|
8
11
|
import RollingTime from "../RollingTime/RollingTime";
|
|
9
12
|
import MetricsAggregationType from "../Metrics/MetricsAggregationType";
|
|
@@ -106,59 +109,12 @@ export function buildHostOfflineCriteriaInstance(args: {
|
|
|
106
109
|
incidentDescription?: string;
|
|
107
110
|
criteriaName?: string;
|
|
108
111
|
criteriaDescription?: string;
|
|
112
|
+
metricAggregationType?: EvaluateOverTimeType | undefined;
|
|
109
113
|
}): MonitorCriteriaInstance {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
const incidentDescription: string =
|
|
115
|
-
args.incidentDescription ||
|
|
116
|
-
`${args.monitorName} has triggered an alert condition. See root cause for detailed host information.`;
|
|
117
|
-
|
|
118
|
-
instance.data = {
|
|
119
|
-
id: ObjectID.generate().toString(),
|
|
120
|
-
monitorStatusId: args.offlineMonitorStatusId,
|
|
121
|
-
filterCondition: FilterCondition.Any,
|
|
122
|
-
filters: [
|
|
123
|
-
{
|
|
124
|
-
checkOn: CheckOn.MetricValue,
|
|
125
|
-
filterType: args.filterType,
|
|
126
|
-
metricMonitorOptions: {
|
|
127
|
-
metricAggregationType: EvaluateOverTimeType.AnyValue,
|
|
128
|
-
metricAlias: args.metricAlias,
|
|
129
|
-
},
|
|
130
|
-
value: args.value,
|
|
131
|
-
},
|
|
132
|
-
],
|
|
133
|
-
incidents: [
|
|
134
|
-
{
|
|
135
|
-
title: incidentTitle,
|
|
136
|
-
description: incidentDescription,
|
|
137
|
-
incidentSeverityId: args.incidentSeverityId,
|
|
138
|
-
autoResolveIncident: true,
|
|
139
|
-
id: ObjectID.generate().toString(),
|
|
140
|
-
onCallPolicyIds: [],
|
|
141
|
-
},
|
|
142
|
-
],
|
|
143
|
-
alerts: [
|
|
144
|
-
{
|
|
145
|
-
title: incidentTitle,
|
|
146
|
-
description: incidentDescription,
|
|
147
|
-
alertSeverityId: args.alertSeverityId,
|
|
148
|
-
autoResolveAlert: true,
|
|
149
|
-
id: ObjectID.generate().toString(),
|
|
150
|
-
onCallPolicyIds: [],
|
|
151
|
-
},
|
|
152
|
-
],
|
|
153
|
-
changeMonitorStatus: true,
|
|
154
|
-
createIncidents: true,
|
|
155
|
-
createAlerts: true,
|
|
156
|
-
name: args.criteriaName || `${args.monitorName} - Unhealthy`,
|
|
157
|
-
description:
|
|
158
|
-
args.criteriaDescription || `Criteria for detecting unhealthy state.`,
|
|
159
|
-
};
|
|
160
|
-
|
|
161
|
-
return instance;
|
|
114
|
+
return buildUnhealthyCriteriaInstance({
|
|
115
|
+
...args,
|
|
116
|
+
resourceNoun: "host",
|
|
117
|
+
});
|
|
162
118
|
}
|
|
163
119
|
|
|
164
120
|
export function buildHostOnlineCriteriaInstance(args: {
|
|
@@ -166,34 +122,12 @@ export function buildHostOnlineCriteriaInstance(args: {
|
|
|
166
122
|
metricAlias: string;
|
|
167
123
|
filterType: FilterType;
|
|
168
124
|
value: number;
|
|
125
|
+
recoveryValue?: number | undefined;
|
|
126
|
+
marginFraction?: number | undefined;
|
|
127
|
+
isBinaryMetric?: boolean | undefined;
|
|
128
|
+
metricAggregationType?: EvaluateOverTimeType | undefined;
|
|
169
129
|
}): MonitorCriteriaInstance {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
instance.data = {
|
|
173
|
-
id: ObjectID.generate().toString(),
|
|
174
|
-
monitorStatusId: args.onlineMonitorStatusId,
|
|
175
|
-
filterCondition: FilterCondition.Any,
|
|
176
|
-
filters: [
|
|
177
|
-
{
|
|
178
|
-
checkOn: CheckOn.MetricValue,
|
|
179
|
-
filterType: args.filterType,
|
|
180
|
-
metricMonitorOptions: {
|
|
181
|
-
metricAggregationType: EvaluateOverTimeType.AnyValue,
|
|
182
|
-
metricAlias: args.metricAlias,
|
|
183
|
-
},
|
|
184
|
-
value: args.value,
|
|
185
|
-
},
|
|
186
|
-
],
|
|
187
|
-
incidents: [],
|
|
188
|
-
alerts: [],
|
|
189
|
-
changeMonitorStatus: true,
|
|
190
|
-
createIncidents: false,
|
|
191
|
-
createAlerts: false,
|
|
192
|
-
name: "Healthy",
|
|
193
|
-
description: "Criteria for healthy state.",
|
|
194
|
-
};
|
|
195
|
-
|
|
196
|
-
return instance;
|
|
130
|
+
return buildHealthyCriteriaInstance(args);
|
|
197
131
|
}
|
|
198
132
|
|
|
199
133
|
export function buildHostMonitorConfig(args: {
|
|
@@ -203,7 +137,17 @@ export function buildHostMonitorConfig(args: {
|
|
|
203
137
|
rollingTime: RollingTime;
|
|
204
138
|
aggregationType: MetricsAggregationType;
|
|
205
139
|
attributes?: Record<string, string>;
|
|
206
|
-
|
|
140
|
+
/**
|
|
141
|
+
* Attributes to split the metric by, one alert per group.
|
|
142
|
+
*
|
|
143
|
+
* More than one key is not just finer grouping — the group-by set is
|
|
144
|
+
* exactly what the resulting alert can name. `mountpoint` alone says
|
|
145
|
+
* WHICH mount filled up; adding `device` also says which physical
|
|
146
|
+
* disk, which is the difference between "/var is full" and "/var is
|
|
147
|
+
* full and it is on the same device as /". See SeriesLabelDisplay,
|
|
148
|
+
* which renders these onto the alert's title and description.
|
|
149
|
+
*/
|
|
150
|
+
groupByAttributeKeys?: Array<string> | undefined;
|
|
207
151
|
}): MonitorStepHostMonitor {
|
|
208
152
|
return {
|
|
209
153
|
hostIdentifier: args.hostIdentifier,
|
|
@@ -224,8 +168,9 @@ export function buildHostMonitorConfig(args: {
|
|
|
224
168
|
aggegationType: args.aggregationType,
|
|
225
169
|
aggregateBy: {},
|
|
226
170
|
},
|
|
227
|
-
...(args.
|
|
228
|
-
|
|
171
|
+
...(args.groupByAttributeKeys &&
|
|
172
|
+
args.groupByAttributeKeys.length > 0
|
|
173
|
+
? { groupByAttributeKeys: args.groupByAttributeKeys }
|
|
229
174
|
: {}),
|
|
230
175
|
},
|
|
231
176
|
},
|
|
@@ -236,24 +181,173 @@ export function buildHostMonitorConfig(args: {
|
|
|
236
181
|
};
|
|
237
182
|
}
|
|
238
183
|
|
|
184
|
+
/*
|
|
185
|
+
* The identity an incident title should carry, as a suffix.
|
|
186
|
+
*
|
|
187
|
+
* NOT `monitorName`: the recommendation flow builds that as
|
|
188
|
+
* `${resourceDisplayName} - ${template.name}`
|
|
189
|
+
* (MonitorRecommendationUtil.getMonitorName) and feeds the whole string
|
|
190
|
+
* back in here, so interpolating it produced titles that said the
|
|
191
|
+
* template name twice — "[Host] High CPU Utilization (>80%) - web-01 -
|
|
192
|
+
* High CPU Utilization". `hostIdentifier` is the agent-reported
|
|
193
|
+
* `host.name` the metrics are actually tagged with, which is the one
|
|
194
|
+
* identifier the reader needs, and it says it once.
|
|
195
|
+
*/
|
|
196
|
+
export function hostTitleSuffix(args: HostAlertTemplateArgs): string {
|
|
197
|
+
const host: string = (args.hostIdentifier || "").trim();
|
|
198
|
+
|
|
199
|
+
return host ? ` - ${host}` : "";
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* A host metric that has to be DERIVED — from more than one series, or
|
|
204
|
+
* from a raw ratio that has to be rescaled before anyone can read it.
|
|
205
|
+
*
|
|
206
|
+
* `system.cpu.utilization` is the case this exists for: the hostmetrics
|
|
207
|
+
* cpu scraper partitions it by (cpu, state), and every cpu's states sum
|
|
208
|
+
* to 1. Averaging the raw metric therefore lands at 1/(state count) —
|
|
209
|
+
* ~0.125 on Linux — no matter how busy the host is, so a "> 0.8"
|
|
210
|
+
* criteria is structurally unreachable. Pulling `state=user` and
|
|
211
|
+
* `state=system` as separate queries and summing them yields the
|
|
212
|
+
* "fraction of CPU time spent doing work" that `top` reports, and is the
|
|
213
|
+
* same derivation the host Overview page charts (see
|
|
214
|
+
* App/FeatureSet/Dashboard/src/Pages/Host/View/Overview.tsx).
|
|
215
|
+
* `system.memory.utilization` is partitioned the same way, by `state`.
|
|
216
|
+
*
|
|
217
|
+
* UNITS: `legendUnit` is applied to the FORMULA alias only, never to the
|
|
218
|
+
* operand queries. MetricResultUnitConverter converts query results from
|
|
219
|
+
* their native OTel unit into the query alias's `legendUnit`, and
|
|
220
|
+
* MetricUnitUtil treats the dimensionless "1" and "%" as one family — so
|
|
221
|
+
* a `legendUnit: "%"` on an operand would scale it by 100 BEFORE the
|
|
222
|
+
* formula's own `* 100` ran. Formula configs are never converted, so the
|
|
223
|
+
* unit there is display metadata and the formula owns the scaling. That
|
|
224
|
+
* is also why the `* 100` is written into the formula rather than
|
|
225
|
+
* delegated to a query-level `legendUnit`: the converter is a silent
|
|
226
|
+
* no-op whenever the metric's native unit was not recorded at ingest,
|
|
227
|
+
* and the failure mode would be a [0, 1] sample compared against 80 —
|
|
228
|
+
* a monitor that never fires and never says why.
|
|
229
|
+
*
|
|
230
|
+
* Name the operand aliases after the state they carry (`host_cpu_user`,
|
|
231
|
+
* `host_memory_used`). A criteria bound to a formula alias reports the
|
|
232
|
+
* FORMULA STRING as its metric name and an empty attribute map, so the
|
|
233
|
+
* alias names are the only place the alert body can tell the reader
|
|
234
|
+
* which slice of the metric was measured.
|
|
235
|
+
*
|
|
236
|
+
* This mirrors buildKubernetesRatioMonitorConfig.
|
|
237
|
+
*/
|
|
238
|
+
export function buildHostFormulaMonitorConfig(args: {
|
|
239
|
+
hostIdentifier: string;
|
|
240
|
+
queries: Array<{
|
|
241
|
+
metricAlias: string;
|
|
242
|
+
metricName: string;
|
|
243
|
+
aggregationType: MetricsAggregationType;
|
|
244
|
+
attributes?: Record<string, string> | undefined;
|
|
245
|
+
}>;
|
|
246
|
+
resultAlias: string;
|
|
247
|
+
resultLegend: string;
|
|
248
|
+
formula: string;
|
|
249
|
+
legendUnit?: string | undefined;
|
|
250
|
+
rollingTime: RollingTime;
|
|
251
|
+
groupByAttributeKeys?: Array<string> | undefined;
|
|
252
|
+
}): MonitorStepHostMonitor {
|
|
253
|
+
return {
|
|
254
|
+
hostIdentifier: args.hostIdentifier,
|
|
255
|
+
metricViewConfig: {
|
|
256
|
+
queryConfigs: args.queries.map(
|
|
257
|
+
(query: {
|
|
258
|
+
metricAlias: string;
|
|
259
|
+
metricName: string;
|
|
260
|
+
aggregationType: MetricsAggregationType;
|
|
261
|
+
attributes?: Record<string, string> | undefined;
|
|
262
|
+
}) => {
|
|
263
|
+
return {
|
|
264
|
+
metricAliasData: {
|
|
265
|
+
metricVariable: query.metricAlias,
|
|
266
|
+
title: query.metricAlias,
|
|
267
|
+
description: query.metricAlias,
|
|
268
|
+
legend: query.metricAlias,
|
|
269
|
+
// Never set here — see the UNITS note above.
|
|
270
|
+
legendUnit: undefined,
|
|
271
|
+
},
|
|
272
|
+
metricQueryData: {
|
|
273
|
+
filterData: {
|
|
274
|
+
metricName: query.metricName,
|
|
275
|
+
attributes: query.attributes || {},
|
|
276
|
+
aggegationType: query.aggregationType,
|
|
277
|
+
aggregateBy: {},
|
|
278
|
+
},
|
|
279
|
+
...(args.groupByAttributeKeys &&
|
|
280
|
+
args.groupByAttributeKeys.length > 0
|
|
281
|
+
? { groupByAttributeKeys: args.groupByAttributeKeys }
|
|
282
|
+
: {}),
|
|
283
|
+
},
|
|
284
|
+
};
|
|
285
|
+
},
|
|
286
|
+
),
|
|
287
|
+
formulaConfigs: [
|
|
288
|
+
{
|
|
289
|
+
metricAliasData: {
|
|
290
|
+
metricVariable: args.resultAlias,
|
|
291
|
+
title: args.resultLegend,
|
|
292
|
+
description: args.resultLegend,
|
|
293
|
+
legend: args.resultLegend,
|
|
294
|
+
legendUnit: args.legendUnit,
|
|
295
|
+
},
|
|
296
|
+
metricFormulaData: {
|
|
297
|
+
metricFormula: args.formula,
|
|
298
|
+
},
|
|
299
|
+
},
|
|
300
|
+
],
|
|
301
|
+
},
|
|
302
|
+
rollingTime: args.rollingTime,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
|
|
239
306
|
// --- Template Definitions ---
|
|
240
307
|
|
|
241
308
|
const highCpuTemplate: HostAlertTemplate = {
|
|
242
309
|
id: "host-high-cpu",
|
|
243
310
|
name: "High CPU Utilization",
|
|
244
|
-
description:
|
|
311
|
+
description:
|
|
312
|
+
"Alert when host CPU busy time (user + system) exceeds 80% for the whole evaluation window.",
|
|
245
313
|
category: "Resource",
|
|
246
314
|
severity: "Warning",
|
|
247
315
|
getMonitorStep: (args: HostAlertTemplateArgs): MonitorStep => {
|
|
248
316
|
const metricAlias: string = "host_cpu";
|
|
249
317
|
|
|
250
318
|
return buildHostMonitorStep({
|
|
251
|
-
|
|
319
|
+
/*
|
|
320
|
+
* Busy CPU = user + system, each pulled as its own `state` series.
|
|
321
|
+
* See buildHostFormulaMonitorConfig: averaging the raw metric
|
|
322
|
+
* across all states lands at ~1/(state count) and never reaches any
|
|
323
|
+
* threshold worth alerting on, so this template could not fire.
|
|
324
|
+
*
|
|
325
|
+
* `1 - idle` is the other way to derive this and is deliberately
|
|
326
|
+
* NOT used: it breaks the moment a platform stops emitting the
|
|
327
|
+
* `idle` state. user + system is what the host Overview page
|
|
328
|
+
* charts, so the alert and the chart now agree.
|
|
329
|
+
*/
|
|
330
|
+
hostMonitor: buildHostFormulaMonitorConfig({
|
|
252
331
|
hostIdentifier: args.hostIdentifier,
|
|
253
|
-
|
|
254
|
-
|
|
332
|
+
queries: [
|
|
333
|
+
{
|
|
334
|
+
metricAlias: "host_cpu_user",
|
|
335
|
+
metricName: "system.cpu.utilization",
|
|
336
|
+
aggregationType: MetricsAggregationType.Avg,
|
|
337
|
+
attributes: { state: "user" },
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
metricAlias: "host_cpu_system",
|
|
341
|
+
metricName: "system.cpu.utilization",
|
|
342
|
+
aggregationType: MetricsAggregationType.Avg,
|
|
343
|
+
attributes: { state: "system" },
|
|
344
|
+
},
|
|
345
|
+
],
|
|
346
|
+
resultAlias: metricAlias,
|
|
347
|
+
resultLegend: "CPU Busy (%)",
|
|
348
|
+
formula: "(host_cpu_user + host_cpu_system) * 100",
|
|
349
|
+
legendUnit: "%",
|
|
255
350
|
rollingTime: RollingTime.Past5Minutes,
|
|
256
|
-
aggregationType: MetricsAggregationType.Avg,
|
|
257
351
|
}),
|
|
258
352
|
offlineCriteriaInstance: buildHostOfflineCriteriaInstance({
|
|
259
353
|
offlineMonitorStatusId: args.offlineMonitorStatusId,
|
|
@@ -262,19 +356,19 @@ const highCpuTemplate: HostAlertTemplate = {
|
|
|
262
356
|
monitorName: args.monitorName,
|
|
263
357
|
metricAlias,
|
|
264
358
|
filterType: FilterType.GreaterThan,
|
|
265
|
-
//
|
|
266
|
-
value:
|
|
267
|
-
incidentTitle: `[Host] High CPU Utilization (>80%)
|
|
268
|
-
incidentDescription: `
|
|
359
|
+
// The formula already scales the [0, 1] ratio to percent, so 80 == 80%.
|
|
360
|
+
value: 80,
|
|
361
|
+
incidentTitle: `[Host] High CPU Utilization (>80%)${hostTitleSuffix(args)}`,
|
|
362
|
+
incidentDescription: `CPU busy time (user + system) stayed above 80% for the whole evaluation window on this host. Sustained saturation here shows up as latency in everything the host runs. Iowait and steal are excluded, so this is work the host itself is doing. See the root cause below for the measured values.`,
|
|
269
363
|
criteriaName: "High CPU - Utilization > 80%",
|
|
270
364
|
criteriaDescription:
|
|
271
|
-
"Triggers when host CPU
|
|
365
|
+
"Triggers when host CPU busy time (user + system) exceeds 80% for every sample in the monitoring window.",
|
|
272
366
|
}),
|
|
273
367
|
onlineCriteriaInstance: buildHostOnlineCriteriaInstance({
|
|
274
368
|
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
275
369
|
metricAlias,
|
|
276
370
|
filterType: FilterType.LessThanOrEqualTo,
|
|
277
|
-
value:
|
|
371
|
+
value: 80,
|
|
278
372
|
}),
|
|
279
373
|
});
|
|
280
374
|
},
|
|
@@ -283,19 +377,38 @@ const highCpuTemplate: HostAlertTemplate = {
|
|
|
283
377
|
const highMemoryTemplate: HostAlertTemplate = {
|
|
284
378
|
id: "host-high-memory",
|
|
285
379
|
name: "High Memory Utilization",
|
|
286
|
-
description:
|
|
380
|
+
description:
|
|
381
|
+
"Alert when memory in use — excluding buffers and page cache — exceeds 85% of physical memory.",
|
|
287
382
|
category: "Resource",
|
|
288
383
|
severity: "Warning",
|
|
289
384
|
getMonitorStep: (args: HostAlertTemplateArgs): MonitorStep => {
|
|
290
385
|
const metricAlias: string = "host_memory";
|
|
291
386
|
|
|
292
387
|
return buildHostMonitorStep({
|
|
293
|
-
|
|
388
|
+
/*
|
|
389
|
+
* `state=used` only. The hostmetrics receiver emits this metric once
|
|
390
|
+
* per memory state (used / free / buffered / cached / slab_* on
|
|
391
|
+
* Linux, used / free / inactive on macOS) and a state set sums to 1,
|
|
392
|
+
* so an unfiltered Avg sits at ~1/(state count) forever and could
|
|
393
|
+
* never reach 0.85 — this template never fired. `used` is the same
|
|
394
|
+
* state the host Overview memory tile reads, so the alert and the
|
|
395
|
+
* page now agree.
|
|
396
|
+
*/
|
|
397
|
+
hostMonitor: buildHostFormulaMonitorConfig({
|
|
294
398
|
hostIdentifier: args.hostIdentifier,
|
|
295
|
-
|
|
296
|
-
|
|
399
|
+
queries: [
|
|
400
|
+
{
|
|
401
|
+
metricAlias: "host_memory_used",
|
|
402
|
+
metricName: "system.memory.utilization",
|
|
403
|
+
aggregationType: MetricsAggregationType.Avg,
|
|
404
|
+
attributes: { state: "used" },
|
|
405
|
+
},
|
|
406
|
+
],
|
|
407
|
+
resultAlias: metricAlias,
|
|
408
|
+
resultLegend: "Memory Used (%)",
|
|
409
|
+
formula: "host_memory_used * 100",
|
|
410
|
+
legendUnit: "%",
|
|
297
411
|
rollingTime: RollingTime.Past5Minutes,
|
|
298
|
-
aggregationType: MetricsAggregationType.Avg,
|
|
299
412
|
}),
|
|
300
413
|
offlineCriteriaInstance: buildHostOfflineCriteriaInstance({
|
|
301
414
|
offlineMonitorStatusId: args.offlineMonitorStatusId,
|
|
@@ -304,19 +417,19 @@ const highMemoryTemplate: HostAlertTemplate = {
|
|
|
304
417
|
monitorName: args.monitorName,
|
|
305
418
|
metricAlias,
|
|
306
419
|
filterType: FilterType.GreaterThan,
|
|
307
|
-
//
|
|
308
|
-
value:
|
|
309
|
-
incidentTitle: `[Host] High Memory Utilization (>85%)
|
|
310
|
-
incidentDescription: `
|
|
420
|
+
// The formula already scales the [0, 1] ratio to percent, so 85 == 85%.
|
|
421
|
+
value: 85,
|
|
422
|
+
incidentTitle: `[Host] High Memory Utilization (>85%)${hostTitleSuffix(args)}`,
|
|
423
|
+
incidentDescription: `Memory in use — excluding buffers and page cache — stayed above 85% of physical memory for the whole evaluation window on this host. Sustained pressure here leads to swapping and OOM kills. A host that is mostly page cache will NOT trip this. See the root cause below for the measured values.`,
|
|
311
424
|
criteriaName: "High Memory - Utilization > 85%",
|
|
312
425
|
criteriaDescription:
|
|
313
|
-
"Triggers when
|
|
426
|
+
"Triggers when memory in use exceeds 85% of physical memory for every sample in the monitoring window.",
|
|
314
427
|
}),
|
|
315
428
|
onlineCriteriaInstance: buildHostOnlineCriteriaInstance({
|
|
316
429
|
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
317
430
|
metricAlias,
|
|
318
431
|
filterType: FilterType.LessThanOrEqualTo,
|
|
319
|
-
value:
|
|
432
|
+
value: 85,
|
|
320
433
|
}),
|
|
321
434
|
});
|
|
322
435
|
},
|
|
@@ -333,20 +446,52 @@ const highFilesystemUsageTemplate: HostAlertTemplate = {
|
|
|
333
446
|
const metricAlias: string = "host_filesystem";
|
|
334
447
|
|
|
335
448
|
return buildHostMonitorStep({
|
|
336
|
-
hostMonitor:
|
|
449
|
+
hostMonitor: buildHostFormulaMonitorConfig({
|
|
337
450
|
hostIdentifier: args.hostIdentifier,
|
|
338
|
-
|
|
339
|
-
|
|
451
|
+
queries: [
|
|
452
|
+
{
|
|
453
|
+
metricAlias: "host_filesystem_ratio",
|
|
454
|
+
metricName: "system.filesystem.utilization",
|
|
455
|
+
/*
|
|
456
|
+
* Max WITHIN each mountpoint's series: the peak utilization
|
|
457
|
+
* that mount reached during the window. Grouping by
|
|
458
|
+
* `mountpoint` already keeps mounts from being averaged
|
|
459
|
+
* together, and gives one incident per mount so a second
|
|
460
|
+
* mount filling up is not silenced by the first one's open
|
|
461
|
+
* incident.
|
|
462
|
+
*/
|
|
463
|
+
aggregationType: MetricsAggregationType.Max,
|
|
464
|
+
},
|
|
465
|
+
],
|
|
466
|
+
resultAlias: metricAlias,
|
|
467
|
+
resultLegend: "Filesystem Used (%)",
|
|
468
|
+
/*
|
|
469
|
+
* The raw metric is a [0, 1] ratio with no unit recorded, so
|
|
470
|
+
* without this the body of a Critical alert read a bare "0.93"
|
|
471
|
+
* under a title that says 90%. See buildHostFormulaMonitorConfig
|
|
472
|
+
* for why the scaling lives in the formula.
|
|
473
|
+
*/
|
|
474
|
+
formula: "host_filesystem_ratio * 100",
|
|
475
|
+
legendUnit: "%",
|
|
340
476
|
rollingTime: RollingTime.Past5Minutes,
|
|
341
477
|
/*
|
|
342
|
-
*
|
|
343
|
-
*
|
|
344
|
-
*
|
|
345
|
-
*
|
|
346
|
-
*
|
|
478
|
+
* `mountpoint` is the identity — one incident per mount.
|
|
479
|
+
* `device` rides along because the hostmetrics receiver puts it
|
|
480
|
+
* on the same datapoint, it is constant for a given mount (so it
|
|
481
|
+
* adds no series), and it is the first thing anyone asks after
|
|
482
|
+
* "which mount?": /var at 95% on the same device as / is a
|
|
483
|
+
* different problem from /var on its own disk.
|
|
484
|
+
*
|
|
485
|
+
* NOTE this template still pages on read-only pseudo-filesystems
|
|
486
|
+
* that are 100% full by design (snap `squashfs` loop mounts,
|
|
487
|
+
* macOS `devfs`). The Kubernetes agent's collector already
|
|
488
|
+
* excludes those with an `include_fs_types` allowlist; the
|
|
489
|
+
* standalone host collector config does not, and excluding them
|
|
490
|
+
* here would need a NOT-IN comparison that `filterData.attributes`
|
|
491
|
+
* (exact match only) cannot express. The mount and device are on
|
|
492
|
+
* the alert, so the description below names the pattern instead.
|
|
347
493
|
*/
|
|
348
|
-
|
|
349
|
-
groupByAttributeKey: "mountpoint",
|
|
494
|
+
groupByAttributeKeys: ["mountpoint", "device"],
|
|
350
495
|
}),
|
|
351
496
|
offlineCriteriaInstance: buildHostOfflineCriteriaInstance({
|
|
352
497
|
offlineMonitorStatusId: args.offlineMonitorStatusId,
|
|
@@ -355,19 +500,19 @@ const highFilesystemUsageTemplate: HostAlertTemplate = {
|
|
|
355
500
|
monitorName: args.monitorName,
|
|
356
501
|
metricAlias,
|
|
357
502
|
filterType: FilterType.GreaterThan,
|
|
358
|
-
//
|
|
359
|
-
value:
|
|
360
|
-
incidentTitle: `[Host] High Filesystem Usage (>90%)
|
|
361
|
-
incidentDescription: `
|
|
503
|
+
// The formula already scales the [0, 1] ratio to percent, so 90 == 90%.
|
|
504
|
+
value: 90,
|
|
505
|
+
incidentTitle: `[Host] High Filesystem Usage (>90%)${hostTitleSuffix(args)}`,
|
|
506
|
+
incidentDescription: `This mount stayed above 90% utilization for the whole evaluation window. A full disk causes application failures and data loss. The mount and device are named above. NOTE that read-only pseudo-filesystems — snap squashfs loop mounts under /snap, macOS devfs — sit at 100% by design and can never recover; if this names one of those, it is not actionable and the mount should be excluded from the collector's filesystem scraper.`,
|
|
362
507
|
criteriaName: "High Filesystem - Usage > 90%",
|
|
363
508
|
criteriaDescription:
|
|
364
|
-
"Triggers when
|
|
509
|
+
"Triggers when a host filesystem exceeds 90% utilization for every sample in the monitoring window.",
|
|
365
510
|
}),
|
|
366
511
|
onlineCriteriaInstance: buildHostOnlineCriteriaInstance({
|
|
367
512
|
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
368
513
|
metricAlias,
|
|
369
514
|
filterType: FilterType.LessThanOrEqualTo,
|
|
370
|
-
value:
|
|
515
|
+
value: 90,
|
|
371
516
|
}),
|
|
372
517
|
});
|
|
373
518
|
},
|
|
@@ -377,7 +522,7 @@ const highLoadAverageTemplate: HostAlertTemplate = {
|
|
|
377
522
|
id: "host-high-load-average",
|
|
378
523
|
name: "High Load Average (1m)",
|
|
379
524
|
description:
|
|
380
|
-
"Alert when the host's 1-minute load average
|
|
525
|
+
"Alert when the host's 1-minute load average stays above 4. The threshold is an absolute run-queue length and is NOT normalized by core count.",
|
|
381
526
|
category: "Resource",
|
|
382
527
|
severity: "Warning",
|
|
383
528
|
getMonitorStep: (args: HostAlertTemplateArgs): MonitorStep => {
|
|
@@ -397,13 +542,19 @@ const highLoadAverageTemplate: HostAlertTemplate = {
|
|
|
397
542
|
alertSeverityId: args.defaultAlertSeverityId,
|
|
398
543
|
monitorName: args.monitorName,
|
|
399
544
|
metricAlias,
|
|
545
|
+
/*
|
|
546
|
+
* A raw run-queue length, NOT a ratio and NOT normalized by core
|
|
547
|
+
* count. Normalizing would need `system.cpu.logical.count`, which
|
|
548
|
+
* only the standalone collector config enables today, so the
|
|
549
|
+
* threshold stays absolute and the copy below says so.
|
|
550
|
+
*/
|
|
400
551
|
filterType: FilterType.GreaterThan,
|
|
401
552
|
value: 4,
|
|
402
|
-
incidentTitle: `[Host] High Load Average (1m > 4)
|
|
403
|
-
incidentDescription: `
|
|
553
|
+
incidentTitle: `[Host] High Load Average (1m > 4)${hostTitleSuffix(args)}`,
|
|
554
|
+
incidentDescription: `This host's 1-minute load average stayed above 4 for the whole evaluation window, which indicates CPU contention or runaway processes. NOTE the threshold is an absolute run-queue length and is NOT normalized by core count: 4 is deep saturation on a 2-core host and routine on a 32-core one, so raise it on large hosts.`,
|
|
404
555
|
criteriaName: "High Load - 1m Average > 4",
|
|
405
556
|
criteriaDescription:
|
|
406
|
-
"Triggers when the host's 1-minute load average exceeds 4
|
|
557
|
+
"Triggers when the host's 1-minute load average exceeds 4 for every sample in the monitoring window.",
|
|
407
558
|
}),
|
|
408
559
|
onlineCriteriaInstance: buildHostOnlineCriteriaInstance({
|
|
409
560
|
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
@@ -419,7 +570,7 @@ const highProcessCountTemplate: HostAlertTemplate = {
|
|
|
419
570
|
id: "host-high-processes",
|
|
420
571
|
name: "High Process Count",
|
|
421
572
|
description:
|
|
422
|
-
"Alert when the host
|
|
573
|
+
"Alert when the host's largest process-state bucket (running, sleeping, idle, ...) exceeds 2000 processes, which may indicate a fork bomb or resource leak. Linux only.",
|
|
423
574
|
category: "Host",
|
|
424
575
|
severity: "Warning",
|
|
425
576
|
getMonitorStep: (args: HostAlertTemplateArgs): MonitorStep => {
|
|
@@ -431,6 +582,26 @@ const highProcessCountTemplate: HostAlertTemplate = {
|
|
|
431
582
|
metricName: "system.processes.count",
|
|
432
583
|
metricAlias,
|
|
433
584
|
rollingTime: RollingTime.Past5Minutes,
|
|
585
|
+
/*
|
|
586
|
+
* `system.processes.count` is partitioned by process status
|
|
587
|
+
* (running / sleeping / blocked / idle / ...) — one datapoint per
|
|
588
|
+
* status, which is why ingest SUMS every datapoint to derive
|
|
589
|
+
* `host.processCount` and why the host Overview tile has to filter
|
|
590
|
+
* down to a single status. This query is ungrouped and unfiltered,
|
|
591
|
+
* so `Max` compares the LARGEST SINGLE STATUS BUCKET, not the
|
|
592
|
+
* host's total process count.
|
|
593
|
+
*
|
|
594
|
+
* `Max` is kept deliberately. `Sum` is not the fix: the query
|
|
595
|
+
* aggregates within a time bucket, so it would add every status
|
|
596
|
+
* AND every scrape inside that bucket together. Grouping by status
|
|
597
|
+
* would need a per-status threshold nobody has evidence for, and
|
|
598
|
+
* would break the `groupByAttributeKeys: []` contract pinned in
|
|
599
|
+
* TemplateGroupByKeys.test.ts. On Linux the largest bucket tracks
|
|
600
|
+
* the total closely enough to stay a usable "far too many
|
|
601
|
+
* processes" signal — so the QUERY stays as it is and the COPY
|
|
602
|
+
* below stops claiming a total nobody could reconcile with a
|
|
603
|
+
* process listing.
|
|
604
|
+
*/
|
|
434
605
|
aggregationType: MetricsAggregationType.Max,
|
|
435
606
|
}),
|
|
436
607
|
offlineCriteriaInstance: buildHostOfflineCriteriaInstance({
|
|
@@ -441,10 +612,11 @@ const highProcessCountTemplate: HostAlertTemplate = {
|
|
|
441
612
|
metricAlias,
|
|
442
613
|
filterType: FilterType.GreaterThan,
|
|
443
614
|
value: 2000,
|
|
444
|
-
incidentTitle: `[Host] High Process Count (>2000)
|
|
445
|
-
incidentDescription: `
|
|
615
|
+
incidentTitle: `[Host] High Process Count (>2000)${hostTitleSuffix(args)}`,
|
|
616
|
+
incidentDescription: `The largest single process-state bucket on this host (running, sleeping, idle, ...) held more than 2000 processes for every sample in the evaluation window. This is NOT the host's total process count, so it will not match the total a process listing reports. Check the host for runaway or unreaped processes. The metric comes from the hostmetrics processes scraper, which reports on Linux only.`,
|
|
446
617
|
criteriaName: "High Processes - Count > 2000",
|
|
447
|
-
criteriaDescription:
|
|
618
|
+
criteriaDescription:
|
|
619
|
+
"Triggers when the largest single process-state bucket exceeds 2000 processes for every sample in the monitoring window.",
|
|
448
620
|
}),
|
|
449
621
|
onlineCriteriaInstance: buildHostOnlineCriteriaInstance({
|
|
450
622
|
onlineMonitorStatusId: args.onlineMonitorStatusId,
|