@oneuptime/common 14.0.8 → 14.0.10
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/AutoRemediationSuggestion.ts +60 -0
- package/Models/DatabaseModels/CephCluster.ts +213 -0
- package/Models/DatabaseModels/DatabaseServer.ts +213 -0
- package/Models/DatabaseModels/DockerHost.ts +213 -0
- package/Models/DatabaseModels/DockerSwarmCluster.ts +213 -0
- package/Models/DatabaseModels/GlobalConfig.ts +1 -1
- package/Models/DatabaseModels/Host.ts +213 -0
- package/Models/DatabaseModels/Index.ts +4 -0
- package/Models/DatabaseModels/KubernetesAiAgent.ts +364 -0
- package/Models/DatabaseModels/KubernetesCluster.ts +3 -3
- package/Models/DatabaseModels/PodmanHost.ts +213 -0
- package/Models/DatabaseModels/Project.ts +55 -5
- package/Models/DatabaseModels/ProxmoxCluster.ts +213 -0
- package/Models/DatabaseModels/ProxmoxResource.ts +49 -1
- package/Models/DatabaseModels/ResourceAiAgent.ts +419 -0
- package/Models/DatabaseModels/RunnerJob.ts +219 -0
- package/Models/DatabaseModels/TeamComplianceSetting.ts +143 -2
- package/Models/DatabaseModels/VMwareVCenter.ts +213 -0
- 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 +598 -25
- package/Server/API/KubernetesClusterAiAccessAPI.ts +623 -21
- package/Server/API/MicrosoftTeamsAPI.ts +93 -14
- package/Server/API/ProxmoxResourceAPI.ts +244 -14
- package/Server/API/ResourceAiAccessAPI.ts +1669 -0
- 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/1796300000000-AddResourceAiAgents.ts +423 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
- package/Server/Infrastructure/Semaphore.ts +22 -0
- package/Server/Middleware/TelemetryIngest.ts +51 -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/AnalyticsDatabaseService.ts +45 -1
- package/Server/Services/AutoRemediationRuleEngineService.ts +940 -112
- package/Server/Services/AutoRemediationRuleService.ts +1 -1
- package/Server/Services/CephClusterService.ts +109 -1
- package/Server/Services/DatabaseServerService.ts +116 -1
- package/Server/Services/DockerHostService.ts +109 -1
- package/Server/Services/DockerSwarmClusterService.ts +113 -1
- package/Server/Services/HostService.ts +126 -4
- 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/MetricRecordingRuleService.ts +47 -0
- package/Server/Services/PodmanHostService.ts +109 -1
- package/Server/Services/ProjectService.ts +32 -0
- package/Server/Services/ProxmoxClusterService.ts +110 -1
- package/Server/Services/ProxmoxResourceService.ts +322 -5
- package/Server/Services/ResourceAiAccessService.ts +1439 -0
- package/Server/Services/ResourceAiAgentJobService.ts +202 -0
- package/Server/Services/ResourceAiAgentService.ts +2432 -0
- package/Server/Services/RunnerJobService.ts +852 -108
- 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/Services/TelemetryUsageBillingService.ts +28 -0
- package/Server/Services/TraceRecordingRuleService.ts +33 -0
- package/Server/Services/VMwareVCenterService.ts +110 -1
- 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 +1475 -51
- package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +1000 -43
- package/Server/Utils/AI/Remediation/RemediationPlanRunner.ts +25 -1
- package/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.ts +577 -0
- package/Server/Utils/AI/ResourceAccess/ResourceAccessContext.ts +271 -0
- package/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.ts +45 -0
- package/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.ts +964 -0
- package/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.ts +333 -0
- package/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.ts +873 -0
- package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +120 -7
- package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +72 -5
- package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +72 -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 +402 -14
- package/Server/Utils/AutoRemediation/RemediationVerifier.ts +35 -2
- package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +9 -1
- package/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.ts +920 -0
- package/Server/Utils/SessionReplay/SessionReplayUsage.ts +84 -6
- 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/Actions/Alert.ts +35 -15
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.ts +33 -15
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.ts +21 -1
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.ts +298 -224
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.ts +35 -15
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.ts +389 -175
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +1073 -213
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.ts +163 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.ts +396 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.ts +418 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.ts +152 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.ts +251 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.ts +214 -0
- 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 +184 -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/DatabaseDocumentationMarkdown.test.ts +18 -6
- 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/InvestigationInfrastructureTools.test.tsx +506 -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/RemediationSuggestionCardDescription.test.tsx +209 -0
- package/Tests/App/Dashboard/RemediationSuggestionCardResource.test.tsx +317 -0
- package/Tests/App/Dashboard/ResourceAiAccessSettingsUtil.test.ts +921 -0
- package/Tests/App/Dashboard/ResourceAiAgentInstall.test.ts +860 -0
- package/Tests/App/Dashboard/ResourceAiAgentPage.test.tsx +1721 -0
- package/Tests/App/Dashboard/ResourceAiAgentStatus.test.ts +1002 -0
- package/Tests/App/Dashboard/ResourceAiInsightsPage.test.tsx +931 -0
- package/Tests/App/Dashboard/ResourceAiNavigation.test.tsx +575 -0
- package/Tests/App/Dashboard/RowActionPlacementOverrides.test.tsx +865 -0
- package/Tests/App/Dashboard/RumOverviewTimeRangeZoom.test.tsx +877 -0
- package/Tests/App/Dashboard/RunbookStepTypeMaps.test.ts +38 -7
- 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/DatabaseServerModels.test.ts +33 -1
- package/Tests/Models/DatabaseModels/KubernetesAiAgentModel.test.ts +295 -0
- package/Tests/Models/DatabaseModels/ResourceAiAccessColumns.test.ts +738 -0
- package/Tests/Models/DatabaseModels/ResourceAiAgentModel.test.ts +842 -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/AutoRemediationApproveResourceRound.test.ts +835 -0
- 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/API/ResourceAiAccessAPI.test.ts +2730 -0
- package/Tests/Server/Infrastructure/GlobalCache.test.ts +195 -0
- package/Tests/Server/Infrastructure/Postgres/AddDatabaseServerTablesMigration.test.ts +60 -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/AddResourceAiAgentsMigration.test.ts +659 -0
- package/Tests/Server/Infrastructure/Postgres/AddTeamComplianceRuleScopeMigration.test.ts +622 -0
- package/Tests/Server/Infrastructure/SemaphoreMutex.test.ts +31 -0
- package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +119 -4
- package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerPinnedKey.test.ts +196 -2
- package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerRateLimit.test.ts +123 -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/AutoRemediationResourceRuleEngine.test.ts +1279 -0
- package/Tests/Server/Services/AutoRemediationRuleCommandRunners.test.ts +2 -1
- package/Tests/Server/Services/DatabaseServerService.test.ts +55 -0
- package/Tests/Server/Services/GroupTelemetryUsageExcludeNames.test.ts +299 -0
- package/Tests/Server/Services/HostServiceFindOrCreateMemo.test.ts +44 -0
- 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/MonitorProbeServiceIntervalScheduling.test.ts +45 -6
- 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/RecordingRuleReservedMetricName.test.ts +171 -0
- package/Tests/Server/Services/ResourceAiAccessChangeAuthorization.test.ts +256 -0
- package/Tests/Server/Services/ResourceAiAccessService.test.ts +1373 -0
- package/Tests/Server/Services/ResourceAiAgentJobService.test.ts +375 -0
- package/Tests/Server/Services/ResourceAiAgentServiceHelpers.test.ts +1114 -0
- package/Tests/Server/Services/ResourceAiAgentServiceLifecycle.test.ts +1050 -0
- package/Tests/Server/Services/ResourceAiAgentServiceRegister.test.ts +2251 -0
- package/Tests/Server/Services/ResourceAiSettingsCreate.test.ts +373 -0
- package/Tests/Server/Services/ResourceAiSettingsPermission.test.ts +1042 -0
- package/Tests/Server/Services/ResourceServiceDeleteCleansUpAi.test.ts +319 -0
- package/Tests/Server/Services/RunnerJobEnqueueKubectl.test.ts +153 -15
- package/Tests/Server/Services/RunnerJobEnqueueKubectlAiAgent.test.ts +620 -0
- package/Tests/Server/Services/RunnerJobEnqueueResourceCommand.test.ts +986 -0
- package/Tests/Server/Services/RunnerJobKubectlWriteScope.test.ts +170 -3
- package/Tests/Server/Services/RunnerJobResourceCommandLane.test.ts +211 -0
- package/Tests/Server/Services/RunnerJobResourceCommandTimeoutAndRedaction.test.ts +352 -0
- 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/Services/TelemetryUsageBillingSloExclusion.test.ts +218 -0
- package/Tests/Server/TestingUtils/Services/FakeRunnerJobCount.ts +145 -0
- 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/InvestigationInfrastructureAccessWiring.test.ts +453 -0
- package/Tests/Server/Utils/AI/InvestigationInfrastructureReport.test.ts +721 -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/RemediationCommandTools.test.ts +94 -1
- 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/RemediationCommandToolsResource.test.ts +1530 -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/RemediationExecutionRunnerResourceMode.test.ts +1249 -0
- package/Tests/Server/Utils/AI/RemediationKubectlCopyParity.test.ts +2 -0
- package/Tests/Server/Utils/AI/RemediationPlanRunner.test.ts +117 -0
- package/Tests/Server/Utils/AI/RemediationResourceCopyParity.test.ts +463 -0
- package/Tests/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.test.ts +722 -0
- package/Tests/Server/Utils/AI/ResourceAccess/ResourceAccessContext.test.ts +266 -0
- package/Tests/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.test.ts +1220 -0
- package/Tests/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.test.ts +569 -0
- package/Tests/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.test.ts +830 -0
- package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutor.test.ts +2 -0
- package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutorResource.test.ts +717 -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/AutoRemediation/RemediationVerifierResourceFollowUp.test.ts +338 -0
- package/Tests/Server/Utils/Monitor/Criteria/SessionReplayBudgetTemplateCriteria.test.ts +422 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.test.ts +1647 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayUsage.test.ts +143 -1
- 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 +75 -3
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsAccountNotLinked.test.ts +1093 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.test.ts +1049 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.test.ts +1676 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCards.test.ts +2884 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.test.ts +2490 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateSubmit.test.ts +2293 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateSubmitServerTimezone.test.ts +386 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.test.ts +1477 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.test.ts +1967 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsStripHtmlTags.test.ts +92 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsSubmittedFormRemoval.test.ts +1819 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.test.ts +1033 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezoneServerZone.test.ts +610 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsBotMessageHandling.test.ts +2610 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsChats.test.ts +25 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsCreateCommandsEndToEnd.test.ts +4672 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsGroupChatNames.test.ts +3119 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsGroupChatNamesPostgres.test.ts +1721 -0
- package/Tests/Server/Utils/Workspace/WorkspaceCreateProjectReferences.test.ts +190 -65
- package/Tests/Types/AutoRemediation/AiRemediationCommandPlan.test.ts +10 -4
- package/Tests/Types/AutoRemediation/AiRemediationCommandPlanResourceCommand.test.ts +305 -0
- package/Tests/Types/Kubernetes/KubernetesAgentChartAiAccess.test.ts +581 -113
- package/Tests/Types/Kubernetes/KubernetesAiAgentAccessContract.test.ts +510 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +277 -13
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +113 -0
- package/Tests/Types/Monitor/RumAlertTemplates.test.ts +773 -2
- package/Tests/Types/ResourceAiAgent/AiResourceType.test.ts +419 -0
- package/Tests/Types/ResourceAiAgent/ResourceAiAccess.test.ts +517 -0
- package/Tests/Types/Runbook/RunbookStepType.test.ts +147 -8
- 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/RecordingHealthDashboard.test.tsx +769 -1
- 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/AiRemediation/Resource/CephCommandPolicy.test.ts +1653 -0
- package/Tests/Utils/AiRemediation/Resource/CephOutputRedaction.test.ts +204 -0
- package/Tests/Utils/AiRemediation/Resource/DatabaseCommandPolicy.test.ts +1077 -0
- package/Tests/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.test.ts +558 -0
- package/Tests/Utils/AiRemediation/Resource/DatabaseQueryRedactor.test.ts +834 -0
- package/Tests/Utils/AiRemediation/Resource/DockerCliGrammar.test.ts +747 -0
- package/Tests/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.test.ts +1259 -0
- package/Tests/Utils/AiRemediation/Resource/DockerOutputRedaction.test.ts +386 -0
- package/Tests/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.test.ts +782 -0
- package/Tests/Utils/AiRemediation/Resource/GovcCommandPolicy.test.ts +2259 -0
- package/Tests/Utils/AiRemediation/Resource/HostCommandPolicy.test.ts +2019 -0
- package/Tests/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.test.ts +2497 -0
- package/Tests/Utils/AiRemediation/Resource/ResourceCommandPolicy.test.ts +1305 -0
- package/Tests/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.test.ts +585 -0
- package/Tests/Utils/AiRemediation/Resource/ResourceOutputRedactor.test.ts +334 -0
- package/Tests/Utils/AiRemediation/Resource/ResourceOutputRedactorCopyParity.test.ts +98 -0
- package/Tests/Utils/AiRemediation/Resource/ResourcePolicyImportClosure.test.ts +391 -0
- package/Tests/Utils/AiRemediation/ResourceAiAgentPolicyCopyParity.test.ts +497 -0
- package/Tests/Utils/Dashboard/DashboardTimeRangeZoom.test.ts +104 -1
- package/Tests/Utils/SessionReplay/SessionReplayBudgetMetricType.test.ts +383 -0
- package/Types/AI/AIRunType.ts +9 -4
- package/Types/AI/InvestigationNotStartedReason.ts +6 -0
- package/Types/AI/ResourceAiAccessApi.ts +140 -0
- package/Types/AI/ResourceAiAccessPermissions.ts +126 -0
- package/Types/AutoRemediation/AiRemediationCommandPlan.ts +197 -18
- 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/Monitor/Recommendation/MonitorRecommendationCatalog.ts +55 -22
- package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +35 -3
- package/Types/Monitor/RumAlertTemplates.ts +351 -4
- package/Types/ResourceAiAgent/AiResourceType.ts +310 -0
- package/Types/ResourceAiAgent/ResourceAiAccess.ts +574 -0
- package/Types/Rum/SessionReplayBudgetMetricType.ts +47 -0
- package/Types/Runbook/RunbookStepType.ts +29 -0
- 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 +40 -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/AI/InvestigationReport.ts +121 -15
- package/Utils/AiRemediation/CommandPolicy.ts +1 -1
- package/Utils/AiRemediation/KubectlPolicy.ts +1 -1
- package/Utils/AiRemediation/Resource/CephCommandPolicy.ts +1936 -0
- package/Utils/AiRemediation/Resource/DatabaseCommandPolicy.ts +166 -0
- package/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.ts +1532 -0
- package/Utils/AiRemediation/Resource/DatabaseQueryRedactor.ts +1394 -0
- package/Utils/AiRemediation/Resource/DockerCliGrammar.ts +1839 -0
- package/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.ts +490 -0
- package/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.ts +687 -0
- package/Utils/AiRemediation/Resource/GovcCommandPolicy.ts +2096 -0
- package/Utils/AiRemediation/Resource/HostCommandPolicy.ts +2982 -0
- package/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.ts +1679 -0
- package/Utils/AiRemediation/Resource/ResourceCommandPolicy.ts +851 -0
- package/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.ts +593 -0
- package/Utils/AiRemediation/Resource/ResourceOutputRedactor.ts +2812 -0
- package/Utils/Dashboard/DashboardTimeRangeZoom.ts +46 -2
- package/Utils/SessionReplay/SessionReplayBudgetMetricType.ts +184 -0
- package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js +62 -0
- package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CephCluster.js +219 -0
- package/build/dist/Models/DatabaseModels/CephCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DatabaseServer.js +219 -0
- package/build/dist/Models/DatabaseModels/DatabaseServer.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerHost.js +219 -0
- package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js +219 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalConfig.js +1 -1
- package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Host.js +219 -0
- package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +4 -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/PodmanHost.js +219 -0
- package/build/dist/Models/DatabaseModels/PodmanHost.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/ProxmoxCluster.js +219 -0
- package/build/dist/Models/DatabaseModels/ProxmoxCluster.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/ResourceAiAgent.js +439 -0
- package/build/dist/Models/DatabaseModels/ResourceAiAgent.js.map +1 -0
- package/build/dist/Models/DatabaseModels/RunnerJob.js +219 -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/VMwareVCenter.js +219 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenter.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 +374 -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/API/ResourceAiAccessAPI.js +1119 -0
- package/build/dist/Server/API/ResourceAiAccessAPI.js.map +1 -0
- 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/1796300000000-AddResourceAiAgents.js +168 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/Semaphore.js +6 -0
- package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
- package/build/dist/Server/Middleware/TelemetryIngest.js +41 -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/AnalyticsDatabaseService.js +26 -1
- package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +601 -3
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.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/CephClusterService.js +104 -0
- package/build/dist/Server/Services/CephClusterService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseServerService.js +99 -0
- package/build/dist/Server/Services/DatabaseServerService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostService.js +104 -0
- package/build/dist/Server/Services/DockerHostService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterService.js +104 -0
- package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -1
- package/build/dist/Server/Services/HostService.js +114 -2
- package/build/dist/Server/Services/HostService.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/MetricRecordingRuleService.js +46 -0
- package/build/dist/Server/Services/MetricRecordingRuleService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostService.js +104 -0
- package/build/dist/Server/Services/PodmanHostService.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/ProxmoxClusterService.js +104 -0
- package/build/dist/Server/Services/ProxmoxClusterService.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/ResourceAiAccessService.js +1028 -0
- package/build/dist/Server/Services/ResourceAiAccessService.js.map +1 -0
- package/build/dist/Server/Services/ResourceAiAgentJobService.js +173 -0
- package/build/dist/Server/Services/ResourceAiAgentJobService.js.map +1 -0
- package/build/dist/Server/Services/ResourceAiAgentService.js +1687 -0
- package/build/dist/Server/Services/ResourceAiAgentService.js.map +1 -0
- package/build/dist/Server/Services/RunnerJobService.js +522 -97
- 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/Services/TelemetryUsageBillingService.js +26 -0
- package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
- package/build/dist/Server/Services/TraceRecordingRuleService.js +37 -0
- package/build/dist/Server/Services/TraceRecordingRuleService.js.map +1 -1
- package/build/dist/Server/Services/VMwareVCenterService.js +104 -0
- package/build/dist/Server/Services/VMwareVCenterService.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 +1056 -43
- package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +683 -42
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js +21 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js +330 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js.map +1 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessContext.js +160 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessContext.js.map +1 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.js +33 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.js.map +1 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.js +640 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.js.map +1 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.js +226 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.js.map +1 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js +600 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +89 -9
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +55 -4
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +55 -4
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.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 +294 -15
- package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js.map +1 -1
- package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js +29 -1
- package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js.map +1 -1
- package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js +9 -1
- package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js.map +1 -1
- package/build/dist/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.js +627 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.js.map +1 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js +60 -5
- package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.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/Actions/Alert.js +19 -15
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js +19 -15
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js +17 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js +183 -209
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js +19 -15
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js +233 -167
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +768 -152
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.js +129 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.js +266 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.js +258 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.js +104 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.js +183 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.js +123 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.js.map +1 -0
- package/build/dist/Types/AI/AIRunType.js +9 -4
- package/build/dist/Types/AI/AIRunType.js.map +1 -1
- package/build/dist/Types/AI/ResourceAiAccessApi.js +30 -0
- package/build/dist/Types/AI/ResourceAiAccessApi.js.map +1 -0
- package/build/dist/Types/AI/ResourceAiAccessPermissions.js +98 -0
- package/build/dist/Types/AI/ResourceAiAccessPermissions.js.map +1 -0
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js +126 -45
- 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/Monitor/Recommendation/MonitorRecommendationCatalog.js +47 -21
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +5 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
- package/build/dist/Types/Monitor/RumAlertTemplates.js +199 -3
- package/build/dist/Types/Monitor/RumAlertTemplates.js.map +1 -1
- package/build/dist/Types/ResourceAiAgent/AiResourceType.js +242 -0
- package/build/dist/Types/ResourceAiAgent/AiResourceType.js.map +1 -0
- package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js +275 -0
- package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js.map +1 -0
- package/build/dist/Types/Rum/SessionReplayBudgetMetricType.js +45 -0
- package/build/dist/Types/Rum/SessionReplayBudgetMetricType.js.map +1 -0
- package/build/dist/Types/Runbook/RunbookStepType.js +27 -0
- package/build/dist/Types/Runbook/RunbookStepType.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 +36 -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/AI/InvestigationReport.js +71 -11
- package/build/dist/Utils/AI/InvestigationReport.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/AiRemediation/Resource/CephCommandPolicy.js +1462 -0
- package/build/dist/Utils/AiRemediation/Resource/CephCommandPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/DatabaseCommandPolicy.js +122 -0
- package/build/dist/Utils/AiRemediation/Resource/DatabaseCommandPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.js +1139 -0
- package/build/dist/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/DatabaseQueryRedactor.js +1060 -0
- package/build/dist/Utils/AiRemediation/Resource/DatabaseQueryRedactor.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/DockerCliGrammar.js +1301 -0
- package/build/dist/Utils/AiRemediation/Resource/DockerCliGrammar.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.js +370 -0
- package/build/dist/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.js +498 -0
- package/build/dist/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/GovcCommandPolicy.js +1565 -0
- package/build/dist/Utils/AiRemediation/Resource/GovcCommandPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/HostCommandPolicy.js +2206 -0
- package/build/dist/Utils/AiRemediation/Resource/HostCommandPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.js +1129 -0
- package/build/dist/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicy.js +565 -0
- package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.js +408 -0
- package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/ResourceOutputRedactor.js +1910 -0
- package/build/dist/Utils/AiRemediation/Resource/ResourceOutputRedactor.js.map +1 -0
- package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js +27 -1
- package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js.map +1 -1
- package/build/dist/Utils/SessionReplay/SessionReplayBudgetMetricType.js +160 -0
- package/build/dist/Utils/SessionReplay/SessionReplayBudgetMetricType.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,782 @@
|
|
|
1
|
+
import DockerSwarmCommandPolicy, {
|
|
2
|
+
DOCKER_SWARM_PROFILE,
|
|
3
|
+
DOCKER_SWARM_READ_COMMANDS,
|
|
4
|
+
DOCKER_SWARM_WRITE_COMMANDS,
|
|
5
|
+
} from "../../../../Utils/AiRemediation/Resource/DockerSwarmCommandPolicy";
|
|
6
|
+
import DockerEngineCommandPolicy from "../../../../Utils/AiRemediation/Resource/DockerEngineCommandPolicy";
|
|
7
|
+
import {
|
|
8
|
+
DOCKER_ENGINE_READ_COMMANDS,
|
|
9
|
+
DOCKER_ENGINE_WRITE_PATHS,
|
|
10
|
+
} from "../../../../Utils/AiRemediation/Resource/DockerCliGrammar";
|
|
11
|
+
import ResourceCommandPolicy from "../../../../Utils/AiRemediation/Resource/ResourceCommandPolicy";
|
|
12
|
+
import {
|
|
13
|
+
ResourceAutoExecutionVerdict,
|
|
14
|
+
ResourceCommandPolicyResult,
|
|
15
|
+
} from "../../../../Utils/AiRemediation/Resource/ResourceCommandPolicyCore";
|
|
16
|
+
import AiResourceType, {
|
|
17
|
+
AI_RESOURCE_TYPE_INFO,
|
|
18
|
+
} from "../../../../Types/ResourceAiAgent/AiResourceType";
|
|
19
|
+
import { ResourceCommandTier } from "../../../../Types/ResourceAiAgent/ResourceAiAccess";
|
|
20
|
+
import { AiRemediationCommandPolicyVerdict } from "../../../../Types/AutoRemediation/AiRemediationCommandPolicyVerdict";
|
|
21
|
+
import { describe, expect, test } from "@jest/globals";
|
|
22
|
+
|
|
23
|
+
/*
|
|
24
|
+
* Contract under test — the docker-swarm command policy (Docker Swarm
|
|
25
|
+
* clusters, the agent running on a manager node).
|
|
26
|
+
*
|
|
27
|
+
* - Read: node / service / stack inspection, bounded service logs, and every
|
|
28
|
+
* read the docker-engine policy allows on the manager's own engine.
|
|
29
|
+
* - SafeWrite: service update --force, service rollback and a scale of ONE
|
|
30
|
+
* service to a non-zero count.
|
|
31
|
+
* - RiskyWrite: scale to 0 or of several services, service update of the
|
|
32
|
+
* image, replicas, limits, reservations and update settings, node update
|
|
33
|
+
* --availability active; drain and pause also require a human.
|
|
34
|
+
* - Denied: everything else — service create/rm, stacks, secrets, configs,
|
|
35
|
+
* node rm/promote/demote/labels/role, swarm, any other service update
|
|
36
|
+
* flag, and every engine-level change (not a Swarm fix).
|
|
37
|
+
* - Targets are service and node names as written.
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
const SWARM: AiResourceType = AiResourceType.DockerSwarmCluster;
|
|
41
|
+
|
|
42
|
+
function evaluate(command: string): ResourceCommandPolicyResult {
|
|
43
|
+
return ResourceCommandPolicy.evaluateCommand({
|
|
44
|
+
resourceType: SWARM,
|
|
45
|
+
command,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// [command, verb]
|
|
50
|
+
const READS: Array<[string, string]> = [
|
|
51
|
+
["docker node ls", "node ls"],
|
|
52
|
+
["docker node list -q", "node ls"],
|
|
53
|
+
["docker node ls --filter role=manager --format json", "node ls"],
|
|
54
|
+
["docker node ps", "node ps"],
|
|
55
|
+
["docker node ps self", "node ps"],
|
|
56
|
+
["docker node ps node-1 node-2 --no-trunc", "node ps"],
|
|
57
|
+
["docker node ps --no-resolve -q --filter desired-state=running", "node ps"],
|
|
58
|
+
["docker node inspect self", "node inspect"],
|
|
59
|
+
["docker node inspect --pretty node-1", "node inspect"],
|
|
60
|
+
["docker node inspect -f json node-1 node-2", "node inspect"],
|
|
61
|
+
["docker service ls", "service ls"],
|
|
62
|
+
["docker service list --filter mode=replicated -q", "service ls"],
|
|
63
|
+
["docker service ls --format json", "service ls"],
|
|
64
|
+
["docker service ps web", "service ps"],
|
|
65
|
+
["docker service ps --no-trunc web api", "service ps"],
|
|
66
|
+
["docker service ps -q --filter desired-state=running web", "service ps"],
|
|
67
|
+
["docker service ps app_web --format table", "service ps"],
|
|
68
|
+
["docker service inspect web", "service inspect"],
|
|
69
|
+
["docker service inspect --pretty web", "service inspect"],
|
|
70
|
+
["docker service inspect --format=json web api", "service inspect"],
|
|
71
|
+
["docker service logs --tail 100 web", "service logs"],
|
|
72
|
+
[
|
|
73
|
+
"docker service logs -n 50 -t --no-task-ids --raw --no-trunc --no-resolve --details web",
|
|
74
|
+
"service logs",
|
|
75
|
+
],
|
|
76
|
+
["docker service logs --since 10m web", "service logs"],
|
|
77
|
+
[
|
|
78
|
+
"docker service logs --tail 200 --since 2026-09-29T10:00:00Z web",
|
|
79
|
+
"service logs",
|
|
80
|
+
],
|
|
81
|
+
["docker service logs --tail 10 web.1.x2k9", "service logs"],
|
|
82
|
+
["docker service logs web --tail=2000", "service logs"],
|
|
83
|
+
["docker stack ls", "stack ls"],
|
|
84
|
+
["docker stack list --format json", "stack ls"],
|
|
85
|
+
["docker stack ps app", "stack ps"],
|
|
86
|
+
["docker stack ps --no-trunc --filter desired-state=running app", "stack ps"],
|
|
87
|
+
["docker stack services app", "stack services"],
|
|
88
|
+
["docker stack services -q app", "stack services"],
|
|
89
|
+
// The manager's own engine.
|
|
90
|
+
["docker ps", "ps"],
|
|
91
|
+
["docker ps -a --filter label=com.docker.swarm.service.name=web", "ps"],
|
|
92
|
+
["docker info", "info"],
|
|
93
|
+
["docker version", "version"],
|
|
94
|
+
["docker network ls", "network ls"],
|
|
95
|
+
["docker network inspect ingress", "network inspect"],
|
|
96
|
+
["docker container inspect web.1.x2k9", "container inspect"],
|
|
97
|
+
["docker logs --tail 10 web.1.x2k9", "logs"],
|
|
98
|
+
["docker stats --no-stream", "stats"],
|
|
99
|
+
["docker events --since 5m --until 0s", "events"],
|
|
100
|
+
];
|
|
101
|
+
|
|
102
|
+
// [command, verb, targets]
|
|
103
|
+
const SAFE_WRITES: Array<[string, string, Array<string>]> = [
|
|
104
|
+
["docker service update --force web", "service update", ["web"]],
|
|
105
|
+
["docker service update --force -d web", "service update", ["web"]],
|
|
106
|
+
["docker service update web --force --detach", "service update", ["web"]],
|
|
107
|
+
[
|
|
108
|
+
"docker service update --force --detach=false web",
|
|
109
|
+
"service update",
|
|
110
|
+
["web"],
|
|
111
|
+
],
|
|
112
|
+
["docker service update --force=true app_web", "service update", ["app_web"]],
|
|
113
|
+
["docker service rollback web", "service rollback", ["web"]],
|
|
114
|
+
["docker service rollback -d web", "service rollback", ["web"]],
|
|
115
|
+
["docker service scale web=3", "service scale", ["web"]],
|
|
116
|
+
["docker service scale web=1 -d", "service scale", ["web"]],
|
|
117
|
+
["docker service scale -d app_web=10", "service scale", ["app_web"]],
|
|
118
|
+
];
|
|
119
|
+
|
|
120
|
+
// [command, verb, targets]
|
|
121
|
+
const RISKY_WRITES: Array<[string, string, Array<string>]> = [
|
|
122
|
+
["docker service scale web=0", "service scale", ["web"]],
|
|
123
|
+
["docker service scale web=2 api=3", "service scale", ["web", "api"]],
|
|
124
|
+
["docker service scale web=1 web=2", "service scale", ["web"]],
|
|
125
|
+
["docker service scale web=2 api=0", "service scale", ["web", "api"]],
|
|
126
|
+
["docker service update --image nginx:1.27 web", "service update", ["web"]],
|
|
127
|
+
[
|
|
128
|
+
"docker service update --force --image nginx:1.27 web",
|
|
129
|
+
"service update",
|
|
130
|
+
["web"],
|
|
131
|
+
],
|
|
132
|
+
[
|
|
133
|
+
"docker service update -d --image registry.example.com:5000/app:2 web",
|
|
134
|
+
"service update",
|
|
135
|
+
["web"],
|
|
136
|
+
],
|
|
137
|
+
[
|
|
138
|
+
"docker service update --image nginx@sha256:0123abcd web",
|
|
139
|
+
"service update",
|
|
140
|
+
["web"],
|
|
141
|
+
],
|
|
142
|
+
["docker service update --replicas 3 web", "service update", ["web"]],
|
|
143
|
+
["docker service update --replicas=0 web", "service update", ["web"]],
|
|
144
|
+
[
|
|
145
|
+
"docker service update --limit-cpu 1.5 --limit-memory 1G web",
|
|
146
|
+
"service update",
|
|
147
|
+
["web"],
|
|
148
|
+
],
|
|
149
|
+
[
|
|
150
|
+
"docker service update --reserve-cpu 0.25 --reserve-memory 256M web",
|
|
151
|
+
"service update",
|
|
152
|
+
["web"],
|
|
153
|
+
],
|
|
154
|
+
[
|
|
155
|
+
"docker service update --update-parallelism 2 --update-delay 10s --update-failure-action rollback web",
|
|
156
|
+
"service update",
|
|
157
|
+
["web"],
|
|
158
|
+
],
|
|
159
|
+
["docker service update web --update-delay=1m30s", "service update", ["web"]],
|
|
160
|
+
[
|
|
161
|
+
"docker node update --availability active node-1",
|
|
162
|
+
"node update",
|
|
163
|
+
["node-1"],
|
|
164
|
+
],
|
|
165
|
+
];
|
|
166
|
+
|
|
167
|
+
// [command, targets] — RiskyWrite that no setting may run unattended.
|
|
168
|
+
const HUMAN_ONLY_WRITES: Array<[string, Array<string>]> = [
|
|
169
|
+
["docker node update --availability drain node-1", ["node-1"]],
|
|
170
|
+
["docker node update --availability=pause node-1", ["node-1"]],
|
|
171
|
+
["docker node update node-1 --availability drain", ["node-1"]],
|
|
172
|
+
["docker node update --availability drain 7mvkq3jx1y2z", ["7mvkq3jx1y2z"]],
|
|
173
|
+
];
|
|
174
|
+
|
|
175
|
+
// [command, a phrase the reason must contain]
|
|
176
|
+
const DENIED: Array<[string, string]> = [
|
|
177
|
+
["docker service create --name x nginx", "creates a new service"],
|
|
178
|
+
["docker service rm web", "deletes a service"],
|
|
179
|
+
["docker service remove web", "deletes a service"],
|
|
180
|
+
["docker stack deploy -c stack.yml app", "replaces a whole stack"],
|
|
181
|
+
["docker stack up -c stack.yml app", "replaces a whole stack"],
|
|
182
|
+
["docker stack rm app", "deletes a whole stack"],
|
|
183
|
+
["docker stack down app", "deletes a whole stack"],
|
|
184
|
+
["docker stack config -c stack.yml", "environment included"],
|
|
185
|
+
["docker secret ls", "swarm secrets"],
|
|
186
|
+
["docker secret inspect db_password", "swarm secrets"],
|
|
187
|
+
["docker config inspect nginx_conf", "swarm configs"],
|
|
188
|
+
["docker node rm node-1", "removes a node"],
|
|
189
|
+
["docker node remove node-1", "removes a node"],
|
|
190
|
+
["docker node promote node-1", "Raft quorum"],
|
|
191
|
+
["docker node demote node-1", "Raft quorum"],
|
|
192
|
+
["docker node update --label-add zone=a node-1", "node labels"],
|
|
193
|
+
["docker node update --label-rm zone node-1", "node labels"],
|
|
194
|
+
["docker node update --role manager node-1", "Raft quorum"],
|
|
195
|
+
["docker node update node-1", "needs --availability"],
|
|
196
|
+
[
|
|
197
|
+
"docker node update --availability maintenance node-1",
|
|
198
|
+
"active, pause or drain",
|
|
199
|
+
],
|
|
200
|
+
["docker node update --availability drain a b", "exactly one node"],
|
|
201
|
+
["docker node update --availability drain", "exactly one node"],
|
|
202
|
+
["docker swarm leave --force", "swarm membership"],
|
|
203
|
+
["docker swarm join-token worker", "swarm membership"],
|
|
204
|
+
["docker swarm unlock-key", "swarm membership"],
|
|
205
|
+
// service update: only the modelled flags.
|
|
206
|
+
["docker service update --env-add X=1 web", "what the service runs"],
|
|
207
|
+
["docker service update --env-rm X web", "what the service runs"],
|
|
208
|
+
[
|
|
209
|
+
"docker service update --mount-add type=bind,src=/,dst=/host web",
|
|
210
|
+
"what the service runs",
|
|
211
|
+
],
|
|
212
|
+
[
|
|
213
|
+
"docker service update --secret-add db_password web",
|
|
214
|
+
"what the service runs",
|
|
215
|
+
],
|
|
216
|
+
[
|
|
217
|
+
"docker service update --config-add nginx_conf web",
|
|
218
|
+
"what the service runs",
|
|
219
|
+
],
|
|
220
|
+
["docker service update --cap-add SYS_ADMIN web", "what the service runs"],
|
|
221
|
+
["docker service update --user root web", "what the service runs"],
|
|
222
|
+
["docker service update -u root web", "what the service runs"],
|
|
223
|
+
["docker service update --network-add host web", "what the service runs"],
|
|
224
|
+
["docker service update --publish-add 80:80 web", "what the service runs"],
|
|
225
|
+
["docker service update --entrypoint sh web", "what the service runs"],
|
|
226
|
+
["docker service update --args 'sh -c id' web", "what the service runs"],
|
|
227
|
+
["docker service update --hostname evil web", "what the service runs"],
|
|
228
|
+
[
|
|
229
|
+
"docker service update --credential-spec file://x web",
|
|
230
|
+
"what the service runs",
|
|
231
|
+
],
|
|
232
|
+
[
|
|
233
|
+
"docker service update --with-registry-auth --force web",
|
|
234
|
+
"what the service runs",
|
|
235
|
+
],
|
|
236
|
+
["docker service update --force --workdir / web", "what the service runs"],
|
|
237
|
+
["docker service update --rollback web", "not one OneUptime AI may use"],
|
|
238
|
+
["docker service update --quiet --force web", "not one OneUptime AI may use"],
|
|
239
|
+
["docker service update --limit-pids 10 web", "not one OneUptime AI may use"],
|
|
240
|
+
["docker service update --constraint-add node.role==manager web", "not one"],
|
|
241
|
+
["docker service update --image '' web", "--image takes"],
|
|
242
|
+
["docker service update --image -q web", "--image takes"],
|
|
243
|
+
["docker service update --replicas many web", "--replicas takes"],
|
|
244
|
+
["docker service update --replicas -1 web", "--replicas takes"],
|
|
245
|
+
["docker service update --limit-memory lots web", "--limit-memory takes"],
|
|
246
|
+
["docker service update --limit-cpu two web", "--limit-cpu takes"],
|
|
247
|
+
[
|
|
248
|
+
"docker service update --update-failure-action explode web",
|
|
249
|
+
"pause, continue or rollback",
|
|
250
|
+
],
|
|
251
|
+
["docker service update --update-delay soon web", "a duration"],
|
|
252
|
+
["docker service update web", "changes nothing as written"],
|
|
253
|
+
["docker service update --force=false web", "changes nothing as written"],
|
|
254
|
+
["docker service update -d web", "changes nothing as written"],
|
|
255
|
+
["docker service update --force web api", "exactly one service"],
|
|
256
|
+
["docker service update --force", "exactly one service"],
|
|
257
|
+
["docker service update --force --force web", "more than once"],
|
|
258
|
+
["docker service update --force 'web;x'", "not a service name"],
|
|
259
|
+
// scale
|
|
260
|
+
["docker service scale web", "is not SERVICE=REPLICAS"],
|
|
261
|
+
["docker service scale", "needs SERVICE=REPLICAS"],
|
|
262
|
+
["docker service scale web=-1", "is not SERVICE=REPLICAS"],
|
|
263
|
+
["docker service scale web=three", "is not SERVICE=REPLICAS"],
|
|
264
|
+
["docker service scale =3", "is not SERVICE=REPLICAS"],
|
|
265
|
+
["docker service scale 'web =3'", "is not SERVICE=REPLICAS"],
|
|
266
|
+
["docker service scale web=1000000", "is not SERVICE=REPLICAS"],
|
|
267
|
+
["docker service scale web=3 --replicas 2", "not one OneUptime AI"],
|
|
268
|
+
// rollback
|
|
269
|
+
["docker service rollback", "exactly one service"],
|
|
270
|
+
["docker service rollback web api", "exactly one service"],
|
|
271
|
+
["docker service rollback -q web", "not one OneUptime AI"],
|
|
272
|
+
// logs
|
|
273
|
+
["docker service logs web", "needs --tail N"],
|
|
274
|
+
["docker service logs -f --tail 10 web", "streams the log"],
|
|
275
|
+
["docker service logs --follow web", "streams the log"],
|
|
276
|
+
["docker service logs --tail 5000 web", "from 0 to 2000"],
|
|
277
|
+
["docker service logs --tail 10 web api", "exactly one service"],
|
|
278
|
+
["docker service logs --tail 10 --until 5m web", "not one OneUptime AI"],
|
|
279
|
+
["docker service logs --since 2001-01-01 web", "is an absolute time"],
|
|
280
|
+
["docker service logs --since 100000h web", "further back than 24h"],
|
|
281
|
+
["docker system df -v --format json", "build-cache record's Description"],
|
|
282
|
+
["docker events --since 1m --until 2099-12-31", "--until must be a duration"],
|
|
283
|
+
// reads with bad shapes
|
|
284
|
+
["docker service ps", "at least 1 service"],
|
|
285
|
+
["docker service inspect", "at least 1 service"],
|
|
286
|
+
["docker node inspect", "at least 1 node"],
|
|
287
|
+
["docker stack ps", "exactly 1 stack"],
|
|
288
|
+
["docker stack ps a b", "exactly 1 stack"],
|
|
289
|
+
["docker stack services", "exactly 1 stack"],
|
|
290
|
+
["docker node ls extra", "takes no arguments"],
|
|
291
|
+
["docker service ls web", "takes no arguments"],
|
|
292
|
+
[
|
|
293
|
+
"docker service inspect --format '{{json .Spec.TaskTemplate.ContainerSpec.Env}}' web",
|
|
294
|
+
"Go templates",
|
|
295
|
+
],
|
|
296
|
+
["docker node inspect -f '{{.Status}}' node-1", "Go templates"],
|
|
297
|
+
["docker service ps --format '{{.Error}}' web", "Go templates"],
|
|
298
|
+
["docker stack ls --format '{{.Name}}'", "Go templates"],
|
|
299
|
+
// Engine-level changes are not a Swarm fix.
|
|
300
|
+
["docker restart web.1.x2k9", "not a Swarm fix"],
|
|
301
|
+
["docker container restart web.1.x2k9", "not a Swarm fix"],
|
|
302
|
+
["docker start web", "not a Swarm fix"],
|
|
303
|
+
["docker unpause web", "not a Swarm fix"],
|
|
304
|
+
["docker stop web", "not a Swarm fix"],
|
|
305
|
+
["docker kill web", "not a Swarm fix"],
|
|
306
|
+
["docker pause web", "not a Swarm fix"],
|
|
307
|
+
["docker update --memory 1g web", "not a Swarm fix"],
|
|
308
|
+
["docker container update --cpus 1 web", "not a Swarm fix"],
|
|
309
|
+
// Never, in either profile.
|
|
310
|
+
["docker exec web sh", "runs a program inside a container"],
|
|
311
|
+
["docker rm web", "deletes containers"],
|
|
312
|
+
["docker system prune -f", "in bulk"],
|
|
313
|
+
["docker compose up", "not shipped"],
|
|
314
|
+
// Flags before the command.
|
|
315
|
+
["docker -H tcp://manager-2:2375 service ls", "global flags"],
|
|
316
|
+
["docker --context other node ls", "global flags"],
|
|
317
|
+
["docker service --help", "comes before the docker service subcommand"],
|
|
318
|
+
["docker service -q ls", "comes before the docker service subcommand"],
|
|
319
|
+
["docker node", "needs a subcommand"],
|
|
320
|
+
["docker stack", "needs a subcommand"],
|
|
321
|
+
["docker service foo", "not a docker command"],
|
|
322
|
+
];
|
|
323
|
+
|
|
324
|
+
describe("docker-swarm: the tool policy object", () => {
|
|
325
|
+
test("is named and covers docker only", () => {
|
|
326
|
+
expect(DockerSwarmCommandPolicy.name).toBe("docker-swarm");
|
|
327
|
+
expect([...DockerSwarmCommandPolicy.programs]).toEqual(["docker"]);
|
|
328
|
+
expect(ResourceCommandPolicy.getToolPolicy(SWARM)).toBe(
|
|
329
|
+
DockerSwarmCommandPolicy,
|
|
330
|
+
);
|
|
331
|
+
expect(DOCKER_SWARM_PROFILE.name).toBe("docker-swarm");
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
test("it allows every engine read, and refuses every engine write", () => {
|
|
335
|
+
for (const path of DOCKER_ENGINE_READ_COMMANDS.keys()) {
|
|
336
|
+
expect(DOCKER_SWARM_PROFILE.commands.has(path)).toBe(true);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
for (const path of DOCKER_ENGINE_WRITE_PATHS) {
|
|
340
|
+
expect(DOCKER_SWARM_PROFILE.commands.has(path)).toBe(false);
|
|
341
|
+
expect(DOCKER_SWARM_PROFILE.refusals.get(path)).toContain(
|
|
342
|
+
"not a Swarm fix",
|
|
343
|
+
);
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
test("every swarm read and write in the tables has an example below", () => {
|
|
348
|
+
const covered: Set<string> = new Set<string>(
|
|
349
|
+
[...READS, ...SAFE_WRITES, ...RISKY_WRITES].map(
|
|
350
|
+
(row: Array<unknown>): string => {
|
|
351
|
+
return row[1] as string;
|
|
352
|
+
},
|
|
353
|
+
),
|
|
354
|
+
);
|
|
355
|
+
|
|
356
|
+
for (const spec of [
|
|
357
|
+
...DOCKER_SWARM_READ_COMMANDS.values(),
|
|
358
|
+
...DOCKER_SWARM_WRITE_COMMANDS.values(),
|
|
359
|
+
]) {
|
|
360
|
+
expect(covered.has(spec.verb)).toBe(true);
|
|
361
|
+
}
|
|
362
|
+
});
|
|
363
|
+
|
|
364
|
+
test("the engine policy refuses what the swarm policy allows, and vice versa", () => {
|
|
365
|
+
expect(
|
|
366
|
+
DockerEngineCommandPolicy.evaluateArgv([
|
|
367
|
+
"docker",
|
|
368
|
+
"service",
|
|
369
|
+
"update",
|
|
370
|
+
"--force",
|
|
371
|
+
"web",
|
|
372
|
+
]).tier,
|
|
373
|
+
).toBe(ResourceCommandTier.Denied);
|
|
374
|
+
expect(
|
|
375
|
+
DockerSwarmCommandPolicy.evaluateArgv(["docker", "restart", "web"]).tier,
|
|
376
|
+
).toBe(ResourceCommandTier.Denied);
|
|
377
|
+
expect(
|
|
378
|
+
DockerEngineCommandPolicy.evaluateArgv(["docker", "restart", "web"]).tier,
|
|
379
|
+
).toBe(ResourceCommandTier.SafeWrite);
|
|
380
|
+
});
|
|
381
|
+
});
|
|
382
|
+
|
|
383
|
+
describe("docker-swarm: reads", () => {
|
|
384
|
+
test.each(READS)("%p is Read (%s)", (command: string, verb: string) => {
|
|
385
|
+
const result: ResourceCommandPolicyResult = evaluate(command);
|
|
386
|
+
|
|
387
|
+
expect(result.reason).not.toContain("never allowed");
|
|
388
|
+
expect(result.tier).toBe(ResourceCommandTier.Read);
|
|
389
|
+
expect(result.verb).toBe(verb);
|
|
390
|
+
expect(result.targets).toEqual([]);
|
|
391
|
+
expect(result.requiresHuman).toBeUndefined();
|
|
392
|
+
});
|
|
393
|
+
|
|
394
|
+
test("every Test connection command is Read", () => {
|
|
395
|
+
for (const command of AI_RESOURCE_TYPE_INFO[SWARM].testCommands) {
|
|
396
|
+
expect(evaluate(command).tier).toBe(ResourceCommandTier.Read);
|
|
397
|
+
expect(
|
|
398
|
+
ResourceCommandPolicy.isReadOnly({ resourceType: SWARM, command }),
|
|
399
|
+
).toBe(true);
|
|
400
|
+
}
|
|
401
|
+
});
|
|
402
|
+
});
|
|
403
|
+
|
|
404
|
+
describe("docker-swarm: SafeWrite — exactly one service", () => {
|
|
405
|
+
test.each(SAFE_WRITES)(
|
|
406
|
+
"%p is SafeWrite (%s) on %p",
|
|
407
|
+
(command: string, verb: string, targets: Array<string>) => {
|
|
408
|
+
const result: ResourceCommandPolicyResult = evaluate(command);
|
|
409
|
+
|
|
410
|
+
expect(result.tier).toBe(ResourceCommandTier.SafeWrite);
|
|
411
|
+
expect(result.verb).toBe(verb);
|
|
412
|
+
expect(result.targets).toEqual(targets);
|
|
413
|
+
expect(result.requiresHuman).toBeUndefined();
|
|
414
|
+
},
|
|
415
|
+
);
|
|
416
|
+
});
|
|
417
|
+
|
|
418
|
+
describe("docker-swarm: RiskyWrite", () => {
|
|
419
|
+
test.each(RISKY_WRITES)(
|
|
420
|
+
"%p is RiskyWrite (%s) on %p",
|
|
421
|
+
(command: string, verb: string, targets: Array<string>) => {
|
|
422
|
+
const result: ResourceCommandPolicyResult = evaluate(command);
|
|
423
|
+
|
|
424
|
+
expect(result.tier).toBe(ResourceCommandTier.RiskyWrite);
|
|
425
|
+
expect(result.verb).toBe(verb);
|
|
426
|
+
expect(result.targets).toEqual(targets);
|
|
427
|
+
expect(result.requiresHuman).toBeUndefined();
|
|
428
|
+
},
|
|
429
|
+
);
|
|
430
|
+
|
|
431
|
+
test.each(HUMAN_ONLY_WRITES)(
|
|
432
|
+
"%p is RiskyWrite and requires a human",
|
|
433
|
+
(command: string, targets: Array<string>) => {
|
|
434
|
+
const result: ResourceCommandPolicyResult = evaluate(command);
|
|
435
|
+
|
|
436
|
+
expect(result.tier).toBe(ResourceCommandTier.RiskyWrite);
|
|
437
|
+
expect(result.requiresHuman).toBe(true);
|
|
438
|
+
expect(result.targets).toEqual(targets);
|
|
439
|
+
expect(result.verb).toBe("node update");
|
|
440
|
+
},
|
|
441
|
+
);
|
|
442
|
+
|
|
443
|
+
test("scaling to zero says it is an outage", () => {
|
|
444
|
+
expect(evaluate("docker service scale web=0").reason).toContain("outage");
|
|
445
|
+
});
|
|
446
|
+
|
|
447
|
+
test("a risky update names what it changes", () => {
|
|
448
|
+
const reason: string = evaluate(
|
|
449
|
+
"docker service update --image nginx:1.27 --replicas 2 web",
|
|
450
|
+
).reason;
|
|
451
|
+
|
|
452
|
+
expect(reason).toContain("--image");
|
|
453
|
+
expect(reason).toContain("--replicas");
|
|
454
|
+
});
|
|
455
|
+
|
|
456
|
+
test("a drain says what it moves", () => {
|
|
457
|
+
expect(
|
|
458
|
+
evaluate("docker node update --availability drain node-1").reason,
|
|
459
|
+
).toContain("every task on it");
|
|
460
|
+
});
|
|
461
|
+
});
|
|
462
|
+
|
|
463
|
+
describe("docker-swarm: Denied", () => {
|
|
464
|
+
test.each(DENIED)("%p is Denied (%s)", (command: string, phrase: string) => {
|
|
465
|
+
const result: ResourceCommandPolicyResult = evaluate(command);
|
|
466
|
+
|
|
467
|
+
expect(result.tier).toBe(ResourceCommandTier.Denied);
|
|
468
|
+
expect(result.reason).toContain(phrase);
|
|
469
|
+
expect(result.targets).toEqual([]);
|
|
470
|
+
expect(result.requiresHuman).toBeUndefined();
|
|
471
|
+
});
|
|
472
|
+
|
|
473
|
+
test("an engine write points the model at the service commands", () => {
|
|
474
|
+
const reason: string = evaluate("docker restart web.1.x2k9").reason;
|
|
475
|
+
|
|
476
|
+
expect(reason).toContain("never allowed for a Docker Swarm cluster");
|
|
477
|
+
expect(reason).toContain("docker service update --force SERVICE");
|
|
478
|
+
expect(reason).toContain("docker service rollback SERVICE");
|
|
479
|
+
});
|
|
480
|
+
|
|
481
|
+
test("a refused command tells the model what IS allowed", () => {
|
|
482
|
+
for (const command of [
|
|
483
|
+
"docker service create nginx",
|
|
484
|
+
"docker secret ls",
|
|
485
|
+
"docker restart web",
|
|
486
|
+
"docker -H tcp://x node ls",
|
|
487
|
+
]) {
|
|
488
|
+
const reason: string = evaluate(command).reason;
|
|
489
|
+
|
|
490
|
+
expect(reason).toContain("Allowed for a Docker Swarm cluster");
|
|
491
|
+
expect(reason).toContain("docker service logs --tail 200 SERVICE");
|
|
492
|
+
expect(reason).toContain("docker node update --availability");
|
|
493
|
+
}
|
|
494
|
+
});
|
|
495
|
+
|
|
496
|
+
test("a refused service update flag lists the allowed ones", () => {
|
|
497
|
+
const reason: string = evaluate(
|
|
498
|
+
"docker service update --stop-signal KILL web",
|
|
499
|
+
).reason;
|
|
500
|
+
|
|
501
|
+
expect(reason).toContain("--force");
|
|
502
|
+
expect(reason).toContain("--image VALUE");
|
|
503
|
+
expect(reason).toContain("--update-failure-action VALUE");
|
|
504
|
+
expect(reason).not.toContain("--env-add");
|
|
505
|
+
});
|
|
506
|
+
|
|
507
|
+
test("DockerSwarmCommandPolicy.evaluateArgv is total", () => {
|
|
508
|
+
for (const argv of [
|
|
509
|
+
null,
|
|
510
|
+
undefined,
|
|
511
|
+
[],
|
|
512
|
+
["docker"],
|
|
513
|
+
["docker", 1],
|
|
514
|
+
["docker", "service", "scale", "web=1".repeat(500)],
|
|
515
|
+
Array.from({ length: 100 }, (): string => {
|
|
516
|
+
return "docker";
|
|
517
|
+
}),
|
|
518
|
+
]) {
|
|
519
|
+
const result: ResourceCommandPolicyResult =
|
|
520
|
+
DockerSwarmCommandPolicy.evaluateArgv(argv as Array<string>);
|
|
521
|
+
|
|
522
|
+
expect(result.tier).toBe(ResourceCommandTier.Denied);
|
|
523
|
+
expect(result.targets).toEqual([]);
|
|
524
|
+
}
|
|
525
|
+
});
|
|
526
|
+
});
|
|
527
|
+
|
|
528
|
+
describe("docker-swarm: the auto-execution ladder through the dispatcher", () => {
|
|
529
|
+
function verdictFor(data: {
|
|
530
|
+
command: string;
|
|
531
|
+
allowlistPatterns?: Array<string>;
|
|
532
|
+
bypassApproval?: boolean;
|
|
533
|
+
}): ResourceAutoExecutionVerdict {
|
|
534
|
+
return ResourceCommandPolicy.evaluateForAutoExecution({
|
|
535
|
+
resourceType: SWARM,
|
|
536
|
+
command: data.command,
|
|
537
|
+
allowlistPatterns: data.allowlistPatterns ?? [],
|
|
538
|
+
bypassApproval: data.bypassApproval ?? false,
|
|
539
|
+
});
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
test("a rolling restart, a rollback and a scale up are AutoApproved", () => {
|
|
543
|
+
for (const command of [
|
|
544
|
+
"docker service update --force web",
|
|
545
|
+
"docker service rollback web",
|
|
546
|
+
"docker service scale web=4",
|
|
547
|
+
]) {
|
|
548
|
+
expect(verdictFor({ command }).verdict).toBe(
|
|
549
|
+
AiRemediationCommandPolicyVerdict.AutoApproved,
|
|
550
|
+
);
|
|
551
|
+
}
|
|
552
|
+
});
|
|
553
|
+
|
|
554
|
+
test("a scale to zero needs approval, unless bypassed or allowlisted", () => {
|
|
555
|
+
expect(verdictFor({ command: "docker service scale web=0" }).verdict).toBe(
|
|
556
|
+
AiRemediationCommandPolicyVerdict.RequiresApproval,
|
|
557
|
+
);
|
|
558
|
+
expect(
|
|
559
|
+
verdictFor({
|
|
560
|
+
command: "docker service scale web=0",
|
|
561
|
+
bypassApproval: true,
|
|
562
|
+
}).verdict,
|
|
563
|
+
).toBe(AiRemediationCommandPolicyVerdict.AutoApproved);
|
|
564
|
+
expect(
|
|
565
|
+
verdictFor({
|
|
566
|
+
command: "docker service scale web=0",
|
|
567
|
+
allowlistPatterns: ["docker service scale web=0"],
|
|
568
|
+
}).verdict,
|
|
569
|
+
).toBe(AiRemediationCommandPolicyVerdict.AutoApproved);
|
|
570
|
+
});
|
|
571
|
+
|
|
572
|
+
test("an image change is allowlistable by service", () => {
|
|
573
|
+
const allowlistPatterns: Array<string> = [
|
|
574
|
+
"docker service update --image * web",
|
|
575
|
+
];
|
|
576
|
+
|
|
577
|
+
expect(
|
|
578
|
+
verdictFor({
|
|
579
|
+
command: "docker service update --image nginx:1.28 web",
|
|
580
|
+
allowlistPatterns,
|
|
581
|
+
}).verdict,
|
|
582
|
+
).toBe(AiRemediationCommandPolicyVerdict.AutoApproved);
|
|
583
|
+
expect(
|
|
584
|
+
verdictFor({
|
|
585
|
+
command: "docker service update --image nginx:1.28 api",
|
|
586
|
+
allowlistPatterns,
|
|
587
|
+
}).verdict,
|
|
588
|
+
).toBe(AiRemediationCommandPolicyVerdict.RequiresApproval);
|
|
589
|
+
});
|
|
590
|
+
|
|
591
|
+
test("a drain always asks a human: bypass and the allowlist do not apply", () => {
|
|
592
|
+
const verdict: ResourceAutoExecutionVerdict = verdictFor({
|
|
593
|
+
command: "docker node update --availability drain node-1",
|
|
594
|
+
allowlistPatterns: ["docker node update --availability drain *"],
|
|
595
|
+
bypassApproval: true,
|
|
596
|
+
});
|
|
597
|
+
|
|
598
|
+
expect(verdict.verdict).toBe(
|
|
599
|
+
AiRemediationCommandPolicyVerdict.RequiresApproval,
|
|
600
|
+
);
|
|
601
|
+
expect(verdict.requiresHuman).toBe(true);
|
|
602
|
+
expect(verdict.tier).toBe(ResourceCommandTier.RiskyWrite);
|
|
603
|
+
});
|
|
604
|
+
|
|
605
|
+
test("an active node update is bypassable", () => {
|
|
606
|
+
expect(
|
|
607
|
+
verdictFor({
|
|
608
|
+
command: "docker node update --availability active node-1",
|
|
609
|
+
bypassApproval: true,
|
|
610
|
+
}).verdict,
|
|
611
|
+
).toBe(AiRemediationCommandPolicyVerdict.AutoApproved);
|
|
612
|
+
});
|
|
613
|
+
|
|
614
|
+
test("an engine write is Denied whatever the settings", () => {
|
|
615
|
+
expect(
|
|
616
|
+
verdictFor({
|
|
617
|
+
command: "docker restart web",
|
|
618
|
+
allowlistPatterns: ["docker restart *"],
|
|
619
|
+
bypassApproval: true,
|
|
620
|
+
}).verdict,
|
|
621
|
+
).toBe(AiRemediationCommandPolicyVerdict.Denied);
|
|
622
|
+
});
|
|
623
|
+
});
|
|
624
|
+
|
|
625
|
+
describe("docker-swarm: allowlist entries", () => {
|
|
626
|
+
function problem(pattern: string): string | null {
|
|
627
|
+
return ResourceCommandPolicy.describeAllowlistPatternProblem({
|
|
628
|
+
resourceType: SWARM,
|
|
629
|
+
pattern,
|
|
630
|
+
});
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
function isBroad(pattern: string): boolean {
|
|
634
|
+
return ResourceCommandPolicy.isBroadAllowlistPattern({
|
|
635
|
+
resourceType: SWARM,
|
|
636
|
+
pattern,
|
|
637
|
+
});
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
test.each([
|
|
641
|
+
["docker service update --image * web"],
|
|
642
|
+
["docker service update --replicas * web"],
|
|
643
|
+
["docker service scale web=0"],
|
|
644
|
+
["docker service update --force *"],
|
|
645
|
+
["docker node update --availability active *"],
|
|
646
|
+
["docker node update --availability drain *"],
|
|
647
|
+
])("%p is a valid entry", (pattern: string) => {
|
|
648
|
+
expect(problem(pattern)).toBeNull();
|
|
649
|
+
});
|
|
650
|
+
|
|
651
|
+
test.each([
|
|
652
|
+
["docker service ls -q", "read-only command"],
|
|
653
|
+
["docker service scale *", "can never match"],
|
|
654
|
+
["docker restart *", "can never match"],
|
|
655
|
+
["docker service create *", "can never match"],
|
|
656
|
+
["docker service update --env-add * web", "can never match"],
|
|
657
|
+
["docker * update --force web", "where the command goes"],
|
|
658
|
+
])("%p is refused (%s)", (pattern: string, phrase: string) => {
|
|
659
|
+
expect(problem(pattern)).toContain(phrase);
|
|
660
|
+
});
|
|
661
|
+
|
|
662
|
+
test("a * for the service or node is broad; a * for a value is not", () => {
|
|
663
|
+
expect(isBroad("docker service update --image nginx:1.27 *")).toBe(true);
|
|
664
|
+
expect(isBroad("docker service update --force *")).toBe(true);
|
|
665
|
+
expect(isBroad("docker node update --availability active *")).toBe(true);
|
|
666
|
+
expect(isBroad("docker service update --image * web")).toBe(false);
|
|
667
|
+
expect(isBroad("docker service update --replicas * web")).toBe(false);
|
|
668
|
+
});
|
|
669
|
+
});
|
|
670
|
+
|
|
671
|
+
describe("docker-swarm: the agent's write scope", () => {
|
|
672
|
+
function refusal(
|
|
673
|
+
command: string,
|
|
674
|
+
posture: {
|
|
675
|
+
allowWrites?: boolean;
|
|
676
|
+
writeTargets?: Array<string>;
|
|
677
|
+
protectedTargets?: Array<string>;
|
|
678
|
+
} = {},
|
|
679
|
+
): string | null {
|
|
680
|
+
return ResourceCommandPolicy.getWriteScopeRefusal({
|
|
681
|
+
result: evaluate(command),
|
|
682
|
+
allowWrites: posture.allowWrites ?? true,
|
|
683
|
+
writeTargets: posture.writeTargets ?? [],
|
|
684
|
+
protectedTargets: posture.protectedTargets ?? [],
|
|
685
|
+
resourceType: SWARM,
|
|
686
|
+
});
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
test("a scale's target is the service, not SERVICE=N", () => {
|
|
690
|
+
expect(evaluate("docker service scale web=3").targets).toEqual(["web"]);
|
|
691
|
+
expect(
|
|
692
|
+
refusal("docker service scale web=3", { writeTargets: ["web"] }),
|
|
693
|
+
).toBeNull();
|
|
694
|
+
expect(
|
|
695
|
+
refusal("docker service scale api=3", { writeTargets: ["web*"] }),
|
|
696
|
+
).toContain("ONEUPTIME_AI_WRITE_TARGETS");
|
|
697
|
+
});
|
|
698
|
+
|
|
699
|
+
test("the agent's own service is protected", () => {
|
|
700
|
+
expect(
|
|
701
|
+
refusal("docker service update --force oneuptime_ai-agent", {
|
|
702
|
+
protectedTargets: ["oneuptime_ai-agent"],
|
|
703
|
+
}),
|
|
704
|
+
).toContain("protects");
|
|
705
|
+
});
|
|
706
|
+
|
|
707
|
+
test("a read-only agent refuses a drain", () => {
|
|
708
|
+
expect(
|
|
709
|
+
refusal("docker node update --availability drain node-1", {
|
|
710
|
+
allowWrites: false,
|
|
711
|
+
}),
|
|
712
|
+
).toContain("ONEUPTIME_AI_ALLOW_WRITES=true");
|
|
713
|
+
});
|
|
714
|
+
});
|
|
715
|
+
|
|
716
|
+
describe("docker-swarm: command guides", () => {
|
|
717
|
+
test("are markdown bullets naming the swarm commands", () => {
|
|
718
|
+
const read: string = DockerSwarmCommandPolicy.readCommandGuide;
|
|
719
|
+
const write: string = DockerSwarmCommandPolicy.writeCommandGuide;
|
|
720
|
+
|
|
721
|
+
for (const line of [...read.split("\n"), ...write.split("\n")]) {
|
|
722
|
+
expect(line.startsWith("- ")).toBe(true);
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
expect(read).toContain("docker service logs --tail 200 SERVICE");
|
|
726
|
+
expect(read).toContain("docker node ls");
|
|
727
|
+
expect(read).toContain("docker stack ps STACK");
|
|
728
|
+
expect(write).toContain("docker service update --force SERVICE");
|
|
729
|
+
expect(write).toContain("Always asks a human");
|
|
730
|
+
expect(write).toContain("not a Swarm fix");
|
|
731
|
+
expect(ResourceCommandPolicy.getReadCommandGuide(SWARM)).toBe(read);
|
|
732
|
+
expect(ResourceCommandPolicy.getWriteCommandGuide(SWARM)).toBe(write);
|
|
733
|
+
});
|
|
734
|
+
|
|
735
|
+
test("every command the guides suggest has the tier they claim", () => {
|
|
736
|
+
for (const command of [
|
|
737
|
+
"docker node ls",
|
|
738
|
+
"docker node ps",
|
|
739
|
+
"docker node ps NODE",
|
|
740
|
+
"docker node inspect NODE --pretty",
|
|
741
|
+
"docker service ls",
|
|
742
|
+
"docker service ps SERVICE",
|
|
743
|
+
"docker service ps --no-trunc SERVICE",
|
|
744
|
+
"docker service inspect SERVICE --pretty",
|
|
745
|
+
"docker service logs --tail 200 SERVICE",
|
|
746
|
+
"docker service logs --since 30m SERVICE",
|
|
747
|
+
"docker stack ls",
|
|
748
|
+
"docker stack ps STACK",
|
|
749
|
+
"docker stack services STACK",
|
|
750
|
+
"docker ps -a",
|
|
751
|
+
"docker container inspect NAME",
|
|
752
|
+
"docker logs --tail 200 NAME",
|
|
753
|
+
"docker stats --no-stream",
|
|
754
|
+
"docker events --since 30m --until 0s",
|
|
755
|
+
"docker info",
|
|
756
|
+
"docker version",
|
|
757
|
+
"docker network ls",
|
|
758
|
+
"docker network inspect NAME",
|
|
759
|
+
]) {
|
|
760
|
+
expect(evaluate(command).tier).toBe(ResourceCommandTier.Read);
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
for (const command of [
|
|
764
|
+
"docker service update --force SERVICE",
|
|
765
|
+
"docker service update --force -d SERVICE",
|
|
766
|
+
"docker service rollback SERVICE",
|
|
767
|
+
"docker service scale SERVICE=3",
|
|
768
|
+
]) {
|
|
769
|
+
expect(evaluate(command).tier).toBe(ResourceCommandTier.SafeWrite);
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
for (const command of [
|
|
773
|
+
"docker service scale SERVICE=0",
|
|
774
|
+
"docker service update --image IMAGE SERVICE",
|
|
775
|
+
"docker service update --replicas 3 SERVICE",
|
|
776
|
+
"docker node update --availability active NODE",
|
|
777
|
+
"docker node update --availability drain NODE",
|
|
778
|
+
]) {
|
|
779
|
+
expect(evaluate(command).tier).toBe(ResourceCommandTier.RiskyWrite);
|
|
780
|
+
}
|
|
781
|
+
});
|
|
782
|
+
});
|