@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,12 @@ import React, { FunctionComponent, ReactElement } from "react";
|
|
|
2
2
|
|
|
3
3
|
export interface ComponentProps {
|
|
4
4
|
leftComponents?: undefined | Array<ReactElement> | ReactElement;
|
|
5
|
+
/*
|
|
6
|
+
* The right-hand rail. Rendered at every viewport width — see the note on the
|
|
7
|
+
* container below. An entry that only earns its space on a wide screen
|
|
8
|
+
* carries its own breakpoint classes (`hidden lg:flex`) at the call site.
|
|
9
|
+
*/
|
|
5
10
|
rightComponents?: undefined | Array<ReactElement> | ReactElement;
|
|
6
|
-
mobileRightComponents?: undefined | Array<ReactElement> | ReactElement;
|
|
7
11
|
centerComponents?: undefined | Array<ReactElement> | ReactElement;
|
|
8
12
|
className?: string | undefined;
|
|
9
13
|
}
|
|
@@ -19,7 +23,12 @@ const Header: FunctionComponent<ComponentProps> = (
|
|
|
19
23
|
"relative flex h-16 justify-between bg-white shadow-sm px-4"
|
|
20
24
|
}
|
|
21
25
|
>
|
|
22
|
-
|
|
26
|
+
{/*
|
|
27
|
+
* min-w-0 so this side is what gives way when the header runs out of
|
|
28
|
+
* room. Without it the project picker's intrinsic width wins the flex
|
|
29
|
+
* negotiation and the whole row overflows the viewport on a phone.
|
|
30
|
+
*/}
|
|
31
|
+
<div className="relative z-20 flex min-w-0 items-center">
|
|
23
32
|
{props.leftComponents}
|
|
24
33
|
</div>
|
|
25
34
|
|
|
@@ -29,13 +38,20 @@ const Header: FunctionComponent<ComponentProps> = (
|
|
|
29
38
|
</div>
|
|
30
39
|
)}
|
|
31
40
|
|
|
32
|
-
{
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
41
|
+
{/*
|
|
42
|
+
* One right rail, on screen at every width.
|
|
43
|
+
*
|
|
44
|
+
* This used to be `hidden lg:flex`, so below 1024px the header dropped
|
|
45
|
+
* every action it holds — including the profile button, and with it the
|
|
46
|
+
* only way to reach the profile menu, admin settings, the theme switch
|
|
47
|
+
* and log out. Nothing about a narrow viewport makes those optional, so
|
|
48
|
+
* the container no longer decides: it always renders, and each entry
|
|
49
|
+
* hides itself at the widths where it does not fit.
|
|
50
|
+
*
|
|
51
|
+
* flex-shrink-0 keeps the buttons at full size and pushes the squeeze
|
|
52
|
+
* onto the left side, which can truncate.
|
|
53
|
+
*/}
|
|
54
|
+
<div className="relative z-20 ml-2 flex flex-shrink-0 items-center gap-2 lg:z-10 lg:ml-4">
|
|
39
55
|
{props.rightComponents}
|
|
40
56
|
</div>
|
|
41
57
|
</div>
|
|
@@ -11,6 +11,12 @@ export interface ComponentProps {
|
|
|
11
11
|
title: string;
|
|
12
12
|
openInNewTab?: boolean;
|
|
13
13
|
onClick?: (() => void) | undefined;
|
|
14
|
+
/*
|
|
15
|
+
* Optional trailing content, pinned to the right edge of the row. Meant for
|
|
16
|
+
* a keycap hint on an item that also has a keyboard shortcut, so the menu
|
|
17
|
+
* teaches the shortcut instead of only competing with it.
|
|
18
|
+
*/
|
|
19
|
+
rightElement?: ReactElement | undefined;
|
|
14
20
|
}
|
|
15
21
|
|
|
16
22
|
const IconDropdown: FunctionComponent<ComponentProps> = (
|
|
@@ -26,7 +32,10 @@ const IconDropdown: FunctionComponent<ComponentProps> = (
|
|
|
26
32
|
<div className="flex-shrink-0 h-5 w-5 text-gray-400">
|
|
27
33
|
{props.icon ? <Icon icon={props.icon} /> : <></>}
|
|
28
34
|
</div>
|
|
29
|
-
<span className="font-medium">{props.title}</span>
|
|
35
|
+
<span className="min-w-0 flex-1 truncate font-medium">{props.title}</span>
|
|
36
|
+
{props.rightElement && (
|
|
37
|
+
<span className="flex shrink-0 items-center">{props.rightElement}</span>
|
|
38
|
+
)}
|
|
30
39
|
</Link>
|
|
31
40
|
);
|
|
32
41
|
};
|
|
@@ -9,7 +9,12 @@ const IconDropdown: FunctionComponent<ComponentProps> = (
|
|
|
9
9
|
): ReactElement => {
|
|
10
10
|
return (
|
|
11
11
|
<div
|
|
12
|
-
|
|
12
|
+
/*
|
|
13
|
+
* w-64, not w-56: a two-word label with a trailing keycap ("Keyboard
|
|
14
|
+
* shortcuts ?") wrapped onto a second line at the old width, which reads
|
|
15
|
+
* as two menu entries at a glance.
|
|
16
|
+
*/
|
|
17
|
+
className="absolute right-0 z-10 mt-2 w-64 origin-top-right rounded-xl bg-white py-2 shadow-lg ring-1 ring-gray-200 focus:outline-none transform opacity-100 scale-100 animate-in fade-in slide-in-from-top-1 duration-150"
|
|
13
18
|
role="menu"
|
|
14
19
|
aria-orientation="vertical"
|
|
15
20
|
aria-labelledby="user-menu-button"
|
|
@@ -37,7 +37,12 @@ const ProjectPicker: FunctionComponent<ComponentProps> = (
|
|
|
37
37
|
}, [isComponentVisible]);
|
|
38
38
|
|
|
39
39
|
return (
|
|
40
|
-
|
|
40
|
+
/*
|
|
41
|
+
* min-w-0 so the picker is what truncates when the header is tight — its
|
|
42
|
+
* label is already `truncate`, and the alternative is the whole row
|
|
43
|
+
* overflowing the viewport. Narrower below sm for the same reason.
|
|
44
|
+
*/
|
|
45
|
+
<div className="w-48 min-w-0 sm:w-64">
|
|
41
46
|
<div className="relative w-full">
|
|
42
47
|
<button
|
|
43
48
|
onClick={() => {
|
|
@@ -34,7 +34,12 @@ const NotificationBellDropdown: (props: ComponentProps) => ReactElement = (
|
|
|
34
34
|
errorItems.length > 0 || infoItems.length > 0 || successItems.length > 0;
|
|
35
35
|
|
|
36
36
|
return (
|
|
37
|
-
|
|
37
|
+
/*
|
|
38
|
+
* w-64 below sm: the panel hangs off the bell, which sits a couple of
|
|
39
|
+
* button widths in from the right edge, so a fixed 20rem runs past the
|
|
40
|
+
* left edge of a phone screen.
|
|
41
|
+
*/
|
|
42
|
+
<div className="absolute right-0 z-10 mt-2 w-64 rounded-xl bg-white shadow-lg ring-1 ring-gray-200 max-h-96 overflow-y-auto sm:w-80">
|
|
38
43
|
<div className="py-2">
|
|
39
44
|
<div className="px-4 py-2 border-b border-gray-100">
|
|
40
45
|
<span className="text-sm font-semibold text-gray-900">
|
|
@@ -930,6 +930,17 @@ const Icon: FunctionComponent<ComponentProps> = ({
|
|
|
930
930
|
d="M6.75 7.5l3 2.25-3 2.25m4.5 0h3m-9 8.25h13.5A2.25 2.25 0 0021 18V6a2.25 2.25 0 00-2.25-2.25H5.25A2.25 2.25 0 003 6v12a2.25 2.25 0 002.25 2.25z"
|
|
931
931
|
/>,
|
|
932
932
|
);
|
|
933
|
+
} else if (icon === IconProp.Keyboard) {
|
|
934
|
+
return getSvgWrapper(
|
|
935
|
+
<React.Fragment>
|
|
936
|
+
<rect x="2.25" y="5.25" width="19.5" height="13.5" rx="2.25" />
|
|
937
|
+
<path
|
|
938
|
+
strokeLinecap="round"
|
|
939
|
+
strokeLinejoin="round"
|
|
940
|
+
d="M6 9.75h.008M9.75 9.75h.008M13.5 9.75h.008M17.25 9.75h.008M7.5 13.5h.008M11.25 13.5h.008M15 13.5h.008M7.5 16.5h9"
|
|
941
|
+
/>
|
|
942
|
+
</React.Fragment>,
|
|
943
|
+
);
|
|
933
944
|
} else if (icon === IconProp.Error) {
|
|
934
945
|
return getSvgWrapper(
|
|
935
946
|
<path
|
|
@@ -60,7 +60,7 @@ const JSONTable: FunctionComponent<JSONTableProps> = (
|
|
|
60
60
|
*/
|
|
61
61
|
type GroupEntry = { index: number; value: unknown };
|
|
62
62
|
type GroupMap = { [prefix: string]: Array<GroupEntry> };
|
|
63
|
-
const groupMap: GroupMap =
|
|
63
|
+
const groupMap: GroupMap = Object.create(null) as GroupMap;
|
|
64
64
|
const keys: Array<string> = Object.keys(working);
|
|
65
65
|
|
|
66
66
|
// Track keys that should be removed after grouping
|
|
@@ -100,7 +100,7 @@ const JSONTable: FunctionComponent<JSONTableProps> = (
|
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
// Apply grouping where it makes sense (only if at least 2 items or at least 1 and prefix not already defined)
|
|
103
|
-
for (const prefix
|
|
103
|
+
for (const prefix of Object.keys(groupMap)) {
|
|
104
104
|
const arr: Array<GroupEntry> = groupMap[prefix] || [];
|
|
105
105
|
if (arr.length === 0) {
|
|
106
106
|
continue;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import Modal, { ModalWidth } from "../Modal/Modal";
|
|
2
|
+
import KeyboardShortcut, { KeyboardShortcutSize } from "./KeyboardShortcut";
|
|
3
|
+
import { KeyboardShortcutKey } from "./KeyboardKey";
|
|
4
|
+
import React, { FunctionComponent, ReactElement } from "react";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* One shortcut, as a list of chords pressed in order.
|
|
8
|
+
*
|
|
9
|
+
* A single chord is an ordinary shortcut — `[[Mod, "K"]]` renders "⌘ K". Two
|
|
10
|
+
* chords are a sequence — `[["G"], ["I"]]` renders "G then I" — which is what
|
|
11
|
+
* lets leader-key navigation and plain shortcuts sit in one table without the
|
|
12
|
+
* reader having to work out which is which.
|
|
13
|
+
*/
|
|
14
|
+
export interface KeyboardShortcutDescription {
|
|
15
|
+
id: string;
|
|
16
|
+
keySequence: Array<Array<KeyboardShortcutKey>>;
|
|
17
|
+
description: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface KeyboardShortcutGroup {
|
|
21
|
+
id: string;
|
|
22
|
+
title: string;
|
|
23
|
+
shortcuts: Array<KeyboardShortcutDescription>;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface ComponentProps {
|
|
27
|
+
groups: Array<KeyboardShortcutGroup>;
|
|
28
|
+
title: string;
|
|
29
|
+
description?: string | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* The word between two chords of a sequence, e.g. "then". Passed in so the
|
|
32
|
+
* caller owns translation; this component holds no strings of its own.
|
|
33
|
+
*/
|
|
34
|
+
thenLabel: string;
|
|
35
|
+
closeButtonText: string;
|
|
36
|
+
onClose: () => void;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* The product's one place to look up what the keyboard can do.
|
|
41
|
+
*
|
|
42
|
+
* Shortcuts are only worth having if they can be found, and until now every
|
|
43
|
+
* one the dashboard had — the command palette, Ask AI, "/" to search a table —
|
|
44
|
+
* was learnable only by being told about it. This is the page that tells you.
|
|
45
|
+
*/
|
|
46
|
+
const KeyboardShortcutsModal: FunctionComponent<ComponentProps> = (
|
|
47
|
+
props: ComponentProps,
|
|
48
|
+
): ReactElement => {
|
|
49
|
+
/*
|
|
50
|
+
* A group whose shortcuts are all gated off would otherwise render as a
|
|
51
|
+
* heading with nothing under it.
|
|
52
|
+
*/
|
|
53
|
+
const visibleGroups: Array<KeyboardShortcutGroup> = props.groups.filter(
|
|
54
|
+
(group: KeyboardShortcutGroup) => {
|
|
55
|
+
return group.shortcuts.length > 0;
|
|
56
|
+
},
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
return (
|
|
60
|
+
<Modal
|
|
61
|
+
title={props.title}
|
|
62
|
+
description={props.description}
|
|
63
|
+
modalWidth={ModalWidth.Large}
|
|
64
|
+
closeButtonText={props.closeButtonText}
|
|
65
|
+
onClose={props.onClose}
|
|
66
|
+
>
|
|
67
|
+
<div
|
|
68
|
+
data-testid="keyboard-shortcuts-modal"
|
|
69
|
+
className="grid grid-cols-1 gap-x-10 gap-y-7 sm:grid-cols-2"
|
|
70
|
+
>
|
|
71
|
+
{visibleGroups.map((group: KeyboardShortcutGroup) => {
|
|
72
|
+
return (
|
|
73
|
+
<section key={group.id} data-testid={`shortcut-group-${group.id}`}>
|
|
74
|
+
<h4 className="text-[11px] font-semibold uppercase tracking-wider text-gray-400">
|
|
75
|
+
{group.title}
|
|
76
|
+
</h4>
|
|
77
|
+
|
|
78
|
+
<dl className="mt-2 divide-y divide-gray-100">
|
|
79
|
+
{group.shortcuts.map(
|
|
80
|
+
(shortcut: KeyboardShortcutDescription) => {
|
|
81
|
+
return (
|
|
82
|
+
<div
|
|
83
|
+
key={shortcut.id}
|
|
84
|
+
data-testid={`shortcut-${shortcut.id}`}
|
|
85
|
+
className="flex items-center justify-between gap-4 py-2"
|
|
86
|
+
>
|
|
87
|
+
<dt className="min-w-0 text-sm text-gray-600">
|
|
88
|
+
{shortcut.description}
|
|
89
|
+
</dt>
|
|
90
|
+
<dd className="flex shrink-0 items-center gap-1.5">
|
|
91
|
+
{shortcut.keySequence.map(
|
|
92
|
+
(
|
|
93
|
+
chord: Array<KeyboardShortcutKey>,
|
|
94
|
+
index: number,
|
|
95
|
+
) => {
|
|
96
|
+
return (
|
|
97
|
+
<React.Fragment key={`chord-${index}`}>
|
|
98
|
+
{index > 0 && (
|
|
99
|
+
<span className="text-xs text-gray-400">
|
|
100
|
+
{props.thenLabel}
|
|
101
|
+
</span>
|
|
102
|
+
)}
|
|
103
|
+
<KeyboardShortcut
|
|
104
|
+
keys={chord}
|
|
105
|
+
size={KeyboardShortcutSize.Small}
|
|
106
|
+
/>
|
|
107
|
+
</React.Fragment>
|
|
108
|
+
);
|
|
109
|
+
},
|
|
110
|
+
)}
|
|
111
|
+
</dd>
|
|
112
|
+
</div>
|
|
113
|
+
);
|
|
114
|
+
},
|
|
115
|
+
)}
|
|
116
|
+
</dl>
|
|
117
|
+
</section>
|
|
118
|
+
);
|
|
119
|
+
})}
|
|
120
|
+
</div>
|
|
121
|
+
</Modal>
|
|
122
|
+
);
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
export default KeyboardShortcutsModal;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Keyboard shortcut screenshots
|
|
2
|
+
|
|
3
|
+
The dashboard's global keyboard layer — the shortcuts dialog
|
|
4
|
+
(`../KeyboardShortcutsModal.tsx`) and the two places it is reachable by mouse.
|
|
5
|
+
Rendered from the real components against the dashboard's own Tailwind build
|
|
6
|
+
and `Common/UI/Styles/Theme.css`.
|
|
7
|
+
|
|
8
|
+
| File | Shows |
|
|
9
|
+
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
|
|
10
|
+
| `keyboard-shortcuts-dialog.png` | The dialog opened with `?`: the chorded shortcuts other components own on the left, the `g`-then-key jumps on the right. |
|
|
11
|
+
| `keyboard-shortcuts-dialog-dark.png` | The same dialog on the dark theme, which it inherits from `Theme.css` rather than declaring for itself. |
|
|
12
|
+
| `keyboard-shortcuts-narrow.png` | A narrow screen, where the two columns stack. |
|
|
13
|
+
| `keyboard-shortcuts-help-menu.png` | The Help menu, where the dialog is reachable by mouse — with the keycap that teaches the shortcut on the way past. |
|
|
14
|
+
| `keyboard-shortcuts-command-palette.png` | The same dialog offered as a command-palette action, for anyone who reaches for `Cmd`/`Ctrl`+`K` first. |
|
|
15
|
+
|
|
16
|
+
Keycaps follow the machine they are rendered on; these were shot on macOS, so
|
|
17
|
+
the modifier reads `⌘`. On Windows and Linux the same rows read `Ctrl`.
|
|
18
|
+
|
|
19
|
+
Re-shoot these when the dialog's layout or the shortcut catalog changes.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -45,6 +45,21 @@ export default interface Columns<
|
|
|
45
45
|
*/
|
|
46
46
|
isRemovable?: boolean | undefined;
|
|
47
47
|
contentClassName?: string | undefined;
|
|
48
|
+
/*
|
|
49
|
+
* Let this cell's content wrap onto more than one line, instead of forcing
|
|
50
|
+
* it onto the single `whitespace-nowrap` line every body cell gets by
|
|
51
|
+
* default. Set it on any column whose cell can hold server- or
|
|
52
|
+
* operator-authored prose; leave it unset for dates, counts, badges and
|
|
53
|
+
* ids. See Common/UI/Components/Table/Types/Column.ts for the full
|
|
54
|
+
* reasoning, including why a `max-w-*` on the rendered element is not a
|
|
55
|
+
* substitute and in fact makes the overlap worse (OneUptime issue #3585).
|
|
56
|
+
*/
|
|
57
|
+
wrapContent?: boolean | undefined;
|
|
58
|
+
/*
|
|
59
|
+
* Width cap for a wrapping cell, e.g. "max-w-3xl". Read ONLY when
|
|
60
|
+
* `wrapContent` is set; defaults to "max-w-md" (28rem).
|
|
61
|
+
*/
|
|
62
|
+
wrapMaxWidthClassName?: string | undefined;
|
|
48
63
|
colSpan?: number | undefined;
|
|
49
64
|
disableSort?: boolean;
|
|
50
65
|
description?: string | undefined;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { JSONObject } from "../../../Types/JSON";
|
|
2
|
+
import MonitorType from "../../../Types/Monitor/MonitorType";
|
|
3
|
+
import SeriesDebugHints, {
|
|
4
|
+
SeriesDebugCommand,
|
|
5
|
+
} from "../../../Types/Monitor/SeriesContext/SeriesDebugHints";
|
|
6
|
+
import CopyTextButton from "../CopyTextButton/CopyTextButton";
|
|
7
|
+
import React, { Fragment, FunctionComponent, ReactElement } from "react";
|
|
8
|
+
|
|
9
|
+
export interface ComponentProps {
|
|
10
|
+
monitorType?: MonitorType | undefined;
|
|
11
|
+
seriesLabels?: JSONObject | undefined;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The read-only commands worth running first, already filled in with the
|
|
16
|
+
* pod / container / node / mount this alert is actually about.
|
|
17
|
+
*
|
|
18
|
+
* The commands come from `SeriesDebugHints`, which is the same source the
|
|
19
|
+
* alert DESCRIPTION uses - so what the engineer reads in Slack and what
|
|
20
|
+
* they see on this page are the same commands, and only one of them has
|
|
21
|
+
* to be kept correct.
|
|
22
|
+
*
|
|
23
|
+
* Renders nothing when the series carries nothing addressable (an
|
|
24
|
+
* ungrouped monitor, or a monitor type with no universally-safe
|
|
25
|
+
* inspection command), rather than showing an empty card.
|
|
26
|
+
*/
|
|
27
|
+
const SeriesDebugCommandsViewer: FunctionComponent<ComponentProps> = (
|
|
28
|
+
props: ComponentProps,
|
|
29
|
+
): ReactElement => {
|
|
30
|
+
const commands: Array<SeriesDebugCommand> = SeriesDebugHints.getDebugCommands(
|
|
31
|
+
{
|
|
32
|
+
monitorType: props.monitorType,
|
|
33
|
+
seriesLabels: props.seriesLabels,
|
|
34
|
+
},
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
if (commands.length === 0) {
|
|
38
|
+
return <Fragment />;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return (
|
|
42
|
+
<div className="space-y-3">
|
|
43
|
+
{commands.map((command: SeriesDebugCommand, index: number) => {
|
|
44
|
+
return (
|
|
45
|
+
<div key={index}>
|
|
46
|
+
<div className="text-sm text-gray-500 mb-1">{command.purpose}</div>
|
|
47
|
+
<div className="flex items-center justify-between gap-2 rounded-md bg-gray-900 px-3 py-2">
|
|
48
|
+
<code className="font-mono text-xs text-gray-100 overflow-x-auto whitespace-pre">
|
|
49
|
+
{command.command}
|
|
50
|
+
</code>
|
|
51
|
+
<CopyTextButton
|
|
52
|
+
textToBeCopied={command.command}
|
|
53
|
+
iconOnly={true}
|
|
54
|
+
title="Copy command"
|
|
55
|
+
/>
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
);
|
|
59
|
+
})}
|
|
60
|
+
</div>
|
|
61
|
+
);
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export default SeriesDebugCommandsViewer;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { JSONObject } from "../../../Types/JSON";
|
|
2
|
+
import SeriesLabelDisplay, {
|
|
3
|
+
DisplaySeriesLabel,
|
|
4
|
+
} from "../../../Types/Monitor/SeriesContext/SeriesLabelDisplay";
|
|
5
|
+
import SortOrder from "../../../Types/BaseDatabase/SortOrder";
|
|
6
|
+
import Table from "../Table/Table";
|
|
7
|
+
import FieldType from "../Types/FieldType";
|
|
8
|
+
import React, { FunctionComponent, ReactElement } from "react";
|
|
9
|
+
|
|
10
|
+
export interface ComponentProps {
|
|
11
|
+
seriesLabels?: JSONObject | undefined;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The identity of the metric series an alert or incident was raised for.
|
|
16
|
+
*
|
|
17
|
+
* Rendered from the same `SeriesLabelDisplay` the alert TITLE is built
|
|
18
|
+
* from, so the page and the notification agree on both the naming
|
|
19
|
+
* ("Pod", not `resource.k8s.pod.name`) and the ordering (the object that
|
|
20
|
+
* breached first, the scope that qualifies it after). A generic
|
|
21
|
+
* key/value viewer here would drift from the title the moment either
|
|
22
|
+
* side changed.
|
|
23
|
+
*
|
|
24
|
+
* The raw attribute key is kept underneath the friendly name rather than
|
|
25
|
+
* dropped: it is what the user types into a Group By field or a metric
|
|
26
|
+
* filter to go and look at the same series themselves.
|
|
27
|
+
*/
|
|
28
|
+
const SeriesLabelsViewer: FunctionComponent<ComponentProps> = (
|
|
29
|
+
props: ComponentProps,
|
|
30
|
+
): ReactElement => {
|
|
31
|
+
const labels: Array<DisplaySeriesLabel> = SeriesLabelDisplay.getDisplayLabels(
|
|
32
|
+
props.seriesLabels,
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
if (labels.length === 0) {
|
|
36
|
+
return (
|
|
37
|
+
<div className="text-gray-400 text-sm py-2">
|
|
38
|
+
No resource labels on this alert.
|
|
39
|
+
</div>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return (
|
|
44
|
+
<Table<DisplaySeriesLabel>
|
|
45
|
+
id="series-labels-viewer-table"
|
|
46
|
+
data={labels}
|
|
47
|
+
singularLabel="Label"
|
|
48
|
+
pluralLabel="Labels"
|
|
49
|
+
isLoading={false}
|
|
50
|
+
error=""
|
|
51
|
+
currentPageNumber={1}
|
|
52
|
+
totalItemsCount={labels.length}
|
|
53
|
+
itemsOnPage={labels.length}
|
|
54
|
+
disablePagination={true}
|
|
55
|
+
noItemsMessage="No resource labels on this alert."
|
|
56
|
+
onNavigateToPage={() => {}}
|
|
57
|
+
sortBy={null}
|
|
58
|
+
sortOrder={SortOrder.Ascending}
|
|
59
|
+
onSortChanged={() => {}}
|
|
60
|
+
columns={[
|
|
61
|
+
{
|
|
62
|
+
title: "Resource",
|
|
63
|
+
type: FieldType.Element,
|
|
64
|
+
key: "name",
|
|
65
|
+
disableSort: true,
|
|
66
|
+
getElement: (item: DisplaySeriesLabel): ReactElement => {
|
|
67
|
+
return (
|
|
68
|
+
<div>
|
|
69
|
+
<div className="font-medium text-gray-900">{item.name}</div>
|
|
70
|
+
<div className="font-mono text-xs text-gray-400">
|
|
71
|
+
{item.key}
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
);
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
title: "Value",
|
|
79
|
+
type: FieldType.Element,
|
|
80
|
+
key: "value",
|
|
81
|
+
disableSort: true,
|
|
82
|
+
getElement: (item: DisplaySeriesLabel): ReactElement => {
|
|
83
|
+
return (
|
|
84
|
+
<span className="font-mono text-gray-700">{item.value}</span>
|
|
85
|
+
);
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
]}
|
|
89
|
+
/>
|
|
90
|
+
);
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
export default SeriesLabelsViewer;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import ComponentLoader from "../ComponentLoader/ComponentLoader";
|
|
2
2
|
import ErrorMessage from "../ErrorMessage/ErrorMessage";
|
|
3
|
-
import DayUptimeGraph, {
|
|
3
|
+
import DayUptimeGraph, {
|
|
4
|
+
BarChartRule,
|
|
5
|
+
Event,
|
|
6
|
+
UptimeBarDaySummary,
|
|
7
|
+
} from "../Graphs/DayUptimeGraph";
|
|
4
8
|
import UptimeUtil from "./UptimeUtil";
|
|
5
9
|
import Color from "../../../Types/Color";
|
|
6
10
|
import CommonMonitorEvent from "../../../Utils/Uptime/MonitorEvent";
|
|
@@ -8,6 +12,7 @@ import MonitorStatus from "../../../Models/DatabaseModels/MonitorStatus";
|
|
|
8
12
|
import MonitorStatusTimeline from "../../../Models/DatabaseModels/MonitorStatusTimeline";
|
|
9
13
|
import StatusPageHistoryChartBarColorRule from "../../../Models/DatabaseModels/StatusPageHistoryChartBarColorRule";
|
|
10
14
|
import UptimeBarTooltipIncident from "../../../Types/Monitor/UptimeBarTooltipIncident";
|
|
15
|
+
import UptimeHistoryLabels from "../../../Types/Monitor/UptimeHistoryLabels";
|
|
11
16
|
import React, {
|
|
12
17
|
FunctionComponent,
|
|
13
18
|
ReactElement,
|
|
@@ -29,8 +34,14 @@ export interface ComponentProps {
|
|
|
29
34
|
downtimeMonitorStatuses: Array<MonitorStatus> | undefined;
|
|
30
35
|
defaultBarColor: Color;
|
|
31
36
|
incidents?: Array<UptimeBarTooltipIncident> | undefined;
|
|
32
|
-
onBarClick?: (
|
|
37
|
+
onBarClick?: (
|
|
38
|
+
date: Date,
|
|
39
|
+
incidents: Array<UptimeBarTooltipIncident>,
|
|
40
|
+
summary: UptimeBarDaySummary,
|
|
41
|
+
) => void;
|
|
33
42
|
onIncidentClick?: ((incidentId: string) => void) | undefined;
|
|
43
|
+
/* Wording for the strip's accessible names. Defaults to English. */
|
|
44
|
+
labels?: UptimeHistoryLabels | undefined;
|
|
34
45
|
}
|
|
35
46
|
|
|
36
47
|
const MonitorUptimeGraph: FunctionComponent<ComponentProps> = (
|
|
@@ -90,6 +101,7 @@ const MonitorUptimeGraph: FunctionComponent<ComponentProps> = (
|
|
|
90
101
|
incidents={props.incidents}
|
|
91
102
|
onBarClick={props.onBarClick}
|
|
92
103
|
onIncidentClick={props.onIncidentClick}
|
|
104
|
+
labels={props.labels}
|
|
93
105
|
/>
|
|
94
106
|
);
|
|
95
107
|
};
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import Modal, { ModalWidth } from "../Modal/Modal";
|
|
2
|
+
import UptimeDaySummary, { StatusDuration } from "../Graphs/UptimeDaySummary";
|
|
2
3
|
import OneUptimeDate from "../../../Types/Date";
|
|
3
4
|
import UptimeBarTooltipIncident from "../../../Types/Monitor/UptimeBarTooltipIncident";
|
|
5
|
+
import UptimeHistoryLabels, {
|
|
6
|
+
DefaultUptimeHistoryLabels,
|
|
7
|
+
} from "../../../Types/Monitor/UptimeHistoryLabels";
|
|
4
8
|
import React, { FunctionComponent, ReactElement } from "react";
|
|
5
9
|
|
|
6
10
|
export interface ComponentProps {
|
|
@@ -8,27 +12,76 @@ export interface ComponentProps {
|
|
|
8
12
|
incidents: Array<UptimeBarTooltipIncident>;
|
|
9
13
|
onClose: () => void;
|
|
10
14
|
onIncidentClick?: ((incidentId: string) => void) | undefined;
|
|
15
|
+
/*
|
|
16
|
+
* The day's reading, when the caller has it. Optional so that a caller that
|
|
17
|
+
* only knows about incidents still renders; the uptime block is simply
|
|
18
|
+
* absent then, which is what this dialog used to be in every case.
|
|
19
|
+
*/
|
|
20
|
+
uptimePercent?: number | undefined;
|
|
21
|
+
hasEvents?: boolean | undefined;
|
|
22
|
+
statusDurations?: Array<StatusDuration> | undefined;
|
|
23
|
+
/* Defaults to English. The status page passes translated strings. */
|
|
24
|
+
labels?: UptimeHistoryLabels | undefined;
|
|
11
25
|
}
|
|
12
26
|
|
|
27
|
+
/*
|
|
28
|
+
* What happened on one day of the uptime history.
|
|
29
|
+
*
|
|
30
|
+
* This is the only way to read a day without a mouse - the strip's tooltip is
|
|
31
|
+
* hover-only, so on a phone (which is how most people open a status page
|
|
32
|
+
* during an outage) and with a keyboard it was previously unreachable. It
|
|
33
|
+
* therefore shows the same reading the tooltip does, not a strictly poorer
|
|
34
|
+
* one: uptime, how the day was spent, and then the incidents.
|
|
35
|
+
*/
|
|
13
36
|
const UptimeBarDayModal: FunctionComponent<ComponentProps> = (
|
|
14
37
|
props: ComponentProps,
|
|
15
38
|
): ReactElement => {
|
|
16
39
|
const dateStr: string =
|
|
17
40
|
OneUptimeDate.getDateAsUserFriendlyLocalFormattedString(props.date, true);
|
|
18
41
|
|
|
42
|
+
const labels: UptimeHistoryLabels =
|
|
43
|
+
props.labels || DefaultUptimeHistoryLabels;
|
|
44
|
+
|
|
45
|
+
/*
|
|
46
|
+
* Only drawn when the caller actually measured the day. hasEvents false with
|
|
47
|
+
* a summary present is a real state - a day before the monitor existed - and
|
|
48
|
+
* UptimeDaySummary says so; hasEvents undefined means nobody measured, which
|
|
49
|
+
* is not the same claim and must not be rendered as one.
|
|
50
|
+
*/
|
|
51
|
+
const hasSummary: boolean = props.hasEvents !== undefined;
|
|
52
|
+
|
|
53
|
+
let description: string | undefined = undefined;
|
|
54
|
+
|
|
55
|
+
if (props.incidents.length === 1) {
|
|
56
|
+
description = labels.oneIncidentOnThisDay;
|
|
57
|
+
} else if (props.incidents.length > 1) {
|
|
58
|
+
description = labels.incidentsOnThisDay.replace(
|
|
59
|
+
"{{total}}",
|
|
60
|
+
String(props.incidents.length),
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
|
|
19
64
|
return (
|
|
20
65
|
<Modal
|
|
21
|
-
title={
|
|
22
|
-
description={
|
|
23
|
-
props.incidents.length > 0
|
|
24
|
-
? `${props.incidents.length} incident${props.incidents.length !== 1 ? "s" : ""} reported on this day`
|
|
25
|
-
: undefined
|
|
26
|
-
}
|
|
66
|
+
title={dateStr}
|
|
67
|
+
description={description}
|
|
27
68
|
onClose={props.onClose}
|
|
28
69
|
modalWidth={ModalWidth.Medium}
|
|
29
|
-
closeButtonText=
|
|
70
|
+
closeButtonText={labels.close}
|
|
30
71
|
>
|
|
31
72
|
<div>
|
|
73
|
+
{hasSummary && (
|
|
74
|
+
<div style={{ marginBottom: "16px" }}>
|
|
75
|
+
<UptimeDaySummary
|
|
76
|
+
uptimePercent={props.uptimePercent || 0}
|
|
77
|
+
hasEvents={Boolean(props.hasEvents)}
|
|
78
|
+
statusDurations={props.statusDurations || []}
|
|
79
|
+
hasFollowingContent={true}
|
|
80
|
+
labels={props.labels}
|
|
81
|
+
/>
|
|
82
|
+
</div>
|
|
83
|
+
)}
|
|
84
|
+
|
|
32
85
|
{props.incidents.length === 0 && (
|
|
33
86
|
<div
|
|
34
87
|
style={{
|
|
@@ -70,7 +123,7 @@ const UptimeBarDayModal: FunctionComponent<ComponentProps> = (
|
|
|
70
123
|
marginBottom: "4px",
|
|
71
124
|
}}
|
|
72
125
|
>
|
|
73
|
-
|
|
126
|
+
{labels.noIncidents}
|
|
74
127
|
</div>
|
|
75
128
|
<div
|
|
76
129
|
style={{
|
|
@@ -78,7 +131,7 @@ const UptimeBarDayModal: FunctionComponent<ComponentProps> = (
|
|
|
78
131
|
color: "var(--ou-text-muted, #6b7280)",
|
|
79
132
|
}}
|
|
80
133
|
>
|
|
81
|
-
|
|
134
|
+
{labels.noIncidentsDescription}
|
|
82
135
|
</div>
|
|
83
136
|
</div>
|
|
84
137
|
)}
|
|
@@ -153,7 +206,7 @@ const UptimeBarDayModal: FunctionComponent<ComponentProps> = (
|
|
|
153
206
|
color: "var(--ou-text-muted, #6b7280)",
|
|
154
207
|
}}
|
|
155
208
|
>
|
|
156
|
-
|
|
209
|
+
{labels.declared}{" "}
|
|
157
210
|
{OneUptimeDate.getDateAsUserFriendlyLocalFormattedString(
|
|
158
211
|
incident.declaredAt,
|
|
159
212
|
false,
|