@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
|
@@ -3,7 +3,15 @@ import HostLabelRuleEngineService from "./HostLabelRuleEngineService";
|
|
|
3
3
|
import HostOwnerRuleEngineService from "./HostOwnerRuleEngineService";
|
|
4
4
|
import Model from "../../Models/DatabaseModels/Host";
|
|
5
5
|
import Label from "../../Models/DatabaseModels/Label";
|
|
6
|
-
import { OnCreate, OnUpdate } from "../Types/Database/Hooks";
|
|
6
|
+
import { OnCreate, OnDelete, OnUpdate } from "../Types/Database/Hooks";
|
|
7
|
+
import CreateBy from "../Types/Database/CreateBy";
|
|
8
|
+
import DeleteBy from "../Types/Database/DeleteBy";
|
|
9
|
+
import UpdateBy from "../Types/Database/UpdateBy";
|
|
10
|
+
import ResourceAiAccessSettings, {
|
|
11
|
+
ResourceAiAccessFeedItem,
|
|
12
|
+
} from "../Utils/AI/ResourceAccess/ResourceAiAccessSettings";
|
|
13
|
+
import ResourceAiDeleteCleanup from "../Utils/AI/ResourceAccess/ResourceAiDeleteCleanup";
|
|
14
|
+
import AiResourceType from "../../Types/ResourceAiAgent/AiResourceType";
|
|
7
15
|
import HostFeedService from "./HostFeedService";
|
|
8
16
|
import { HostFeedEventType } from "../../Models/DatabaseModels/HostFeed";
|
|
9
17
|
import ResourceFeedUtil from "../Utils/ResourceFeed/ResourceFeedUtil";
|
|
@@ -119,6 +127,13 @@ export class Service extends DatabaseService<Model> {
|
|
|
119
127
|
public async findOrCreateByHostIdentifier(data: {
|
|
120
128
|
projectId: ObjectID;
|
|
121
129
|
hostIdentifier: string;
|
|
130
|
+
/*
|
|
131
|
+
* Skip the in-process memo and look the row up (the memo is then
|
|
132
|
+
* refreshed with what was found or created). For a caller that learned
|
|
133
|
+
* the memoed id names a host deleted since: the memo is never
|
|
134
|
+
* invalidated by a delete, so it keeps that id for up to its TTL.
|
|
135
|
+
*/
|
|
136
|
+
bypassMemo?: boolean | undefined;
|
|
122
137
|
}): Promise<Model> {
|
|
123
138
|
/*
|
|
124
139
|
* Canonicalize the identifier (trim + lowercase, matching
|
|
@@ -141,8 +156,9 @@ export class Service extends DatabaseService<Model> {
|
|
|
141
156
|
* the resolving call performed within the last minute.
|
|
142
157
|
*/
|
|
143
158
|
const memoKey: string = `${data.projectId.toString()}:${hostIdentifier}`;
|
|
144
|
-
const memoedResolution: HostResolution | undefined =
|
|
145
|
-
|
|
159
|
+
const memoedResolution: HostResolution | undefined = data.bypassMemo
|
|
160
|
+
? undefined
|
|
161
|
+
: hostResolutionInProcessMemo.get(memoKey);
|
|
146
162
|
if (memoedResolution) {
|
|
147
163
|
const memoedHost: Model = new Model();
|
|
148
164
|
memoedHost._id = memoedResolution.hostIdStr;
|
|
@@ -464,8 +480,14 @@ export class Service extends DatabaseService<Model> {
|
|
|
464
480
|
cloudAccountId: extra?.cloudAccountId ?? null,
|
|
465
481
|
};
|
|
466
482
|
|
|
483
|
+
/*
|
|
484
|
+
* Change detection only, but the payload carries the cloud account id,
|
|
485
|
+
* so it is hashed with SHA-256 rather than SHA-1. The value lives in the
|
|
486
|
+
* heartbeat throttle's cache, so the switch costs each host one extra
|
|
487
|
+
* metadata write after a deploy, nothing more.
|
|
488
|
+
*/
|
|
467
489
|
return crypto
|
|
468
|
-
.createHash("
|
|
490
|
+
.createHash("sha256")
|
|
469
491
|
.update(JSON.stringify(normalized))
|
|
470
492
|
.digest("hex");
|
|
471
493
|
}
|
|
@@ -739,6 +761,79 @@ export class Service extends DatabaseService<Model> {
|
|
|
739
761
|
});
|
|
740
762
|
}
|
|
741
763
|
|
|
764
|
+
/*
|
|
765
|
+
* Deleting a host settles its in-flight AI remediation rounds and removes its
|
|
766
|
+
* resource AI agent — read before the delete, done after it for the hosts
|
|
767
|
+
* actually deleted (ResourceAiDeleteCleanup, shared by every resource AI
|
|
768
|
+
* agent's resource).
|
|
769
|
+
*/
|
|
770
|
+
@CaptureSpan()
|
|
771
|
+
protected override async onBeforeDelete(
|
|
772
|
+
deleteBy: DeleteBy<Model>,
|
|
773
|
+
): Promise<OnDelete<Model>> {
|
|
774
|
+
return {
|
|
775
|
+
deleteBy,
|
|
776
|
+
carryForward: await ResourceAiDeleteCleanup.beforeDelete({
|
|
777
|
+
resourceType: AiResourceType.Host,
|
|
778
|
+
service: this,
|
|
779
|
+
deleteBy,
|
|
780
|
+
}),
|
|
781
|
+
};
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
@CaptureSpan()
|
|
785
|
+
protected override async onDeleteSuccess(
|
|
786
|
+
onDelete: OnDelete<Model>,
|
|
787
|
+
deletedItemIds: Array<ObjectID>,
|
|
788
|
+
): Promise<OnDelete<Model>> {
|
|
789
|
+
await ResourceAiDeleteCleanup.afterDelete({
|
|
790
|
+
resourceType: AiResourceType.Host,
|
|
791
|
+
onDelete,
|
|
792
|
+
deletedItemIds,
|
|
793
|
+
});
|
|
794
|
+
|
|
795
|
+
return onDelete;
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
/*
|
|
799
|
+
* A create is held to the same AI access rules as an update, judged
|
|
800
|
+
* against the never-configured defaults a new host starts from: an
|
|
801
|
+
* unusable mode or allowlist is refused for every caller, and the
|
|
802
|
+
* server-only aiAccess* columns for every caller but root (a master admin
|
|
803
|
+
* included, whom the create column ACLs never check).
|
|
804
|
+
*/
|
|
805
|
+
@CaptureSpan()
|
|
806
|
+
protected override async onBeforeCreate(
|
|
807
|
+
createBy: CreateBy<Model>,
|
|
808
|
+
): Promise<OnCreate<Model>> {
|
|
809
|
+
ResourceAiAccessSettings.checkCreate({
|
|
810
|
+
resourceType: AiResourceType.Host,
|
|
811
|
+
createBy,
|
|
812
|
+
});
|
|
813
|
+
|
|
814
|
+
return { createBy, carryForward: null };
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
/*
|
|
818
|
+
* An operator's write of an AI access setting (the investigation switch, the
|
|
819
|
+
* remediation mode, the command allowlist) is validated and checked against
|
|
820
|
+
* who may make AI do more on this host — the rules every resource AI agent's
|
|
821
|
+
* resource shares (ResourceAiAccessSettings).
|
|
822
|
+
*/
|
|
823
|
+
@CaptureSpan()
|
|
824
|
+
protected override async onBeforeUpdate(
|
|
825
|
+
updateBy: UpdateBy<Model>,
|
|
826
|
+
): Promise<OnUpdate<Model>> {
|
|
827
|
+
return {
|
|
828
|
+
updateBy,
|
|
829
|
+
carryForward: await ResourceAiAccessSettings.checkUpdate({
|
|
830
|
+
resourceType: AiResourceType.Host,
|
|
831
|
+
service: this,
|
|
832
|
+
updateBy,
|
|
833
|
+
}),
|
|
834
|
+
};
|
|
835
|
+
}
|
|
836
|
+
|
|
742
837
|
@CaptureSpan()
|
|
743
838
|
protected override async onUpdateSuccess(
|
|
744
839
|
onUpdate: OnUpdate<Model>,
|
|
@@ -750,6 +845,33 @@ export class Service extends DatabaseService<Model> {
|
|
|
750
845
|
},
|
|
751
846
|
);
|
|
752
847
|
|
|
848
|
+
/*
|
|
849
|
+
* An operator's AI access write: recorded on the feed, and the host marked
|
|
850
|
+
* AI-configured.
|
|
851
|
+
*/
|
|
852
|
+
await ResourceAiAccessSettings.afterUpdate({
|
|
853
|
+
service: this,
|
|
854
|
+
onUpdate,
|
|
855
|
+
updatedItemIds,
|
|
856
|
+
getResourceMarkdownLink: (
|
|
857
|
+
projectId: ObjectID,
|
|
858
|
+
hostId: ObjectID,
|
|
859
|
+
): Promise<string> => {
|
|
860
|
+
return this.getHostMarkdownLink(projectId, hostId);
|
|
861
|
+
},
|
|
862
|
+
createFeedItem: async (item: ResourceAiAccessFeedItem): Promise<void> => {
|
|
863
|
+
await HostFeedService.createHostFeedItem({
|
|
864
|
+
hostId: item.resourceId,
|
|
865
|
+
projectId: item.projectId,
|
|
866
|
+
hostFeedEventType: HostFeedEventType.HostUpdated,
|
|
867
|
+
displayColor: item.displayColor,
|
|
868
|
+
feedInfoInMarkdown: item.feedInfoInMarkdown,
|
|
869
|
+
moreInformationInMarkdown: item.moreInformationInMarkdown,
|
|
870
|
+
userId: item.userId,
|
|
871
|
+
});
|
|
872
|
+
},
|
|
873
|
+
});
|
|
874
|
+
|
|
753
875
|
return onUpdate;
|
|
754
876
|
}
|
|
755
877
|
|
|
@@ -1,10 +1,57 @@
|
|
|
1
1
|
import DatabaseService from "./DatabaseService";
|
|
2
2
|
import Model from "../../Models/DatabaseModels/MetricRecordingRule";
|
|
3
|
+
import CreateBy from "../Types/Database/CreateBy";
|
|
4
|
+
import UpdateBy from "../Types/Database/UpdateBy";
|
|
5
|
+
import { OnCreate, OnUpdate } from "../Types/Database/Hooks";
|
|
6
|
+
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
7
|
+
import BadDataException from "../../Types/Exception/BadDataException";
|
|
8
|
+
import SessionReplayBudgetMetricTypeUtil, {
|
|
9
|
+
SESSION_REPLAY_METRIC_NAME_PREFIX,
|
|
10
|
+
} from "../../Utils/SessionReplay/SessionReplayBudgetMetricType";
|
|
3
11
|
|
|
4
12
|
export class Service extends DatabaseService<Model> {
|
|
5
13
|
public constructor() {
|
|
6
14
|
super(Model);
|
|
7
15
|
}
|
|
16
|
+
|
|
17
|
+
/*
|
|
18
|
+
* A recording rule writes its output straight into the metric store, past
|
|
19
|
+
* OTLP ingest, so the reserved session replay names have to be refused
|
|
20
|
+
* here too: those series open budget incidents and are left out of
|
|
21
|
+
* telemetry billing by name, so nothing but the budget sweep may write
|
|
22
|
+
* them (see SessionReplayBudgetMetricTypeUtil.isReservedMetricName).
|
|
23
|
+
*/
|
|
24
|
+
public static assertOutputMetricNameAllowed(name: unknown): void {
|
|
25
|
+
if (
|
|
26
|
+
typeof name === "string" &&
|
|
27
|
+
SessionReplayBudgetMetricTypeUtil.isReservedMetricName(name.trim())
|
|
28
|
+
) {
|
|
29
|
+
throw new BadDataException(
|
|
30
|
+
`Metric names that start with "${SESSION_REPLAY_METRIC_NAME_PREFIX}" are reserved for OneUptime's session replay budget metrics. Choose another output metric name.`,
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@CaptureSpan()
|
|
36
|
+
protected override async onBeforeCreate(
|
|
37
|
+
createBy: CreateBy<Model>,
|
|
38
|
+
): Promise<OnCreate<Model>> {
|
|
39
|
+
Service.assertOutputMetricNameAllowed(createBy.data.outputMetricName);
|
|
40
|
+
|
|
41
|
+
return { createBy, carryForward: null };
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@CaptureSpan()
|
|
45
|
+
protected override async onBeforeUpdate(
|
|
46
|
+
updateBy: UpdateBy<Model>,
|
|
47
|
+
): Promise<OnUpdate<Model>> {
|
|
48
|
+
// Only an update that sets the name can make it reserved.
|
|
49
|
+
Service.assertOutputMetricNameAllowed(
|
|
50
|
+
(updateBy.data as unknown as Record<string, unknown>)["outputMetricName"],
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
return { updateBy, carryForward: null };
|
|
54
|
+
}
|
|
8
55
|
}
|
|
9
56
|
|
|
10
57
|
export default new Service();
|
|
@@ -3,7 +3,15 @@ import PodmanHostLabelRuleEngineService from "./PodmanHostLabelRuleEngineService
|
|
|
3
3
|
import PodmanHostOwnerRuleEngineService from "./PodmanHostOwnerRuleEngineService";
|
|
4
4
|
import Model from "../../Models/DatabaseModels/PodmanHost";
|
|
5
5
|
import Label from "../../Models/DatabaseModels/Label";
|
|
6
|
-
import { OnCreate, OnUpdate } from "../Types/Database/Hooks";
|
|
6
|
+
import { OnCreate, OnDelete, OnUpdate } from "../Types/Database/Hooks";
|
|
7
|
+
import CreateBy from "../Types/Database/CreateBy";
|
|
8
|
+
import DeleteBy from "../Types/Database/DeleteBy";
|
|
9
|
+
import UpdateBy from "../Types/Database/UpdateBy";
|
|
10
|
+
import ResourceAiAccessSettings, {
|
|
11
|
+
ResourceAiAccessFeedItem,
|
|
12
|
+
} from "../Utils/AI/ResourceAccess/ResourceAiAccessSettings";
|
|
13
|
+
import ResourceAiDeleteCleanup from "../Utils/AI/ResourceAccess/ResourceAiDeleteCleanup";
|
|
14
|
+
import AiResourceType from "../../Types/ResourceAiAgent/AiResourceType";
|
|
7
15
|
import PodmanHostFeedService from "./PodmanHostFeedService";
|
|
8
16
|
import { PodmanHostFeedEventType } from "../../Models/DatabaseModels/PodmanHostFeed";
|
|
9
17
|
import ResourceFeedUtil from "../Utils/ResourceFeed/ResourceFeedUtil";
|
|
@@ -472,6 +480,79 @@ export class Service extends DatabaseService<Model> {
|
|
|
472
480
|
});
|
|
473
481
|
}
|
|
474
482
|
|
|
483
|
+
/*
|
|
484
|
+
* Deleting a Podman host settles its in-flight AI remediation rounds and
|
|
485
|
+
* removes its resource AI agent — read before the delete, done after it for
|
|
486
|
+
* the Podman hosts actually deleted (ResourceAiDeleteCleanup, shared by every
|
|
487
|
+
* resource AI agent's resource).
|
|
488
|
+
*/
|
|
489
|
+
@CaptureSpan()
|
|
490
|
+
protected override async onBeforeDelete(
|
|
491
|
+
deleteBy: DeleteBy<Model>,
|
|
492
|
+
): Promise<OnDelete<Model>> {
|
|
493
|
+
return {
|
|
494
|
+
deleteBy,
|
|
495
|
+
carryForward: await ResourceAiDeleteCleanup.beforeDelete({
|
|
496
|
+
resourceType: AiResourceType.PodmanHost,
|
|
497
|
+
service: this,
|
|
498
|
+
deleteBy,
|
|
499
|
+
}),
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
@CaptureSpan()
|
|
504
|
+
protected override async onDeleteSuccess(
|
|
505
|
+
onDelete: OnDelete<Model>,
|
|
506
|
+
deletedItemIds: Array<ObjectID>,
|
|
507
|
+
): Promise<OnDelete<Model>> {
|
|
508
|
+
await ResourceAiDeleteCleanup.afterDelete({
|
|
509
|
+
resourceType: AiResourceType.PodmanHost,
|
|
510
|
+
onDelete,
|
|
511
|
+
deletedItemIds,
|
|
512
|
+
});
|
|
513
|
+
|
|
514
|
+
return onDelete;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
/*
|
|
518
|
+
* A create is held to the same AI access rules as an update, judged
|
|
519
|
+
* against the never-configured defaults a new Podman host starts from: an
|
|
520
|
+
* unusable mode or allowlist is refused for every caller, and the
|
|
521
|
+
* server-only aiAccess* columns for every caller but root (a master admin
|
|
522
|
+
* included, whom the create column ACLs never check).
|
|
523
|
+
*/
|
|
524
|
+
@CaptureSpan()
|
|
525
|
+
protected override async onBeforeCreate(
|
|
526
|
+
createBy: CreateBy<Model>,
|
|
527
|
+
): Promise<OnCreate<Model>> {
|
|
528
|
+
ResourceAiAccessSettings.checkCreate({
|
|
529
|
+
resourceType: AiResourceType.PodmanHost,
|
|
530
|
+
createBy,
|
|
531
|
+
});
|
|
532
|
+
|
|
533
|
+
return { createBy, carryForward: null };
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
/*
|
|
537
|
+
* An operator's write of an AI access setting (the investigation switch, the
|
|
538
|
+
* remediation mode, the command allowlist) is validated and checked against
|
|
539
|
+
* who may make AI do more on this Podman host — the rules every resource AI
|
|
540
|
+
* agent's resource shares (ResourceAiAccessSettings).
|
|
541
|
+
*/
|
|
542
|
+
@CaptureSpan()
|
|
543
|
+
protected override async onBeforeUpdate(
|
|
544
|
+
updateBy: UpdateBy<Model>,
|
|
545
|
+
): Promise<OnUpdate<Model>> {
|
|
546
|
+
return {
|
|
547
|
+
updateBy,
|
|
548
|
+
carryForward: await ResourceAiAccessSettings.checkUpdate({
|
|
549
|
+
resourceType: AiResourceType.PodmanHost,
|
|
550
|
+
service: this,
|
|
551
|
+
updateBy,
|
|
552
|
+
}),
|
|
553
|
+
};
|
|
554
|
+
}
|
|
555
|
+
|
|
475
556
|
@CaptureSpan()
|
|
476
557
|
protected override async onUpdateSuccess(
|
|
477
558
|
onUpdate: OnUpdate<Model>,
|
|
@@ -483,6 +564,33 @@ export class Service extends DatabaseService<Model> {
|
|
|
483
564
|
},
|
|
484
565
|
);
|
|
485
566
|
|
|
567
|
+
/*
|
|
568
|
+
* An operator's AI access write: recorded on the feed, and the Podman host
|
|
569
|
+
* marked AI-configured.
|
|
570
|
+
*/
|
|
571
|
+
await ResourceAiAccessSettings.afterUpdate({
|
|
572
|
+
service: this,
|
|
573
|
+
onUpdate,
|
|
574
|
+
updatedItemIds,
|
|
575
|
+
getResourceMarkdownLink: (
|
|
576
|
+
projectId: ObjectID,
|
|
577
|
+
podmanHostId: ObjectID,
|
|
578
|
+
): Promise<string> => {
|
|
579
|
+
return this.getPodmanHostMarkdownLink(projectId, podmanHostId);
|
|
580
|
+
},
|
|
581
|
+
createFeedItem: async (item: ResourceAiAccessFeedItem): Promise<void> => {
|
|
582
|
+
await PodmanHostFeedService.createPodmanHostFeedItem({
|
|
583
|
+
podmanHostId: item.resourceId,
|
|
584
|
+
projectId: item.projectId,
|
|
585
|
+
podmanHostFeedEventType: PodmanHostFeedEventType.PodmanHostUpdated,
|
|
586
|
+
displayColor: item.displayColor,
|
|
587
|
+
feedInfoInMarkdown: item.feedInfoInMarkdown,
|
|
588
|
+
moreInformationInMarkdown: item.moreInformationInMarkdown,
|
|
589
|
+
userId: item.userId,
|
|
590
|
+
});
|
|
591
|
+
},
|
|
592
|
+
});
|
|
593
|
+
|
|
486
594
|
return onUpdate;
|
|
487
595
|
}
|
|
488
596
|
|
|
@@ -3,7 +3,15 @@ import ProxmoxClusterLabelRuleEngineService from "./ProxmoxClusterLabelRuleEngin
|
|
|
3
3
|
import ProxmoxClusterOwnerRuleEngineService from "./ProxmoxClusterOwnerRuleEngineService";
|
|
4
4
|
import Model from "../../Models/DatabaseModels/ProxmoxCluster";
|
|
5
5
|
import Label from "../../Models/DatabaseModels/Label";
|
|
6
|
-
import { OnCreate, OnUpdate } from "../Types/Database/Hooks";
|
|
6
|
+
import { OnCreate, OnDelete, OnUpdate } from "../Types/Database/Hooks";
|
|
7
|
+
import CreateBy from "../Types/Database/CreateBy";
|
|
8
|
+
import DeleteBy from "../Types/Database/DeleteBy";
|
|
9
|
+
import UpdateBy from "../Types/Database/UpdateBy";
|
|
10
|
+
import ResourceAiAccessSettings, {
|
|
11
|
+
ResourceAiAccessFeedItem,
|
|
12
|
+
} from "../Utils/AI/ResourceAccess/ResourceAiAccessSettings";
|
|
13
|
+
import ResourceAiDeleteCleanup from "../Utils/AI/ResourceAccess/ResourceAiDeleteCleanup";
|
|
14
|
+
import AiResourceType from "../../Types/ResourceAiAgent/AiResourceType";
|
|
7
15
|
import ProxmoxClusterFeedService from "./ProxmoxClusterFeedService";
|
|
8
16
|
import { ProxmoxClusterFeedEventType } from "../../Models/DatabaseModels/ProxmoxClusterFeed";
|
|
9
17
|
import ResourceFeedUtil from "../Utils/ResourceFeed/ResourceFeedUtil";
|
|
@@ -485,6 +493,79 @@ export class Service extends DatabaseService<Model> {
|
|
|
485
493
|
});
|
|
486
494
|
}
|
|
487
495
|
|
|
496
|
+
/*
|
|
497
|
+
* Deleting a Proxmox cluster settles its in-flight AI remediation rounds and
|
|
498
|
+
* removes its resource AI agent — read before the delete, done after it for
|
|
499
|
+
* the Proxmox clusters actually deleted (ResourceAiDeleteCleanup, shared by
|
|
500
|
+
* every resource AI agent's resource).
|
|
501
|
+
*/
|
|
502
|
+
@CaptureSpan()
|
|
503
|
+
protected override async onBeforeDelete(
|
|
504
|
+
deleteBy: DeleteBy<Model>,
|
|
505
|
+
): Promise<OnDelete<Model>> {
|
|
506
|
+
return {
|
|
507
|
+
deleteBy,
|
|
508
|
+
carryForward: await ResourceAiDeleteCleanup.beforeDelete({
|
|
509
|
+
resourceType: AiResourceType.ProxmoxCluster,
|
|
510
|
+
service: this,
|
|
511
|
+
deleteBy,
|
|
512
|
+
}),
|
|
513
|
+
};
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
@CaptureSpan()
|
|
517
|
+
protected override async onDeleteSuccess(
|
|
518
|
+
onDelete: OnDelete<Model>,
|
|
519
|
+
deletedItemIds: Array<ObjectID>,
|
|
520
|
+
): Promise<OnDelete<Model>> {
|
|
521
|
+
await ResourceAiDeleteCleanup.afterDelete({
|
|
522
|
+
resourceType: AiResourceType.ProxmoxCluster,
|
|
523
|
+
onDelete,
|
|
524
|
+
deletedItemIds,
|
|
525
|
+
});
|
|
526
|
+
|
|
527
|
+
return onDelete;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
/*
|
|
531
|
+
* A create is held to the same AI access rules as an update, judged
|
|
532
|
+
* against the never-configured defaults a new Proxmox cluster starts from: an
|
|
533
|
+
* unusable mode or allowlist is refused for every caller, and the
|
|
534
|
+
* server-only aiAccess* columns for every caller but root (a master admin
|
|
535
|
+
* included, whom the create column ACLs never check).
|
|
536
|
+
*/
|
|
537
|
+
@CaptureSpan()
|
|
538
|
+
protected override async onBeforeCreate(
|
|
539
|
+
createBy: CreateBy<Model>,
|
|
540
|
+
): Promise<OnCreate<Model>> {
|
|
541
|
+
ResourceAiAccessSettings.checkCreate({
|
|
542
|
+
resourceType: AiResourceType.ProxmoxCluster,
|
|
543
|
+
createBy,
|
|
544
|
+
});
|
|
545
|
+
|
|
546
|
+
return { createBy, carryForward: null };
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
/*
|
|
550
|
+
* An operator's write of an AI access setting (the investigation switch, the
|
|
551
|
+
* remediation mode, the command allowlist) is validated and checked against
|
|
552
|
+
* who may make AI do more on this Proxmox cluster — the rules every resource
|
|
553
|
+
* AI agent's resource shares (ResourceAiAccessSettings).
|
|
554
|
+
*/
|
|
555
|
+
@CaptureSpan()
|
|
556
|
+
protected override async onBeforeUpdate(
|
|
557
|
+
updateBy: UpdateBy<Model>,
|
|
558
|
+
): Promise<OnUpdate<Model>> {
|
|
559
|
+
return {
|
|
560
|
+
updateBy,
|
|
561
|
+
carryForward: await ResourceAiAccessSettings.checkUpdate({
|
|
562
|
+
resourceType: AiResourceType.ProxmoxCluster,
|
|
563
|
+
service: this,
|
|
564
|
+
updateBy,
|
|
565
|
+
}),
|
|
566
|
+
};
|
|
567
|
+
}
|
|
568
|
+
|
|
488
569
|
@CaptureSpan()
|
|
489
570
|
protected override async onUpdateSuccess(
|
|
490
571
|
onUpdate: OnUpdate<Model>,
|
|
@@ -496,6 +577,34 @@ export class Service extends DatabaseService<Model> {
|
|
|
496
577
|
},
|
|
497
578
|
);
|
|
498
579
|
|
|
580
|
+
/*
|
|
581
|
+
* An operator's AI access write: recorded on the feed, and the Proxmox
|
|
582
|
+
* cluster marked AI-configured.
|
|
583
|
+
*/
|
|
584
|
+
await ResourceAiAccessSettings.afterUpdate({
|
|
585
|
+
service: this,
|
|
586
|
+
onUpdate,
|
|
587
|
+
updatedItemIds,
|
|
588
|
+
getResourceMarkdownLink: (
|
|
589
|
+
projectId: ObjectID,
|
|
590
|
+
proxmoxClusterId: ObjectID,
|
|
591
|
+
): Promise<string> => {
|
|
592
|
+
return this.getProxmoxClusterMarkdownLink(projectId, proxmoxClusterId);
|
|
593
|
+
},
|
|
594
|
+
createFeedItem: async (item: ResourceAiAccessFeedItem): Promise<void> => {
|
|
595
|
+
await ProxmoxClusterFeedService.createProxmoxClusterFeedItem({
|
|
596
|
+
proxmoxClusterId: item.resourceId,
|
|
597
|
+
projectId: item.projectId,
|
|
598
|
+
proxmoxClusterFeedEventType:
|
|
599
|
+
ProxmoxClusterFeedEventType.ProxmoxClusterUpdated,
|
|
600
|
+
displayColor: item.displayColor,
|
|
601
|
+
feedInfoInMarkdown: item.feedInfoInMarkdown,
|
|
602
|
+
moreInformationInMarkdown: item.moreInformationInMarkdown,
|
|
603
|
+
userId: item.userId,
|
|
604
|
+
});
|
|
605
|
+
},
|
|
606
|
+
});
|
|
607
|
+
|
|
499
608
|
return onUpdate;
|
|
500
609
|
}
|
|
501
610
|
|