@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,13 @@ import ObjectID from "../ObjectID";
|
|
|
2
2
|
import MonitorStep from "./MonitorStep";
|
|
3
3
|
import MonitorCriteria from "./MonitorCriteria";
|
|
4
4
|
import MonitorCriteriaInstance from "./MonitorCriteriaInstance";
|
|
5
|
+
import {
|
|
6
|
+
AdditionalCriteriaFilterSpec,
|
|
7
|
+
buildHealthyCriteriaInstance,
|
|
8
|
+
buildUnhealthyCriteriaInstance,
|
|
9
|
+
} from "./Recommendation/RecommendationCriteriaBuilder";
|
|
5
10
|
import FilterCondition from "../Filter/FilterCondition";
|
|
6
|
-
import {
|
|
11
|
+
import { FilterType, EvaluateOverTimeType } from "./CriteriaFilter";
|
|
7
12
|
import MonitorStepProxmoxMonitor from "./MonitorStepProxmoxMonitor";
|
|
8
13
|
import RollingTime from "../RollingTime/RollingTime";
|
|
9
14
|
import MetricsAggregationType from "../Metrics/MetricsAggregationType";
|
|
@@ -106,59 +111,22 @@ export function buildProxmoxOfflineCriteriaInstance(args: {
|
|
|
106
111
|
incidentDescription?: string;
|
|
107
112
|
criteriaName?: string;
|
|
108
113
|
criteriaDescription?: string;
|
|
114
|
+
metricAggregationType?: EvaluateOverTimeType | undefined;
|
|
115
|
+
/*
|
|
116
|
+
* Extra comparisons combined with the primary one per `filterCondition`.
|
|
117
|
+
* On a grouped monitor they are combined WITHIN a series
|
|
118
|
+
* (MonitorCriteriaEvaluator.collectPerSeriesMatches buckets every
|
|
119
|
+
* filter's result by series fingerprint), so `All` means "this guest is
|
|
120
|
+
* down AND this same guest is meant to be up" rather than "some guest is
|
|
121
|
+
* down and some other guest has onboot set".
|
|
122
|
+
*/
|
|
123
|
+
additionalFilters?: Array<AdditionalCriteriaFilterSpec> | undefined;
|
|
124
|
+
filterCondition?: FilterCondition | undefined;
|
|
109
125
|
}): 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 Proxmox cluster 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;
|
|
126
|
+
return buildUnhealthyCriteriaInstance({
|
|
127
|
+
...args,
|
|
128
|
+
resourceNoun: "Proxmox resource",
|
|
129
|
+
});
|
|
162
130
|
}
|
|
163
131
|
|
|
164
132
|
export function buildProxmoxOnlineCriteriaInstance(args: {
|
|
@@ -166,34 +134,20 @@ export function buildProxmoxOnlineCriteriaInstance(args: {
|
|
|
166
134
|
metricAlias: string;
|
|
167
135
|
filterType: FilterType;
|
|
168
136
|
value: number;
|
|
137
|
+
recoveryValue?: number | undefined;
|
|
138
|
+
marginFraction?: number | undefined;
|
|
139
|
+
isBinaryMetric?: boolean | undefined;
|
|
140
|
+
metricAggregationType?: EvaluateOverTimeType | undefined;
|
|
141
|
+
/*
|
|
142
|
+
* Extra recovery comparisons. Left on the builder default
|
|
143
|
+
* (FilterCondition.Any) they mean "any one of these clears the alert";
|
|
144
|
+
* pass FilterCondition.All to require every watched series to have
|
|
145
|
+
* cleared.
|
|
146
|
+
*/
|
|
147
|
+
additionalFilters?: Array<AdditionalCriteriaFilterSpec> | undefined;
|
|
148
|
+
filterCondition?: FilterCondition | undefined;
|
|
169
149
|
}): 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;
|
|
150
|
+
return buildHealthyCriteriaInstance(args);
|
|
197
151
|
}
|
|
198
152
|
|
|
199
153
|
export function buildProxmoxMonitorConfig(args: {
|
|
@@ -204,6 +158,20 @@ export function buildProxmoxMonitorConfig(args: {
|
|
|
204
158
|
aggregationType: MetricsAggregationType;
|
|
205
159
|
attributes?: Record<string, string>;
|
|
206
160
|
groupByAttributeKey?: string | undefined;
|
|
161
|
+
/*
|
|
162
|
+
* Display unit for this query's samples. The worker converts the metric's
|
|
163
|
+
* INGESTED native unit into it
|
|
164
|
+
* (MetricResultUnitConverter.convertQueryResultsToDisplayUnit), and the
|
|
165
|
+
* criteria evaluator then converts from it into the criteria's threshold
|
|
166
|
+
* unit. Pin it whenever the threshold is written in a different unit from
|
|
167
|
+
* the raw series: pinning removes the dependency on whatever unit string
|
|
168
|
+
* the exporter happened to ship (pve-exporter serves no OpenMetrics
|
|
169
|
+
* `# UNIT` metadata, so the ingested native unit can be empty and the
|
|
170
|
+
* fallback in MetricMonitorCriteria.buildMetricContext cannot be relied
|
|
171
|
+
* on). Use OTel's "1" for a dimensionless [0, 1] ratio. Leave undefined
|
|
172
|
+
* for counts and booleans.
|
|
173
|
+
*/
|
|
174
|
+
legendUnit?: string | undefined;
|
|
207
175
|
}): MonitorStepProxmoxMonitor {
|
|
208
176
|
return {
|
|
209
177
|
clusterIdentifier: args.clusterIdentifier,
|
|
@@ -216,7 +184,7 @@ export function buildProxmoxMonitorConfig(args: {
|
|
|
216
184
|
title: args.metricAlias,
|
|
217
185
|
description: args.metricAlias,
|
|
218
186
|
legend: args.metricAlias,
|
|
219
|
-
legendUnit:
|
|
187
|
+
legendUnit: args.legendUnit,
|
|
220
188
|
},
|
|
221
189
|
metricQueryData: {
|
|
222
190
|
filterData: {
|
|
@@ -237,6 +205,61 @@ export function buildProxmoxMonitorConfig(args: {
|
|
|
237
205
|
};
|
|
238
206
|
}
|
|
239
207
|
|
|
208
|
+
export interface ProxmoxQuery {
|
|
209
|
+
alias: string;
|
|
210
|
+
metricName: string;
|
|
211
|
+
attributes?: Record<string, string> | undefined;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Build a monitor that watches SEVERAL metrics with no formula, so one
|
|
216
|
+
* criteria can qualify another (Ceph's buildCephMultiQueryMonitorConfig is
|
|
217
|
+
* the same shape). Every query shares the group-by key, which is what lets
|
|
218
|
+
* the per-series evaluator line them up: series fingerprints are computed
|
|
219
|
+
* from the grouped LABELS alone (MetricSeriesFingerprint.computeFingerprint),
|
|
220
|
+
* so two queries grouped by `id` land on the same fingerprint and
|
|
221
|
+
* `FilterCondition.All` is satisfied by the SAME series — the same `id` —
|
|
222
|
+
* rather than merely somewhere in the cluster.
|
|
223
|
+
*/
|
|
224
|
+
export function buildProxmoxMultiQueryMonitorConfig(args: {
|
|
225
|
+
clusterIdentifier: string;
|
|
226
|
+
queries: Array<ProxmoxQuery>;
|
|
227
|
+
rollingTime: RollingTime;
|
|
228
|
+
aggregationType: MetricsAggregationType;
|
|
229
|
+
groupByAttributeKey?: string | undefined;
|
|
230
|
+
}): MonitorStepProxmoxMonitor {
|
|
231
|
+
return {
|
|
232
|
+
clusterIdentifier: args.clusterIdentifier,
|
|
233
|
+
resourceFilters: {},
|
|
234
|
+
metricViewConfig: {
|
|
235
|
+
queryConfigs: args.queries.map((query: ProxmoxQuery) => {
|
|
236
|
+
return {
|
|
237
|
+
metricAliasData: {
|
|
238
|
+
metricVariable: query.alias,
|
|
239
|
+
title: query.alias,
|
|
240
|
+
description: query.alias,
|
|
241
|
+
legend: query.alias,
|
|
242
|
+
legendUnit: undefined,
|
|
243
|
+
},
|
|
244
|
+
metricQueryData: {
|
|
245
|
+
filterData: {
|
|
246
|
+
metricName: query.metricName,
|
|
247
|
+
attributes: query.attributes || {},
|
|
248
|
+
aggegationType: args.aggregationType,
|
|
249
|
+
aggregateBy: {},
|
|
250
|
+
},
|
|
251
|
+
...(args.groupByAttributeKey
|
|
252
|
+
? { groupByAttributeKeys: [args.groupByAttributeKey] }
|
|
253
|
+
: {}),
|
|
254
|
+
},
|
|
255
|
+
};
|
|
256
|
+
}),
|
|
257
|
+
formulaConfigs: [],
|
|
258
|
+
},
|
|
259
|
+
rollingTime: args.rollingTime,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
|
|
240
263
|
/**
|
|
241
264
|
* Build a ratio monitor: `(numerator / denominator) * 100`, optionally
|
|
242
265
|
* grouped by an OpenTelemetry attribute so one incident fires per group
|
|
@@ -370,6 +393,12 @@ const nodeOfflineTemplate: ProxmoxAlertTemplate = {
|
|
|
370
393
|
metricAlias,
|
|
371
394
|
filterType: FilterType.GreaterThanOrEqualTo,
|
|
372
395
|
value: 1,
|
|
396
|
+
/*
|
|
397
|
+
* `pve_up` is strictly 0 or 1, so the shared 10% recovery dead band
|
|
398
|
+
* would put this at `>= 1.1` — unreachable, leaving the monitor
|
|
399
|
+
* permanently unable to report healthy.
|
|
400
|
+
*/
|
|
401
|
+
isBinaryMetric: true,
|
|
373
402
|
}),
|
|
374
403
|
});
|
|
375
404
|
},
|
|
@@ -379,24 +408,57 @@ const guestDownTemplate: ProxmoxAlertTemplate = {
|
|
|
379
408
|
id: "pve-guest-down",
|
|
380
409
|
name: "Guest Down",
|
|
381
410
|
description:
|
|
382
|
-
"Alert when
|
|
411
|
+
"Alert when a VM or container that is configured to start on boot stops running (pve_up = 0 while pve_onboot_status = 1, scoped to guests via pve.scope). One incident per guest. Guests you stopped on purpose are excluded automatically — a guest with onboot disabled never fires.",
|
|
383
412
|
category: "Availability",
|
|
384
413
|
severity: "Warning",
|
|
385
414
|
getMonitorStep: (args: ProxmoxAlertTemplateArgs): MonitorStep => {
|
|
386
415
|
const metricAlias: string = "guest_up";
|
|
387
|
-
|
|
416
|
+
const onbootAlias: string = "guest_onboot";
|
|
417
|
+
|
|
418
|
+
/*
|
|
419
|
+
* "Down" alone is not an incident on a hypervisor. pve_up reads 0 for
|
|
420
|
+
* every intentionally stopped template VM and powered-down test
|
|
421
|
+
* container, so a one-click "Guest Down" monitor scoped only by
|
|
422
|
+
* pve.scope opens a Warning for each of them — and the alert body used
|
|
423
|
+
* to tell the recipient to go and re-scope the monitor themselves.
|
|
424
|
+
*
|
|
425
|
+
* pve_onboot_status is Proxmox's own declaration of which guests are
|
|
426
|
+
* supposed to be running (`onboot: 1` in the guest config). Requiring
|
|
427
|
+
* it turns the criteria into "a guest Proxmox says should be running is
|
|
428
|
+
* not running", which is the only version of this that is safe to
|
|
429
|
+
* enable with one click.
|
|
430
|
+
*
|
|
431
|
+
* Fail-closed on purpose: buildSeriesBreakdown emits every fingerprint
|
|
432
|
+
* seen across BOTH queries and hands an absent query an empty slot, so
|
|
433
|
+
* a guest with no pve_onboot_status series evaluates that filter under
|
|
434
|
+
* NoDataPolicy.Ignore to "not breaching", FilterCondition.All is not
|
|
435
|
+
* satisfied, and nothing fires. A missed Warning on a non-default
|
|
436
|
+
* exporter beats a permanent false page on every default install.
|
|
437
|
+
*/
|
|
388
438
|
return buildProxmoxMonitorStep({
|
|
389
|
-
proxmoxMonitor:
|
|
439
|
+
proxmoxMonitor: buildProxmoxMultiQueryMonitorConfig({
|
|
390
440
|
clusterIdentifier: args.clusterIdentifier,
|
|
391
|
-
|
|
392
|
-
|
|
441
|
+
queries: [
|
|
442
|
+
{
|
|
443
|
+
alias: metricAlias,
|
|
444
|
+
metricName: "pve_up",
|
|
445
|
+
attributes: { "pve.scope": "guest" },
|
|
446
|
+
},
|
|
447
|
+
{
|
|
448
|
+
alias: onbootAlias,
|
|
449
|
+
metricName: "pve_onboot_status",
|
|
450
|
+
attributes: { "pve.scope": "guest" },
|
|
451
|
+
},
|
|
452
|
+
],
|
|
393
453
|
rollingTime: RollingTime.Past5Minutes,
|
|
394
454
|
/*
|
|
395
455
|
* Min per guest — a single down scrape trips the threshold instead
|
|
396
|
-
* of being masked by scrapes where the guest was still up.
|
|
456
|
+
* of being masked by scrapes where the guest was still up. Min is
|
|
457
|
+
* also the catalog default for pve_onboot_status, and is the
|
|
458
|
+
* conservative reading there: the guest must have been marked
|
|
459
|
+
* start-on-boot in every scrape of the window.
|
|
397
460
|
*/
|
|
398
461
|
aggregationType: MetricsAggregationType.Min,
|
|
399
|
-
attributes: { "pve.scope": "guest" },
|
|
400
462
|
groupByAttributeKey: "id",
|
|
401
463
|
}),
|
|
402
464
|
offlineCriteriaInstance: buildProxmoxOfflineCriteriaInstance({
|
|
@@ -407,17 +469,53 @@ const guestDownTemplate: ProxmoxAlertTemplate = {
|
|
|
407
469
|
metricAlias,
|
|
408
470
|
filterType: FilterType.LessThan,
|
|
409
471
|
value: 1,
|
|
472
|
+
/*
|
|
473
|
+
* Both must hold for the SAME guest: down AND meant to be running.
|
|
474
|
+
* Per-series All is what makes "same guest" true rather than "some
|
|
475
|
+
* guest is down and some other guest has onboot set" — the two
|
|
476
|
+
* queries share the `id` group-by, so they land on one fingerprint.
|
|
477
|
+
*/
|
|
478
|
+
filterCondition: FilterCondition.All,
|
|
479
|
+
additionalFilters: [
|
|
480
|
+
{
|
|
481
|
+
metricAlias: onbootAlias,
|
|
482
|
+
filterType: FilterType.GreaterThan,
|
|
483
|
+
value: 0,
|
|
484
|
+
},
|
|
485
|
+
],
|
|
410
486
|
incidentTitle: `[Proxmox] Guest Down - ${args.monitorName}`,
|
|
411
|
-
incidentDescription: `A Proxmox guest (VM or container) is reporting as down (pve_up = 0). It
|
|
412
|
-
criteriaName: "Guest Down - pve_up < 1",
|
|
487
|
+
incidentDescription: `A Proxmox guest (VM or container) configured to start on boot (onboot = 1) is reporting as down (pve_up = 0) for the whole evaluation window. It stopped or crashed rather than being shut down on purpose — guests with onboot disabled are excluded from this monitor. See the affected resource on this alert for the guest id, then check that node's task log for a failed start, a fenced HA resource, or an out-of-memory kill.`,
|
|
488
|
+
criteriaName: "Guest Down - pve_up < 1 while onboot = 1",
|
|
413
489
|
criteriaDescription:
|
|
414
|
-
"Triggers when
|
|
490
|
+
"Triggers when a guest configured to start on boot reports pve_up below 1 for the whole monitoring window.",
|
|
415
491
|
}),
|
|
416
492
|
onlineCriteriaInstance: buildProxmoxOnlineCriteriaInstance({
|
|
417
493
|
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
418
494
|
metricAlias,
|
|
419
495
|
filterType: FilterType.GreaterThanOrEqualTo,
|
|
420
496
|
value: 1,
|
|
497
|
+
/*
|
|
498
|
+
* `pve_up` is strictly 0 or 1, so the shared 10% recovery dead band
|
|
499
|
+
* would put this at `>= 1.1` — unreachable, leaving the monitor
|
|
500
|
+
* permanently unable to report healthy.
|
|
501
|
+
*/
|
|
502
|
+
isBinaryMetric: true,
|
|
503
|
+
/*
|
|
504
|
+
* Recovery is FilterCondition.Any (the builder default), so either
|
|
505
|
+
* half clears it: the guest came back, or someone deliberately
|
|
506
|
+
* turned start-on-boot off and it is no longer this monitor's
|
|
507
|
+
* business. The onboot half is also required by the shared suite
|
|
508
|
+
* invariant that every firing alias has a recovering filter on the
|
|
509
|
+
* same alias; {> 0} / {= 0} is the zero-threshold pair, which gets
|
|
510
|
+
* no dead band.
|
|
511
|
+
*/
|
|
512
|
+
additionalFilters: [
|
|
513
|
+
{
|
|
514
|
+
metricAlias: onbootAlias,
|
|
515
|
+
filterType: FilterType.EqualTo,
|
|
516
|
+
value: 0,
|
|
517
|
+
},
|
|
518
|
+
],
|
|
421
519
|
}),
|
|
422
520
|
});
|
|
423
521
|
},
|
|
@@ -574,7 +672,7 @@ const guestHighCpuTemplate: ProxmoxAlertTemplate = {
|
|
|
574
672
|
id: "pve-guest-high-cpu",
|
|
575
673
|
name: "High Guest CPU Usage",
|
|
576
674
|
description:
|
|
577
|
-
"Alert when
|
|
675
|
+
"Alert when a VM or container sits above 95% of its allocated vCPUs (pve_cpu_usage_ratio > 0.95, scoped to guests) for a sustained 15 minutes. One incident per guest. Deliberately higher and slower than the node template: a guest is SUPPOSED to use the vCPUs it was given, so only a guest that never comes down is worth a page.",
|
|
578
676
|
category: "Guest",
|
|
579
677
|
severity: "Warning",
|
|
580
678
|
getMonitorStep: (args: ProxmoxAlertTemplateArgs): MonitorStep => {
|
|
@@ -585,7 +683,16 @@ const guestHighCpuTemplate: ProxmoxAlertTemplate = {
|
|
|
585
683
|
clusterIdentifier: args.clusterIdentifier,
|
|
586
684
|
metricName: "pve_cpu_usage_ratio",
|
|
587
685
|
metricAlias,
|
|
588
|
-
|
|
686
|
+
/*
|
|
687
|
+
* Fifteen minutes, not five. The criteria is sustained (AllValues),
|
|
688
|
+
* so this window IS the alert's patience: a build, a backup, a
|
|
689
|
+
* database vacuum or a batch job pegs a right-sized 2-vCPU guest
|
|
690
|
+
* for several minutes by design, and paging for it is the "a pod at
|
|
691
|
+
* 91% of its CPU limit is healthy" false positive. Fifteen
|
|
692
|
+
* consecutive minutes at the ceiling is starvation; five is a
|
|
693
|
+
* workload.
|
|
694
|
+
*/
|
|
695
|
+
rollingTime: RollingTime.Past15Minutes,
|
|
589
696
|
/*
|
|
590
697
|
* Avg per guest — pve_cpu_usage_ratio is already a true 0-1 ratio
|
|
591
698
|
* (one series per guest), so the per-minute average is the
|
|
@@ -602,18 +709,29 @@ const guestHighCpuTemplate: ProxmoxAlertTemplate = {
|
|
|
602
709
|
monitorName: args.monitorName,
|
|
603
710
|
metricAlias,
|
|
604
711
|
filterType: FilterType.GreaterThan,
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
712
|
+
/*
|
|
713
|
+
* 0.95, not 0.9. `pve_cpu_usage_ratio` is usage as a fraction of
|
|
714
|
+
* AVAILABLE CPU, and for a guest "available" is its own vCPU
|
|
715
|
+
* allocation — a right-sized 2-vCPU guest running a build sits at
|
|
716
|
+
* 1.0 by design. 90% of an allocation is the allocation working;
|
|
717
|
+
* only a guest pinned within 5% of its ceiling for a quarter of an
|
|
718
|
+
* hour is starved. The node template stays at 0.9/5min on purpose:
|
|
719
|
+
* a node at 90% degrades every guest on it, which is a different
|
|
720
|
+
* and faster question.
|
|
721
|
+
*/
|
|
722
|
+
value: 0.95,
|
|
723
|
+
incidentTitle: `[Proxmox] Sustained High Guest CPU Usage (>95%) - ${args.monitorName}`,
|
|
724
|
+
incidentDescription: `A guest (VM or container) has stayed above 95% of its allocated vCPUs for 15 minutes without a break. At that point the workload inside the guest is CPU-starved rather than merely busy. See the affected resource on this alert for the guest id, then consider allocating more vCPUs or investigating what is running inside the guest.`,
|
|
725
|
+
criteriaName: "High Guest CPU - Usage Ratio > 0.95 sustained",
|
|
609
726
|
criteriaDescription:
|
|
610
|
-
"Triggers when
|
|
727
|
+
"Triggers when a guest's average CPU usage ratio stays above 0.95 (95% of its allocated vCPUs) for every minute of the 15-minute window.",
|
|
611
728
|
}),
|
|
612
729
|
onlineCriteriaInstance: buildProxmoxOnlineCriteriaInstance({
|
|
613
730
|
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
614
731
|
metricAlias,
|
|
615
732
|
filterType: FilterType.LessThanOrEqualTo,
|
|
616
|
-
|
|
733
|
+
// Recovers at 0.855 — the shared 10% dead band inside 0.95.
|
|
734
|
+
value: 0.95,
|
|
617
735
|
}),
|
|
618
736
|
});
|
|
619
737
|
},
|
|
@@ -19,6 +19,19 @@ export interface MonitorRecommendationSeverityOption {
|
|
|
19
19
|
order?: number | undefined;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
+
/*
|
|
23
|
+
* The pair of ids one `<X>AlertTemplate.getMonitorStep` call needs.
|
|
24
|
+
*
|
|
25
|
+
* Non-optional on both fields: every `<X>AlertTemplateArgs` declares
|
|
26
|
+
* `defaultIncidentSeverityId: ObjectID` and `defaultAlertSeverityId: ObjectID`
|
|
27
|
+
* as required, so a resolver that could return undefined would just move the
|
|
28
|
+
* `|| ObjectID.generate()` fallback back into the eight call sites.
|
|
29
|
+
*/
|
|
30
|
+
export interface MonitorRecommendationTemplateSeverityIds {
|
|
31
|
+
incidentSeverityId: ObjectID;
|
|
32
|
+
alertSeverityId: ObjectID;
|
|
33
|
+
}
|
|
34
|
+
|
|
22
35
|
/*
|
|
23
36
|
* Maps a recommendation's declared severity (`Critical` / `Warning`) onto one
|
|
24
37
|
* of the project's own incident or alert severities.
|
|
@@ -76,12 +89,24 @@ export default class MonitorRecommendationSeverityMapper {
|
|
|
76
89
|
* distinction, and refusing to map Warning at all would leave those monitors
|
|
77
90
|
* on the template's own choice, which is the bug this class exists to fix.
|
|
78
91
|
*
|
|
79
|
-
* Warning deliberately takes the SECOND severity rather than the LAST.
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
92
|
+
* Warning deliberately takes the SECOND severity rather than the LAST.
|
|
93
|
+
*
|
|
94
|
+
* On the default seeds those are not the same answer, and the two seeds are
|
|
95
|
+
* not the same shape. `ProjectService.addDefaultIncidentSeverity` seeds
|
|
96
|
+
* three rows (Critical Incident 1 / Major Incident 2 / Minor Incident 3), so
|
|
97
|
+
* Warning gets Major and NOT Minor — the rule doing real work.
|
|
98
|
+
* `addDefaultAlertSeverity` seeds only two (High 1 / Low 2), so for alerts
|
|
99
|
+
* second IS last and every Warning recommendation resolves to "Low". That is
|
|
100
|
+
* intended and is the only option that preserves the distinction: with two
|
|
101
|
+
* severities, anything else collapses Critical and Warning onto one row,
|
|
102
|
+
* which is the exact bug this class exists to fix. It is also why an alert
|
|
103
|
+
* email can read "SEVERITY: Low" for a template the catalog card labels
|
|
104
|
+
* "Warning" — the create side over shows the user that mapping before they
|
|
105
|
+
* confirm.
|
|
106
|
+
*
|
|
107
|
+
* On a project with five severities the two answers diverge and second is
|
|
108
|
+
* the right one: a recommendation the catalog calls Warning is a real
|
|
109
|
+
* production problem, not the bottom of the scale.
|
|
85
110
|
*/
|
|
86
111
|
public static getDefaultSeverityMapping(
|
|
87
112
|
options: Array<MonitorRecommendationSeverityOption>,
|
|
@@ -103,6 +128,73 @@ export default class MonitorRecommendationSeverityMapper {
|
|
|
103
128
|
};
|
|
104
129
|
}
|
|
105
130
|
|
|
131
|
+
/*
|
|
132
|
+
* `getDefaultSeverityMapping` for a list that is ALREADY ranked and carries
|
|
133
|
+
* no `order` column.
|
|
134
|
+
*
|
|
135
|
+
* The monitor form builds its severity dropdowns from an API list sorted
|
|
136
|
+
* `{ order: SortOrder.Ascending }` and keeps only `{ value, label }` (see
|
|
137
|
+
* App/FeatureSet/Dashboard/src/Components/Form/Monitor/MonitorSteps.tsx), so
|
|
138
|
+
* position IS the rank by the time it reaches a template picker.
|
|
139
|
+
* Synthesising `order` from the index rather than adding a second ranking
|
|
140
|
+
* rule keeps `getDefaultSeverityMapping` the only place that decides what
|
|
141
|
+
* Critical and Warning mean.
|
|
142
|
+
*/
|
|
143
|
+
public static getMappingFromRankedIds(
|
|
144
|
+
rankedIds: Array<ObjectID>,
|
|
145
|
+
): MonitorRecommendationSeverityMap {
|
|
146
|
+
return this.getDefaultSeverityMapping(
|
|
147
|
+
rankedIds.map((id: ObjectID, index: number) => {
|
|
148
|
+
return { id: id, name: "", order: index + 1 };
|
|
149
|
+
}),
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/*
|
|
154
|
+
* The severity ids a template should BUILD its criteria with, given the
|
|
155
|
+
* severity the template itself declares.
|
|
156
|
+
*
|
|
157
|
+
* This is the monitor-edit template picker's half of the job
|
|
158
|
+
* `MonitorRecommendationUtil.applyNotificationSettingsToMonitorStep` does
|
|
159
|
+
* for the recommendations page. That page can rewrite the ids after the
|
|
160
|
+
* fact because it owns the whole create; a picker hands its ids to
|
|
161
|
+
* `getMonitorStep` up front and never sees the criteria instances again, so
|
|
162
|
+
* it has to choose correctly the first time. Without this, every template a
|
|
163
|
+
* picker applies was built with the project's FIRST severity — so "Task
|
|
164
|
+
* Down" (Critical) and "High Task CPU Usage" (Warning) opened records at the
|
|
165
|
+
* same level and the Critical/Warning badge on the picker card described
|
|
166
|
+
* nothing that subsequently happened.
|
|
167
|
+
*
|
|
168
|
+
* Falls back to the caller's own default when the project list is empty,
|
|
169
|
+
* because `getMonitorStep` requires a non-optional id in both slots.
|
|
170
|
+
*/
|
|
171
|
+
public static resolveTemplateSeverityIds(data: {
|
|
172
|
+
severity: MonitorRecommendationSeverity;
|
|
173
|
+
rankedIncidentSeverityIds?: Array<ObjectID> | undefined;
|
|
174
|
+
rankedAlertSeverityIds?: Array<ObjectID> | undefined;
|
|
175
|
+
fallbackIncidentSeverityId: ObjectID;
|
|
176
|
+
fallbackAlertSeverityId: ObjectID;
|
|
177
|
+
}): MonitorRecommendationTemplateSeverityIds {
|
|
178
|
+
const incidentSeverityId: ObjectID | undefined = this.resolveSeverityId({
|
|
179
|
+
severity: data.severity,
|
|
180
|
+
severityMap: this.getMappingFromRankedIds(
|
|
181
|
+
data.rankedIncidentSeverityIds || [],
|
|
182
|
+
),
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
const alertSeverityId: ObjectID | undefined = this.resolveSeverityId({
|
|
186
|
+
severity: data.severity,
|
|
187
|
+
severityMap: this.getMappingFromRankedIds(
|
|
188
|
+
data.rankedAlertSeverityIds || [],
|
|
189
|
+
),
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
return {
|
|
193
|
+
incidentSeverityId: incidentSeverityId || data.fallbackIncidentSeverityId,
|
|
194
|
+
alertSeverityId: alertSeverityId || data.fallbackAlertSeverityId,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
|
|
106
198
|
/*
|
|
107
199
|
* Resolve one recommendation's severity through a mapping.
|
|
108
200
|
*
|
|
@@ -108,8 +108,9 @@ export default class MonitorRecommendationUtil {
|
|
|
108
108
|
/*
|
|
109
109
|
* Deterministic monitor name for a recommendation applied to a resource.
|
|
110
110
|
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
111
|
+
* This is the created monitor's OWN name, and nothing else. The string the
|
|
112
|
+
* templates interpolate into their titles is `getTemplateMonitorName` —
|
|
113
|
+
* see there for why the two must differ.
|
|
113
114
|
*/
|
|
114
115
|
public static getMonitorName(data: {
|
|
115
116
|
recommendation: MonitorRecommendation;
|
|
@@ -124,6 +125,39 @@ export default class MonitorRecommendationUtil {
|
|
|
124
125
|
return `${resourceName} - ${data.recommendation.name}`;
|
|
125
126
|
}
|
|
126
127
|
|
|
128
|
+
/*
|
|
129
|
+
* The `monitorName` arg the template modules interpolate into their incident
|
|
130
|
+
* and alert titles. NOT the monitor's own name.
|
|
131
|
+
*
|
|
132
|
+
* Every template title already restates the template's own name —
|
|
133
|
+
* `[K8s] Pod CPU Saturating Container Limit (>90%) - ${args.monitorName}` —
|
|
134
|
+
* and `getMonitorName` ends with that same template name, so passing the
|
|
135
|
+
* composed name back in produced the stuttering production title
|
|
136
|
+
*
|
|
137
|
+
* [K8s] Pod CPU Saturating Container Limit (>90%)
|
|
138
|
+
* - oneuptime-test - Pod CPU Saturating Container Limit
|
|
139
|
+
*
|
|
140
|
+
* which also pushed the pod identity `SeriesContextEnricher.enrichTitle`
|
|
141
|
+
* appends past the part of a subject line a mail client shows. The template
|
|
142
|
+
* supplies the "what", this supplies the "where", the enricher supplies
|
|
143
|
+
* "which one".
|
|
144
|
+
*
|
|
145
|
+
* Falls back to the composed name when the resource has no display name at
|
|
146
|
+
* all, so a title can never end in a bare " - ".
|
|
147
|
+
*/
|
|
148
|
+
public static getTemplateMonitorName(data: {
|
|
149
|
+
recommendation: MonitorRecommendation;
|
|
150
|
+
resourceDisplayName: string;
|
|
151
|
+
}): string {
|
|
152
|
+
return (
|
|
153
|
+
data.resourceDisplayName.trim() ||
|
|
154
|
+
this.getMonitorName({
|
|
155
|
+
recommendation: data.recommendation,
|
|
156
|
+
resourceDisplayName: data.resourceDisplayName,
|
|
157
|
+
})
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
|
|
127
161
|
/*
|
|
128
162
|
* Push the user's chosen on-call policies, owners, labels, severities and
|
|
129
163
|
* incident-vs-alert choice into every criteria instance in a step.
|
|
@@ -753,10 +787,13 @@ export default class MonitorRecommendationUtil {
|
|
|
753
787
|
* Build a recommendation's step exactly as the create flow would, and reduce
|
|
754
788
|
* it to its serialized fingerprint.
|
|
755
789
|
*
|
|
756
|
-
* The `monitorName` recomputation matters: templates interpolate
|
|
757
|
-
*
|
|
758
|
-
*
|
|
759
|
-
*
|
|
790
|
+
* The `monitorName` recomputation matters: templates interpolate that name
|
|
791
|
+
* into incident titles, and while the name is not part of the fingerprint,
|
|
792
|
+
* building the step with a different name than the create flow uses would be
|
|
793
|
+
* an easy way for the two paths to drift apart later. It therefore calls the
|
|
794
|
+
* same `getTemplateMonitorName` that `MonitorRecommendationCreateUtil
|
|
795
|
+
* .buildMonitor` does — callers pass the bare resource display name as
|
|
796
|
+
* `args.monitorName`, exactly as the create flow's `resourceDisplayName`.
|
|
760
797
|
*/
|
|
761
798
|
private static getSerializedFingerprintForRecommendation(data: {
|
|
762
799
|
recommendation: MonitorRecommendation;
|
|
@@ -766,7 +803,7 @@ export default class MonitorRecommendationUtil {
|
|
|
766
803
|
this.getFingerprintFromMonitorStep(
|
|
767
804
|
data.recommendation.getMonitorStep({
|
|
768
805
|
...data.args,
|
|
769
|
-
monitorName: this.
|
|
806
|
+
monitorName: this.getTemplateMonitorName({
|
|
770
807
|
recommendation: data.recommendation,
|
|
771
808
|
resourceDisplayName: data.args.monitorName,
|
|
772
809
|
}),
|