@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
|
@@ -474,6 +474,8 @@ const EntityDropdown: FunctionComponent<EntityDropdownProps> = (
|
|
|
474
474
|
useRef<HTMLDivElement | null>(null);
|
|
475
475
|
const inputRef: React.MutableRefObject<HTMLInputElement | null> =
|
|
476
476
|
useRef<HTMLInputElement | null>(null);
|
|
477
|
+
const valueButtonRef: React.MutableRefObject<HTMLButtonElement | null> =
|
|
478
|
+
useRef<HTMLButtonElement | null>(null);
|
|
477
479
|
const debounceRef: React.MutableRefObject<number | null> = useRef<
|
|
478
480
|
number | null
|
|
479
481
|
>(null);
|
|
@@ -573,6 +575,67 @@ const EntityDropdown: FunctionComponent<EntityDropdownProps> = (
|
|
|
573
575
|
};
|
|
574
576
|
}, []);
|
|
575
577
|
|
|
578
|
+
/*
|
|
579
|
+
* The keyboard's side of the click-outside above. Tabbing out of the
|
|
580
|
+
* dropdown - from the input, or on past the last option in the menu - onto
|
|
581
|
+
* the next field used to leave the menu open, and when that field opened a
|
|
582
|
+
* popup of its own (the next dropdown, the Affected Resources picker) the
|
|
583
|
+
* two stacked on top of each other. The menu is a DOM child of the
|
|
584
|
+
* container (laid out fixed, never portalled), so moving between the input,
|
|
585
|
+
* the chips, the menu's tabs and its options stays inside and keeps it open.
|
|
586
|
+
*
|
|
587
|
+
* Only a move onto another element closes it. With no element to go to
|
|
588
|
+
* (relatedTarget null, or the document itself) focus went nowhere in
|
|
589
|
+
* particular - the window lost focus, a press landed on something that
|
|
590
|
+
* takes no focus, the focused option unmounted - and presses are for the
|
|
591
|
+
* listener above to judge.
|
|
592
|
+
*/
|
|
593
|
+
const closeWhenFocusLeaves: (
|
|
594
|
+
event: React.FocusEvent<HTMLDivElement>,
|
|
595
|
+
) => void = (event: React.FocusEvent<HTMLDivElement>): void => {
|
|
596
|
+
const nextFocused: EventTarget | null = event.relatedTarget;
|
|
597
|
+
|
|
598
|
+
if (
|
|
599
|
+
!(nextFocused instanceof Element) ||
|
|
600
|
+
event.currentTarget.contains(nextFocused)
|
|
601
|
+
) {
|
|
602
|
+
return;
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
setIsOpen(false);
|
|
606
|
+
setHighlightedIndex(-1);
|
|
607
|
+
};
|
|
608
|
+
|
|
609
|
+
/*
|
|
610
|
+
* A single-select showing its value swaps elements as the menu opens and
|
|
611
|
+
* closes: the value button while closed, the search input while open. Focus
|
|
612
|
+
* meant for the field across that swap has to wait for the element taking
|
|
613
|
+
* over, which is not mounted yet when the swap is asked for. Set by the
|
|
614
|
+
* value button, which hands focus to the search input as the menu opens,
|
|
615
|
+
* and by Escape, which hands it back to the value button as the menu
|
|
616
|
+
* closes (see closeMenuOnEscape). Without it focus went down with the
|
|
617
|
+
* element being replaced, to the page: typing did not search, focus could
|
|
618
|
+
* never leave the dropdown to close the menu (see closeWhenFocusLeaves),
|
|
619
|
+
* and a keyboard user was left outside the field they were working in.
|
|
620
|
+
*/
|
|
621
|
+
const focusFieldAfterSwapRef: React.MutableRefObject<boolean> =
|
|
622
|
+
useRef<boolean>(false);
|
|
623
|
+
|
|
624
|
+
useLayoutEffect(() => {
|
|
625
|
+
if (!focusFieldAfterSwapRef.current) {
|
|
626
|
+
return;
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
focusFieldAfterSwapRef.current = false;
|
|
630
|
+
|
|
631
|
+
if (isOpen) {
|
|
632
|
+
inputRef.current?.focus();
|
|
633
|
+
return;
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
valueButtonRef.current?.focus();
|
|
637
|
+
}, [isOpen]);
|
|
638
|
+
|
|
576
639
|
useEffect(() => {
|
|
577
640
|
return () => {
|
|
578
641
|
if (debounceRef.current !== null) {
|
|
@@ -1179,11 +1242,49 @@ const EntityDropdown: FunctionComponent<EntityDropdownProps> = (
|
|
|
1179
1242
|
const showSingleSelectedText: boolean =
|
|
1180
1243
|
!isMulti && !isOpen && selectedOptions.length > 0;
|
|
1181
1244
|
|
|
1245
|
+
/*
|
|
1246
|
+
* Escape while the menu is open closes just the menu, wherever focus is in
|
|
1247
|
+
* the dropdown: the search input, or - reached with Tab - an option, one of
|
|
1248
|
+
* the menu's tabs or footer buttons, a chip or the Clear button. It is
|
|
1249
|
+
* claimed, so Modal's document listener never hears it: that listener
|
|
1250
|
+
* closes the whole form and throws away its unsaved edits, which is what
|
|
1251
|
+
* Escape on a Tab-reached option used to do while Escape in the input only
|
|
1252
|
+
* closed the menu. With the menu already closed Escape is left alone, so
|
|
1253
|
+
* the next press still closes the modal.
|
|
1254
|
+
*
|
|
1255
|
+
* Focus goes back to the field rather than down with the menu's buttons.
|
|
1256
|
+
*/
|
|
1257
|
+
const closeMenuOnEscape: (
|
|
1258
|
+
event: React.KeyboardEvent<HTMLDivElement>,
|
|
1259
|
+
) => void = (event: React.KeyboardEvent<HTMLDivElement>): void => {
|
|
1260
|
+
if (event.key !== "Escape" || !isOpen) {
|
|
1261
|
+
return;
|
|
1262
|
+
}
|
|
1263
|
+
|
|
1264
|
+
event.preventDefault();
|
|
1265
|
+
|
|
1266
|
+
if (!isMulti && selectedOptions.length > 0) {
|
|
1267
|
+
/*
|
|
1268
|
+
* Closing swaps the search input for the value button, so focus waits
|
|
1269
|
+
* for the button to mount (see focusFieldAfterSwapRef).
|
|
1270
|
+
*/
|
|
1271
|
+
focusFieldAfterSwapRef.current = true;
|
|
1272
|
+
} else {
|
|
1273
|
+
// Focusing the input asks to open the menu; closing it after wins.
|
|
1274
|
+
inputRef.current?.focus();
|
|
1275
|
+
}
|
|
1276
|
+
|
|
1277
|
+
setIsOpen(false);
|
|
1278
|
+
setHighlightedIndex(-1);
|
|
1279
|
+
};
|
|
1280
|
+
|
|
1182
1281
|
return (
|
|
1183
1282
|
<div
|
|
1184
1283
|
ref={containerRef}
|
|
1185
1284
|
id={props.id}
|
|
1186
1285
|
className={props.className || "relative mt-2 mb-1 w-full"}
|
|
1286
|
+
onBlur={closeWhenFocusLeaves}
|
|
1287
|
+
onKeyDown={closeMenuOnEscape}
|
|
1187
1288
|
>
|
|
1188
1289
|
{isMulti && selectedOptions.length > 0 && (
|
|
1189
1290
|
<div className="mb-2 flex flex-wrap gap-1.5">
|
|
@@ -1240,6 +1341,7 @@ const EntityDropdown: FunctionComponent<EntityDropdownProps> = (
|
|
|
1240
1341
|
*/}
|
|
1241
1342
|
{showSingleSelectedText && (
|
|
1242
1343
|
<button
|
|
1344
|
+
ref={valueButtonRef}
|
|
1243
1345
|
type="button"
|
|
1244
1346
|
disabled={props.disabled}
|
|
1245
1347
|
aria-labelledby={props.ariaLabelledby}
|
|
@@ -1247,8 +1349,8 @@ const EntityDropdown: FunctionComponent<EntityDropdownProps> = (
|
|
|
1247
1349
|
if (props.disabled) {
|
|
1248
1350
|
return;
|
|
1249
1351
|
}
|
|
1352
|
+
focusFieldAfterSwapRef.current = true;
|
|
1250
1353
|
setIsOpen(true);
|
|
1251
|
-
inputRef.current?.focus();
|
|
1252
1354
|
}}
|
|
1253
1355
|
onFocus={() => {
|
|
1254
1356
|
props.onFocus?.();
|
|
@@ -1406,16 +1508,10 @@ const EntityDropdown: FunctionComponent<EntityDropdownProps> = (
|
|
|
1406
1508
|
}
|
|
1407
1509
|
return;
|
|
1408
1510
|
}
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
*/
|
|
1414
|
-
event.preventDefault();
|
|
1415
|
-
setIsOpen(false);
|
|
1416
|
-
setHighlightedIndex(-1);
|
|
1417
|
-
return;
|
|
1418
|
-
}
|
|
1511
|
+
/*
|
|
1512
|
+
* Escape bubbles to the container, which closes the menu for
|
|
1513
|
+
* every control in the dropdown alike (closeMenuOnEscape).
|
|
1514
|
+
*/
|
|
1419
1515
|
if (
|
|
1420
1516
|
event.key === "Backspace" &&
|
|
1421
1517
|
searchQuery === "" &&
|
|
@@ -499,6 +499,15 @@ const FormField: <T extends GenericObject>(
|
|
|
499
499
|
id={props.field.id}
|
|
500
500
|
tabIndex={0}
|
|
501
501
|
dataTestId={props.field.dataTestId}
|
|
502
|
+
/*
|
|
503
|
+
* A field its form locks (an alert's monitor, when that
|
|
504
|
+
* monitor raised the alert) must not open, change or clear.
|
|
505
|
+
* Only field.disabled: the form-wide props.isDisabled also
|
|
506
|
+
* covers the form's own dropdown-options load, which
|
|
507
|
+
* EntityDropdown never waits on because it searches the
|
|
508
|
+
* server itself.
|
|
509
|
+
*/
|
|
510
|
+
disabled={props.field.disabled}
|
|
502
511
|
onChange={(
|
|
503
512
|
value: DropdownValue | Array<DropdownValue> | null,
|
|
504
513
|
) => {
|
|
@@ -532,6 +541,7 @@ const FormField: <T extends GenericObject>(
|
|
|
532
541
|
id={props.field.id}
|
|
533
542
|
tabIndex={0}
|
|
534
543
|
dataTestId={props.field.dataTestId}
|
|
544
|
+
disabled={props.field.disabled}
|
|
535
545
|
onChange={async (
|
|
536
546
|
value: DropdownValue | Array<DropdownValue> | null,
|
|
537
547
|
) => {
|
|
@@ -8,6 +8,7 @@ import React, {
|
|
|
8
8
|
FunctionComponent,
|
|
9
9
|
ReactElement,
|
|
10
10
|
useEffect,
|
|
11
|
+
useLayoutEffect,
|
|
11
12
|
useRef,
|
|
12
13
|
useState,
|
|
13
14
|
} from "react";
|
|
@@ -70,6 +71,48 @@ export interface ComponentProps {
|
|
|
70
71
|
autoComplete?: string | undefined;
|
|
71
72
|
}
|
|
72
73
|
|
|
74
|
+
type GetDateDisplayValueFunction = (
|
|
75
|
+
value: string | Date,
|
|
76
|
+
type: InputType | undefined,
|
|
77
|
+
) => string | undefined;
|
|
78
|
+
|
|
79
|
+
/*
|
|
80
|
+
* The text a date or datetime-local input shows for a stored value, in the
|
|
81
|
+
* form the browser's picker reads. Undefined leaves the display as it is: a
|
|
82
|
+
* value holding " - " is an InBetween range, which only a range filter shows.
|
|
83
|
+
* So does anything that is neither a string nor a Date - an untyped caller's
|
|
84
|
+
* number or JSON object - which the input has never tried to parse, and which
|
|
85
|
+
* would now be parsed during render, where a throw takes the page down.
|
|
86
|
+
*/
|
|
87
|
+
const getDateDisplayValue: GetDateDisplayValueFunction = (
|
|
88
|
+
value: string | Date,
|
|
89
|
+
type: InputType | undefined,
|
|
90
|
+
): string | undefined => {
|
|
91
|
+
if (!value) {
|
|
92
|
+
return "";
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (typeof value !== "string" && !(value instanceof Date)) {
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (typeof value === "string" && value.includes(" - ")) {
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const date: Date =
|
|
104
|
+
value instanceof Date ? value : OneUptimeDate.fromString(value);
|
|
105
|
+
|
|
106
|
+
try {
|
|
107
|
+
return type === InputType.DATETIME_LOCAL
|
|
108
|
+
? OneUptimeDate.toDateTimeLocalString(date)
|
|
109
|
+
: OneUptimeDate.asDateForDatabaseQuery(date);
|
|
110
|
+
} catch (err: unknown) {
|
|
111
|
+
Logger.error(err as Error);
|
|
112
|
+
return "";
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
|
|
73
116
|
const Input: FunctionComponent<ComponentProps> = (
|
|
74
117
|
props: ComponentProps,
|
|
75
118
|
): ReactElement => {
|
|
@@ -92,61 +135,54 @@ const Input: FunctionComponent<ComponentProps> = (
|
|
|
92
135
|
className += " bg-gray-100 text-gray-500 cursor-not-allowed";
|
|
93
136
|
}
|
|
94
137
|
|
|
95
|
-
const
|
|
138
|
+
const isDateInput: boolean =
|
|
139
|
+
props.type === InputType.DATE || props.type === InputType.DATETIME_LOCAL;
|
|
140
|
+
|
|
141
|
+
/*
|
|
142
|
+
* Seeded from the props on the first render, not by an effect after it.
|
|
143
|
+
*
|
|
144
|
+
* Seeding it from an effect meant the <input> was inserted blank and only
|
|
145
|
+
* filled in a task or more later, and in between it was on screen, focusable
|
|
146
|
+
* and typeable. Anything that put the caret in it during that window had it
|
|
147
|
+
* moved to the end when the value landed, so what was typed next went AFTER
|
|
148
|
+
* the prefilled text: the SLO burn rate form's Incident Title became "SLO
|
|
149
|
+
* burn rate: {{sloName}} — {{ruleName}}Coordinate response for {{sloName}}"
|
|
150
|
+
* when a fill selected the blank field just before its default template
|
|
151
|
+
* arrived. TextArea and MarkdownEditor already start from their props.
|
|
152
|
+
*
|
|
153
|
+
* The effects further down still follow a value or initialValue that
|
|
154
|
+
* changes after mounting.
|
|
155
|
+
*/
|
|
156
|
+
const [value, setValue] = useState<string | Date>((): string | Date => {
|
|
157
|
+
return props.value || props.initialValue || "";
|
|
158
|
+
});
|
|
96
159
|
|
|
97
160
|
/*
|
|
98
161
|
* Only dates need a display form that differs from the stored value, and
|
|
99
162
|
* working it out means parsing, so it stays in state behind an effect.
|
|
100
|
-
* Text keeps no second copy - see the comment on displayValue below.
|
|
163
|
+
* Text keeps no second copy - see the comment on displayValue below. Like
|
|
164
|
+
* the value, it starts from what the input mounts with.
|
|
101
165
|
*/
|
|
102
|
-
const [dateDisplayValue, setDateDisplayValue] = useState<string>(
|
|
166
|
+
const [dateDisplayValue, setDateDisplayValue] = useState<string>(
|
|
167
|
+
(): string => {
|
|
168
|
+
return isDateInput ? getDateDisplayValue(value, props.type) ?? "" : "";
|
|
169
|
+
},
|
|
170
|
+
);
|
|
103
171
|
const ref: React.MutableRefObject<HTMLInputElement | null> =
|
|
104
172
|
useRef<HTMLInputElement | null>(null);
|
|
105
173
|
|
|
106
|
-
const isDateInput: boolean =
|
|
107
|
-
props.type === InputType.DATE || props.type === InputType.DATETIME_LOCAL;
|
|
108
|
-
|
|
109
174
|
useEffect(() => {
|
|
110
|
-
if (
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
122
|
-
} catch (e: any) {
|
|
123
|
-
Logger.error(e);
|
|
124
|
-
}
|
|
125
|
-
setDateDisplayValue(dateString);
|
|
126
|
-
} else if (
|
|
127
|
-
value &&
|
|
128
|
-
(value as any).includes &&
|
|
129
|
-
!(value as any).includes(" - ")
|
|
130
|
-
) {
|
|
131
|
-
// " - " is for InBetween dates.
|
|
132
|
-
const date: Date = OneUptimeDate.fromString(value);
|
|
133
|
-
let dateString: string = "";
|
|
134
|
-
try {
|
|
135
|
-
if (props.type === InputType.DATETIME_LOCAL) {
|
|
136
|
-
dateString = OneUptimeDate.toDateTimeLocalString(date);
|
|
137
|
-
} else {
|
|
138
|
-
dateString = OneUptimeDate.asDateForDatabaseQuery(date);
|
|
139
|
-
}
|
|
140
|
-
} catch (err: any) {
|
|
141
|
-
Logger.error(err);
|
|
142
|
-
}
|
|
143
|
-
setDateDisplayValue(dateString);
|
|
144
|
-
} else if (
|
|
145
|
-
!value ||
|
|
146
|
-
((value as any).includes && !(value as any).includes(" - "))
|
|
147
|
-
) {
|
|
148
|
-
setDateDisplayValue("");
|
|
149
|
-
}
|
|
175
|
+
if (!isDateInput) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
const nextDateDisplayValue: string | undefined = getDateDisplayValue(
|
|
180
|
+
value,
|
|
181
|
+
props.type,
|
|
182
|
+
);
|
|
183
|
+
|
|
184
|
+
if (nextDateDisplayValue !== undefined) {
|
|
185
|
+
setDateDisplayValue(nextDateDisplayValue);
|
|
150
186
|
}
|
|
151
187
|
}, [value]);
|
|
152
188
|
|
|
@@ -172,7 +208,14 @@ const Input: FunctionComponent<ComponentProps> = (
|
|
|
172
208
|
? dateDisplayValue
|
|
173
209
|
: (value as string) || "";
|
|
174
210
|
|
|
175
|
-
|
|
211
|
+
/*
|
|
212
|
+
* A layout effect, so the write lands in the same commit that rendered the
|
|
213
|
+
* value. A passive effect runs after that commit, and for one that did not
|
|
214
|
+
* come from a click or a keystroke - data arriving, a timer - that is a later
|
|
215
|
+
* task. In between, the field would be on screen blank even though this
|
|
216
|
+
* component already knows what it holds.
|
|
217
|
+
*/
|
|
218
|
+
useLayoutEffect(() => {
|
|
176
219
|
const input: HTMLInputElement | null = ref.current;
|
|
177
220
|
|
|
178
221
|
/*
|
|
@@ -185,16 +228,6 @@ const Input: FunctionComponent<ComponentProps> = (
|
|
|
185
228
|
}
|
|
186
229
|
}, [ref, displayValue]);
|
|
187
230
|
|
|
188
|
-
useEffect(() => {
|
|
189
|
-
if (props.initialValue) {
|
|
190
|
-
setValue(props.initialValue);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
if (props.value) {
|
|
194
|
-
setValue(props.value);
|
|
195
|
-
}
|
|
196
|
-
}, []);
|
|
197
|
-
|
|
198
231
|
useEffect(() => {
|
|
199
232
|
if (props.initialValue) {
|
|
200
233
|
setValue(props.initialValue);
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import ActionButtonSchema from "../ActionButton/ActionButtonSchema";
|
|
2
|
-
import
|
|
2
|
+
import RowActions from "../ActionButton/RowActions";
|
|
3
3
|
import Detail from "../Detail/Detail";
|
|
4
4
|
import Field from "../Detail/Field";
|
|
5
5
|
import Icon, { ThickProp } from "../Icon/Icon";
|
|
6
|
-
import ConfirmModal from "../Modal/ConfirmModal";
|
|
7
6
|
import GenericObject from "../../../Types/GenericObject";
|
|
8
7
|
import IconProp from "../../../Types/Icon/IconProp";
|
|
9
8
|
import React, { ReactElement, useState, useEffect } from "react";
|
|
@@ -31,14 +30,6 @@ type ListRowFunction = <T extends GenericObject>(
|
|
|
31
30
|
const ListRow: ListRowFunction = <T extends GenericObject>(
|
|
32
31
|
props: ComponentProps<T>,
|
|
33
32
|
): ReactElement => {
|
|
34
|
-
const [isButtonLoading, setIsButtonLoading] = useState<Array<boolean>>(
|
|
35
|
-
props.actionButtons?.map(() => {
|
|
36
|
-
return false;
|
|
37
|
-
}) || [],
|
|
38
|
-
);
|
|
39
|
-
|
|
40
|
-
const [error, setError] = useState<string>("");
|
|
41
|
-
|
|
42
33
|
// Track mobile view for responsive behavior
|
|
43
34
|
const [isMobile, setIsMobile] = useState<boolean>(false);
|
|
44
35
|
|
|
@@ -96,71 +87,14 @@ const ListRow: ListRowFunction = <T extends GenericObject>(
|
|
|
96
87
|
)}
|
|
97
88
|
</div>
|
|
98
89
|
|
|
99
|
-
<div
|
|
100
|
-
|
|
101
|
-
props.
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
(button: ActionButtonSchema<T>, i: number) => {
|
|
106
|
-
if (button.isVisible && !button.isVisible(props.item)) {
|
|
107
|
-
return <></>;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
// Hide button on mobile if hideOnMobile is true
|
|
111
|
-
if (button.hideOnMobile && isMobile) {
|
|
112
|
-
return <></>;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
return (
|
|
116
|
-
<div key={i}>
|
|
117
|
-
<Button
|
|
118
|
-
buttonSize={ButtonSize.Small}
|
|
119
|
-
title={button.title}
|
|
120
|
-
icon={button.icon}
|
|
121
|
-
buttonStyle={button.buttonStyleType}
|
|
122
|
-
isLoading={isButtonLoading[i]}
|
|
123
|
-
disabled={button.disabled}
|
|
124
|
-
tooltip={button.tooltip}
|
|
125
|
-
onClick={() => {
|
|
126
|
-
if (button.disabled) {
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
if (button.onClick) {
|
|
131
|
-
isButtonLoading[i] = true;
|
|
132
|
-
setIsButtonLoading(isButtonLoading);
|
|
133
|
-
button.onClick(
|
|
134
|
-
props.item,
|
|
135
|
-
() => {
|
|
136
|
-
// on action complete
|
|
137
|
-
isButtonLoading[i] = false;
|
|
138
|
-
setIsButtonLoading(isButtonLoading);
|
|
139
|
-
},
|
|
140
|
-
(err: Error) => {
|
|
141
|
-
isButtonLoading[i] = false;
|
|
142
|
-
setIsButtonLoading(isButtonLoading);
|
|
143
|
-
setError((err as Error).message);
|
|
144
|
-
},
|
|
145
|
-
);
|
|
146
|
-
}
|
|
147
|
-
}}
|
|
148
|
-
/>
|
|
149
|
-
</div>
|
|
150
|
-
);
|
|
151
|
-
},
|
|
152
|
-
)}
|
|
153
|
-
</div>
|
|
154
|
-
{error && (
|
|
155
|
-
<ConfirmModal
|
|
156
|
-
title={`Error`}
|
|
157
|
-
description={error}
|
|
158
|
-
submitButtonText={"Close"}
|
|
159
|
-
onSubmit={() => {
|
|
160
|
-
return setError("");
|
|
161
|
-
}}
|
|
90
|
+
<div className={props.enableDragAndDrop ? `mt-5 ml-8` : `mt-5`}>
|
|
91
|
+
<RowActions<T>
|
|
92
|
+
item={props.item}
|
|
93
|
+
actionButtons={props.actionButtons}
|
|
94
|
+
isMobile={isMobile}
|
|
95
|
+
className="justify-start"
|
|
162
96
|
/>
|
|
163
|
-
|
|
97
|
+
</div>
|
|
164
98
|
</div>
|
|
165
99
|
);
|
|
166
100
|
};
|
|
@@ -68,9 +68,10 @@ import ProjectUtil from "../../Utils/Project";
|
|
|
68
68
|
import TelemetryServiceUtil from "../../Utils/TelemetryService";
|
|
69
69
|
import ObjectID from "../../../Types/ObjectID";
|
|
70
70
|
import OneUptimeDate from "../../../Types/Date";
|
|
71
|
-
import
|
|
72
|
-
|
|
73
|
-
} from "../
|
|
71
|
+
import useViewerTimeRangeZoom, {
|
|
72
|
+
ViewerTimeRangeZoom,
|
|
73
|
+
} from "../TelemetryViewer/useViewerTimeRangeZoom";
|
|
74
|
+
import { TimeRangeZoomProvider } from "../Charts/TimeRangeZoom/TimeRangeZoomContext";
|
|
74
75
|
import useTelemetryEntityNames from "../../Utils/Telemetry/UseTelemetryEntityNames";
|
|
75
76
|
import { TelemetryEntityNameMap } from "../../Utils/Telemetry/TelemetryEntityNames";
|
|
76
77
|
import {
|
|
@@ -342,10 +343,15 @@ const LogsViewer: FunctionComponent<ComponentProps> = (
|
|
|
342
343
|
/*
|
|
343
344
|
* Drag-zooming the histogram is a one-way trip on its own: it swaps the
|
|
344
345
|
* window for a custom one and nothing remembers what the reader was
|
|
345
|
-
* looking at. This keeps that window so a double-click on
|
|
346
|
-
* hand it back.
|
|
346
|
+
* looking at. This keeps that window so a double-click on a chart, or
|
|
347
|
+
* "Reset zoom" beside the picker, can hand it back. The analytics chart
|
|
348
|
+
* shares the same zoom (see the provider below), so dragging across
|
|
349
|
+
* either one retimes the whole viewer, and either one zooms back out. A
|
|
350
|
+
* viewer pinned to the window of a zoom offered around it (a telemetry
|
|
351
|
+
* snapshot's primary explorer) follows that zoom instead, so a drag here
|
|
352
|
+
* retimes everything that zoom does.
|
|
347
353
|
*/
|
|
348
|
-
const
|
|
354
|
+
const viewerZoom: ViewerTimeRangeZoom = useViewerTimeRangeZoom({
|
|
349
355
|
timeRange: props.timeRange,
|
|
350
356
|
onTimeRangeSelect: props.onHistogramTimeRangeSelect,
|
|
351
357
|
onTimeRangeChange: props.onTimeRangeChange,
|
|
@@ -1192,10 +1198,15 @@ const LogsViewer: FunctionComponent<ComponentProps> = (
|
|
|
1192
1198
|
exportLogs(displayedLogs, LogExportFormat.JSON, selectedColumns);
|
|
1193
1199
|
},
|
|
1194
1200
|
...(props.liveOptions ? { liveOptions: props.liveOptions } : {}),
|
|
1195
|
-
...(props.timeRange &&
|
|
1201
|
+
...(props.timeRange && viewerZoom.onTimeRangeChange
|
|
1196
1202
|
? {
|
|
1197
1203
|
timeRange: props.timeRange,
|
|
1198
|
-
onTimeRangeChange:
|
|
1204
|
+
onTimeRangeChange: viewerZoom.onTimeRangeChange,
|
|
1205
|
+
/*
|
|
1206
|
+
* A followed zoom's way back is shown by whoever offers it (the
|
|
1207
|
+
* snapshot's, beside its badge): one Reset zoom per zoom.
|
|
1208
|
+
*/
|
|
1209
|
+
showResetZoom: !viewerZoom.followsEnclosingZoom,
|
|
1199
1210
|
}
|
|
1200
1211
|
: {}),
|
|
1201
1212
|
showKeyboardShortcuts,
|
|
@@ -1219,7 +1230,7 @@ const LogsViewer: FunctionComponent<ComponentProps> = (
|
|
|
1219
1230
|
: {}),
|
|
1220
1231
|
};
|
|
1221
1232
|
|
|
1222
|
-
|
|
1233
|
+
const viewer: ReactElement = (
|
|
1223
1234
|
<div className="space-y-2">
|
|
1224
1235
|
{props.showFilters && (
|
|
1225
1236
|
<div>
|
|
@@ -1255,8 +1266,8 @@ const LogsViewer: FunctionComponent<ComponentProps> = (
|
|
|
1255
1266
|
buckets={props.histogramBuckets}
|
|
1256
1267
|
isLoading={props.histogramLoading || false}
|
|
1257
1268
|
bucketIntervalMs={props.histogramBucketIntervalMs}
|
|
1258
|
-
onTimeRangeSelect={
|
|
1259
|
-
onZoomOut={
|
|
1269
|
+
onTimeRangeSelect={viewerZoom.onTimeRangeSelect}
|
|
1270
|
+
onZoomOut={viewerZoom.onZoomOut}
|
|
1260
1271
|
/>
|
|
1261
1272
|
)}
|
|
1262
1273
|
|
|
@@ -1381,6 +1392,24 @@ const LogsViewer: FunctionComponent<ComponentProps> = (
|
|
|
1381
1392
|
)}
|
|
1382
1393
|
</div>
|
|
1383
1394
|
);
|
|
1395
|
+
|
|
1396
|
+
/*
|
|
1397
|
+
* The histogram, the analytics chart and the toolbar's "Reset zoom" all
|
|
1398
|
+
* work on this viewer's window, whatever page it sits in, so the viewer's
|
|
1399
|
+
* zoom shadows any zoom offered around it, unless that zoom is over this
|
|
1400
|
+
* very window: the viewer then hands that zoom on (see
|
|
1401
|
+
* useViewerTimeRangeZoom). A host that cannot zoom (no select handler)
|
|
1402
|
+
* leaves whatever surrounds the viewer in place.
|
|
1403
|
+
*/
|
|
1404
|
+
if (!viewerZoom.zoom) {
|
|
1405
|
+
return viewer;
|
|
1406
|
+
}
|
|
1407
|
+
|
|
1408
|
+
return (
|
|
1409
|
+
<TimeRangeZoomProvider zoom={viewerZoom.zoom}>
|
|
1410
|
+
{viewer}
|
|
1411
|
+
</TimeRangeZoomProvider>
|
|
1412
|
+
);
|
|
1384
1413
|
};
|
|
1385
1414
|
|
|
1386
1415
|
export default LogsViewer;
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
import React, { FunctionComponent, ReactElement } from "react";
|
|
2
2
|
import RangeStartAndEndDateTime from "../../../../Types/Time/RangeStartAndEndDateTime";
|
|
3
3
|
import TimeRangePickerDropdown from "../../Date/TimeRangePickerDropdown";
|
|
4
|
+
import ResetTimeRangeZoomButton from "../../Charts/TimeRangeZoom/ResetTimeRangeZoomButton";
|
|
4
5
|
|
|
5
6
|
export interface LogTimeRangePickerProps {
|
|
6
7
|
value: RangeStartAndEndDateTime;
|
|
7
8
|
onChange: (value: RangeStartAndEndDateTime) => void;
|
|
9
|
+
/*
|
|
10
|
+
* False while the viewer follows a zoom offered around it (see
|
|
11
|
+
* useViewerTimeRangeZoom): whoever offers that zoom shows its "Reset
|
|
12
|
+
* zoom", and a second one here would only repeat it.
|
|
13
|
+
*/
|
|
14
|
+
showResetZoom?: boolean | undefined;
|
|
8
15
|
}
|
|
9
16
|
|
|
10
17
|
// Matches the Tailwind `w-72` on the rendered dropdown (18rem).
|
|
@@ -16,13 +23,22 @@ export const LOG_TIME_RANGE_PICKER_TEST_ID_PREFIX: string =
|
|
|
16
23
|
const LogTimeRangePicker: FunctionComponent<LogTimeRangePickerProps> = (
|
|
17
24
|
props: LogTimeRangePickerProps,
|
|
18
25
|
): ReactElement => {
|
|
26
|
+
/*
|
|
27
|
+
* Once a drag on the log volume or analytics chart has zoomed the viewer,
|
|
28
|
+
* the picker only reads "Custom". The reset button beside it is the way
|
|
29
|
+
* back for anyone who does not know to double-click a chart, and the only
|
|
30
|
+
* one for keyboard users. It renders nothing unless the viewer is zoomed.
|
|
31
|
+
*/
|
|
19
32
|
return (
|
|
20
|
-
<
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
33
|
+
<div className="inline-flex items-center gap-1.5">
|
|
34
|
+
<TimeRangePickerDropdown
|
|
35
|
+
value={props.value}
|
|
36
|
+
onChange={props.onChange}
|
|
37
|
+
dataTestIdPrefix={LOG_TIME_RANGE_PICKER_TEST_ID_PREFIX}
|
|
38
|
+
dropdownWidthInPx={LOG_TIME_RANGE_DROPDOWN_WIDTH_IN_PX}
|
|
39
|
+
/>
|
|
40
|
+
{props.showResetZoom === false ? null : <ResetTimeRangeZoomButton />}
|
|
41
|
+
</div>
|
|
26
42
|
);
|
|
27
43
|
};
|
|
28
44
|
|