@oneuptime/common 14.0.8 → 14.0.9
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/DatabaseModels/Index.ts +2 -0
- package/Models/DatabaseModels/KubernetesAiAgent.ts +364 -0
- package/Models/DatabaseModels/KubernetesCluster.ts +3 -3
- package/Models/DatabaseModels/Project.ts +55 -5
- package/Models/DatabaseModels/ProxmoxResource.ts +49 -1
- package/Models/DatabaseModels/RunnerJob.ts +75 -0
- package/Models/DatabaseModels/TeamComplianceSetting.ts +143 -2
- package/Models/DatabaseModels/WorkspaceProjectAuthToken.ts +17 -0
- package/Server/API/AIChatAPI.ts +6 -3
- package/Server/API/AIInvestigationAPI.ts +17 -10
- package/Server/API/AutoRemediationAPI.ts +207 -25
- package/Server/API/KubernetesClusterAiAccessAPI.ts +623 -21
- package/Server/API/MicrosoftTeamsAPI.ts +93 -14
- package/Server/API/ProxmoxResourceAPI.ts +244 -14
- package/Server/Infrastructure/GlobalCache.ts +32 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1796000000000-AddTeamComplianceRuleScope.ts +99 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1796100000000-AddKubernetesAiAgentAndAiDefaults.ts +137 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1796200000000-AddProxmoxResourceNativePushColumns.ts +42 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
- package/Server/Middleware/TelemetryIngest.ts +41 -18
- package/Server/Services/AIService.ts +70 -1
- package/Server/Services/AlertService.ts +352 -11
- package/Server/Services/AlertSeverityService.ts +65 -15
- package/Server/Services/AutoRemediationRuleService.ts +1 -1
- package/Server/Services/IncidentService.ts +280 -104
- package/Server/Services/IncidentSeverityService.ts +66 -15
- package/Server/Services/KubernetesAiAgentJobService.ts +185 -0
- package/Server/Services/KubernetesAiAgentService.ts +1634 -0
- package/Server/Services/KubernetesClusterAiAccessService.ts +1118 -451
- package/Server/Services/KubernetesClusterService.ts +129 -21
- package/Server/Services/ProjectService.ts +32 -0
- package/Server/Services/ProxmoxResourceService.ts +322 -5
- package/Server/Services/RunnerJobService.ts +241 -104
- package/Server/Services/RunnerService.ts +1 -1
- package/Server/Services/ScheduledMaintenanceService.ts +737 -1
- package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +414 -56
- package/Server/Services/TeamComplianceSettingService.ts +1125 -9
- package/Server/Utils/AI/ClusterAccess/ClusterAccessContext.ts +67 -9
- package/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.ts +39 -10
- package/Server/Utils/AI/ClusterAccess/KubectlJobRunner.ts +14 -3
- package/Server/Utils/AI/Remediation/RemediationCommandTools.ts +37 -15
- package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +67 -24
- package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +48 -5
- package/Server/Utils/AI/SRE/IncidentPostmortemRunner.ts +40 -8
- package/Server/Utils/AI/SRE/InvestigationEligibility.ts +13 -2
- package/Server/Utils/AI/SRE/InvestigationGrader.ts +1 -1
- package/Server/Utils/AutoRemediation/CommandPlanExecutor.ts +6 -1
- package/Server/Utils/Telemetry/InventoryEntityRegistry.ts +133 -7
- package/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.ts +58 -4
- package/Server/Utils/Telemetry/ProxmoxNativeNodeLiveness.ts +447 -0
- package/Server/Utils/Telemetry/ProxmoxNativePush.ts +903 -0
- package/Server/Utils/Telemetry/TelemetryEntity.ts +87 -27
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +684 -47
- package/Tests/App/AdminDashboard/RowActionPlacementOverrides.test.tsx +278 -0
- package/Tests/App/Dashboard/AIChatChartWidgetZoom.test.tsx +738 -0
- package/Tests/App/Dashboard/AIFeaturesSettingsPointers.test.tsx +147 -0
- package/Tests/App/Dashboard/AIInsightsKubernetesClusterPage.test.tsx +1523 -0
- package/Tests/App/Dashboard/AdminUserNotificationMethodsPage.test.tsx +463 -3
- package/Tests/App/Dashboard/AffectedResourcesPickerDropdownPlacement.test.tsx +958 -0
- package/Tests/App/Dashboard/AffectedResourcesPickerFocusLeave.test.tsx +595 -0
- package/Tests/App/Dashboard/AskAiAvailability.test.ts +20 -3
- package/Tests/App/Dashboard/AskAiDisabled.test.tsx +8 -3
- package/Tests/App/Dashboard/CephRateChartReload.test.tsx +1456 -0
- package/Tests/App/Dashboard/CephTimeRangeZoom.test.tsx +1229 -0
- package/Tests/App/Dashboard/ChartCardTimeRangeZoom.test.tsx +151 -0
- package/Tests/App/Dashboard/ChartCardZoomAffordances.test.tsx +257 -0
- package/Tests/App/Dashboard/ChartRefetchFrame.test.tsx +141 -0
- package/Tests/App/Dashboard/ChartZoomHarness.tsx +249 -0
- package/Tests/App/Dashboard/ChartZoomStandIn.tsx +131 -0
- package/Tests/App/Dashboard/CloudServerlessSlowLoads.test.tsx +628 -0
- package/Tests/App/Dashboard/CloudServerlessTimeRangeZoom.test.tsx +607 -0
- package/Tests/App/Dashboard/ClusterAccessNotice.test.tsx +91 -19
- package/Tests/App/Dashboard/CompanionMetricsTabZoom.test.tsx +632 -0
- package/Tests/App/Dashboard/ContainerChartZoomStandIn.tsx +195 -0
- package/Tests/App/Dashboard/ContainerHostOverviewSlowLoads.test.tsx +542 -0
- package/Tests/App/Dashboard/ContainerHostOverviewTimeRangeZoom.test.tsx +848 -0
- package/Tests/App/Dashboard/ContainerMetricsTimeRangeZoom.test.tsx +561 -0
- package/Tests/App/Dashboard/DashboardBoardWideZoomShell.test.tsx +1147 -0
- package/Tests/App/Dashboard/DashboardEditPermissions.test.tsx +3 -2
- package/Tests/App/Dashboard/DashboardHistogramWidgetDragCursor.test.tsx +399 -0
- package/Tests/App/Dashboard/DashboardHistogramWidgetZoom.test.tsx +985 -0
- package/Tests/App/Dashboard/DashboardHistogramWidgetZoomHint.test.tsx +803 -0
- package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +1 -0
- package/Tests/App/Dashboard/DashboardSettingsPreviewZoom.test.tsx +679 -0
- package/Tests/App/Dashboard/DashboardSloAndDataSourceChartZoom.test.tsx +881 -0
- package/Tests/App/Dashboard/DashboardTraceStatusWidgets.test.tsx +878 -0
- package/Tests/App/Dashboard/DatabaseMetricChartModalTimeRangeZoom.test.tsx +442 -0
- package/Tests/App/Dashboard/DatabaseOverviewTimeRangeZoom.test.tsx +831 -0
- package/Tests/App/Dashboard/DatabaseServerComponents.test.tsx +43 -0
- package/Tests/App/Dashboard/DockerSwarmInsightsTimeRangeZoom.test.tsx +524 -0
- package/Tests/App/Dashboard/DockerSwarmRateChartRefresh.test.tsx +259 -0
- package/Tests/App/Dashboard/EdgeDetailPanelHistory.test.tsx +763 -0
- package/Tests/App/Dashboard/EdgeDetailPanelTimeRangeZoom.test.tsx +547 -0
- package/Tests/App/Dashboard/EdgeHistoryBucketsCases.tsx +565 -0
- package/Tests/App/Dashboard/EdgeHistoryBucketsKathmandu.test.tsx +73 -0
- package/Tests/App/Dashboard/EdgeHistoryBucketsKolkata.test.tsx +74 -0
- package/Tests/App/Dashboard/EdgeHistoryBucketsNewYork.test.tsx +72 -0
- package/Tests/App/Dashboard/EdgeHistoryBucketsUtc.test.tsx +72 -0
- package/Tests/App/Dashboard/EmbeddedMetricCardRefresh.test.tsx +310 -0
- package/Tests/App/Dashboard/EmbeddedMetricCardTimeRangeZoom.test.tsx +536 -0
- package/Tests/App/Dashboard/EscalationRuleReadiness.test.tsx +3 -1
- package/Tests/App/Dashboard/EscalationRuleRowActions.test.tsx +660 -0
- package/Tests/App/Dashboard/EventNotes.test.tsx +2 -2
- package/Tests/App/Dashboard/EventOverviewPages.test.tsx +587 -13
- package/Tests/App/Dashboard/EventOverviewSnapshotExplorerZoom.test.tsx +1139 -0
- package/Tests/App/Dashboard/EventOverviewSnapshotZoomAcrossTabs.test.tsx +1057 -0
- package/Tests/App/Dashboard/EventOverviewTelemetrySnapshotZoom.test.tsx +757 -0
- package/Tests/App/Dashboard/ExceptionOccurrenceTrendZoom.test.tsx +675 -0
- package/Tests/App/Dashboard/ExceptionOccurrencesZoomSurvivesViewSwitch.test.tsx +405 -0
- package/Tests/App/Dashboard/ExceptionSignalPages.test.tsx +67 -3
- package/Tests/App/Dashboard/ExceptionTablesSpanStatus.test.tsx +515 -0
- package/Tests/App/Dashboard/ExplorerOwnZoomRegression.test.tsx +739 -0
- package/Tests/App/Dashboard/FlowBandwidthAxisCases.tsx +461 -0
- package/Tests/App/Dashboard/FlowBandwidthAxisKathmandu.test.tsx +25 -0
- package/Tests/App/Dashboard/FlowBandwidthAxisKolkata.test.tsx +25 -0
- package/Tests/App/Dashboard/FlowBandwidthAxisNewYork.test.tsx +25 -0
- package/Tests/App/Dashboard/FlowBandwidthAxisUtc.test.tsx +24 -0
- package/Tests/App/Dashboard/FlowTopTalkersZoomRefetch.test.tsx +722 -0
- package/Tests/App/Dashboard/FlowViewportGuard.test.tsx +2526 -0
- package/Tests/App/Dashboard/HostPagesSlowLoads.test.tsx +872 -0
- package/Tests/App/Dashboard/HostPagesTimeRangeZoom.test.tsx +1208 -0
- package/Tests/App/Dashboard/IncidentRootCauseTimeRangeZoom.test.tsx +358 -0
- package/Tests/App/Dashboard/InfrastructureGraph.test.tsx +100 -9
- package/Tests/App/Dashboard/InfrastructureMetricsTabTimeRangeZoom.test.tsx +485 -0
- package/Tests/App/Dashboard/InvestigationDrawerCompanionZoom.test.tsx +655 -0
- package/Tests/App/Dashboard/InvestigationDrawerZoom.test.tsx +830 -0
- package/Tests/App/Dashboard/InvestigationNotStarted.test.tsx +338 -2
- package/Tests/App/Dashboard/InvoicesPayInvoice.test.tsx +454 -16
- package/Tests/App/Dashboard/KubernetesClusterAiAccessSettings.test.ts +799 -819
- package/Tests/App/Dashboard/KubernetesClusterAiAgentOverviewCard.test.tsx +367 -0
- package/Tests/App/Dashboard/KubernetesClusterAiAgentStatus.test.ts +1202 -0
- package/Tests/App/Dashboard/KubernetesClusterAiDocumentationMarkdown.test.ts +106 -0
- package/Tests/App/Dashboard/KubernetesClusterAiNavigation.test.tsx +354 -0
- package/Tests/App/Dashboard/KubernetesClusterAiPage.test.tsx +1884 -2054
- package/Tests/App/Dashboard/KubernetesClusterAiPageServerParity.test.ts +478 -179
- package/Tests/App/Dashboard/KubernetesClusterMetricTooltips.test.ts +50 -0
- package/Tests/App/Dashboard/KubernetesClusterOverviewTooltips.test.tsx +2 -1
- package/Tests/App/Dashboard/KubernetesClusterOverviewZoom.test.tsx +1217 -0
- package/Tests/App/Dashboard/KubernetesClusterPagesZoom.test.tsx +731 -0
- package/Tests/App/Dashboard/KubernetesCostsLoadRecovery.test.tsx +869 -0
- package/Tests/App/Dashboard/KubernetesCostsZoom.test.tsx +1214 -0
- package/Tests/App/Dashboard/KubernetesCostsZoomExactHours.test.tsx +692 -0
- package/Tests/App/Dashboard/KubernetesNetworkThroughputReload.test.tsx +902 -0
- package/Tests/App/Dashboard/KubernetesNetworkZoomBucketEdges.test.tsx +571 -0
- package/Tests/App/Dashboard/KubernetesOverviewZoomBucketEdges.test.tsx +697 -0
- package/Tests/App/Dashboard/KubernetesResourceMetricsTabZoom.test.tsx +633 -0
- package/Tests/App/Dashboard/LogsExplorerTimeRangeZoom.test.tsx +470 -0
- package/Tests/App/Dashboard/LogsInsightsTimeRangeZoom.test.tsx +948 -0
- package/Tests/App/Dashboard/LogsViewerPinnedWindowZoom.test.tsx +486 -0
- package/Tests/App/Dashboard/MetricChartsBucketInspectorDoubleClick.test.tsx +1001 -0
- package/Tests/App/Dashboard/MetricExplorerInvestigationAutoRefresh.test.tsx +514 -0
- package/Tests/App/Dashboard/MetricExplorerSavedViewZoomRoundTrip.test.tsx +581 -0
- package/Tests/App/Dashboard/MetricExplorerTimeRangeZoom.test.tsx +1162 -0
- package/Tests/App/Dashboard/MetricMonitorPreviewZoomLabel.test.ts +72 -0
- package/Tests/App/Dashboard/MetricRowSparklineTimeRangeZoom.test.tsx +204 -0
- package/Tests/App/Dashboard/MetricViewFirstResultLands.test.tsx +408 -0
- package/Tests/App/Dashboard/MetricViewOwnZoomResetPlacement.test.tsx +952 -0
- package/Tests/App/Dashboard/MetricViewTimeRange.test.ts +139 -0
- package/Tests/App/Dashboard/MetricViewTimeRangeZoom.test.tsx +556 -0
- package/Tests/App/Dashboard/MonitorMetricsChartWrappersZoom.test.tsx +552 -0
- package/Tests/App/Dashboard/MonitorMetricsTabsTimeRangeZoom.test.tsx +740 -0
- package/Tests/App/Dashboard/MonitorOverviewChartsTimeRangeZoom.test.tsx +735 -0
- package/Tests/App/Dashboard/MonitorStepPreviewsTimeRangeZoom.test.tsx +835 -0
- package/Tests/App/Dashboard/NetworkDeviceTimeRangeZoom.test.tsx +1115 -0
- package/Tests/App/Dashboard/OnCallPreventionGuards.test.tsx +186 -17
- package/Tests/App/Dashboard/OnCallRulesDeleteGuard.test.tsx +155 -46
- package/Tests/App/Dashboard/PasskeySettings.test.tsx +87 -2
- package/Tests/App/Dashboard/ProjectAISettingsPages.test.tsx +884 -0
- package/Tests/App/Dashboard/ProxmoxNodeRemove.test.tsx +621 -0
- package/Tests/App/Dashboard/ProxmoxOverviewSlowLoads.test.tsx +584 -0
- package/Tests/App/Dashboard/ProxmoxPagesTimeRangeZoom.test.tsx +823 -0
- package/Tests/App/Dashboard/ProxmoxRateChartReload.test.tsx +1253 -0
- package/Tests/App/Dashboard/PublicDashboardBoardWideZoom.test.tsx +605 -0
- package/Tests/App/Dashboard/RealRowsLineChart.tsx +250 -0
- package/Tests/App/Dashboard/RechartsHostsPlotCursor.test.tsx +513 -0
- package/Tests/App/Dashboard/RowActionPlacementOverrides.test.tsx +865 -0
- package/Tests/App/Dashboard/RumOverviewTimeRangeZoom.test.tsx +877 -0
- package/Tests/App/Dashboard/RunnerKubernetesAgentForm.test.tsx +20 -4
- package/Tests/App/Dashboard/RunnerSupersededByAiAgentNote.test.tsx +296 -0
- package/Tests/App/Dashboard/SecurityEventConnectionsTable.test.tsx +146 -36
- package/Tests/App/Dashboard/ServiceDatabaseSlowLoads.test.tsx +1166 -0
- package/Tests/App/Dashboard/ServiceMapGraph.test.tsx +1243 -104
- package/Tests/App/Dashboard/ServiceOverviewTimeRangeZoom.test.tsx +792 -0
- package/Tests/App/Dashboard/SloBudgetBurnDownZoom.test.tsx +771 -0
- package/Tests/App/Dashboard/SloBudgetBurnDownZoomAffordances.test.tsx +380 -0
- package/Tests/App/Dashboard/SloEventMetricsBarChartZoom.test.tsx +369 -0
- package/Tests/App/Dashboard/SloHistoryChartsTimeRangeZoom.test.tsx +694 -0
- package/Tests/App/Dashboard/SloHistoryChartsZoomAffordances.test.tsx +497 -0
- package/Tests/App/Dashboard/SloMetricsTimeRangeZoom.test.tsx +541 -0
- package/Tests/App/Dashboard/SlowLoadHarness.ts +123 -0
- package/Tests/App/Dashboard/SnapshotExplorerPrimaryZoom.test.tsx +1194 -0
- package/Tests/App/Dashboard/SnapshotViewerPinnedWindow.test.tsx +620 -0
- package/Tests/App/Dashboard/TelemetrySnapshotPanelTimeRangeZoom.test.tsx +765 -0
- package/Tests/App/Dashboard/TelemetrySnapshotZoom.test.tsx +516 -0
- package/Tests/App/Dashboard/TelemetrySnapshotZoomAcrossTabs.test.tsx +827 -0
- package/Tests/App/Dashboard/TimeRangeZoomPageHarness.tsx +463 -0
- package/Tests/App/Dashboard/TraceChartEditorStatusSplit.test.tsx +543 -0
- package/Tests/App/Dashboard/TraceStatusPresentation.test.tsx +967 -0
- package/Tests/App/Dashboard/TraceTimelineMinimapZoom.test.tsx +315 -0
- package/Tests/App/Dashboard/TracesAnalyticsStatusSplit.test.tsx +778 -0
- package/Tests/App/Dashboard/TracesAnalyticsViewZoom.test.tsx +349 -0
- package/Tests/App/Dashboard/TracesExplorerTimeRangeZoom.test.tsx +551 -0
- package/Tests/App/Dashboard/TracesStatusChartAndFacet.test.tsx +687 -0
- package/Tests/App/Dashboard/TracesViewerStaleResponses.test.tsx +458 -0
- package/Tests/App/Dashboard/UptimeStripsExcludedFromZoom.test.tsx +406 -0
- package/Tests/App/Dashboard/VMwareOverviewSlowLoads.test.tsx +535 -0
- package/Tests/App/Dashboard/VMwarePagesTimeRangeZoom.test.tsx +606 -0
- package/Tests/App/Dashboard/ValueWidgetSparklineStaleHover.test.tsx +1292 -0
- package/Tests/App/Dashboard/ValueWidgetSparklineZoom.test.tsx +765 -0
- package/Tests/App/StatusPage/StatusPageResourceExplorer.test.tsx +98 -0
- package/Tests/Models/DatabaseModels/KubernetesAiAgentModel.test.ts +295 -0
- package/Tests/Models/DatabaseModels/TeamComplianceSettingModel.test.ts +347 -0
- package/Tests/Server/API/AIChatRouteAuthorization.test.ts +58 -0
- package/Tests/Server/API/AIGenerationProjectAIToggle.test.ts +1 -1
- package/Tests/Server/API/AIInvestigationAPI.test.ts +123 -45
- package/Tests/Server/API/AutoRemediationApproveClusterRound.test.ts +1329 -0
- package/Tests/Server/API/AutoRemediationApproveKubectlRecheck.test.ts +25 -2
- package/Tests/Server/API/KubernetesClusterAiAccessAPI.test.ts +2 -0
- package/Tests/Server/API/KubernetesClusterAiAccessAPIAgent.test.ts +903 -0
- package/Tests/Server/API/MicrosoftTeamsChatsRefreshRoute.test.ts +667 -0
- package/Tests/Server/API/MicrosoftTeamsManifest.test.ts +294 -6
- package/Tests/Server/API/ProxmoxResourceAPIRemoveNode.test.ts +1932 -0
- package/Tests/Server/Infrastructure/GlobalCache.test.ts +195 -0
- package/Tests/Server/Infrastructure/Postgres/AddKubernetesAiAgentAndAiDefaultsMigration.test.ts +623 -0
- package/Tests/Server/Infrastructure/Postgres/AddKubernetesClusterAiAccessMigration.test.ts +87 -10
- package/Tests/Server/Infrastructure/Postgres/AddTeamComplianceRuleScopeMigration.test.ts +622 -0
- package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +61 -4
- package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerPinnedKey.test.ts +98 -2
- package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerRateLimit.test.ts +105 -2
- package/Tests/Server/Services/AIServiceBalanceBlocker.test.ts +282 -0
- package/Tests/Server/Services/AlertMonitorClearWritesNull.test.ts +409 -0
- package/Tests/Server/Services/AlertMonitorEditFeed.test.ts +474 -0
- package/Tests/Server/Services/AlertMonitorEditGuard.test.ts +610 -0
- package/Tests/Server/Services/AutoRemediationClusterRuleEngine.test.ts +2 -0
- package/Tests/Server/Services/AutoRemediationRuleCommandRunners.test.ts +2 -1
- package/Tests/Server/Services/IncidentAffectedMonitorsEdit.test.ts +1360 -0
- package/Tests/Server/Services/IncidentAlertSloLinkSurvivesEdit.test.ts +3 -1
- package/Tests/Server/Services/IncidentSeverityDeletePausesComplianceRules.test.ts +488 -0
- package/Tests/Server/Services/KubernetesAiAgentJobService.test.ts +329 -0
- package/Tests/Server/Services/KubernetesAiAgentServiceHelpers.test.ts +618 -0
- package/Tests/Server/Services/KubernetesAiAgentServiceLifecycle.test.ts +1444 -0
- package/Tests/Server/Services/KubernetesAiAgentServiceRegister.test.ts +1666 -0
- package/Tests/Server/Services/KubernetesClusterAiAccessDeletedRunnerRemedy.test.ts +140 -111
- package/Tests/Server/Services/KubernetesClusterAiAccessGapNextSteps.test.ts +267 -105
- package/Tests/Server/Services/KubernetesClusterAiAccessLegacySuperseded.test.ts +440 -0
- package/Tests/Server/Services/KubernetesClusterAiAccessService.test.ts +567 -411
- package/Tests/Server/Services/KubernetesClusterAiAccessTarget.test.ts +1168 -0
- package/Tests/Server/Services/KubernetesClusterAiSettingsPermission.test.ts +410 -12
- package/Tests/Server/Services/KubernetesClusterServiceAiAccessFeed.test.ts +55 -0
- package/Tests/Server/Services/ProjectServiceNewProjectAiDefaults.test.ts +288 -0
- package/Tests/Server/Services/ProxmoxResourcePostgres.test.ts +5633 -0
- package/Tests/Server/Services/ProxmoxResourceService.test.ts +6458 -5
- package/Tests/Server/Services/RunnerJobEnqueueKubectl.test.ts +48 -15
- package/Tests/Server/Services/RunnerJobEnqueueKubectlAiAgent.test.ts +620 -0
- package/Tests/Server/Services/RunnerJobKubectlWriteScope.test.ts +170 -3
- package/Tests/Server/Services/RunnerJobTimeoutReason.test.ts +72 -0
- package/Tests/Server/Services/RunnerServiceAgentName.test.ts +6 -4
- package/Tests/Server/Services/ScheduledMaintenanceAttachmentEdit.test.ts +2113 -0
- package/Tests/Server/Services/ScheduledMaintenanceMonitorRelease.test.ts +972 -0
- package/Tests/Server/Services/TeamComplianceSettingPostgres.test.ts +2237 -0
- package/Tests/Server/Services/TeamComplianceSettingService.test.ts +3988 -138
- package/Tests/Server/Utils/AI/ClusterAccessContext.test.ts +107 -1
- package/Tests/Server/Utils/AI/IncidentPostmortemRunner.test.ts +351 -0
- package/Tests/Server/Utils/AI/InvestigationClusterAccessWiring.test.ts +2 -0
- package/Tests/Server/Utils/AI/InvestigationEligibility.test.ts +310 -0
- package/Tests/Server/Utils/AI/KubectlInvestigationToolkit.test.ts +70 -0
- package/Tests/Server/Utils/AI/KubectlJobRunnerFinishedJob.test.ts +58 -0
- package/Tests/Server/Utils/AI/RemediationCommandToolsKubectl.test.ts +2 -0
- package/Tests/Server/Utils/AI/RemediationCommandToolsKubectlOutcome.test.ts +2 -0
- package/Tests/Server/Utils/AI/RemediationCommandToolsLiveCluster.test.ts +2 -0
- package/Tests/Server/Utils/AI/RemediationCommandToolsRunnerScope.test.ts +125 -1
- package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +252 -3
- package/Tests/Server/Utils/AI/RemediationExecutionRunnerClusterMode.test.ts +2 -0
- package/Tests/Server/Utils/AI/RemediationExecutionRunnerProjectGates.test.ts +240 -0
- package/Tests/Server/Utils/AI/RemediationKubectlCopyParity.test.ts +2 -0
- package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutor.test.ts +2 -0
- package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutorUnknownRun.test.ts +2 -0
- package/Tests/Server/Utils/AutoRemediation/CommandPlanVerification.test.ts +2 -0
- package/Tests/Server/Utils/Telemetry/HostAssetAttributesFromOtlp.test.ts +68 -0
- package/Tests/Server/Utils/Telemetry/InventoryMirrorPostgres.test.ts +370 -0
- package/Tests/Server/Utils/Telemetry/NetworkDeviceInventoryAttributes.test.ts +522 -0
- package/Tests/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.test.ts +155 -0
- package/Tests/Server/Utils/Telemetry/ProxmoxNativeNodeLiveness.test.ts +8631 -0
- package/Tests/Server/Utils/Telemetry/ProxmoxNativePush.test.ts +2852 -0
- package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +367 -1
- package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +45 -3
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsChats.test.ts +25 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsGroupChatNames.test.ts +3119 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsGroupChatNamesPostgres.test.ts +1721 -0
- package/Tests/Types/Kubernetes/KubernetesAgentChartAiAccess.test.ts +581 -113
- package/Tests/Types/Kubernetes/KubernetesAiAgentAccessContract.test.ts +510 -0
- package/Tests/Types/Team/ComplianceRule.test.ts +1029 -0
- package/Tests/Types/Team/TeamComplianceStatus.test.ts +176 -0
- package/Tests/UI/Components/ActionButton/RowActions.test.tsx +641 -0
- package/Tests/UI/Components/ActionButton/RowActionsAccessibility.test.tsx +414 -0
- package/Tests/UI/Components/ActionButton/SplitActionButtons.test.ts +565 -0
- package/Tests/UI/Components/Charts/BarChartDragToSelect.test.tsx +386 -0
- package/Tests/UI/Components/Charts/ChartDoubleClickResetWithoutDblclick.test.tsx +1025 -0
- package/Tests/UI/Components/Charts/ChartGroupPageZoomHint.test.tsx +196 -0
- package/Tests/UI/Components/Charts/ChartPlaceholdersTakeDoubleClick.test.tsx +1861 -0
- package/Tests/UI/Components/Charts/ChartPlotClicksWhileResetArmed.test.tsx +382 -0
- package/Tests/UI/Components/Charts/ChartRangeSelection.test.tsx +704 -0
- package/Tests/UI/Components/Charts/ChartRangeSelectionDoubleClickReset.test.tsx +1481 -0
- package/Tests/UI/Components/Charts/ChartRangeSelectionRealRecharts.test.tsx +918 -0
- package/Tests/UI/Components/Charts/ChartRowBucketStart.test.ts +350 -0
- package/Tests/UI/Components/Charts/DoubleClickReset.test.tsx +996 -0
- package/Tests/UI/Components/Charts/HistogramDoubleClickResetRealRecharts.test.tsx +965 -0
- package/Tests/UI/Components/Charts/HistogramDriftThenRefetch.test.tsx +277 -0
- package/Tests/UI/Components/Charts/HistogramRangeSelectionDataChange.test.tsx +1757 -0
- package/Tests/UI/Components/Charts/HistogramRangeSelectionRealRecharts.test.tsx +560 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/ChartPageTimeRangeZoom.test.tsx +513 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomContext.test.tsx +845 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomHint.test.tsx +119 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomHintTailwind.test.tsx +274 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomUtil.test.ts +433 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/UseTimeRangeZoom.test.tsx +863 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/ZoomDocsPromises.test.tsx +1147 -0
- package/Tests/UI/Components/DisabledButtonTooltip.test.tsx +14 -3
- package/Tests/UI/Components/EntityDropdownEscape.test.tsx +454 -0
- package/Tests/UI/Components/EntityDropdownFocusLeave.test.tsx +420 -0
- package/Tests/UI/Components/Forms/FormFieldDropdownDisabled.test.tsx +233 -0
- package/Tests/UI/Components/Input.test.tsx +80 -1
- package/Tests/UI/Components/LogsAnalyticsViewZoom.test.tsx +947 -0
- package/Tests/UI/Components/LogsHistogramDragTooltip.test.tsx +17 -5
- package/Tests/UI/Components/LogsViewerAnalyticsZoom.test.tsx +501 -0
- package/Tests/UI/Components/LogsViewerHistogramZoom.test.tsx +1 -1
- package/Tests/UI/Components/ModelTable/BaseModelTableBulkDelete.test.tsx +6 -4
- package/Tests/UI/Components/ModelTable/BaseModelTablePermissionGating.test.tsx +60 -8
- package/Tests/UI/Components/ModelTable/BaseModelTableRowActions.test.tsx +476 -0
- package/Tests/UI/Components/ModelTable/ModelTableWrapContent.test.tsx +7 -5
- package/Tests/UI/Components/MoreMenuPortal.test.tsx +623 -0
- package/Tests/UI/Components/StatusPage/ResourceGridActions.test.tsx +538 -0
- package/Tests/UI/Components/StatusPage/ResourceGridSelection.test.tsx +14 -4
- package/Tests/UI/Components/TableCellWrapping.test.tsx +3 -3
- package/Tests/UI/Components/TableRowActions.test.tsx +472 -0
- package/Tests/UI/Components/TelemetryHistogramDragTooltip.test.tsx +1 -1
- package/Tests/UI/Components/TelemetryViewer/TelemetryViewerHistogramClickZoom.test.tsx +1 -1
- package/Tests/UI/Components/TelemetryViewer/TelemetryViewerZoomScope.test.tsx +470 -0
- package/Tests/UI/Components/TelemetryViewer/UseViewerTimeRangeZoom.test.tsx +571 -0
- package/Tests/UI/Components/TelemetryViewer/ViewerDoubleClickResetUnderDataChange.test.tsx +928 -0
- package/Tests/UI/Components/TelemetryViewer/ViewerFollowsEnclosingZoom.test.tsx +1569 -0
- package/Tests/UI/Components/Toggle.test.tsx +66 -0
- package/Tests/UI/MicrosoftTeams/MicrosoftTeamsChatsCardRefreshNames.test.tsx +1023 -0
- package/Tests/UI/Rum/ChunkLoader.test.ts +201 -0
- package/Tests/UI/Rum/FidelityNotices.test.ts +54 -0
- package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +72 -0
- package/Tests/UI/Rum/ReplayFrameCapture.test.ts +1009 -9
- package/Tests/UI/Rum/ReplayRecordedAssets.test.ts +1069 -0
- package/Tests/UI/Rum/ReplayStage.test.tsx +913 -2
- package/Tests/UI/Rum/SessionReplayTable.test.tsx +443 -8
- package/Tests/UI/Rum/SessionReplayUsersTable.test.tsx +439 -9
- package/Tests/UI/Rum/UserFlowTablesRowActions.test.tsx +501 -0
- package/Tests/Utils/AiRemediation/KubectlPolicyChartRbacParity.test.ts +47 -19
- package/Tests/Utils/AiRemediation/KubectlWriteScopeCallerParity.test.ts +2 -0
- package/Tests/Utils/AiRemediation/KubernetesAiAgentPolicyCopyParity.test.ts +396 -0
- package/Tests/Utils/Dashboard/DashboardTimeRangeZoom.test.ts +104 -1
- package/Types/AI/AIRunType.ts +9 -4
- package/Types/AI/InvestigationNotStartedReason.ts +6 -0
- package/Types/AutoRemediation/AiRemediationCommandPlan.ts +14 -16
- package/Types/AutoRemediation/AiRemediationCommandPolicyVerdict.ts +28 -0
- package/Types/Dashboard/DashboardComponents/DashboardTraceChartComponent.ts +4 -2
- package/Types/Kubernetes/KubernetesClusterAiAccess.ts +263 -32
- package/Types/Kubernetes/KubernetesClusterAiAccessPermissions.ts +20 -16
- package/Types/Kubernetes/KubernetesClusterAiInsights.ts +81 -0
- package/Types/Monitor/ProxmoxAlertTemplates.ts +4 -4
- package/Types/Team/ComplianceNotificationChannel.ts +22 -0
- package/Types/Team/ComplianceRule.ts +434 -0
- package/Types/Team/ComplianceRuleType.ts +21 -0
- package/Types/Team/TeamComplianceStatus.ts +81 -0
- package/Types/Telemetry/TelemetryIngestSurface.ts +28 -0
- package/UI/Components/ActionButton/ActionButtonSchema.ts +21 -0
- package/UI/Components/ActionButton/RowActions.tsx +238 -0
- package/UI/Components/ActionButton/SplitActionButtons.ts +173 -0
- package/UI/Components/Charts/Area/AreaChart.tsx +32 -2
- package/UI/Components/Charts/Bar/BarChart.tsx +40 -3
- package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +37 -11
- package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +80 -243
- package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +122 -31
- package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +95 -244
- package/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.ts +214 -0
- package/UI/Components/Charts/ChartLibrary/Utils/UseChartBucketsChange.ts +32 -0
- package/UI/Components/Charts/ChartLibrary/Utils/UseChartRangeSelection.ts +599 -0
- package/UI/Components/Charts/Line/LineChart.tsx +32 -2
- package/UI/Components/Charts/TimeRangeZoom/ResetTimeRangeZoomButton.tsx +70 -0
- package/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomContext.tsx +226 -0
- package/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomHint.tsx +73 -0
- package/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomUtil.ts +163 -0
- package/UI/Components/Charts/TimeRangeZoom/UseTimeRangeZoom.ts +215 -0
- package/UI/Components/Charts/Utils/DataPoint.ts +20 -8
- package/UI/Components/Charts/Utils/XAxis.ts +75 -0
- package/UI/Components/Charts/Utils/useHistogramRangeSelection.ts +493 -59
- package/UI/Components/EntityDropdown/EntityDropdown.tsx +107 -11
- package/UI/Components/Forms/Fields/FormField.tsx +10 -0
- package/UI/Components/Input/Input.tsx +90 -57
- package/UI/Components/List/ListRow.tsx +8 -74
- package/UI/Components/LogsViewer/LogsViewer.tsx +40 -11
- package/UI/Components/LogsViewer/components/LogTimeRangePicker.tsx +22 -6
- package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +209 -6
- package/UI/Components/LogsViewer/components/LogsHistogram.tsx +127 -84
- package/UI/Components/LogsViewer/components/LogsViewerToolbar.tsx +3 -0
- package/UI/Components/ModelTable/BaseModelTable.tsx +12 -1
- package/UI/Components/MoreMenu/MoreMenu.tsx +365 -30
- package/UI/Components/MoreMenu/MoreMenuItem.tsx +70 -17
- package/UI/Components/OrderedStatesList/Item.tsx +7 -72
- package/UI/Components/StatusPage/ResourceGrid.tsx +126 -77
- package/UI/Components/Table/TableBody.tsx +8 -2
- package/UI/Components/Table/TableRow.tsx +20 -140
- package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +41 -10
- package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +47 -9
- package/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.tsx +25 -6
- package/UI/Components/TelemetryViewer/types.ts +2 -0
- package/UI/Components/TelemetryViewer/useViewerTimeRangeZoom.ts +448 -0
- package/UI/Components/Toggle/Toggle.tsx +26 -0
- package/UI/Components/Tooltip/Tooltip.tsx +8 -1
- package/UI/Styles/Theme.css +14 -2
- package/Utils/AiRemediation/CommandPolicy.ts +1 -1
- package/Utils/AiRemediation/KubectlPolicy.ts +1 -1
- package/Utils/Dashboard/DashboardTimeRangeZoom.ts +46 -2
- package/build/dist/Models/DatabaseModels/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesAiAgent.js +385 -0
- package/build/dist/Models/DatabaseModels/KubernetesAiAgent.js.map +1 -0
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js +3 -3
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +56 -5
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProxmoxResource.js +51 -1
- package/build/dist/Models/DatabaseModels/ProxmoxResource.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunnerJob.js +74 -0
- package/build/dist/Models/DatabaseModels/RunnerJob.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js +134 -3
- package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkspaceProjectAuthToken.js.map +1 -1
- package/build/dist/Server/API/AIChatAPI.js +6 -1
- package/build/dist/Server/API/AIChatAPI.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationAPI.js +17 -10
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/AutoRemediationAPI.js +144 -24
- package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -1
- package/build/dist/Server/API/KubernetesClusterAiAccessAPI.js +436 -22
- package/build/dist/Server/API/KubernetesClusterAiAccessAPI.js.map +1 -1
- package/build/dist/Server/API/MicrosoftTeamsAPI.js +69 -13
- package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
- package/build/dist/Server/API/ProxmoxResourceAPI.js +187 -14
- package/build/dist/Server/API/ProxmoxResourceAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/GlobalCache.js +27 -0
- package/build/dist/Server/Infrastructure/GlobalCache.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796000000000-AddTeamComplianceRuleScope.js +50 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796000000000-AddTeamComplianceRuleScope.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796100000000-AddKubernetesAiAgentAndAiDefaults.js +84 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796100000000-AddKubernetesAiAgentAndAiDefaults.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796200000000-AddProxmoxResourceNativePushColumns.js +31 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796200000000-AddProxmoxResourceNativePushColumns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/TelemetryIngest.js +34 -19
- package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
- package/build/dist/Server/Services/AIService.js +59 -1
- package/build/dist/Server/Services/AIService.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +248 -13
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/AlertSeverityService.js +51 -15
- package/build/dist/Server/Services/AlertSeverityService.js.map +1 -1
- package/build/dist/Server/Services/AutoRemediationRuleService.js +1 -1
- package/build/dist/Server/Services/AutoRemediationRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +199 -72
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentSeverityService.js +51 -15
- package/build/dist/Server/Services/IncidentSeverityService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesAiAgentJobService.js +158 -0
- package/build/dist/Server/Services/KubernetesAiAgentJobService.js.map +1 -0
- package/build/dist/Server/Services/KubernetesAiAgentService.js +1145 -0
- package/build/dist/Server/Services/KubernetesAiAgentService.js.map +1 -0
- package/build/dist/Server/Services/KubernetesClusterAiAccessService.js +842 -371
- package/build/dist/Server/Services/KubernetesClusterAiAccessService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterService.js +86 -17
- package/build/dist/Server/Services/KubernetesClusterService.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/ProxmoxResourceService.js +258 -3
- package/build/dist/Server/Services/ProxmoxResourceService.js.map +1 -1
- package/build/dist/Server/Services/RunnerJobService.js +178 -92
- package/build/dist/Server/Services/RunnerJobService.js.map +1 -1
- package/build/dist/Server/Services/RunnerService.js +1 -1
- package/build/dist/Server/Services/RunnerService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +535 -3
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +316 -46
- package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/TeamComplianceSettingService.js +833 -7
- package/build/dist/Server/Services/TeamComplianceSettingService.js.map +1 -1
- package/build/dist/Server/Utils/AI/ClusterAccess/ClusterAccessContext.js +52 -9
- package/build/dist/Server/Utils/AI/ClusterAccess/ClusterAccessContext.js.map +1 -1
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js +13 -9
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js.map +1 -1
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js +7 -3
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js +29 -15
- package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +56 -20
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +39 -5
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/IncidentPostmortemRunner.js +30 -3
- package/build/dist/Server/Utils/AI/SRE/IncidentPostmortemRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationEligibility.js +13 -2
- package/build/dist/Server/Utils/AI/SRE/InvestigationEligibility.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +1 -1
- package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js +4 -2
- package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js +111 -6
- package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.js +40 -4
- package/build/dist/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ProxmoxNativeNodeLiveness.js +296 -0
- package/build/dist/Server/Utils/Telemetry/ProxmoxNativeNodeLiveness.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/ProxmoxNativePush.js +699 -0
- package/build/dist/Server/Utils/Telemetry/ProxmoxNativePush.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +77 -19
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +505 -42
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Types/AI/AIRunType.js +9 -4
- package/build/dist/Types/AI/AIRunType.js.map +1 -1
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js +10 -16
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js.map +1 -1
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPolicyVerdict.js +28 -0
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPolicyVerdict.js.map +1 -0
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js +72 -16
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js.map +1 -1
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessPermissions.js +20 -16
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessPermissions.js.map +1 -1
- package/build/dist/Types/Kubernetes/KubernetesClusterAiInsights.js +17 -0
- package/build/dist/Types/Kubernetes/KubernetesClusterAiInsights.js.map +1 -0
- package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +4 -4
- package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js.map +1 -1
- package/build/dist/Types/Team/ComplianceNotificationChannel.js +23 -0
- package/build/dist/Types/Team/ComplianceNotificationChannel.js.map +1 -0
- package/build/dist/Types/Team/ComplianceRule.js +304 -0
- package/build/dist/Types/Team/ComplianceRule.js.map +1 -0
- package/build/dist/Types/Team/ComplianceRuleType.js +21 -0
- package/build/dist/Types/Team/ComplianceRuleType.js.map +1 -1
- package/build/dist/Types/Team/TeamComplianceStatus.js +2 -0
- package/build/dist/Types/Team/TeamComplianceStatus.js.map +1 -0
- package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +25 -0
- package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -1
- package/build/dist/UI/Components/ActionButton/ActionButtonSchema.js +20 -1
- package/build/dist/UI/Components/ActionButton/ActionButtonSchema.js.map +1 -1
- package/build/dist/UI/Components/ActionButton/RowActions.js +113 -0
- package/build/dist/UI/Components/ActionButton/RowActions.js.map +1 -0
- package/build/dist/UI/Components/ActionButton/SplitActionButtons.js +71 -0
- package/build/dist/UI/Components/ActionButton/SplitActionButtons.js.map +1 -0
- package/build/dist/UI/Components/Charts/Area/AreaChart.js +16 -1
- package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js +16 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +27 -5
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +61 -194
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +84 -26
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +75 -196
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.js +133 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/UseChartBucketsChange.js +26 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/UseChartBucketsChange.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/UseChartRangeSelection.js +371 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/UseChartRangeSelection.js.map +1 -0
- package/build/dist/UI/Components/Charts/Line/LineChart.js +16 -1
- package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/TimeRangeZoom/ResetTimeRangeZoomButton.js +35 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/ResetTimeRangeZoomButton.js.map +1 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomContext.js +107 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomContext.js.map +1 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomHint.js +41 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomHint.js.map +1 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomUtil.js +117 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomUtil.js.map +1 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/UseTimeRangeZoom.js +121 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/UseTimeRangeZoom.js.map +1 -0
- package/build/dist/UI/Components/Charts/Utils/DataPoint.js +15 -7
- package/build/dist/UI/Components/Charts/Utils/DataPoint.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/XAxis.js +70 -0
- package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/useHistogramRangeSelection.js +305 -38
- package/build/dist/UI/Components/Charts/Utils/useHistogramRangeSelection.js.map +1 -1
- package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js +89 -14
- package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js +11 -2
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Input/Input.js +69 -54
- package/build/dist/UI/Components/Input/Input.js.map +1 -1
- package/build/dist/UI/Components/List/ListRow.js +4 -39
- package/build/dist/UI/Components/List/ListRow.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js +31 -8
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js +10 -1
- package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +139 -21
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js +30 -8
- package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +10 -0
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js +253 -14
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js +43 -13
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js.map +1 -1
- package/build/dist/UI/Components/OrderedStatesList/Item.js +2 -38
- package/build/dist/UI/Components/OrderedStatesList/Item.js.map +1 -1
- package/build/dist/UI/Components/StatusPage/ResourceGrid.js +53 -15
- package/build/dist/UI/Components/StatusPage/ResourceGrid.js.map +1 -1
- package/build/dist/UI/Components/Table/TableBody.js +6 -2
- package/build/dist/UI/Components/Table/TableBody.js.map +1 -1
- package/build/dist/UI/Components/Table/TableRow.js +12 -75
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +32 -7
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +27 -9
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js +11 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/useViewerTimeRangeZoom.js +272 -0
- package/build/dist/UI/Components/TelemetryViewer/useViewerTimeRangeZoom.js.map +1 -0
- package/build/dist/UI/Components/Toggle/Toggle.js +14 -1
- package/build/dist/UI/Components/Toggle/Toggle.js.map +1 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js +1 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
- package/build/dist/Utils/AiRemediation/CommandPolicy.js +1 -1
- package/build/dist/Utils/AiRemediation/CommandPolicy.js.map +1 -1
- package/build/dist/Utils/AiRemediation/KubectlPolicy.js +1 -1
- package/build/dist/Utils/AiRemediation/KubectlPolicy.js.map +1 -1
- package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js +27 -1
- package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,18 +1,44 @@
|
|
|
1
|
-
import React, {
|
|
1
|
+
import React, {
|
|
2
|
+
useCallback,
|
|
3
|
+
useEffect,
|
|
4
|
+
useMemo,
|
|
5
|
+
useRef,
|
|
6
|
+
useState,
|
|
7
|
+
} from "react";
|
|
2
8
|
import {
|
|
3
9
|
HistogramSelectionWindow,
|
|
4
10
|
getHistogramSelectionWindow,
|
|
5
11
|
} from "./HistogramSelection";
|
|
6
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
ChartPointerEvent,
|
|
14
|
+
DOUBLE_CLICK_DISAMBIGUATION_MS,
|
|
15
|
+
DoubleClickReset,
|
|
16
|
+
useDoubleClickReset,
|
|
17
|
+
} from "../ChartLibrary/Utils/DoubleClick";
|
|
18
|
+
import {
|
|
19
|
+
CHART_PRESS_STILLNESS_PX,
|
|
20
|
+
RANGE_SELECTION_THROTTLED_EVENTS,
|
|
21
|
+
} from "../ChartLibrary/Utils/UseChartRangeSelection";
|
|
22
|
+
import OneUptimeDate from "../../../../Types/Date";
|
|
7
23
|
|
|
8
24
|
/*
|
|
9
25
|
* The part of recharts' chart state the handlers read. `activeLabel` is the
|
|
10
26
|
* category under the pointer: the bucket start of the hovered bar.
|
|
27
|
+
* `activeTooltipIndex` is that category's place on the axis, which recharts
|
|
28
|
+
* works out again only when the pointer moves: bars landing under a still
|
|
29
|
+
* pointer keep the index and change the label.
|
|
11
30
|
*/
|
|
12
31
|
export interface HistogramPointerState {
|
|
13
32
|
activeLabel?: string | number | undefined;
|
|
33
|
+
activeTooltipIndex?: string | number | null | undefined;
|
|
14
34
|
}
|
|
15
35
|
|
|
36
|
+
/*
|
|
37
|
+
* How far the pointer may wander from where it was pressed and still be a
|
|
38
|
+
* pointer that has not moved - the line, area and bar charts' own measure.
|
|
39
|
+
*/
|
|
40
|
+
export const HISTOGRAM_PRESS_STILLNESS_PX: number = CHART_PRESS_STILLNESS_PX;
|
|
41
|
+
|
|
16
42
|
export interface HistogramRangeSelectionOptions {
|
|
17
43
|
onTimeRangeSelect?: ((startTime: Date, endTime: Date) => void) | undefined;
|
|
18
44
|
onZoomOut?: (() => void) | undefined;
|
|
@@ -24,19 +50,73 @@ export interface HistogramRangeSelectionOptions {
|
|
|
24
50
|
}
|
|
25
51
|
|
|
26
52
|
export interface HistogramRangeSelectionState {
|
|
27
|
-
|
|
53
|
+
/*
|
|
54
|
+
* Labels of the first and last bar (in time order) the selection band
|
|
55
|
+
* spans, or null while there is none.
|
|
56
|
+
*/
|
|
28
57
|
selectionStart: string | null;
|
|
29
58
|
selectionEnd: string | null;
|
|
30
|
-
|
|
59
|
+
/*
|
|
60
|
+
* True while a selection drags across bars - from the move that leaves
|
|
61
|
+
* the pressed bar to the release. A press that stays put is a click.
|
|
62
|
+
*/
|
|
31
63
|
isDragging: boolean;
|
|
32
64
|
/** Whether a click on a single bar zooms into it. */
|
|
33
65
|
canClickToZoom: boolean;
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
66
|
+
/*
|
|
67
|
+
* Spread onto the host's recharts chart root. recharts works out the bar
|
|
68
|
+
* under the pointer a frame after each mousemove by default, but hands
|
|
69
|
+
* mousedown and mouseup over at once, with the bar it last worked out -
|
|
70
|
+
* so a quick drag started a bar early or lost its last bars; a
|
|
71
|
+
* selectable histogram takes mousemove unthrottled (see
|
|
72
|
+
* RANGE_SELECTION_THROTTLED_EVENTS). Empty when nothing can be selected,
|
|
73
|
+
* which leaves recharts' default alone.
|
|
74
|
+
*/
|
|
75
|
+
chartRootProps: HistogramChartRootProps;
|
|
76
|
+
/*
|
|
77
|
+
* The chart root's mouse handlers. recharts hands them its state and the
|
|
78
|
+
* React event; the event is optional so a caller without one still gets
|
|
79
|
+
* the label-only behaviour.
|
|
80
|
+
*/
|
|
81
|
+
onMouseDown: (
|
|
82
|
+
state?: HistogramPointerState | null,
|
|
83
|
+
event?: ChartPointerEvent | null,
|
|
84
|
+
) => void;
|
|
85
|
+
onMouseMove: (
|
|
86
|
+
state?: HistogramPointerState | null,
|
|
87
|
+
event?: ChartPointerEvent | null,
|
|
88
|
+
) => void;
|
|
89
|
+
onMouseUp: (
|
|
90
|
+
state?: HistogramPointerState | null,
|
|
91
|
+
event?: ChartPointerEvent | null,
|
|
92
|
+
) => void;
|
|
37
93
|
onDoubleClick: () => void;
|
|
94
|
+
/*
|
|
95
|
+
* Spread onto a box that stands in for the chart - a loader while a
|
|
96
|
+
* window loads, an empty box when it holds nothing - so that it takes
|
|
97
|
+
* the double-click as the chart does: the second press as well as the
|
|
98
|
+
* dblclick. Right after a zoom the chart replaces its loader at any
|
|
99
|
+
* moment, a double-click in progress included, and the browser's
|
|
100
|
+
* dblclick does not survive that (see useDoubleClickReset).
|
|
101
|
+
*/
|
|
102
|
+
placeholderProps: HistogramPlaceholderProps;
|
|
38
103
|
}
|
|
39
104
|
|
|
105
|
+
export interface HistogramChartRootProps {
|
|
106
|
+
throttledEvents?: ReadonlyArray<keyof GlobalEventHandlersEventMap>;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export interface HistogramPlaceholderProps {
|
|
110
|
+
onMouseDown: (event: React.MouseEvent<HTMLElement>) => void;
|
|
111
|
+
onDoubleClick: () => void;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const SELECTABLE_CHART_ROOT_PROPS: HistogramChartRootProps = {
|
|
115
|
+
throttledEvents: RANGE_SELECTION_THROTTLED_EVENTS,
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
const INERT_CHART_ROOT_PROPS: HistogramChartRootProps = {};
|
|
119
|
+
|
|
40
120
|
export type UseHistogramRangeSelectionFunction = (
|
|
41
121
|
options: HistogramRangeSelectionOptions,
|
|
42
122
|
) => HistogramRangeSelectionState;
|
|
@@ -51,6 +131,43 @@ function toLabel(state?: HistogramPointerState | null): string | null {
|
|
|
51
131
|
return String(label);
|
|
52
132
|
}
|
|
53
133
|
|
|
134
|
+
// Where the pointer was, and the bar recharts named under it.
|
|
135
|
+
interface PointerReport {
|
|
136
|
+
clientX: number | null;
|
|
137
|
+
label: string | null;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function toAxisIndex(state?: HistogramPointerState | null): string | null {
|
|
141
|
+
const index: string | number | null | undefined = state?.activeTooltipIndex;
|
|
142
|
+
|
|
143
|
+
if (index === undefined || index === null || index === "") {
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
return String(index);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/*
|
|
151
|
+
* Two bars' labels in time order. recharts draws a band's x1 from the left
|
|
152
|
+
* edge of its bar and x2 to the right edge of its own, so a band in drag
|
|
153
|
+
* order shaded neither end bar of a right-to-left drag (and nothing at all
|
|
154
|
+
* across two neighbours). Labels that are not dates keep their order.
|
|
155
|
+
*/
|
|
156
|
+
function inTimeOrder(first: string, second: string): [string, string] {
|
|
157
|
+
const firstMs: number = OneUptimeDate.fromString(first).getTime();
|
|
158
|
+
const secondMs: number = OneUptimeDate.fromString(second).getTime();
|
|
159
|
+
|
|
160
|
+
if (
|
|
161
|
+
Number.isFinite(firstMs) &&
|
|
162
|
+
Number.isFinite(secondMs) &&
|
|
163
|
+
secondMs < firstMs
|
|
164
|
+
) {
|
|
165
|
+
return [second, first];
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return [first, second];
|
|
169
|
+
}
|
|
170
|
+
|
|
54
171
|
/**
|
|
55
172
|
* Click-or-drag range selection on a time histogram.
|
|
56
173
|
*
|
|
@@ -62,13 +179,33 @@ function toLabel(state?: HistogramPointerState | null): string | null {
|
|
|
62
179
|
* click waits DOUBLE_CLICK_DISAMBIGUATION_MS and a second press or the
|
|
63
180
|
* double-click cancels it. An unzoomed chart has no double-click gesture
|
|
64
181
|
* and zooms at once.
|
|
182
|
+
* - On a zoomed chart the second press of a double-click is the zoom-out
|
|
183
|
+
* and nothing else, and it zooms out even when the browser never sends
|
|
184
|
+
* the `dblclick` (see useDoubleClickReset). That is what happens when the
|
|
185
|
+
* chart's new bars land during the press, which, right after a zoom, is
|
|
186
|
+
* when readers double-click.
|
|
187
|
+
* - A press becomes a drag only once the POINTER leaves its bar, by more
|
|
188
|
+
* than HISTOGRAM_PRESS_STILLNESS_PX. New bars landing under a pointer that
|
|
189
|
+
* has not moved are not a drag. A press that stayed put is a click on the
|
|
190
|
+
* bar it pressed, even if a hand's drift ended it over the neighbour;
|
|
191
|
+
* only when the very spot it pressed shows another bar at the release
|
|
192
|
+
* (the same place on the axis, new data) does it zoom nowhere: the bar it
|
|
193
|
+
* pressed is no longer on the chart.
|
|
194
|
+
* - A click waiting to zoom in is dropped if the zoom ends first (Reset
|
|
195
|
+
* zoom, the picker, an empty state's double-click): it was a zoom into
|
|
196
|
+
* the window the reader has just left.
|
|
197
|
+
* - Only the main button selects: a right-click opens a context menu.
|
|
65
198
|
*
|
|
66
|
-
* The release is resolved against refs rather than render state
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
199
|
+
* The release is resolved against refs rather than render state, from the
|
|
200
|
+
* bar recharts hands the `mouseup` handler, falling back to the last move.
|
|
201
|
+
* That bar is the one under the pointer now only if the host spreads
|
|
202
|
+
* `chartRootProps` onto its chart root (see the field).
|
|
203
|
+
*
|
|
204
|
+
* A press renders nothing until the pointer leaves its bar. A render under
|
|
205
|
+
* a press can take away the node it landed on (a band repainted under the
|
|
206
|
+
* pointer, say), and a press whose node is gone by the release gets no
|
|
207
|
+
* click and no dblclick - the second click of a double-click lands on the
|
|
208
|
+
* band the first one painted.
|
|
72
209
|
*/
|
|
73
210
|
const useHistogramRangeSelection: UseHistogramRangeSelectionFunction = (
|
|
74
211
|
options: HistogramRangeSelectionOptions,
|
|
@@ -76,6 +213,33 @@ const useHistogramRangeSelection: UseHistogramRangeSelectionFunction = (
|
|
|
76
213
|
const [selectionStart, setSelectionStart] = useState<string | null>(null);
|
|
77
214
|
const [selectionEnd, setSelectionEnd] = useState<string | null>(null);
|
|
78
215
|
const [isDragging, setIsDragging] = useState<boolean>(false);
|
|
216
|
+
// Whether the pointer has left the pressed bar (a drag, not a click).
|
|
217
|
+
const hasLeftPressedBar: React.MutableRefObject<boolean> =
|
|
218
|
+
useRef<boolean>(false);
|
|
219
|
+
// Where the press in progress went down, when recharts said.
|
|
220
|
+
const pressClientX: React.MutableRefObject<number | null> = useRef<
|
|
221
|
+
number | null
|
|
222
|
+
>(null);
|
|
223
|
+
// The place on the axis of the bar it went down on (see toAxisIndex).
|
|
224
|
+
const pressAxisIndex: React.MutableRefObject<string | null> = useRef<
|
|
225
|
+
string | null
|
|
226
|
+
>(null);
|
|
227
|
+
/*
|
|
228
|
+
* Where the pointer was, and the bar recharts named under it, at the
|
|
229
|
+
* press or at the last move since. recharts works out the bar under the
|
|
230
|
+
* pointer again only when the pointer moves, so a report at the same
|
|
231
|
+
* spot that names another bar means new data landed under the press -
|
|
232
|
+
* however much a hand had drifted before it.
|
|
233
|
+
*/
|
|
234
|
+
const lastReport: React.MutableRefObject<PointerReport> =
|
|
235
|
+
useRef<PointerReport>({ clientX: null, label: null });
|
|
236
|
+
// Whether new data landed under the press in progress (see lastReport).
|
|
237
|
+
const barsChangedUnderPress: React.MutableRefObject<boolean> =
|
|
238
|
+
useRef<boolean>(false);
|
|
239
|
+
// The page-wide mouseup listener of the press in progress, if any.
|
|
240
|
+
const releaseListener: React.MutableRefObject<
|
|
241
|
+
((event: MouseEvent) => void) | null
|
|
242
|
+
> = useRef<((event: MouseEvent) => void) | null>(null);
|
|
79
243
|
|
|
80
244
|
/*
|
|
81
245
|
* The ref stays the authority on whether a selection is in progress, so a
|
|
@@ -114,6 +278,13 @@ const useHistogramRangeSelection: UseHistogramRangeSelectionFunction = (
|
|
|
114
278
|
setSelectionEnd(null);
|
|
115
279
|
}, []);
|
|
116
280
|
|
|
281
|
+
const stopListeningForRelease: () => void = useCallback((): void => {
|
|
282
|
+
if (releaseListener.current) {
|
|
283
|
+
window.removeEventListener("mouseup", releaseListener.current);
|
|
284
|
+
releaseListener.current = null;
|
|
285
|
+
}
|
|
286
|
+
}, []);
|
|
287
|
+
|
|
117
288
|
const cancelPendingClick: () => boolean = useCallback((): boolean => {
|
|
118
289
|
if (pendingClick.current === null) {
|
|
119
290
|
return false;
|
|
@@ -127,54 +298,296 @@ const useHistogramRangeSelection: UseHistogramRangeSelectionFunction = (
|
|
|
127
298
|
useEffect(() => {
|
|
128
299
|
return () => {
|
|
129
300
|
cancelPendingClick();
|
|
301
|
+
stopListeningForRelease();
|
|
130
302
|
};
|
|
131
|
-
}, [cancelPendingClick]);
|
|
303
|
+
}, [cancelPendingClick, stopListeningForRelease]);
|
|
132
304
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
305
|
+
/*
|
|
306
|
+
* The zoom-out, while the chart offers one: the click waiting to zoom in
|
|
307
|
+
* goes, and so does its band.
|
|
308
|
+
*/
|
|
309
|
+
const zoomOut: (() => void) | undefined = onZoomOut
|
|
310
|
+
? (): void => {
|
|
311
|
+
cancelPendingClick();
|
|
312
|
+
clearSelection();
|
|
313
|
+
onZoomOut();
|
|
314
|
+
}
|
|
315
|
+
: undefined;
|
|
316
|
+
const doubleClickReset: DoubleClickReset = useDoubleClickReset(zoomOut);
|
|
137
317
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
318
|
+
/*
|
|
319
|
+
* A click waiting to zoom in was made on a zoomed chart. If the zoom ends
|
|
320
|
+
* by another way first - Reset zoom, the picker, an empty state's own
|
|
321
|
+
* double-click - it must not zoom back in a moment after the reader left.
|
|
322
|
+
* Its band goes too, and so does one a double-click's second press kept
|
|
323
|
+
* for a zoom-out that is no longer coming; a drag's band stays.
|
|
324
|
+
*/
|
|
325
|
+
const offersZoomOut: boolean = Boolean(onZoomOut);
|
|
326
|
+
|
|
327
|
+
useEffect(() => {
|
|
328
|
+
if (offersZoomOut) {
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
cancelPendingClick();
|
|
333
|
+
|
|
334
|
+
if (!isSelecting.current) {
|
|
335
|
+
clearSelection();
|
|
336
|
+
}
|
|
337
|
+
}, [offersZoomOut, cancelPendingClick, clearSelection]);
|
|
338
|
+
|
|
339
|
+
/*
|
|
340
|
+
* Whether the pointer has left the spot the press went down on. Without
|
|
341
|
+
* positions to go by (a caller that hands no event), it has: any change
|
|
342
|
+
* of bar counts, as it always did.
|
|
343
|
+
*/
|
|
344
|
+
const hasPointerMoved: (event?: ChartPointerEvent | null) => boolean =
|
|
345
|
+
useCallback((event?: ChartPointerEvent | null): boolean => {
|
|
346
|
+
const clientX: number | undefined = event?.clientX;
|
|
347
|
+
|
|
348
|
+
if (pressClientX.current === null || typeof clientX !== "number") {
|
|
349
|
+
return true;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
return (
|
|
353
|
+
Math.abs(clientX - pressClientX.current) > HISTOGRAM_PRESS_STILLNESS_PX
|
|
354
|
+
);
|
|
355
|
+
}, []);
|
|
356
|
+
|
|
357
|
+
/*
|
|
358
|
+
* Takes in what recharts reports during the press (a move, the release):
|
|
359
|
+
* the bar it names at a spot it last named another bar at is new data.
|
|
360
|
+
* Without positions to go by, nothing is concluded.
|
|
361
|
+
*/
|
|
362
|
+
const noteReport: (
|
|
363
|
+
label: string | null,
|
|
364
|
+
event?: ChartPointerEvent | null,
|
|
365
|
+
) => void = useCallback(
|
|
366
|
+
(label: string | null, event?: ChartPointerEvent | null): void => {
|
|
367
|
+
const clientX: number | undefined = event?.clientX;
|
|
368
|
+
|
|
369
|
+
if (typeof clientX !== "number") {
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
const previous: PointerReport = lastReport.current;
|
|
374
|
+
|
|
375
|
+
if (
|
|
376
|
+
previous.clientX === clientX &&
|
|
377
|
+
previous.label !== null &&
|
|
378
|
+
label !== null &&
|
|
379
|
+
label !== previous.label
|
|
380
|
+
) {
|
|
381
|
+
barsChangedUnderPress.current = true;
|
|
382
|
+
}
|
|
141
383
|
|
|
142
|
-
|
|
384
|
+
lastReport.current = { clientX: clientX, label: label };
|
|
385
|
+
},
|
|
386
|
+
[],
|
|
387
|
+
);
|
|
388
|
+
|
|
389
|
+
/*
|
|
390
|
+
* The page-wide release listener is added by a press and calls the
|
|
391
|
+
* newest onMouseUp, whatever the host re-rendered with meanwhile.
|
|
392
|
+
*/
|
|
393
|
+
const onMouseUpRef: React.MutableRefObject<
|
|
394
|
+
(
|
|
395
|
+
state?: HistogramPointerState | null,
|
|
396
|
+
event?: ChartPointerEvent | null,
|
|
397
|
+
) => void
|
|
398
|
+
> = useRef<
|
|
399
|
+
(
|
|
400
|
+
state?: HistogramPointerState | null,
|
|
401
|
+
event?: ChartPointerEvent | null,
|
|
402
|
+
) => void
|
|
403
|
+
>(() => {});
|
|
404
|
+
|
|
405
|
+
/*
|
|
406
|
+
* Readers routinely drag past the edge of a 120px-tall chart and let go
|
|
407
|
+
* outside it, where the chart's own mouseup never fires. Listen on the
|
|
408
|
+
* page until the press ends; a release over the chart reaches the
|
|
409
|
+
* chart's handler first, which removes this listener before the page
|
|
410
|
+
* hears it. The page's release carries no bar, but it does carry where
|
|
411
|
+
* the pointer is and the click count.
|
|
412
|
+
*/
|
|
413
|
+
const listenForReleaseOffChart: () => void = useCallback((): void => {
|
|
414
|
+
stopListeningForRelease();
|
|
415
|
+
const finishPressOutsideChart: (event: MouseEvent) => void = (
|
|
416
|
+
event: MouseEvent,
|
|
417
|
+
): void => {
|
|
418
|
+
onMouseUpRef.current(null, event);
|
|
419
|
+
};
|
|
420
|
+
releaseListener.current = finishPressOutsideChart;
|
|
421
|
+
window.addEventListener("mouseup", finishPressOutsideChart);
|
|
422
|
+
}, [stopListeningForRelease]);
|
|
423
|
+
|
|
424
|
+
const onMouseDown: (
|
|
425
|
+
state?: HistogramPointerState | null,
|
|
426
|
+
event?: ChartPointerEvent | null,
|
|
427
|
+
) => void = useCallback(
|
|
428
|
+
(
|
|
429
|
+
state?: HistogramPointerState | null,
|
|
430
|
+
event?: ChartPointerEvent | null,
|
|
431
|
+
): void => {
|
|
432
|
+
/*
|
|
433
|
+
* The second press of a double-click on a zoomed chart: the zoom-out,
|
|
434
|
+
* on its release, wherever that is (the page hears a release off the
|
|
435
|
+
* chart, as for a drag below). The first click must not zoom in; its
|
|
436
|
+
* band stays until the zoom-out clears it, because this press may
|
|
437
|
+
* have landed on it and a render now would take that node away.
|
|
438
|
+
*/
|
|
439
|
+
if (doubleClickReset.onPress(event)) {
|
|
143
440
|
cancelPendingClick();
|
|
441
|
+
isSelecting.current = false;
|
|
442
|
+
listenForReleaseOffChart();
|
|
443
|
+
return;
|
|
444
|
+
}
|
|
144
445
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
446
|
+
const label: string | null = toLabel(state);
|
|
447
|
+
|
|
448
|
+
if (!canSelect || !label) {
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
// Only the main button selects: a right-click opens a context menu.
|
|
453
|
+
if (event && typeof event.button === "number" && event.button > 0) {
|
|
454
|
+
return;
|
|
455
|
+
}
|
|
154
456
|
|
|
155
|
-
|
|
156
|
-
|
|
457
|
+
/*
|
|
458
|
+
* A second press before the first click zoomed replaces it. The
|
|
459
|
+
* band that click painted stays until this press ends: this may be
|
|
460
|
+
* the second click of a double-click, landing on that band.
|
|
461
|
+
*/
|
|
462
|
+
cancelPendingClick();
|
|
463
|
+
|
|
464
|
+
isSelecting.current = true;
|
|
465
|
+
hasLeftPressedBar.current = false;
|
|
466
|
+
startLabel.current = label;
|
|
467
|
+
endLabel.current = null;
|
|
468
|
+
pressClientX.current =
|
|
469
|
+
typeof event?.clientX === "number" ? event.clientX : null;
|
|
470
|
+
pressAxisIndex.current = toAxisIndex(state);
|
|
471
|
+
lastReport.current = { clientX: pressClientX.current, label: label };
|
|
472
|
+
barsChangedUnderPress.current = false;
|
|
473
|
+
|
|
474
|
+
listenForReleaseOffChart();
|
|
475
|
+
},
|
|
476
|
+
[canSelect, cancelPendingClick, doubleClickReset, listenForReleaseOffChart],
|
|
477
|
+
);
|
|
478
|
+
|
|
479
|
+
const onMouseMove: (
|
|
480
|
+
state?: HistogramPointerState | null,
|
|
481
|
+
event?: ChartPointerEvent | null,
|
|
482
|
+
) => void = useCallback(
|
|
483
|
+
(
|
|
484
|
+
state?: HistogramPointerState | null,
|
|
485
|
+
event?: ChartPointerEvent | null,
|
|
486
|
+
): void => {
|
|
157
487
|
const label: string | null = toLabel(state);
|
|
488
|
+
const from: string | null = startLabel.current;
|
|
158
489
|
|
|
159
|
-
if (!isSelecting.current || !
|
|
490
|
+
if (!isSelecting.current || !from) {
|
|
160
491
|
return;
|
|
161
492
|
}
|
|
162
493
|
|
|
494
|
+
noteReport(label, event);
|
|
495
|
+
|
|
496
|
+
if (!label) {
|
|
497
|
+
return;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
if (!hasLeftPressedBar.current) {
|
|
501
|
+
// Still on the pressed bar: a click so far, so paint nothing.
|
|
502
|
+
if (label === from) {
|
|
503
|
+
endLabel.current = label;
|
|
504
|
+
return;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
/*
|
|
508
|
+
* Another bar under a pointer that has not really moved: new bars
|
|
509
|
+
* landed under the press, or a hand's drift crossed the edge of the
|
|
510
|
+
* bar it pressed. Not a drag.
|
|
511
|
+
*/
|
|
512
|
+
if (!hasPointerMoved(event)) {
|
|
513
|
+
return;
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
|
|
163
517
|
endLabel.current = label;
|
|
164
|
-
|
|
165
|
-
|
|
518
|
+
hasLeftPressedBar.current = true;
|
|
519
|
+
const [first, last]: [string, string] = inTimeOrder(from, label);
|
|
520
|
+
setSelectionStart(first);
|
|
521
|
+
setSelectionEnd(last);
|
|
522
|
+
setIsDragging(true);
|
|
523
|
+
},
|
|
524
|
+
[hasPointerMoved, noteReport],
|
|
525
|
+
);
|
|
526
|
+
|
|
527
|
+
const onMouseUp: (
|
|
528
|
+
state?: HistogramPointerState | null,
|
|
529
|
+
event?: ChartPointerEvent | null,
|
|
530
|
+
) => void = useCallback(
|
|
531
|
+
(
|
|
532
|
+
state?: HistogramPointerState | null,
|
|
533
|
+
event?: ChartPointerEvent | null,
|
|
534
|
+
): void => {
|
|
535
|
+
// The end of a double-click's second press: the zoom-out, nothing else.
|
|
536
|
+
if (doubleClickReset.onRelease(event)) {
|
|
537
|
+
stopListeningForRelease();
|
|
538
|
+
|
|
539
|
+
/*
|
|
540
|
+
* Ended by a later click's release, its own having never come: no
|
|
541
|
+
* zoom-out follows, so the band the first click painted, kept for
|
|
542
|
+
* one, goes now.
|
|
543
|
+
*/
|
|
544
|
+
if (!doubleClickReset.willReset()) {
|
|
545
|
+
clearSelection();
|
|
546
|
+
}
|
|
547
|
+
return;
|
|
548
|
+
}
|
|
166
549
|
|
|
167
|
-
const onMouseUp: (state?: HistogramPointerState | null) => void = useCallback(
|
|
168
|
-
(state?: HistogramPointerState | null): void => {
|
|
169
550
|
if (!isSelecting.current) {
|
|
170
551
|
return;
|
|
171
552
|
}
|
|
172
553
|
|
|
173
554
|
isSelecting.current = false;
|
|
555
|
+
stopListeningForRelease();
|
|
174
556
|
setIsDragging(false);
|
|
175
557
|
|
|
176
558
|
const from: string | null = startLabel.current;
|
|
177
|
-
const
|
|
559
|
+
const releaseLabel: string | null = toLabel(state);
|
|
560
|
+
let to: string | null = from;
|
|
561
|
+
|
|
562
|
+
noteReport(releaseLabel, event);
|
|
563
|
+
|
|
564
|
+
if (hasLeftPressedBar.current || hasPointerMoved(event)) {
|
|
565
|
+
// A drag, or a flick released before any of its moves came in.
|
|
566
|
+
to = releaseLabel || endLabel.current || from;
|
|
567
|
+
} else if (releaseLabel !== null && releaseLabel !== from) {
|
|
568
|
+
/*
|
|
569
|
+
* The pointer stayed put, yet another bar is under it. When a bar
|
|
570
|
+
* changed under the pointer without it moving (see lastReport), or
|
|
571
|
+
* the spot on the axis it pressed now holds another bar, the
|
|
572
|
+
* chart's data changed during the press and the pressed bar is
|
|
573
|
+
* gone (recharts also clamps a stale spot onto the last bar of
|
|
574
|
+
* shorter data): not a drag the reader never made, nor a zoom into
|
|
575
|
+
* a bar that is no longer shown.
|
|
576
|
+
*/
|
|
577
|
+
const sameSpotOnAxis: boolean =
|
|
578
|
+
pressAxisIndex.current !== null &&
|
|
579
|
+
toAxisIndex(state) === pressAxisIndex.current;
|
|
580
|
+
|
|
581
|
+
if (barsChangedUnderPress.current || sameSpotOnAxis) {
|
|
582
|
+
clearSelection();
|
|
583
|
+
return;
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
/*
|
|
588
|
+
* Otherwise a press that stayed put is a click on the bar it pressed,
|
|
589
|
+
* even when a hand's drift let it go over the next one.
|
|
590
|
+
*/
|
|
178
591
|
|
|
179
592
|
if (!from || !to) {
|
|
180
593
|
clearSelection();
|
|
@@ -209,6 +622,7 @@ const useHistogramRangeSelection: UseHistogramRangeSelectionFunction = (
|
|
|
209
622
|
* to open.
|
|
210
623
|
*/
|
|
211
624
|
endLabel.current = to;
|
|
625
|
+
setSelectionStart(from);
|
|
212
626
|
setSelectionEnd(to);
|
|
213
627
|
|
|
214
628
|
pendingClick.current = setTimeout(() => {
|
|
@@ -217,38 +631,54 @@ const useHistogramRangeSelection: UseHistogramRangeSelectionFunction = (
|
|
|
217
631
|
onTimeRangeSelectRef.current?.(selected.startTime, selected.endTime);
|
|
218
632
|
}, DOUBLE_CLICK_DISAMBIGUATION_MS);
|
|
219
633
|
},
|
|
220
|
-
[
|
|
634
|
+
[
|
|
635
|
+
bucketIntervalMs,
|
|
636
|
+
clearSelection,
|
|
637
|
+
doubleClickReset,
|
|
638
|
+
hasPointerMoved,
|
|
639
|
+
noteReport,
|
|
640
|
+
onZoomOut,
|
|
641
|
+
stopListeningForRelease,
|
|
642
|
+
],
|
|
221
643
|
);
|
|
644
|
+
onMouseUpRef.current = onMouseUp;
|
|
222
645
|
|
|
223
646
|
const onDoubleClick: () => void = useCallback((): void => {
|
|
647
|
+
// Neither click of a double-click zooms in, whatever else it does.
|
|
224
648
|
if (cancelPendingClick()) {
|
|
225
649
|
clearSelection();
|
|
226
650
|
}
|
|
227
651
|
|
|
228
|
-
|
|
229
|
-
}, [cancelPendingClick, clearSelection,
|
|
652
|
+
doubleClickReset.onDoubleClick();
|
|
653
|
+
}, [cancelPendingClick, clearSelection, doubleClickReset]);
|
|
230
654
|
|
|
231
655
|
/*
|
|
232
|
-
*
|
|
233
|
-
*
|
|
234
|
-
*
|
|
235
|
-
*
|
|
656
|
+
* A press on a box standing in for the chart. It has no bars to select;
|
|
657
|
+
* only the second press of a double-click counts, and its release - on
|
|
658
|
+
* the chart that replaced the box by then, or anywhere on the page -
|
|
659
|
+
* zooms out as the chart's own would.
|
|
236
660
|
*/
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
onMouseUp(null);
|
|
244
|
-
};
|
|
661
|
+
const onPlaceholderMouseDown: (event: React.MouseEvent<HTMLElement>) => void =
|
|
662
|
+
useCallback(
|
|
663
|
+
(event: React.MouseEvent<HTMLElement>): void => {
|
|
664
|
+
if (!doubleClickReset.onPress(event)) {
|
|
665
|
+
return;
|
|
666
|
+
}
|
|
245
667
|
|
|
246
|
-
|
|
668
|
+
cancelPendingClick();
|
|
669
|
+
isSelecting.current = false;
|
|
670
|
+
listenForReleaseOffChart();
|
|
671
|
+
},
|
|
672
|
+
[cancelPendingClick, doubleClickReset, listenForReleaseOffChart],
|
|
673
|
+
);
|
|
247
674
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
675
|
+
const placeholderProps: HistogramPlaceholderProps =
|
|
676
|
+
useMemo((): HistogramPlaceholderProps => {
|
|
677
|
+
return {
|
|
678
|
+
onMouseDown: onPlaceholderMouseDown,
|
|
679
|
+
onDoubleClick: onDoubleClick,
|
|
680
|
+
};
|
|
681
|
+
}, [onPlaceholderMouseDown, onDoubleClick]);
|
|
252
682
|
|
|
253
683
|
return {
|
|
254
684
|
selectionStart: selectionStart,
|
|
@@ -259,10 +689,14 @@ const useHistogramRangeSelection: UseHistogramRangeSelectionFunction = (
|
|
|
259
689
|
typeof bucketIntervalMs === "number" &&
|
|
260
690
|
Number.isFinite(bucketIntervalMs) &&
|
|
261
691
|
bucketIntervalMs > 0,
|
|
692
|
+
chartRootProps: canSelect
|
|
693
|
+
? SELECTABLE_CHART_ROOT_PROPS
|
|
694
|
+
: INERT_CHART_ROOT_PROPS,
|
|
262
695
|
onMouseDown: onMouseDown,
|
|
263
696
|
onMouseMove: onMouseMove,
|
|
264
697
|
onMouseUp: onMouseUp,
|
|
265
698
|
onDoubleClick: onDoubleClick,
|
|
699
|
+
placeholderProps: placeholderProps,
|
|
266
700
|
};
|
|
267
701
|
};
|
|
268
702
|
|