@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
|
@@ -105,16 +105,19 @@ export interface ServiceAlertTemplate {
|
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
/*
|
|
108
|
-
* `EvaluateOverTimeType` names the window collapse
|
|
109
|
-
*
|
|
110
|
-
*
|
|
108
|
+
* `EvaluateOverTimeType` names the window collapse. The two members these
|
|
109
|
+
* templates use are worth stating once, here, rather than being rediscovered
|
|
110
|
+
* per template:
|
|
111
111
|
*
|
|
112
112
|
* AnyValue -> ANY bucket in the rolling window breaching is a breach.
|
|
113
113
|
* Right for spikes.
|
|
114
|
-
* AllValues -> EVERY bucket must breach. Right for sustained pressure
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
*
|
|
114
|
+
* AllValues -> EVERY bucket must breach. Right for sustained pressure.
|
|
115
|
+
*
|
|
116
|
+
* The reducing members (`Average`, `Sum`, `MaximumValue`, `MunimumValue`) do
|
|
117
|
+
* now collapse the window to one sample before the comparison —
|
|
118
|
+
* `CompareCriteria.reduceWindow` — so they mean what they say. `AllValues` is
|
|
119
|
+
* still the right default here: a reduced window hides the shape, and a metric
|
|
120
|
+
* that spends half the window fine is not under sustained pressure.
|
|
118
121
|
*
|
|
119
122
|
* A window with no samples at all never reaches the comparator — the
|
|
120
123
|
* evaluator's no-data guard returns "not breaching" under the default
|
|
@@ -129,6 +132,34 @@ export interface ServiceAlertTemplate {
|
|
|
129
132
|
*/
|
|
130
133
|
const SUSTAINED: EvaluateOverTimeType = EvaluateOverTimeType.AllValues;
|
|
131
134
|
|
|
135
|
+
/*
|
|
136
|
+
* The resource attribute that identifies ONE process of a service.
|
|
137
|
+
*
|
|
138
|
+
* Every metric template here except the two request-latency percentiles
|
|
139
|
+
* thresholds a property of a single process — a heap, an event loop, a
|
|
140
|
+
* goroutine count, a thread pool. Without a group-by the ClickHouse
|
|
141
|
+
* aggregation collapses every replica of the service into one number, so an
|
|
142
|
+
* `Avg` template on three replicas at 95/20/20 reads 45 and stays green while
|
|
143
|
+
* one of them OOM-kills, and a `Max` template fires on the worst replica with
|
|
144
|
+
* no way to say which. Grouping fixes both at once: the worker emits one
|
|
145
|
+
* series per instance and the alert carries that instance in `seriesLabels`,
|
|
146
|
+
* which `SeriesLabelDisplay` renders into the title and the description block.
|
|
147
|
+
*
|
|
148
|
+
* `service.instance.id` is OPTIONAL in the resource semantic conventions, and
|
|
149
|
+
* this degrades safely when it is absent: the query returns one series whose
|
|
150
|
+
* label value is the empty string (ClickHouse `attributes[k]` on a missing key
|
|
151
|
+
* yields ""), `MetricSeriesFingerprint.extractSeriesLabels` keeps the key so
|
|
152
|
+
* the fingerprint stays stable across evaluations, and
|
|
153
|
+
* `SeriesLabelDisplay.getDisplayLabels` drops empty values rather than
|
|
154
|
+
* rendering "Instance: ". A service that does not report it therefore gets
|
|
155
|
+
* exactly today's single-series behaviour, not silence.
|
|
156
|
+
*
|
|
157
|
+
* The `resource.` prefix is the one OtelMetricsIngestService stamps onto OTel
|
|
158
|
+
* resource attributes (`prefixKeysWithString: "resource"`), the same spelling
|
|
159
|
+
* KubernetesAlertTemplates uses for `resource.k8s.pod.name`.
|
|
160
|
+
*/
|
|
161
|
+
const PER_INSTANCE_GROUP_BY: Array<string> = ["resource.service.instance.id"];
|
|
162
|
+
|
|
132
163
|
interface CountCriteriaArgs {
|
|
133
164
|
args: ServiceAlertTemplateArgs;
|
|
134
165
|
checkOn: CheckOn.SpanCount | CheckOn.ExceptionCount;
|
|
@@ -201,7 +232,17 @@ function buildCriteriaPair(data: {
|
|
|
201
232
|
checkOn: data.checkOn,
|
|
202
233
|
filterType: data.unhealthyFilterType,
|
|
203
234
|
value: data.threshold,
|
|
204
|
-
|
|
235
|
+
/*
|
|
236
|
+
* A copy per filter, not the shared object. `MetricMonitorCriteria`
|
|
237
|
+
* writes its `AnyValue` default straight back through this reference
|
|
238
|
+
* when `metricAggregationType` is unset, and the criteria form spreads
|
|
239
|
+
* and re-assigns it on edit — either of which, on a shared object,
|
|
240
|
+
* changes the healthy criteria as a side effect of touching the
|
|
241
|
+
* unhealthy one.
|
|
242
|
+
*/
|
|
243
|
+
metricMonitorOptions: metricMonitorOptions
|
|
244
|
+
? { ...metricMonitorOptions }
|
|
245
|
+
: undefined,
|
|
205
246
|
},
|
|
206
247
|
],
|
|
207
248
|
incidents: [
|
|
@@ -242,7 +283,10 @@ function buildCriteriaPair(data: {
|
|
|
242
283
|
checkOn: data.checkOn,
|
|
243
284
|
filterType: data.healthyFilterType,
|
|
244
285
|
value: data.threshold,
|
|
245
|
-
|
|
286
|
+
// A copy per filter — see the unhealthy filter above.
|
|
287
|
+
metricMonitorOptions: metricMonitorOptions
|
|
288
|
+
? { ...metricMonitorOptions }
|
|
289
|
+
: undefined,
|
|
246
290
|
},
|
|
247
291
|
],
|
|
248
292
|
incidents: [],
|
|
@@ -316,6 +360,7 @@ function buildQueryConfig(data: {
|
|
|
316
360
|
aggregationType: MetricsAggregationType;
|
|
317
361
|
attributes?: Record<string, string> | undefined;
|
|
318
362
|
legendUnit?: string | undefined;
|
|
363
|
+
groupByAttributeKeys?: Array<string> | undefined;
|
|
319
364
|
}): MetricQueryConfigData {
|
|
320
365
|
return {
|
|
321
366
|
metricAliasData: {
|
|
@@ -332,6 +377,14 @@ function buildQueryConfig(data: {
|
|
|
332
377
|
aggegationType: data.aggregationType,
|
|
333
378
|
aggregateBy: {},
|
|
334
379
|
},
|
|
380
|
+
/*
|
|
381
|
+
* Omitted entirely rather than written as [] when there is nothing to
|
|
382
|
+
* group by, so an ungrouped template serializes to exactly the shape it
|
|
383
|
+
* did before this parameter existed.
|
|
384
|
+
*/
|
|
385
|
+
...(data.groupByAttributeKeys && data.groupByAttributeKeys.length > 0
|
|
386
|
+
? { groupByAttributeKeys: data.groupByAttributeKeys }
|
|
387
|
+
: {}),
|
|
335
388
|
},
|
|
336
389
|
};
|
|
337
390
|
}
|
|
@@ -356,6 +409,13 @@ function buildMetricTemplate(data: {
|
|
|
356
409
|
rollingTime?: RollingTime | undefined;
|
|
357
410
|
unhealthyFilterType?: FilterType | undefined;
|
|
358
411
|
healthyFilterType?: FilterType | undefined;
|
|
412
|
+
/*
|
|
413
|
+
* Defaults to per-instance. Pass `[]` only for a metric that is a property
|
|
414
|
+
* of the SERVICE rather than of one process — the request latency
|
|
415
|
+
* percentiles are the only two here, and grouping them would quietly change
|
|
416
|
+
* "the service's p95" into "some replica's p95", which is a different alert.
|
|
417
|
+
*/
|
|
418
|
+
groupByAttributeKeys?: Array<string> | undefined;
|
|
359
419
|
incidentDescription: string;
|
|
360
420
|
}): ServiceAlertTemplate {
|
|
361
421
|
return {
|
|
@@ -388,6 +448,8 @@ function buildMetricTemplate(data: {
|
|
|
388
448
|
aggregationType: data.aggregationType,
|
|
389
449
|
attributes: data.attributes,
|
|
390
450
|
legendUnit: data.legendUnit,
|
|
451
|
+
groupByAttributeKeys:
|
|
452
|
+
data.groupByAttributeKeys || PER_INSTANCE_GROUP_BY,
|
|
391
453
|
}),
|
|
392
454
|
],
|
|
393
455
|
formulaConfigs: [],
|
|
@@ -443,6 +505,7 @@ function buildRatioTemplate(data: {
|
|
|
443
505
|
denominatorAlias: string;
|
|
444
506
|
resultAlias: string;
|
|
445
507
|
thresholdPercent: number;
|
|
508
|
+
groupByAttributeKeys?: Array<string> | undefined;
|
|
446
509
|
incidentDescription: string;
|
|
447
510
|
}): ServiceAlertTemplate {
|
|
448
511
|
return {
|
|
@@ -494,6 +557,18 @@ function buildRatioTemplate(data: {
|
|
|
494
557
|
title: `${data.name} (used)`,
|
|
495
558
|
aggregationType: MetricsAggregationType.Sum,
|
|
496
559
|
attributes: data.numeratorAttributes,
|
|
560
|
+
/*
|
|
561
|
+
* The SAME key set on both queries. The worker splits every
|
|
562
|
+
* query on the UNION of their keys, so the split itself cannot
|
|
563
|
+
* go wrong from setting only one side — but
|
|
564
|
+
* `MetricMonitorCriteria.buildContext` reads
|
|
565
|
+
* `groupByAttributeKeys` off a SINGLE query config when it
|
|
566
|
+
* builds the alert's "Grouped By" root-cause block, and a
|
|
567
|
+
* one-sided setting renders that block empty for whichever side
|
|
568
|
+
* it read.
|
|
569
|
+
*/
|
|
570
|
+
groupByAttributeKeys:
|
|
571
|
+
data.groupByAttributeKeys || PER_INSTANCE_GROUP_BY,
|
|
497
572
|
}),
|
|
498
573
|
buildQueryConfig({
|
|
499
574
|
metricName: data.denominatorMetricName,
|
|
@@ -501,6 +576,8 @@ function buildRatioTemplate(data: {
|
|
|
501
576
|
title: `${data.name} (limit)`,
|
|
502
577
|
aggregationType: MetricsAggregationType.Sum,
|
|
503
578
|
attributes: data.denominatorAttributes,
|
|
579
|
+
groupByAttributeKeys:
|
|
580
|
+
data.groupByAttributeKeys || PER_INSTANCE_GROUP_BY,
|
|
504
581
|
}),
|
|
505
582
|
],
|
|
506
583
|
formulaConfigs: [formulaConfig],
|
|
@@ -760,6 +837,14 @@ const latencyP95Template: ServiceAlertTemplate = buildMetricTemplate({
|
|
|
760
837
|
metricAlias: "service_latency_p95",
|
|
761
838
|
aggregationType: MetricsAggregationType.P95,
|
|
762
839
|
legendUnit: "ms",
|
|
840
|
+
/*
|
|
841
|
+
* Not grouped, unlike every other metric template here. A request latency
|
|
842
|
+
* percentile is a property of the SERVICE — it is the number the SLO is
|
|
843
|
+
* written against — and splitting it per instance would turn "the service's
|
|
844
|
+
* p95 is above a second" into "one replica's p95 is above a second", which
|
|
845
|
+
* fires on a single slow pod and means something else.
|
|
846
|
+
*/
|
|
847
|
+
groupByAttributeKeys: [],
|
|
763
848
|
threshold: 1000,
|
|
764
849
|
thresholdLabel: "1,000 ms",
|
|
765
850
|
incidentDescription:
|
|
@@ -777,6 +862,8 @@ const latencyP99Template: ServiceAlertTemplate = buildMetricTemplate({
|
|
|
777
862
|
metricAlias: "service_latency_p99",
|
|
778
863
|
aggregationType: MetricsAggregationType.P99,
|
|
779
864
|
legendUnit: "ms",
|
|
865
|
+
// Service-level, not per instance — see latencyP95Template.
|
|
866
|
+
groupByAttributeKeys: [],
|
|
780
867
|
threshold: 2500,
|
|
781
868
|
thresholdLabel: "2,500 ms",
|
|
782
869
|
incidentDescription:
|
|
@@ -1147,7 +1234,7 @@ const pythonTemplates: Array<ServiceAlertTemplate> = [
|
|
|
1147
1234
|
id: "service-python-rss-memory",
|
|
1148
1235
|
name: "Resident Memory High",
|
|
1149
1236
|
description:
|
|
1150
|
-
"Alert when resident memory stays above 1 GB
|
|
1237
|
+
"Alert when a worker's resident memory stays above 1 GB — the signal that precedes an OOM kill. Needs the system-metrics instrumentation enabled. Reads process.runtime.cpython.memory with type=rss; newer opentelemetry-python releases report this as process.memory.usage, which the language-agnostic Process Memory High template already covers.",
|
|
1151
1238
|
category: "Python Runtime",
|
|
1152
1239
|
severity: "Warning",
|
|
1153
1240
|
language: "python",
|
|
@@ -1166,7 +1253,7 @@ const pythonTemplates: Array<ServiceAlertTemplate> = [
|
|
|
1166
1253
|
id: "service-python-thread-growth",
|
|
1167
1254
|
name: "Thread Count Growth",
|
|
1168
1255
|
description:
|
|
1169
|
-
"Alert when thread count stays above 200, which usually means a leaked executor or an unclosed client pool. Needs the system-metrics instrumentation enabled.",
|
|
1256
|
+
"Alert when thread count stays above 200, which usually means a leaked executor or an unclosed client pool. Needs the system-metrics instrumentation enabled. Reads process.runtime.cpython.thread_count; newer opentelemetry-python releases report this as process.thread.count — retarget the created monitor in one edit if your SDK emits that instead.",
|
|
1170
1257
|
category: "Python Runtime",
|
|
1171
1258
|
severity: "Warning",
|
|
1172
1259
|
language: "python",
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Every string the day-by-day uptime history speaks: the accessible names on
|
|
3
|
+
* the strip itself, and the chrome of the dialog a day opens.
|
|
4
|
+
*
|
|
5
|
+
* These live in one interface, rather than one per component, because a
|
|
6
|
+
* caller who translates the strip must also translate the dialog it opens -
|
|
7
|
+
* splitting them is how you end up with a French status page whose bars
|
|
8
|
+
* announce themselves in French and whose dialog is in English.
|
|
9
|
+
*
|
|
10
|
+
* Every field has an English default (DefaultUptimeHistoryLabels), so the
|
|
11
|
+
* dashboard - which is English-only, like the tooltip next to it - passes
|
|
12
|
+
* nothing.
|
|
13
|
+
*/
|
|
14
|
+
export default interface UptimeHistoryLabels {
|
|
15
|
+
/* Names the strip. {{total}} is the number of days it covers. */
|
|
16
|
+
graphLabel: string;
|
|
17
|
+
/* A day with data. {{date}}, {{uptime}}. */
|
|
18
|
+
dayLabel: string;
|
|
19
|
+
/* A day with data and incidents. {{date}}, {{uptime}}, {{total}}. */
|
|
20
|
+
dayLabelWithIncidents: string;
|
|
21
|
+
/* A day with no timeline rows at all. {{date}}. */
|
|
22
|
+
dayLabelNoData: string;
|
|
23
|
+
/* No timeline rows, but incidents. {{date}}, {{total}}. */
|
|
24
|
+
dayLabelNoDataWithIncidents: string;
|
|
25
|
+
|
|
26
|
+
/* Dialog + tooltip body. */
|
|
27
|
+
uptime: string;
|
|
28
|
+
noMonitoringData: string;
|
|
29
|
+
incidents: string;
|
|
30
|
+
noIncidents: string;
|
|
31
|
+
noIncidentsDescription: string;
|
|
32
|
+
/* Dialog subtitle when the day carried exactly one incident. */
|
|
33
|
+
oneIncidentOnThisDay: string;
|
|
34
|
+
/* Dialog subtitle for two or more. {{total}}. */
|
|
35
|
+
incidentsOnThisDay: string;
|
|
36
|
+
/* Prefixes an incident's declaration time: "Declared Mar 03 2026, 14:12". */
|
|
37
|
+
declared: string;
|
|
38
|
+
close: string;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export const DefaultUptimeHistoryLabels: UptimeHistoryLabels = {
|
|
42
|
+
graphLabel: "Uptime history for the last {{total}} days",
|
|
43
|
+
dayLabel: "{{date}}: {{uptime}}% uptime",
|
|
44
|
+
dayLabelWithIncidents: "{{date}}: {{uptime}}% uptime, {{total}} incidents",
|
|
45
|
+
dayLabelNoData: "{{date}}: no data",
|
|
46
|
+
dayLabelNoDataWithIncidents: "{{date}}: no data, {{total}} incidents",
|
|
47
|
+
uptime: "Uptime",
|
|
48
|
+
noMonitoringData: "No monitoring data for this day",
|
|
49
|
+
incidents: "Incidents",
|
|
50
|
+
noIncidents: "No incidents",
|
|
51
|
+
noIncidentsDescription: "No incidents were reported on this day.",
|
|
52
|
+
oneIncidentOnThisDay: "1 incident reported on this day",
|
|
53
|
+
incidentsOnThisDay: "{{total}} incidents reported on this day",
|
|
54
|
+
declared: "Declared",
|
|
55
|
+
close: "Close",
|
|
56
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import NotificationSettingEventType from "./NotificationSettingEventType";
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Keep this an explicit allowlist: newly introduced events retain their existing
|
|
5
|
+
* email preference until someone deliberately classifies them as routine.
|
|
6
|
+
*/
|
|
7
|
+
export const ROUTINE_EMAIL_EVENT_TYPES: ReadonlyArray<NotificationSettingEventType> =
|
|
8
|
+
Object.freeze([
|
|
9
|
+
NotificationSettingEventType.SEND_INCIDENT_NOTE_POSTED_OWNER_NOTIFICATION,
|
|
10
|
+
NotificationSettingEventType.SEND_ALERT_NOTE_POSTED_OWNER_NOTIFICATION,
|
|
11
|
+
NotificationSettingEventType.SEND_INCIDENT_EPISODE_NOTE_POSTED_OWNER_NOTIFICATION,
|
|
12
|
+
NotificationSettingEventType.SEND_ALERT_EPISODE_NOTE_POSTED_OWNER_NOTIFICATION,
|
|
13
|
+
NotificationSettingEventType.SEND_SCHEDULED_MAINTENANCE_NOTE_POSTED_OWNER_NOTIFICATION,
|
|
14
|
+
NotificationSettingEventType.SEND_INCIDENT_OWNER_ADDED_NOTIFICATION,
|
|
15
|
+
NotificationSettingEventType.SEND_ALERT_OWNER_ADDED_NOTIFICATION,
|
|
16
|
+
NotificationSettingEventType.SEND_INCIDENT_EPISODE_OWNER_ADDED_NOTIFICATION,
|
|
17
|
+
NotificationSettingEventType.SEND_ALERT_EPISODE_OWNER_ADDED_NOTIFICATION,
|
|
18
|
+
NotificationSettingEventType.SEND_MONITOR_OWNER_ADDED_NOTIFICATION,
|
|
19
|
+
NotificationSettingEventType.SEND_SLO_OWNER_ADDED_NOTIFICATION,
|
|
20
|
+
NotificationSettingEventType.SEND_PROBE_OWNER_ADDED_NOTIFICATION,
|
|
21
|
+
NotificationSettingEventType.SEND_AI_AGENT_OWNER_ADDED_NOTIFICATION,
|
|
22
|
+
NotificationSettingEventType.SEND_STATUS_PAGE_OWNER_ADDED_NOTIFICATION,
|
|
23
|
+
NotificationSettingEventType.SEND_SCHEDULED_MAINTENANCE_OWNER_ADDED_NOTIFICATION,
|
|
24
|
+
NotificationSettingEventType.SEND_INCIDENT_ADDED_TO_EPISODE_OWNER_NOTIFICATION,
|
|
25
|
+
NotificationSettingEventType.SEND_ALERT_ADDED_TO_EPISODE_OWNER_NOTIFICATION,
|
|
26
|
+
NotificationSettingEventType.SEND_WHEN_USER_IS_ADDED_TO_ON_CALL_POLICY,
|
|
27
|
+
NotificationSettingEventType.SEND_WHEN_USER_IS_REMOVED_FROM_ON_CALL_POLICY,
|
|
28
|
+
NotificationSettingEventType.SEND_MONITOR_CREATED_OWNER_NOTIFICATION,
|
|
29
|
+
NotificationSettingEventType.SEND_STATUS_PAGE_CREATED_OWNER_NOTIFICATION,
|
|
30
|
+
]);
|
|
@@ -158,6 +158,111 @@ export const SESSION_REPLAY_ALLOWED_RETENTION_DAYS: Array<number> = [
|
|
|
158
158
|
*/
|
|
159
159
|
export const DEFAULT_SESSION_REPLAY_RETENTION_IN_DAYS: number = 7;
|
|
160
160
|
|
|
161
|
+
/*
|
|
162
|
+
* ---- Caps on host-page supplied strings (identify / setTags / track). ----
|
|
163
|
+
*
|
|
164
|
+
* Every one of these is enforced twice, on the client before the bytes
|
|
165
|
+
* leave the page and again at ingest, and the two sides MUST agree: a
|
|
166
|
+
* recorder that sends more than the server keeps produces silent
|
|
167
|
+
* truncation nobody can explain from the dashboard, and a server that
|
|
168
|
+
* keeps more than the recorder sends is a cap that protects nothing. The
|
|
169
|
+
* numbers are small on purpose. These maps ride on the header row of a
|
|
170
|
+
* ReplacingMergeTree that is rewritten by the finalizer, so every byte
|
|
171
|
+
* here is merge amplification, and they are rendered in list cells that
|
|
172
|
+
* have to stay one line.
|
|
173
|
+
*/
|
|
174
|
+
|
|
175
|
+
/* identify(ref, traits): the traits map. */
|
|
176
|
+
export const SESSION_REPLAY_MAX_TRAIT_KEYS: number = 20;
|
|
177
|
+
export const SESSION_REPLAY_MAX_TRAIT_KEY_LENGTH: number = 40;
|
|
178
|
+
export const SESSION_REPLAY_MAX_TRAIT_VALUE_LENGTH: number = 200;
|
|
179
|
+
|
|
180
|
+
/*
|
|
181
|
+
* setTags()/addTag(): tighter than traits because tags are indexed for the
|
|
182
|
+
* tag:key=value search and shown as pills, where a 200-character value is
|
|
183
|
+
* unreadable anyway.
|
|
184
|
+
*/
|
|
185
|
+
export const SESSION_REPLAY_MAX_TAG_KEYS: number = 20;
|
|
186
|
+
export const SESSION_REPLAY_MAX_TAG_KEY_LENGTH: number = 32;
|
|
187
|
+
export const SESSION_REPLAY_MAX_TAG_VALUE_LENGTH: number = 128;
|
|
188
|
+
|
|
189
|
+
/*
|
|
190
|
+
* track(name, properties): a custom event's name is a rail row title, and
|
|
191
|
+
* its properties map shares the trait caps for key/value length.
|
|
192
|
+
*/
|
|
193
|
+
export const SESSION_REPLAY_MAX_CUSTOM_EVENT_NAME_LENGTH: number = 64;
|
|
194
|
+
export const SESSION_REPLAY_MAX_CUSTOM_EVENT_PROPERTY_KEYS: number = 20;
|
|
195
|
+
|
|
196
|
+
/*
|
|
197
|
+
* Per-CHUNK caps on the two custom-event kinds the host page can fire in a
|
|
198
|
+
* loop. Per chunk rather than per session so a long session keeps
|
|
199
|
+
* recording interactions after a busy minute; the recorder emits one
|
|
200
|
+
* "-dropped { count }" event per chunk once a cap is hit, so the player
|
|
201
|
+
* can say "212 clicks not labelled" instead of showing a quiet stretch.
|
|
202
|
+
*/
|
|
203
|
+
export const SESSION_REPLAY_MAX_CUSTOM_EVENTS_PER_CHUNK: number = 50;
|
|
204
|
+
export const SESSION_REPLAY_MAX_CLICK_EVENTS_PER_CHUNK: number = 100;
|
|
205
|
+
|
|
206
|
+
/*
|
|
207
|
+
* The visible text carried on a click event (aria-label, name or text
|
|
208
|
+
* content, after the active masking transform). Enough to read "Place
|
|
209
|
+
* order", short enough that a click on a paragraph cannot smuggle it.
|
|
210
|
+
*/
|
|
211
|
+
export const SESSION_REPLAY_MAX_CLICK_TEXT_LENGTH: number = 40;
|
|
212
|
+
|
|
213
|
+
/* captureSession(reason): the reason becomes a custom event property. */
|
|
214
|
+
export const SESSION_REPLAY_MAX_CAPTURE_REASON_LENGTH: number = 80;
|
|
215
|
+
|
|
216
|
+
/*
|
|
217
|
+
* ---- Player-side activity model. ----
|
|
218
|
+
*
|
|
219
|
+
* A stretch with no user input for at least this long is an idle band on
|
|
220
|
+
* the timeline and a candidate for "skip idle". 5s is the smallest gap a
|
|
221
|
+
* viewer perceives as waiting rather than reading; shorter bands would
|
|
222
|
+
* turn every pause-to-read into a jump.
|
|
223
|
+
*/
|
|
224
|
+
export const SESSION_REPLAY_IDLE_THRESHOLD_MS: number = 5 * 1000;
|
|
225
|
+
|
|
226
|
+
/*
|
|
227
|
+
* Coarse activity from the manifest alone: a chunk carrying fewer events
|
|
228
|
+
* than this is provisionally idle before it is decoded. A chunk always
|
|
229
|
+
* holds a handful of housekeeping events (meta, viewport, the flush
|
|
230
|
+
* checkout), so "3 or fewer" means nothing the user did reached it. The
|
|
231
|
+
* finalizer uses the same threshold to compute activeMs on the header, so
|
|
232
|
+
* the list's "idle 40%" and the timeline's hatched bands agree.
|
|
233
|
+
*/
|
|
234
|
+
export const SESSION_REPLAY_ACTIVE_CHUNK_MIN_EVENTS: number = 4;
|
|
235
|
+
|
|
236
|
+
/*
|
|
237
|
+
* ---- List search. ----
|
|
238
|
+
*
|
|
239
|
+
* Free-text search runs as a case-insensitive substring match over several
|
|
240
|
+
* argMax'd header columns, which cannot use an index. The string cap keeps
|
|
241
|
+
* the predicate cheap; the window cap bounds how many partitions it may
|
|
242
|
+
* scan, and the handler answers "narrow the range" rather than timing out
|
|
243
|
+
* against a wider window.
|
|
244
|
+
*/
|
|
245
|
+
export const SESSION_REPLAY_LIST_SEARCH_MAX_LENGTH: number = 200;
|
|
246
|
+
export const SESSION_REPLAY_LIST_SEARCH_MAX_WINDOW_DAYS: number = 30;
|
|
247
|
+
|
|
248
|
+
/*
|
|
249
|
+
* Everything a current recorder build can capture beyond the rrweb DOM
|
|
250
|
+
* stream. The recorder sends the subset it implements on chunk 0
|
|
251
|
+
* (SessionReplayChunkEnvelope.capabilities); the player and the setup page
|
|
252
|
+
* compare a recording against this list to explain what an older cached
|
|
253
|
+
* artifact could not have captured, e.g. "click labels: no". Additive
|
|
254
|
+
* only: a value is never removed or renamed, because stored headers quote
|
|
255
|
+
* these strings.
|
|
256
|
+
*/
|
|
257
|
+
export const SESSION_REPLAY_RECORDER_CAPABILITIES: ReadonlyArray<string> = [
|
|
258
|
+
"click-events",
|
|
259
|
+
"web-vitals",
|
|
260
|
+
"custom-events",
|
|
261
|
+
"traits",
|
|
262
|
+
"tags",
|
|
263
|
+
"visibility",
|
|
264
|
+
];
|
|
265
|
+
|
|
161
266
|
/* How the payload bytes were compressed by the recorder. */
|
|
162
267
|
export type SessionReplayPayloadEncoding = "gzip" | "identity";
|
|
163
268
|
|
|
@@ -197,6 +302,21 @@ export enum SessionReplayFidelityNotice {
|
|
|
197
302
|
* may be noisier than the application's settings intend.
|
|
198
303
|
*/
|
|
199
304
|
IgnorePatternsDiscarded = "ignore-patterns-discarded",
|
|
305
|
+
/*
|
|
306
|
+
* A per-session cap on recorded console lines, errors, network requests
|
|
307
|
+
* or route changes was reached, so later signals of that kind were not
|
|
308
|
+
* recorded. The footage itself is complete; only the rail is truncated
|
|
309
|
+
* past this point. The recorder emits an in-band cap marker too, so the
|
|
310
|
+
* rail can show WHERE the truncation started.
|
|
311
|
+
*/
|
|
312
|
+
SignalCapReached = "signal-cap-reached",
|
|
313
|
+
/*
|
|
314
|
+
* rrweb threw inside the recorder's own emit path (its errorHandler
|
|
315
|
+
* swallowed it so the host page kept working) three or more times on
|
|
316
|
+
* this page. The recorder took a fresh checkout after the burst, so the
|
|
317
|
+
* footage recovers, but playback may skip or freeze around those points.
|
|
318
|
+
*/
|
|
319
|
+
RecorderError = "recorder-error",
|
|
200
320
|
}
|
|
201
321
|
|
|
202
322
|
/* Why a session stopped accumulating chunks. */
|
|
@@ -227,6 +347,19 @@ export interface SessionReplaySignalCounts {
|
|
|
227
347
|
errorClickCount: number;
|
|
228
348
|
refreshRageCount: number;
|
|
229
349
|
routeCount: number;
|
|
350
|
+
|
|
351
|
+
/*
|
|
352
|
+
* Engagement counters, optional because a recorder that predates them
|
|
353
|
+
* omits them and the server reads absence as 0. clickCount counts the
|
|
354
|
+
* oneuptime.click events the chunk carries (capped per chunk, see
|
|
355
|
+
* SESSION_REPLAY_MAX_CLICK_EVENTS_PER_CHUNK), customEventCount the
|
|
356
|
+
* oneuptime.custom events from the host page's track() calls. Both are
|
|
357
|
+
* summed into the session header by the finalizer like the others, and
|
|
358
|
+
* feed the list's "41 clicks" column and the player's activity lane
|
|
359
|
+
* before any chunk is decoded.
|
|
360
|
+
*/
|
|
361
|
+
clickCount?: number;
|
|
362
|
+
customEventCount?: number;
|
|
230
363
|
}
|
|
231
364
|
|
|
232
365
|
/*
|
|
@@ -249,6 +382,27 @@ export interface SessionReplayChunkMeta {
|
|
|
249
382
|
* explicitly enabled user-identity capture.
|
|
250
383
|
*/
|
|
251
384
|
identifiedUserRef?: string;
|
|
385
|
+
|
|
386
|
+
/*
|
|
387
|
+
* Traits the host page attached to the identified user through
|
|
388
|
+
* identify(ref, traits): plan, role, tenant - never the reference itself.
|
|
389
|
+
* Already stringified, capped (SESSION_REPLAY_MAX_TRAIT_*) and masked on
|
|
390
|
+
* the client; the server re-caps and stores them ONLY when the
|
|
391
|
+
* application has user-identity capture on, in a column under the same
|
|
392
|
+
* narrow identity ACL as identifiedUserLabel. Absent from an older
|
|
393
|
+
* recorder, and absent whenever identify() was never called.
|
|
394
|
+
*/
|
|
395
|
+
identifiedUserTraits?: Record<string, string>;
|
|
396
|
+
|
|
397
|
+
/*
|
|
398
|
+
* Per-session key/value tags from setTags()/addTag(): a build id, an
|
|
399
|
+
* experiment arm, a customer tier. Unlike traits these describe the
|
|
400
|
+
* session rather than the person, so they live under the ordinary
|
|
401
|
+
* session ACL and are searchable from the list (tag:key=value). Carried
|
|
402
|
+
* on whichever chunk carries meta so a tag set after chunk 0 still
|
|
403
|
+
* reaches the header.
|
|
404
|
+
*/
|
|
405
|
+
tags?: Record<string, string>;
|
|
252
406
|
}
|
|
253
407
|
|
|
254
408
|
/*
|
|
@@ -346,6 +500,17 @@ export interface SessionReplayChunkEnvelope {
|
|
|
346
500
|
|
|
347
501
|
/* Trace ids observed in this chunk's network events, for correlation. */
|
|
348
502
|
traceIds?: Array<string>;
|
|
503
|
+
|
|
504
|
+
/*
|
|
505
|
+
* What this recorder build can capture, as a subset of
|
|
506
|
+
* SESSION_REPLAY_RECORDER_CAPABILITIES. Sent on chunk 0 only and purely
|
|
507
|
+
* informational: the server stores it on the header so the player can
|
|
508
|
+
* say "this recording predates click labels" instead of rendering an
|
|
509
|
+
* empty Interactions tab, and the setup page can tell a customer on a
|
|
510
|
+
* stale cached artifact which features their visitors' browsers are
|
|
511
|
+
* still missing. Never used to gate ingest.
|
|
512
|
+
*/
|
|
513
|
+
capabilities?: Array<string>;
|
|
349
514
|
}
|
|
350
515
|
|
|
351
516
|
/*
|
|
@@ -388,6 +553,15 @@ export enum SessionReplayDisabledReason {
|
|
|
388
553
|
* not match one, or a kill key is set.
|
|
389
554
|
*/
|
|
390
555
|
NotEnabledForApplication = "not-enabled-for-application",
|
|
556
|
+
|
|
557
|
+
/*
|
|
558
|
+
* The project's daily byte budget or the application's monthly budget
|
|
559
|
+
* is already spent, so the recorder is told at config time not to
|
|
560
|
+
* record at all. Without this every new page load would record,
|
|
561
|
+
* compress and upload a chunk only to be refused. `disabledDetail`
|
|
562
|
+
* says which budget and `budgetResetsAt` when it clears.
|
|
563
|
+
*/
|
|
564
|
+
BudgetExhausted = "budget-exhausted",
|
|
391
565
|
}
|
|
392
566
|
|
|
393
567
|
/*
|
|
@@ -486,6 +660,25 @@ export interface SessionReplayConfigResponse {
|
|
|
486
660
|
*/
|
|
487
661
|
disabledReason?: SessionReplayDisabledReason;
|
|
488
662
|
|
|
663
|
+
/*
|
|
664
|
+
* Narrows disabledReason so the customer's console and the Dashboard's
|
|
665
|
+
* installation test can name the exact switch or budget: for
|
|
666
|
+
* NotEnabledForApplication one of project-not-allowed,
|
|
667
|
+
* application-not-enabled, application-unknown, project-killed; for
|
|
668
|
+
* BudgetExhausted one of project-daily-budget-exhausted,
|
|
669
|
+
* app-monthly-budget-exhausted. Free-form on purpose - the vocabulary
|
|
670
|
+
* belongs to the server's gate cache, and an older recorder just logs
|
|
671
|
+
* whatever string it receives.
|
|
672
|
+
*/
|
|
673
|
+
disabledDetail?: string;
|
|
674
|
+
|
|
675
|
+
/*
|
|
676
|
+
* ISO timestamp of when a spent budget clears, set only alongside
|
|
677
|
+
* BudgetExhausted, so the recorder's diagnostics can say "resets at
|
|
678
|
+
* 00:00 UTC" instead of "disabled".
|
|
679
|
+
*/
|
|
680
|
+
budgetResetsAt?: string;
|
|
681
|
+
|
|
489
682
|
/*
|
|
490
683
|
* Ask every recorder that reads this policy to print its decisions to
|
|
491
684
|
* the browser console (SESSION_REPLAY_DEBUG on the deployment).
|
|
@@ -538,6 +731,22 @@ export interface SessionReplayChunkManifestEntry {
|
|
|
538
731
|
errorClickCount: number;
|
|
539
732
|
refreshRageCount: number;
|
|
540
733
|
routeCount: number;
|
|
734
|
+
|
|
735
|
+
/*
|
|
736
|
+
* Optional because a manifest from a server that predates the column
|
|
737
|
+
* simply omits it, and the player must not draw "0 clicks" for a chunk
|
|
738
|
+
* that was never counted. Feeds the coarse activity heat on the timeline
|
|
739
|
+
* before the chunk is decoded.
|
|
740
|
+
*/
|
|
741
|
+
clickCount?: number;
|
|
742
|
+
|
|
743
|
+
/*
|
|
744
|
+
* Scrubbed URL the chunk was flushed from (the chunk row's url column).
|
|
745
|
+
* Lets the stage's URL bar and the timeline preview name the page for a
|
|
746
|
+
* chunk that is not loaded yet; the exact navigation events take over
|
|
747
|
+
* once it is decoded.
|
|
748
|
+
*/
|
|
749
|
+
url?: string;
|
|
541
750
|
}
|
|
542
751
|
|
|
543
752
|
/* A hole in the chunk sequence. Never crossed silently during playback. */
|