@oneuptime/common 14.0.9 → 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 +2 -0
- package/Models/DatabaseModels/PodmanHost.ts +213 -0
- package/Models/DatabaseModels/ProxmoxCluster.ts +213 -0
- package/Models/DatabaseModels/ResourceAiAgent.ts +419 -0
- package/Models/DatabaseModels/RunnerJob.ts +144 -0
- package/Models/DatabaseModels/VMwareVCenter.ts +213 -0
- package/Server/API/AutoRemediationAPI.ts +392 -1
- package/Server/API/ResourceAiAccessAPI.ts +1669 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.ts +423 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
- package/Server/Infrastructure/Semaphore.ts +22 -0
- package/Server/Middleware/TelemetryIngest.ts +15 -5
- package/Server/Services/AnalyticsDatabaseService.ts +45 -1
- package/Server/Services/AutoRemediationRuleEngineService.ts +940 -112
- 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/MetricRecordingRuleService.ts +47 -0
- package/Server/Services/PodmanHostService.ts +109 -1
- package/Server/Services/ProxmoxClusterService.ts +110 -1
- 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 +611 -4
- 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/Remediation/RemediationCommandTools.ts +1434 -32
- package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +935 -21
- 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 +72 -2
- package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +72 -5
- package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +72 -5
- package/Server/Utils/AutoRemediation/CommandPlanExecutor.ts +396 -13
- 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/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 +366 -143
- 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/Dashboard/ClusterAccessNotice.test.tsx +93 -0
- package/Tests/App/Dashboard/DatabaseDocumentationMarkdown.test.ts +18 -6
- package/Tests/App/Dashboard/InvestigationInfrastructureTools.test.tsx +506 -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/RunbookStepTypeMaps.test.ts +38 -7
- package/Tests/Models/DatabaseModels/DatabaseServerModels.test.ts +33 -1
- package/Tests/Models/DatabaseModels/ResourceAiAccessColumns.test.ts +738 -0
- package/Tests/Models/DatabaseModels/ResourceAiAgentModel.test.ts +842 -0
- package/Tests/Server/API/AutoRemediationApproveResourceRound.test.ts +835 -0
- package/Tests/Server/API/ResourceAiAccessAPI.test.ts +2730 -0
- package/Tests/Server/Infrastructure/Postgres/AddDatabaseServerTablesMigration.test.ts +60 -0
- package/Tests/Server/Infrastructure/Postgres/AddResourceAiAgentsMigration.test.ts +659 -0
- package/Tests/Server/Infrastructure/SemaphoreMutex.test.ts +31 -0
- package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +63 -5
- package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerPinnedKey.test.ts +103 -5
- package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerRateLimit.test.ts +19 -1
- package/Tests/Server/Services/AutoRemediationResourceRuleEngine.test.ts +1279 -0
- 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/MonitorProbeServiceIntervalScheduling.test.ts +45 -6
- 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 +105 -0
- package/Tests/Server/Services/RunnerJobEnqueueResourceCommand.test.ts +986 -0
- package/Tests/Server/Services/RunnerJobResourceCommandLane.test.ts +211 -0
- package/Tests/Server/Services/RunnerJobResourceCommandTimeoutAndRedaction.test.ts +352 -0
- package/Tests/Server/Services/TelemetryUsageBillingSloExclusion.test.ts +218 -0
- package/Tests/Server/TestingUtils/Services/FakeRunnerJobCount.ts +145 -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/RemediationCommandTools.test.ts +94 -1
- package/Tests/Server/Utils/AI/RemediationCommandToolsResource.test.ts +1530 -0
- package/Tests/Server/Utils/AI/RemediationExecutionRunnerResourceMode.test.ts +1249 -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/CommandPlanExecutorResource.test.ts +717 -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/TelemetryIngestionKeyGuard.test.ts +33 -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/MicrosoftTeamsCreateCommandsEndToEnd.test.ts +4672 -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/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/UI/Rum/RecordingHealthDashboard.test.tsx +769 -1
- 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/SessionReplay/SessionReplayBudgetMetricType.test.ts +383 -0
- package/Types/AI/ResourceAiAccessApi.ts +140 -0
- package/Types/AI/ResourceAiAccessPermissions.ts +126 -0
- package/Types/AutoRemediation/AiRemediationCommandPlan.ts +183 -2
- 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/Telemetry/TelemetryIngestSurface.ts +14 -2
- package/Utils/AI/InvestigationReport.ts +121 -15
- 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/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 +2 -0
- package/build/dist/Models/DatabaseModels/Index.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/ProxmoxCluster.js +219 -0
- package/build/dist/Models/DatabaseModels/ProxmoxCluster.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 +145 -0
- package/build/dist/Models/DatabaseModels/RunnerJob.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/Server/API/AutoRemediationAPI.js +231 -1
- package/build/dist/Server/API/AutoRemediationAPI.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/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 +2 -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 +12 -5
- package/build/dist/Server/Middleware/TelemetryIngest.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/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/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/ProxmoxClusterService.js +104 -0
- package/build/dist/Server/Services/ProxmoxClusterService.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 +344 -5
- package/build/dist/Server/Services/RunnerJobService.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/Remediation/RemediationCommandTools.js +1029 -30
- package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +633 -28
- 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 +50 -4
- 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/AutoRemediation/CommandPlanExecutor.js +290 -13
- 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/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 +263 -110
- 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/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 +116 -29
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.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/Telemetry/TelemetryIngestSurface.js +13 -2
- package/build/dist/Types/Telemetry/TelemetryIngestSurface.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/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/SessionReplay/SessionReplayBudgetMetricType.js +160 -0
- package/build/dist/Utils/SessionReplay/SessionReplayBudgetMetricType.js.map +1 -0
- package/package.json +1 -1
|
@@ -8,6 +8,15 @@ import {
|
|
|
8
8
|
AiRemediationCommandPolicyVerdict,
|
|
9
9
|
MAX_COMMAND_LENGTH_CHARS,
|
|
10
10
|
} from "./AiRemediationCommandPolicyVerdict";
|
|
11
|
+
import AiResourceType, {
|
|
12
|
+
AI_RESOURCE_TYPE_INFO,
|
|
13
|
+
isAiResourceType,
|
|
14
|
+
} from "../ResourceAiAgent/AiResourceType";
|
|
15
|
+
import {
|
|
16
|
+
RESOURCE_AI_ALLOW_WRITES_ENV,
|
|
17
|
+
RESOURCE_AI_WRITE_TARGETS_ENV,
|
|
18
|
+
ResourceCommandTier,
|
|
19
|
+
} from "../ResourceAiAgent/ResourceAiAccess";
|
|
11
20
|
|
|
12
21
|
/*
|
|
13
22
|
* Defined in a leaf module of their own (no imports) so the pure kubectl
|
|
@@ -32,12 +41,17 @@ export { AiRemediationCommandPolicyVerdict, MAX_COMMAND_LENGTH_CHARS };
|
|
|
32
41
|
* The only step types an AI remediation run may compose. The structured
|
|
33
42
|
* Kubernetes step (restart/scale) stays runbook-only; AI reaches a cluster
|
|
34
43
|
* through the Kubectl step instead, whose argv is tiered by KubectlPolicy
|
|
35
|
-
* and which targets a Runner the cluster's AI page bound.
|
|
44
|
+
* and which targets a Runner the cluster's AI page bound. Every other
|
|
45
|
+
* infrastructure resource (Docker, Podman, Swarm, Proxmox, VMware, Ceph, a
|
|
46
|
+
* database server, a host) is reached through ResourceCommand, whose argv
|
|
47
|
+
* is tiered by the resource command policy and which targets the
|
|
48
|
+
* resource's own AI agent — never a Runner.
|
|
36
49
|
*/
|
|
37
50
|
export const AI_COMMAND_STEP_TYPES: Array<RunbookStepType> = [
|
|
38
51
|
RunbookStepType.Bash,
|
|
39
52
|
RunbookStepType.SSH,
|
|
40
53
|
RunbookStepType.Kubectl,
|
|
54
|
+
RunbookStepType.ResourceCommand,
|
|
41
55
|
];
|
|
42
56
|
|
|
43
57
|
export enum AiRemediationCommandExecutionStatus {
|
|
@@ -84,6 +98,14 @@ export interface AiRemediationCommand {
|
|
|
84
98
|
sequence: number;
|
|
85
99
|
// One of AI_COMMAND_STEP_TYPES. SSH requires credentialId.
|
|
86
100
|
stepType: RunbookStepType;
|
|
101
|
+
/*
|
|
102
|
+
* The access target the command runs through. For Bash/SSH (and a
|
|
103
|
+
* Kubectl step through a Runner) a Runner row; for a Kubectl step through
|
|
104
|
+
* the Kubernetes AI agent the KubernetesAiAgent row id and
|
|
105
|
+
* KUBERNETES_AI_AGENT_DISPLAY_NAME; for a ResourceCommand step the
|
|
106
|
+
* ResourceAiAgent row id and the type's agentDisplayName ("Docker AI
|
|
107
|
+
* agent").
|
|
108
|
+
*/
|
|
87
109
|
runnerId: string;
|
|
88
110
|
runnerNameSnapshot: string;
|
|
89
111
|
credentialId?: string | undefined;
|
|
@@ -96,6 +118,17 @@ export interface AiRemediationCommand {
|
|
|
96
118
|
kubernetesClusterId?: string | undefined;
|
|
97
119
|
kubernetesClusterNameSnapshot?: string | undefined;
|
|
98
120
|
kubectlTier?: KubectlCommandTier | undefined;
|
|
121
|
+
/*
|
|
122
|
+
* ResourceCommand only: the resource the command runs against and the
|
|
123
|
+
* tier the resource command policy assigned when the plan was composed.
|
|
124
|
+
* The tier is informational on the card; execution re-evaluates it. A
|
|
125
|
+
* ResourceCommand step never carries a credential — the resource's AI
|
|
126
|
+
* agent uses only credentials from its own environment.
|
|
127
|
+
*/
|
|
128
|
+
resourceType?: AiResourceType | undefined;
|
|
129
|
+
resourceId?: string | undefined;
|
|
130
|
+
resourceNameSnapshot?: string | undefined;
|
|
131
|
+
resourceCommandTier?: ResourceCommandTier | undefined;
|
|
99
132
|
command: string;
|
|
100
133
|
timeoutInMs: number;
|
|
101
134
|
// Why the AI wants to run this — shown verbatim on the approval card.
|
|
@@ -286,6 +319,62 @@ export const KUBECTL_BYPASS_MODE_SUMMARY: string =
|
|
|
286
319
|
|
|
287
320
|
export const KUBECTL_EVERY_MODE_LIMITS_SUMMARY: string = `In every mode, Bypass approval included: ${KUBECTL_NEVER_RUNS_SUMMARY}; ${KUBECTL_ALWAYS_ASKS_SUMMARY}; the cluster's in-cluster Runner never changes its own namespace, nor a namespace outside the ones its chart lets it change, nor nodes when its chart turned node operations off; and an unattended run becomes a proposal when the hourly per-cluster circuit breaker trips or another unattended round already holds the cluster.`;
|
|
288
321
|
|
|
322
|
+
/*
|
|
323
|
+
* The resource command tiers and the unattended resource modes in the words
|
|
324
|
+
* every resource remediation prompt, tool description and feed item uses —
|
|
325
|
+
* for the Docker and Podman hosts, Docker Swarm, Proxmox, VMware and Ceph
|
|
326
|
+
* clusters, database servers and hosts reached through their resource AI
|
|
327
|
+
* agents. They restate the ResourceCommandTier and ResourceAiRemediationMode
|
|
328
|
+
* doc comments in Types/ResourceAiAgent/ResourceAiAccess and must keep
|
|
329
|
+
* matching them — and the resource command policy (ResourceCommandPolicy),
|
|
330
|
+
* which is what actually decides. What each kind of resource accepts is its
|
|
331
|
+
* tool policy's own guide (ResourceCommandPolicy.getWriteCommandGuide); these
|
|
332
|
+
* are the rules every kind shares. One copy, so a prompt can never describe
|
|
333
|
+
* a tier the policy no longer has.
|
|
334
|
+
*/
|
|
335
|
+
|
|
336
|
+
// SafeWrite: what an Automatic resource runs without a human.
|
|
337
|
+
export const RESOURCE_SAFE_CHANGES_SUMMARY: string =
|
|
338
|
+
"a reversible change to exactly ONE named object — restart or start one container, a rolling restart of one service, start one VM, restart one unit, cancel one query — never several objects at once";
|
|
339
|
+
|
|
340
|
+
// RiskyWrite: needs a human unless the allowlist names it or approvals are bypassed.
|
|
341
|
+
export const RESOURCE_RISKIER_CHANGES_SUMMARY: string =
|
|
342
|
+
"a change that can take something down or alter what runs — stop, kill or pause a container, update limits, scale a service to zero, shut down, power off or reset a VM, mark an OSD out, stop a unit, terminate a session — and a change to several objects at once";
|
|
343
|
+
|
|
344
|
+
/*
|
|
345
|
+
* Asks a human whatever the resource's mode, allowlist included: what the
|
|
346
|
+
* resource command policy marks requiresHuman (the canonical mode text in
|
|
347
|
+
* ResourceAiAccess).
|
|
348
|
+
*/
|
|
349
|
+
export const RESOURCE_ALWAYS_ASKS_SUMMARY: string =
|
|
350
|
+
"a change the resource's command policy marks as always needing a human (draining a Swarm node, migrating a VM, putting an ESXi host into maintenance, killing a process on a host, ...) always needs a human, in every mode — Bypass approval and the allowlist included";
|
|
351
|
+
|
|
352
|
+
// Denied: never runs, whoever approves it.
|
|
353
|
+
export const RESOURCE_NEVER_RUNS_SUMMARY: string =
|
|
354
|
+
"destructive commands never run, even with approval: exec, run, rm, prune, deleting or destroying anything, anything that reads or changes credentials, anything the resource's command policy does not know, and anything written as a shell line (pipes, redirects, ;, &&, $( ), sudo)";
|
|
355
|
+
|
|
356
|
+
// How the resource's allowlist is read.
|
|
357
|
+
export const RESOURCE_ALLOWLIST_SUMMARY: string =
|
|
358
|
+
"the resource's command allowlist is matched word by word: a pattern must have exactly as many words as the command, a * stands for exactly one whole word (never part of one), and every other word must be spelled exactly as the command spells it";
|
|
359
|
+
|
|
360
|
+
/*
|
|
361
|
+
* The every-mode clause about unattended resource runs (the resource
|
|
362
|
+
* sibling of ClusterAccessContext's UNATTENDED_ROUND_BECOMES_PROPOSAL_SUMMARY).
|
|
363
|
+
*/
|
|
364
|
+
export const RESOURCE_UNATTENDED_ROUND_BECOMES_PROPOSAL_SUMMARY: string =
|
|
365
|
+
"an unattended run becomes a proposal when the hourly per-resource circuit breaker trips or another unattended round already holds the resource";
|
|
366
|
+
|
|
367
|
+
export const RESOURCE_AUTOMATIC_MODE_SUMMARY: string = `Automatic: safe changes run without a human (${RESOURCE_SAFE_CHANGES_SUMMARY}). A riskier change (${RESOURCE_RISKIER_CHANGES_SUMMARY}) never runs without one: when the round could only find riskier fixes it ends by proposing exactly those for one-click approval; when it also ran safe fixes, a riskier fix is proposed only if verification shows the safe ones did not recover the signal (the follow-up round, which asks). Shapes on the resource's command allowlist run on their own.`;
|
|
368
|
+
|
|
369
|
+
/*
|
|
370
|
+
* Interpolated into prompts and feed copy on its own, so it names the
|
|
371
|
+
* exceptions instead of pointing at a list "below".
|
|
372
|
+
*/
|
|
373
|
+
export const RESOURCE_BYPASS_MODE_SUMMARY: string =
|
|
374
|
+
"Bypass approval: AI does not ask. Every change the policy allows — safe AND riskier — runs on its own, follow-up rounds included, except for what always needs a human.";
|
|
375
|
+
|
|
376
|
+
export const RESOURCE_EVERY_MODE_LIMITS_SUMMARY: string = `In every mode, Bypass approval included: ${RESOURCE_NEVER_RUNS_SUMMARY}; ${RESOURCE_ALWAYS_ASKS_SUMMARY}; the resource's AI agent changes nothing unless it was started with ${RESOURCE_AI_ALLOW_WRITES_ENV}=true, never changes its own protected targets (itself and what it runs in), and with ${RESOURCE_AI_WRITE_TARGETS_ENV} set changes only the targets it names; and ${RESOURCE_UNATTENDED_ROUND_BECOMES_PROPOSAL_SUMMARY}.`;
|
|
377
|
+
|
|
289
378
|
export class AiRemediationCommandPlanUtil {
|
|
290
379
|
/*
|
|
291
380
|
* Parse a jsonb column value back into a typed plan. Fail-closed: any
|
|
@@ -348,6 +437,28 @@ export class AiRemediationCommandPlanUtil {
|
|
|
348
437
|
return null;
|
|
349
438
|
}
|
|
350
439
|
|
|
440
|
+
/*
|
|
441
|
+
* A ResourceCommand step names its resource by type and id, runs
|
|
442
|
+
* through the resource's AI agent (runnerId holds the ResourceAiAgent
|
|
443
|
+
* id) and never carries a credential or a cluster. Anything else is a
|
|
444
|
+
* plan this build cannot execute safely, so the whole plan is refused.
|
|
445
|
+
*/
|
|
446
|
+
let resourceFields: Pick<
|
|
447
|
+
AiRemediationCommand,
|
|
448
|
+
| "resourceType"
|
|
449
|
+
| "resourceId"
|
|
450
|
+
| "resourceNameSnapshot"
|
|
451
|
+
| "resourceCommandTier"
|
|
452
|
+
> | null = null;
|
|
453
|
+
|
|
454
|
+
if (stepType === RunbookStepType.ResourceCommand) {
|
|
455
|
+
resourceFields = AiRemediationCommandPlanUtil.parseResourceFields(obj);
|
|
456
|
+
|
|
457
|
+
if (!resourceFields) {
|
|
458
|
+
return null;
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
|
|
351
462
|
const kubectlTierRaw: string = String(obj["kubectlTier"] || "");
|
|
352
463
|
const kubectlTier: KubectlCommandTier | undefined = Object.values(
|
|
353
464
|
KubectlCommandTier,
|
|
@@ -383,7 +494,10 @@ export class AiRemediationCommandPlanUtil {
|
|
|
383
494
|
runnerNameSnapshot:
|
|
384
495
|
typeof obj["runnerNameSnapshot"] === "string"
|
|
385
496
|
? obj["runnerNameSnapshot"]
|
|
386
|
-
:
|
|
497
|
+
: resourceFields?.resourceType
|
|
498
|
+
? AI_RESOURCE_TYPE_INFO[resourceFields.resourceType]
|
|
499
|
+
.agentDisplayName
|
|
500
|
+
: "Runner",
|
|
387
501
|
credentialId:
|
|
388
502
|
typeof obj["credentialId"] === "string"
|
|
389
503
|
? obj["credentialId"]
|
|
@@ -401,6 +515,7 @@ export class AiRemediationCommandPlanUtil {
|
|
|
401
515
|
? obj["kubernetesClusterNameSnapshot"]
|
|
402
516
|
: undefined,
|
|
403
517
|
kubectlTier,
|
|
518
|
+
...(resourceFields || {}),
|
|
404
519
|
command: command,
|
|
405
520
|
timeoutInMs: timeoutInMs,
|
|
406
521
|
rationale: typeof obj["rationale"] === "string" ? obj["rationale"] : "",
|
|
@@ -461,6 +576,72 @@ export class AiRemediationCommandPlanUtil {
|
|
|
461
576
|
return plan;
|
|
462
577
|
}
|
|
463
578
|
|
|
579
|
+
/*
|
|
580
|
+
* The resource fields of a stored ResourceCommand step, or null when the
|
|
581
|
+
* step must not be trusted: an unknown resourceType, a blank resourceId,
|
|
582
|
+
* any credential or cluster field, or a tier that is Denied or not a
|
|
583
|
+
* tier at all.
|
|
584
|
+
*/
|
|
585
|
+
private static parseResourceFields(
|
|
586
|
+
obj: JSONObject,
|
|
587
|
+
): Pick<
|
|
588
|
+
AiRemediationCommand,
|
|
589
|
+
| "resourceType"
|
|
590
|
+
| "resourceId"
|
|
591
|
+
| "resourceNameSnapshot"
|
|
592
|
+
| "resourceCommandTier"
|
|
593
|
+
> | null {
|
|
594
|
+
const resourceType: unknown = obj["resourceType"];
|
|
595
|
+
|
|
596
|
+
if (!isAiResourceType(resourceType)) {
|
|
597
|
+
return null;
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
const resourceId: unknown = obj["resourceId"];
|
|
601
|
+
|
|
602
|
+
if (typeof resourceId !== "string" || !resourceId.trim()) {
|
|
603
|
+
return null;
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
for (const field of [
|
|
607
|
+
"credentialId",
|
|
608
|
+
"credentialNameSnapshot",
|
|
609
|
+
"credential",
|
|
610
|
+
"kubernetesClusterId",
|
|
611
|
+
]) {
|
|
612
|
+
if (obj[field] !== undefined && obj[field] !== null) {
|
|
613
|
+
return null;
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
const tierRaw: unknown = obj["resourceCommandTier"];
|
|
618
|
+
let resourceCommandTier: ResourceCommandTier | undefined = undefined;
|
|
619
|
+
|
|
620
|
+
if (tierRaw !== undefined && tierRaw !== null && tierRaw !== "") {
|
|
621
|
+
if (
|
|
622
|
+
typeof tierRaw !== "string" ||
|
|
623
|
+
!(Object.values(ResourceCommandTier) as Array<string>).includes(
|
|
624
|
+
tierRaw,
|
|
625
|
+
) ||
|
|
626
|
+
tierRaw === ResourceCommandTier.Denied
|
|
627
|
+
) {
|
|
628
|
+
return null;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
resourceCommandTier = tierRaw as ResourceCommandTier;
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
return {
|
|
635
|
+
resourceType,
|
|
636
|
+
resourceId,
|
|
637
|
+
resourceNameSnapshot:
|
|
638
|
+
typeof obj["resourceNameSnapshot"] === "string"
|
|
639
|
+
? obj["resourceNameSnapshot"]
|
|
640
|
+
: undefined,
|
|
641
|
+
resourceCommandTier,
|
|
642
|
+
};
|
|
643
|
+
}
|
|
644
|
+
|
|
464
645
|
public static toJSON(plan: AiRemediationCommandPlan): JSONObject {
|
|
465
646
|
return JSON.parse(JSON.stringify(plan)) as JSONObject;
|
|
466
647
|
}
|
|
@@ -51,6 +51,7 @@ import {
|
|
|
51
51
|
import {
|
|
52
52
|
RumAlertTemplate,
|
|
53
53
|
getAllRumAlertTemplates,
|
|
54
|
+
getRumAlertTemplates,
|
|
54
55
|
} from "../RumAlertTemplates";
|
|
55
56
|
import {
|
|
56
57
|
ServiceAlertTemplate,
|
|
@@ -96,8 +97,8 @@ export interface MonitorRecommendationResourceTypeDefinition {
|
|
|
96
97
|
* Most resource types ignore the argument entirely — every Kubernetes
|
|
97
98
|
* cluster is offered the same eighteen recommendations, and a
|
|
98
99
|
* zero-argument function satisfies this type, so those are declared
|
|
99
|
-
* exactly as they were. Services and
|
|
100
|
-
* `MonitorRecommendationContext`.
|
|
100
|
+
* exactly as they were. Services, databases and RUM applications are the
|
|
101
|
+
* exceptions: see `MonitorRecommendationContext`.
|
|
101
102
|
*
|
|
102
103
|
* Passing no context means "nothing is known about this resource", and the
|
|
103
104
|
* only honest answer to that is the context-free subset. It does NOT mean
|
|
@@ -356,28 +357,58 @@ function getIoTRecommendations(): Array<MonitorRecommendation> {
|
|
|
356
357
|
});
|
|
357
358
|
}
|
|
358
359
|
|
|
359
|
-
|
|
360
|
+
/*
|
|
361
|
+
* The RUM adapter — two functions for the same reason as Service's.
|
|
362
|
+
*
|
|
363
|
+
* `getRumRecommendations` answers "what should THIS application be offered":
|
|
364
|
+
* everything except the session replay budget alerts, which wait until the
|
|
365
|
+
* application records replays (and, for the monthly pair, has a monthly
|
|
366
|
+
* budget), because only then does the sweep write the series they watch.
|
|
367
|
+
* `getAllRumRecommendations` answers "what can an application ever be
|
|
368
|
+
* offered" — without it, a dismissed or created budget alert could not be
|
|
369
|
+
* resolved back from its id.
|
|
370
|
+
*/
|
|
371
|
+
function normalizeRumTemplate(
|
|
372
|
+
template: RumAlertTemplate,
|
|
373
|
+
): MonitorRecommendation {
|
|
374
|
+
return normalize({
|
|
375
|
+
resourceType: MonitorRecommendationResourceType.RumApplication,
|
|
376
|
+
monitorType: template.monitorType,
|
|
377
|
+
template: template,
|
|
378
|
+
getMonitorStep: (args: MonitorRecommendationArgs) => {
|
|
379
|
+
return template.getMonitorStep({
|
|
380
|
+
rumApplicationId: args.resourceIdentifier,
|
|
381
|
+
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
382
|
+
offlineMonitorStatusId: args.offlineMonitorStatusId,
|
|
383
|
+
defaultIncidentSeverityId: args.defaultIncidentSeverityId,
|
|
384
|
+
defaultAlertSeverityId: args.defaultAlertSeverityId,
|
|
385
|
+
monitorName: args.monitorName,
|
|
386
|
+
});
|
|
387
|
+
},
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
function getRumRecommendations(
|
|
392
|
+
context?: MonitorRecommendationContext | undefined,
|
|
393
|
+
): Array<MonitorRecommendation> {
|
|
394
|
+
return getRumAlertTemplates({
|
|
395
|
+
sessionReplayEnabled: context?.sessionReplayEnabled,
|
|
396
|
+
sessionReplayHasRecorded: context?.sessionReplayHasRecorded,
|
|
397
|
+
sessionReplayMonthlyBudgetInGB: context?.sessionReplayMonthlyBudgetInGB,
|
|
398
|
+
}).map((template: RumAlertTemplate) => {
|
|
399
|
+
return normalizeRumTemplate(template);
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
function getAllRumRecommendations(): Array<MonitorRecommendation> {
|
|
360
404
|
return getAllRumAlertTemplates().map((template: RumAlertTemplate) => {
|
|
361
|
-
return
|
|
362
|
-
resourceType: MonitorRecommendationResourceType.RumApplication,
|
|
363
|
-
monitorType: template.monitorType,
|
|
364
|
-
template: template,
|
|
365
|
-
getMonitorStep: (args: MonitorRecommendationArgs) => {
|
|
366
|
-
return template.getMonitorStep({
|
|
367
|
-
rumApplicationId: args.resourceIdentifier,
|
|
368
|
-
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
369
|
-
offlineMonitorStatusId: args.offlineMonitorStatusId,
|
|
370
|
-
defaultIncidentSeverityId: args.defaultIncidentSeverityId,
|
|
371
|
-
defaultAlertSeverityId: args.defaultAlertSeverityId,
|
|
372
|
-
monitorName: args.monitorName,
|
|
373
|
-
});
|
|
374
|
-
},
|
|
375
|
-
});
|
|
405
|
+
return normalizeRumTemplate(template);
|
|
376
406
|
});
|
|
377
407
|
}
|
|
378
408
|
|
|
379
409
|
/*
|
|
380
|
-
* The Service adapter,
|
|
410
|
+
* The Service adapter, the first that is two functions rather than one (the
|
|
411
|
+
* RUM adapter above and the database adapter below follow its pattern).
|
|
381
412
|
*
|
|
382
413
|
* `getServiceRecommendations` answers "what should THIS service be offered",
|
|
383
414
|
* which depends on its runtime. `getAllServiceRecommendations` answers "what
|
|
@@ -573,6 +604,7 @@ const RESOURCE_TYPE_DEFINITIONS: Array<MonitorRecommendationResourceTypeDefiniti
|
|
|
573
604
|
identifierFieldName: "rumApplicationId",
|
|
574
605
|
icon: IconProp.Globe,
|
|
575
606
|
getRecommendations: getRumRecommendations,
|
|
607
|
+
getAllPossibleRecommendations: getAllRumRecommendations,
|
|
576
608
|
},
|
|
577
609
|
{
|
|
578
610
|
resourceType: MonitorRecommendationResourceType.Service,
|
|
@@ -657,9 +689,10 @@ export default class MonitorRecommendationCatalog {
|
|
|
657
689
|
*
|
|
658
690
|
* This, not `getRecommendations(resourceType)`, is what a per-type
|
|
659
691
|
* invariant has to run over: with no context a database is offered nothing
|
|
660
|
-
* at all (there is no engine-agnostic database template)
|
|
661
|
-
* its language-agnostic subset
|
|
662
|
-
*
|
|
692
|
+
* at all (there is no engine-agnostic database template), a service only
|
|
693
|
+
* its language-agnostic subset and a RUM application none of its session
|
|
694
|
+
* replay budget alerts, so a check written against the context-free set
|
|
695
|
+
* would silently skip every engine-, runtime- and replay-specific template.
|
|
663
696
|
*/
|
|
664
697
|
public static getAllPossibleRecommendations(
|
|
665
698
|
resourceType: MonitorRecommendationResourceType,
|
|
@@ -30,6 +30,11 @@ export enum MonitorRecommendationResourceType {
|
|
|
30
30
|
VMware = "VMware",
|
|
31
31
|
Ceph = "Ceph",
|
|
32
32
|
IoTDevice = "IoTDevice",
|
|
33
|
+
/*
|
|
34
|
+
* A RUM (browser) application. Its recommendation set gains the session
|
|
35
|
+
* replay storage budget alerts once it records replays — see
|
|
36
|
+
* `MonitorRecommendationContext`.
|
|
37
|
+
*/
|
|
33
38
|
RumApplication = "RumApplication",
|
|
34
39
|
/*
|
|
35
40
|
* An APM telemetry service — a backend process reporting OTel traces,
|
|
@@ -58,12 +63,14 @@ export enum MonitorRecommendationResourceType {
|
|
|
58
63
|
* exist on a Go service, and recommending them there produces monitors that
|
|
59
64
|
* silently never fire, which is worse than recommending nothing. Databases
|
|
60
65
|
* are the same by engine: PostgreSQL's receiver and Redis's share no metric
|
|
61
|
-
* name.
|
|
66
|
+
* name. And a RUM application is only offered its session replay budget
|
|
67
|
+
* alerts once it records replays, because only then are those metrics
|
|
68
|
+
* written for it.
|
|
62
69
|
*
|
|
63
70
|
* Optional everywhere, and every field inside it is optional too, so a caller
|
|
64
71
|
* that knows nothing still gets the subset that is true of every resource of
|
|
65
|
-
* the type — the language-agnostic recommendations for a service,
|
|
66
|
-
* for a
|
|
72
|
+
* the type — the language-agnostic recommendations for a service, none for a
|
|
73
|
+
* database, and no budget alerts for a RUM application — rather than a guess.
|
|
67
74
|
*/
|
|
68
75
|
export interface MonitorRecommendationContext {
|
|
69
76
|
/*
|
|
@@ -92,6 +99,31 @@ export interface MonitorRecommendationContext {
|
|
|
92
99
|
* `null` / `undefined` mean "not known" and withhold nothing.
|
|
93
100
|
*/
|
|
94
101
|
databaseEngineMetricsReported?: boolean | null | undefined;
|
|
102
|
+
/*
|
|
103
|
+
* A RUM application's `isSessionReplayEnabled`: the first of the three
|
|
104
|
+
* facts that decide whether it is offered its session replay storage budget
|
|
105
|
+
* alerts (see `getRumAlertTemplates`). The budget sweep only writes those
|
|
106
|
+
* metrics for an application that has session replay on AND has recorded,
|
|
107
|
+
* and the monthly ones only while it has a monthly budget; a monitor over a
|
|
108
|
+
* series nobody writes never fires.
|
|
109
|
+
*
|
|
110
|
+
* Unlike `databaseEngineMetricsReported`, `null` / `undefined` in all three
|
|
111
|
+
* mean "not known" and WITHHOLD: these alerts are an addition to a set that
|
|
112
|
+
* is complete without them, so a page that knows nothing shows exactly what
|
|
113
|
+
* it showed before they existed.
|
|
114
|
+
*/
|
|
115
|
+
sessionReplayEnabled?: boolean | null | undefined;
|
|
116
|
+
/*
|
|
117
|
+
* Whether a replay was ever accepted for the application (its
|
|
118
|
+
* `sessionReplayLastChunkReceivedAt` is set). The switch alone says
|
|
119
|
+
* nothing: it is on by default, on every RUM application.
|
|
120
|
+
*/
|
|
121
|
+
sessionReplayHasRecorded?: boolean | null | undefined;
|
|
122
|
+
/*
|
|
123
|
+
* Its `sessionReplayMonthlyBudgetInGB` (GiB, like every replay "GB"). Only
|
|
124
|
+
* a finite number above 0 is a budget; 0, blank and anything else is none.
|
|
125
|
+
*/
|
|
126
|
+
sessionReplayMonthlyBudgetInGB?: number | null | undefined;
|
|
95
127
|
}
|
|
96
128
|
|
|
97
129
|
/*
|