@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
|
@@ -19,16 +19,8 @@ import IncidentStateService from "../../../../Services/IncidentStateService";
|
|
|
19
19
|
import UserNotificationEventType from "../../../../../Types/UserNotification/UserNotificationEventType";
|
|
20
20
|
import OnCallDutyPolicy from "../../../../../Models/DatabaseModels/OnCallDutyPolicy";
|
|
21
21
|
import IncidentState from "../../../../../Models/DatabaseModels/IncidentState";
|
|
22
|
-
import IncidentSeverityService from "../../../../Services/IncidentSeverityService";
|
|
23
|
-
import IncidentSeverity from "../../../../../Models/DatabaseModels/IncidentSeverity";
|
|
24
|
-
import MonitorService from "../../../../Services/MonitorService";
|
|
25
22
|
import Monitor from "../../../../../Models/DatabaseModels/Monitor";
|
|
26
|
-
import MonitorStatusService from "../../../../Services/MonitorStatusService";
|
|
27
|
-
import MonitorStatus from "../../../../../Models/DatabaseModels/MonitorStatus";
|
|
28
|
-
import LabelService from "../../../../Services/LabelService";
|
|
29
23
|
import Label from "../../../../../Models/DatabaseModels/Label";
|
|
30
|
-
import SortOrder from "../../../../../Types/BaseDatabase/SortOrder";
|
|
31
|
-
import { LIMIT_PER_PROJECT } from "../../../../../Types/Database/LimitMax";
|
|
32
24
|
import BadDataException from "../../../../../Types/Exception/BadDataException";
|
|
33
25
|
import URL from "../../../../../Types/API/URL";
|
|
34
26
|
import DatabaseCommonInteractionProps from "../../../../../Types/BaseDatabase/DatabaseCommonInteractionProps";
|
|
@@ -39,6 +31,25 @@ import IncidentStateTimeline from "../../../../../Models/DatabaseModels/Incident
|
|
|
39
31
|
import IncidentPublicNote from "../../../../../Models/DatabaseModels/IncidentPublicNote";
|
|
40
32
|
import IncidentInternalNote from "../../../../../Models/DatabaseModels/IncidentInternalNote";
|
|
41
33
|
import OnCallDutyPolicyExecutionLog from "../../../../../Models/DatabaseModels/OnCallDutyPolicyExecutionLog";
|
|
34
|
+
import ColumnLength from "../../../../../Types/Database/ColumnLength";
|
|
35
|
+
import { truncateToLength } from "../../../Database/TruncateColumnValue";
|
|
36
|
+
import MicrosoftTeamsCardChoices, {
|
|
37
|
+
MicrosoftTeamsCardChoiceList,
|
|
38
|
+
} from "../MicrosoftTeamsCardChoices";
|
|
39
|
+
import { MICROSOFT_TEAMS_CARD_SIZE_BUDGETS_IN_BYTES } from "../MicrosoftTeamsMessageSize";
|
|
40
|
+
import MicrosoftTeamsReplies from "../MicrosoftTeamsReplies";
|
|
41
|
+
|
|
42
|
+
// Incident.title is a LongText column.
|
|
43
|
+
const MICROSOFT_TEAMS_INCIDENT_TITLE_MAX_LENGTH: number = ColumnLength.LongText;
|
|
44
|
+
|
|
45
|
+
// The lists the "Create New Incident" card offers.
|
|
46
|
+
export interface MicrosoftTeamsNewIncidentFormChoices {
|
|
47
|
+
severities: MicrosoftTeamsCardChoiceList;
|
|
48
|
+
monitors: MicrosoftTeamsCardChoiceList;
|
|
49
|
+
monitorStatuses: MicrosoftTeamsCardChoiceList;
|
|
50
|
+
labels: MicrosoftTeamsCardChoiceList;
|
|
51
|
+
onCallDutyPolicies: MicrosoftTeamsCardChoiceList;
|
|
52
|
+
}
|
|
42
53
|
|
|
43
54
|
export default class MicrosoftTeamsIncidentActions {
|
|
44
55
|
@CaptureSpan()
|
|
@@ -488,12 +499,19 @@ export default class MicrosoftTeamsIncidentActions {
|
|
|
488
499
|
});
|
|
489
500
|
}
|
|
490
501
|
|
|
491
|
-
await
|
|
502
|
+
await MicrosoftTeamsReplies.sendBestEffort(
|
|
503
|
+
turnContext,
|
|
504
|
+
"✅ Note added successfully.",
|
|
505
|
+
);
|
|
492
506
|
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
507
|
+
/*
|
|
508
|
+
* The action is done: a refused reply or a failed delete of the
|
|
509
|
+
* form must not read as a failed action, which invites a repeat.
|
|
510
|
+
*/
|
|
511
|
+
await MicrosoftTeamsReplies.deleteBestEffort(
|
|
512
|
+
turnContext,
|
|
513
|
+
turnContext.activity.replyToId,
|
|
514
|
+
);
|
|
497
515
|
|
|
498
516
|
return;
|
|
499
517
|
}
|
|
@@ -568,14 +586,19 @@ export default class MicrosoftTeamsIncidentActions {
|
|
|
568
586
|
userNotificationEventType: UserNotificationEventType.IncidentCreated,
|
|
569
587
|
});
|
|
570
588
|
|
|
571
|
-
await
|
|
589
|
+
await MicrosoftTeamsReplies.sendBestEffort(
|
|
590
|
+
turnContext,
|
|
572
591
|
"✅ On-call policy executed successfully.",
|
|
573
592
|
);
|
|
574
593
|
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
594
|
+
/*
|
|
595
|
+
* The action is done: a refused reply or a failed delete of the
|
|
596
|
+
* form must not read as a failed action, which invites a repeat.
|
|
597
|
+
*/
|
|
598
|
+
await MicrosoftTeamsReplies.deleteBestEffort(
|
|
599
|
+
turnContext,
|
|
600
|
+
turnContext.activity.replyToId,
|
|
601
|
+
);
|
|
579
602
|
|
|
580
603
|
return;
|
|
581
604
|
}
|
|
@@ -643,14 +666,19 @@ export default class MicrosoftTeamsIncidentActions {
|
|
|
643
666
|
props: databaseProps,
|
|
644
667
|
});
|
|
645
668
|
|
|
646
|
-
await
|
|
669
|
+
await MicrosoftTeamsReplies.sendBestEffort(
|
|
670
|
+
turnContext,
|
|
647
671
|
"✅ Incident state changed successfully.",
|
|
648
672
|
);
|
|
649
673
|
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
674
|
+
/*
|
|
675
|
+
* The action is done: a refused reply or a failed delete of the
|
|
676
|
+
* form must not read as a failed action, which invites a repeat.
|
|
677
|
+
*/
|
|
678
|
+
await MicrosoftTeamsReplies.deleteBestEffort(
|
|
679
|
+
turnContext,
|
|
680
|
+
turnContext.activity.replyToId,
|
|
681
|
+
);
|
|
654
682
|
|
|
655
683
|
return;
|
|
656
684
|
}
|
|
@@ -662,9 +690,10 @@ export default class MicrosoftTeamsIncidentActions {
|
|
|
662
690
|
|
|
663
691
|
if (actionType === MicrosoftTeamsIncidentActionType.SubmitNewIncident) {
|
|
664
692
|
// Handle new incident submission
|
|
665
|
-
const title: string = (value["incidentTitle"] as string) || "";
|
|
666
|
-
const description: string =
|
|
667
|
-
(value["incidentDescription"] as string) || ""
|
|
693
|
+
const title: string = ((value["incidentTitle"] as string) || "").trim();
|
|
694
|
+
const description: string = (
|
|
695
|
+
(value["incidentDescription"] as string) || ""
|
|
696
|
+
).trim();
|
|
668
697
|
const severityId: string = (value["incidentSeverity"] as string) || "";
|
|
669
698
|
const monitorIds: string = (value["incidentMonitors"] as string) || "";
|
|
670
699
|
const monitorStatusId: string = (value["monitorStatus"] as string) || "";
|
|
@@ -679,8 +708,10 @@ export default class MicrosoftTeamsIncidentActions {
|
|
|
679
708
|
return;
|
|
680
709
|
}
|
|
681
710
|
|
|
711
|
+
let createdIncident: Incident;
|
|
712
|
+
|
|
682
713
|
try {
|
|
683
|
-
|
|
714
|
+
createdIncident = await this.createIncidentInProject({
|
|
684
715
|
projectId,
|
|
685
716
|
oneUptimeUserId,
|
|
686
717
|
title,
|
|
@@ -691,35 +722,42 @@ export default class MicrosoftTeamsIncidentActions {
|
|
|
691
722
|
labelIds,
|
|
692
723
|
onCallPolicyIds,
|
|
693
724
|
});
|
|
694
|
-
|
|
695
|
-
// Hide the form card by deleting it first
|
|
696
|
-
if (turnContext.activity.replyToId) {
|
|
697
|
-
await turnContext.deleteActivity(turnContext.activity.replyToId);
|
|
698
|
-
}
|
|
699
|
-
|
|
700
|
-
// Get the incident link
|
|
701
|
-
const incidentLink: URL =
|
|
702
|
-
await IncidentService.getIncidentLinkInDashboard(
|
|
703
|
-
projectId,
|
|
704
|
-
createdIncident.id!,
|
|
705
|
-
);
|
|
706
|
-
|
|
707
|
-
// Send confirmation message as a new message in the thread
|
|
708
|
-
await turnContext.sendActivity(
|
|
709
|
-
`✅ Incident created successfully!\n\nView incident: ${incidentLink.toString()}`,
|
|
710
|
-
);
|
|
711
|
-
|
|
712
|
-
return;
|
|
713
725
|
} catch (error) {
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
726
|
+
MicrosoftTeamsReplies.logFailure(
|
|
727
|
+
"Could not create an incident from Microsoft Teams",
|
|
728
|
+
error,
|
|
729
|
+
{
|
|
730
|
+
projectId: projectId.toString(),
|
|
731
|
+
},
|
|
732
|
+
);
|
|
733
|
+
await MicrosoftTeamsReplies.sendBestEffort(
|
|
734
|
+
turnContext,
|
|
735
|
+
await this.getIncidentCreateFailedMessage({
|
|
736
|
+
error: error,
|
|
737
|
+
projectId: projectId,
|
|
738
|
+
}),
|
|
720
739
|
);
|
|
721
740
|
return;
|
|
722
741
|
}
|
|
742
|
+
|
|
743
|
+
/*
|
|
744
|
+
* The incident exists from here on, so nothing below may report the
|
|
745
|
+
* create as failed: a user told it failed submits again, which creates
|
|
746
|
+
* a second incident and pages its on-call policies a second time. The
|
|
747
|
+
* confirmation goes first; removing the submitted form is a courtesy.
|
|
748
|
+
*/
|
|
749
|
+
await MicrosoftTeamsReplies.sendBestEffort(
|
|
750
|
+
turnContext,
|
|
751
|
+
await this.getIncidentCreatedMessage({
|
|
752
|
+
projectId: projectId,
|
|
753
|
+
incidentId: createdIncident.id || undefined,
|
|
754
|
+
}),
|
|
755
|
+
);
|
|
756
|
+
await MicrosoftTeamsReplies.deleteBestEffort(
|
|
757
|
+
turnContext,
|
|
758
|
+
turnContext.activity.replyToId,
|
|
759
|
+
);
|
|
760
|
+
return;
|
|
723
761
|
}
|
|
724
762
|
|
|
725
763
|
// Default fallback for unimplemented actions
|
|
@@ -730,11 +768,60 @@ export default class MicrosoftTeamsIncidentActions {
|
|
|
730
768
|
);
|
|
731
769
|
}
|
|
732
770
|
|
|
771
|
+
/*
|
|
772
|
+
* Why a submitted incident was not created, for the user: the reason when
|
|
773
|
+
* OneUptime wrote one for them (a reference to another project's monitor,
|
|
774
|
+
* say), otherwise a generic line; the details go to the log.
|
|
775
|
+
*/
|
|
776
|
+
private static async getIncidentCreateFailedMessage(data: {
|
|
777
|
+
error: unknown;
|
|
778
|
+
projectId: ObjectID;
|
|
779
|
+
}): Promise<string> {
|
|
780
|
+
const reason: string | null =
|
|
781
|
+
MicrosoftTeamsReplies.getUserFacingErrorMessage(data.error);
|
|
782
|
+
|
|
783
|
+
if (reason) {
|
|
784
|
+
return `❌ Could not create the incident: ${reason}`;
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
const createInOneUptimeUrl: string | null =
|
|
788
|
+
await MicrosoftTeamsReplies.getDashboardLink({
|
|
789
|
+
projectId: data.projectId,
|
|
790
|
+
route: "/incidents/create",
|
|
791
|
+
});
|
|
792
|
+
|
|
793
|
+
return `❌ Could not create the incident because of an unexpected error. Please try again, or create it in OneUptime${
|
|
794
|
+
createInOneUptimeUrl ? `: ${createInOneUptimeUrl}` : "."
|
|
795
|
+
}`;
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
// The confirmation, with a link to the incident when one can be built.
|
|
799
|
+
private static async getIncidentCreatedMessage(data: {
|
|
800
|
+
projectId: ObjectID;
|
|
801
|
+
incidentId?: ObjectID | undefined;
|
|
802
|
+
}): Promise<string> {
|
|
803
|
+
if (data.incidentId) {
|
|
804
|
+
try {
|
|
805
|
+
const incidentLink: URL =
|
|
806
|
+
await IncidentService.getIncidentLinkInDashboard(
|
|
807
|
+
data.projectId,
|
|
808
|
+
data.incidentId,
|
|
809
|
+
);
|
|
810
|
+
|
|
811
|
+
return `✅ Incident created successfully!\n\nView incident: ${incidentLink.toString()}`;
|
|
812
|
+
} catch (error) {
|
|
813
|
+
logger.debug("Could not build the link to a new incident");
|
|
814
|
+
logger.debug(error);
|
|
815
|
+
}
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
return "✅ Incident created successfully!";
|
|
819
|
+
}
|
|
820
|
+
|
|
733
821
|
/*
|
|
734
822
|
* Every id below comes from the submitted card, not from the form we sent,
|
|
735
|
-
* and the
|
|
736
|
-
* before anything is created
|
|
737
|
-
* project as well.
|
|
823
|
+
* and the incident is created as root. So they are checked against the
|
|
824
|
+
* linked project before anything is created.
|
|
738
825
|
*/
|
|
739
826
|
private static async createIncidentInProject(data: {
|
|
740
827
|
projectId: ObjectID;
|
|
@@ -806,6 +893,17 @@ export default class MicrosoftTeamsIncidentActions {
|
|
|
806
893
|
});
|
|
807
894
|
}
|
|
808
895
|
|
|
896
|
+
/*
|
|
897
|
+
* IncidentService moves the incident's monitors to this status, as it does
|
|
898
|
+
* for an incident declared in the dashboard or from Slack: with a status
|
|
899
|
+
* timeline entry and owner notifications, and back again once the
|
|
900
|
+
* incident is resolved. Teams used to write currentMonitorStatusId on the
|
|
901
|
+
* monitors directly, which did none of that.
|
|
902
|
+
*/
|
|
903
|
+
if (monitorStatusId) {
|
|
904
|
+
incident.changeMonitorStatusToId = monitorStatusId;
|
|
905
|
+
}
|
|
906
|
+
|
|
809
907
|
// Save the incident
|
|
810
908
|
const createdIncident: Incident = await IncidentService.create({
|
|
811
909
|
data: incident,
|
|
@@ -822,24 +920,6 @@ export default class MicrosoftTeamsIncidentActions {
|
|
|
822
920
|
},
|
|
823
921
|
);
|
|
824
922
|
|
|
825
|
-
// Update monitor status if specified
|
|
826
|
-
if (monitorStatusId) {
|
|
827
|
-
for (const monitorId of monitorIdArray) {
|
|
828
|
-
await MonitorService.updateOneBy({
|
|
829
|
-
query: {
|
|
830
|
-
_id: monitorId.toString(),
|
|
831
|
-
projectId: projectId,
|
|
832
|
-
},
|
|
833
|
-
data: {
|
|
834
|
-
currentMonitorStatusId: monitorStatusId,
|
|
835
|
-
},
|
|
836
|
-
props: {
|
|
837
|
-
isRoot: true,
|
|
838
|
-
},
|
|
839
|
-
});
|
|
840
|
-
}
|
|
841
|
-
}
|
|
842
|
-
|
|
843
923
|
return createdIncident;
|
|
844
924
|
}
|
|
845
925
|
|
|
@@ -1136,148 +1216,94 @@ export default class MicrosoftTeamsIncidentActions {
|
|
|
1136
1216
|
}
|
|
1137
1217
|
}
|
|
1138
1218
|
|
|
1139
|
-
|
|
1219
|
+
// Every list the "Create New Incident" card offers, read for one project.
|
|
1220
|
+
public static async getNewIncidentFormChoices(
|
|
1140
1221
|
projectId: ObjectID,
|
|
1141
|
-
): Promise<
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
},
|
|
1156
|
-
props: {
|
|
1157
|
-
isRoot: true,
|
|
1158
|
-
},
|
|
1159
|
-
});
|
|
1222
|
+
): Promise<MicrosoftTeamsNewIncidentFormChoices> {
|
|
1223
|
+
const [severities, monitors, monitorStatuses, labels, onCallDutyPolicies]: [
|
|
1224
|
+
MicrosoftTeamsCardChoiceList,
|
|
1225
|
+
MicrosoftTeamsCardChoiceList,
|
|
1226
|
+
MicrosoftTeamsCardChoiceList,
|
|
1227
|
+
MicrosoftTeamsCardChoiceList,
|
|
1228
|
+
MicrosoftTeamsCardChoiceList,
|
|
1229
|
+
] = await Promise.all([
|
|
1230
|
+
MicrosoftTeamsCardChoices.getIncidentSeverityChoices(projectId),
|
|
1231
|
+
MicrosoftTeamsCardChoices.getMonitorChoices(projectId),
|
|
1232
|
+
MicrosoftTeamsCardChoices.getMonitorStatusChoices(projectId),
|
|
1233
|
+
MicrosoftTeamsCardChoices.getLabelChoices(projectId),
|
|
1234
|
+
MicrosoftTeamsCardChoices.getOnCallDutyPolicyChoices(projectId),
|
|
1235
|
+
]);
|
|
1160
1236
|
|
|
1161
|
-
|
|
1162
|
-
severities
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1237
|
+
return {
|
|
1238
|
+
severities: severities,
|
|
1239
|
+
monitors: monitors,
|
|
1240
|
+
monitorStatuses: monitorStatuses,
|
|
1241
|
+
labels: labels,
|
|
1242
|
+
onCallDutyPolicies: onCallDutyPolicies,
|
|
1243
|
+
};
|
|
1244
|
+
}
|
|
1168
1245
|
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1246
|
+
/*
|
|
1247
|
+
* The "Create New Incident" card for a project, fitted to the first size
|
|
1248
|
+
* budget. The bot itself sends the card through
|
|
1249
|
+
* MicrosoftTeamsCreateCommands, which also tries the smaller budgets.
|
|
1250
|
+
*/
|
|
1251
|
+
public static async buildNewIncidentCard(
|
|
1252
|
+
projectId: ObjectID,
|
|
1253
|
+
options?: { initialTitle?: string | undefined } | undefined,
|
|
1254
|
+
): Promise<JSONObject> {
|
|
1255
|
+
return this.buildNewIncidentCardForBudget({
|
|
1256
|
+
choices: await this.getNewIncidentFormChoices(projectId),
|
|
1257
|
+
budgetInBytes: MICROSOFT_TEAMS_CARD_SIZE_BUDGETS_IN_BYTES[0]!,
|
|
1258
|
+
initialTitle: options?.initialTitle,
|
|
1182
1259
|
});
|
|
1260
|
+
}
|
|
1183
1261
|
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
});
|
|
1213
|
-
|
|
1214
|
-
const monitorStatusChoices: Array<{ title: string; value: string }> =
|
|
1215
|
-
monitorStatuses
|
|
1216
|
-
.map((status: MonitorStatus) => {
|
|
1217
|
-
return {
|
|
1218
|
-
title: status.name || "",
|
|
1219
|
-
value: status._id?.toString() || "",
|
|
1220
|
-
};
|
|
1221
|
-
})
|
|
1222
|
-
.filter((choice: { title: string; value: string }) => {
|
|
1223
|
-
return choice.title && choice.value;
|
|
1262
|
+
/*
|
|
1263
|
+
* The "Create New Incident" card with its monitor, label and on-call policy
|
|
1264
|
+
* lists shortened until it fits the budget (issue #4111: listing all of
|
|
1265
|
+
* them made Teams refuse the card). Severities are required, so they are
|
|
1266
|
+
* never shortened to fit (they are read up to 50).
|
|
1267
|
+
*/
|
|
1268
|
+
public static buildNewIncidentCardForBudget(data: {
|
|
1269
|
+
choices: MicrosoftTeamsNewIncidentFormChoices;
|
|
1270
|
+
budgetInBytes: number;
|
|
1271
|
+
initialTitle?: string | undefined;
|
|
1272
|
+
createInOneUptimeUrl?: string | null | undefined;
|
|
1273
|
+
}): JSONObject {
|
|
1274
|
+
return MicrosoftTeamsCardChoices.fitCardToBudget<
|
|
1275
|
+
keyof MicrosoftTeamsNewIncidentFormChoices
|
|
1276
|
+
>({
|
|
1277
|
+
lists: data.choices,
|
|
1278
|
+
trimmableKeys: ["monitors", "labels", "onCallDutyPolicies"],
|
|
1279
|
+
budgetInBytes: data.budgetInBytes,
|
|
1280
|
+
buildCard: (
|
|
1281
|
+
shown: Record<
|
|
1282
|
+
keyof MicrosoftTeamsNewIncidentFormChoices,
|
|
1283
|
+
MicrosoftTeamsCardChoiceList
|
|
1284
|
+
>,
|
|
1285
|
+
): JSONObject => {
|
|
1286
|
+
return this.buildNewIncidentCardBody({
|
|
1287
|
+
shown: shown,
|
|
1288
|
+
initialTitle: data.initialTitle,
|
|
1289
|
+
createInOneUptimeUrl: data.createInOneUptimeUrl,
|
|
1224
1290
|
});
|
|
1225
|
-
|
|
1226
|
-
// Fetch labels
|
|
1227
|
-
const labels: Array<Label> = await LabelService.findBy({
|
|
1228
|
-
query: {
|
|
1229
|
-
projectId: projectId,
|
|
1230
1291
|
},
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
},
|
|
1234
|
-
props: {
|
|
1235
|
-
isRoot: true,
|
|
1236
|
-
},
|
|
1237
|
-
limit: LIMIT_PER_PROJECT,
|
|
1238
|
-
skip: 0,
|
|
1239
|
-
});
|
|
1240
|
-
|
|
1241
|
-
const labelChoices: Array<{ title: string; value: string }> = labels
|
|
1242
|
-
.map((label: Label) => {
|
|
1243
|
-
return {
|
|
1244
|
-
title: label.name || "",
|
|
1245
|
-
value: label._id?.toString() || "",
|
|
1246
|
-
};
|
|
1247
|
-
})
|
|
1248
|
-
.filter((choice: { title: string; value: string }) => {
|
|
1249
|
-
return choice.title && choice.value;
|
|
1250
|
-
});
|
|
1292
|
+
}).card;
|
|
1293
|
+
}
|
|
1251
1294
|
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
},
|
|
1261
|
-
props: {
|
|
1262
|
-
isRoot: true,
|
|
1263
|
-
},
|
|
1264
|
-
limit: LIMIT_PER_PROJECT,
|
|
1265
|
-
skip: 0,
|
|
1266
|
-
});
|
|
1295
|
+
private static buildNewIncidentCardBody(data: {
|
|
1296
|
+
shown: MicrosoftTeamsNewIncidentFormChoices;
|
|
1297
|
+
initialTitle?: string | undefined;
|
|
1298
|
+
createInOneUptimeUrl?: string | null | undefined;
|
|
1299
|
+
}): JSONObject {
|
|
1300
|
+
const { shown } = data;
|
|
1301
|
+
const initialTitle: string = (data.initialTitle || "").trim();
|
|
1302
|
+
let isAnythingLeftOff: boolean = false;
|
|
1267
1303
|
|
|
1268
|
-
const
|
|
1269
|
-
|
|
1270
|
-
.map((policy: OnCallDutyPolicy) => {
|
|
1271
|
-
return {
|
|
1272
|
-
title: policy.name || "",
|
|
1273
|
-
value: policy._id?.toString() || "",
|
|
1274
|
-
};
|
|
1275
|
-
})
|
|
1276
|
-
.filter((choice: { title: string; value: string }) => {
|
|
1277
|
-
return choice.title && choice.value;
|
|
1278
|
-
});
|
|
1304
|
+
const addLaterHint: string =
|
|
1305
|
+
"You can add them to the incident in OneUptime after it is created.";
|
|
1279
1306
|
|
|
1280
|
-
// Build the card
|
|
1281
1307
|
const bodyElements: Array<JSONObject> = [
|
|
1282
1308
|
{
|
|
1283
1309
|
type: "TextBlock",
|
|
@@ -1291,6 +1317,15 @@ export default class MicrosoftTeamsIncidentActions {
|
|
|
1291
1317
|
label: "Incident Title",
|
|
1292
1318
|
placeholder: "Enter incident title",
|
|
1293
1319
|
isRequired: true,
|
|
1320
|
+
maxLength: MICROSOFT_TEAMS_INCIDENT_TITLE_MAX_LENGTH,
|
|
1321
|
+
...(initialTitle
|
|
1322
|
+
? {
|
|
1323
|
+
value: truncateToLength(
|
|
1324
|
+
initialTitle,
|
|
1325
|
+
MICROSOFT_TEAMS_INCIDENT_TITLE_MAX_LENGTH,
|
|
1326
|
+
),
|
|
1327
|
+
}
|
|
1328
|
+
: {}),
|
|
1294
1329
|
},
|
|
1295
1330
|
{
|
|
1296
1331
|
type: "Input.Text",
|
|
@@ -1302,79 +1337,118 @@ export default class MicrosoftTeamsIncidentActions {
|
|
|
1302
1337
|
},
|
|
1303
1338
|
];
|
|
1304
1339
|
|
|
1340
|
+
const addNotShownNote: (
|
|
1341
|
+
list: MicrosoftTeamsCardChoiceList,
|
|
1342
|
+
pluralNoun: string,
|
|
1343
|
+
) => void = (
|
|
1344
|
+
list: MicrosoftTeamsCardChoiceList,
|
|
1345
|
+
pluralNoun: string,
|
|
1346
|
+
): void => {
|
|
1347
|
+
const note: JSONObject | null =
|
|
1348
|
+
MicrosoftTeamsCardChoices.buildNotShownNoteElement({
|
|
1349
|
+
list: list,
|
|
1350
|
+
pluralNoun: pluralNoun,
|
|
1351
|
+
addLaterHint: addLaterHint,
|
|
1352
|
+
});
|
|
1353
|
+
|
|
1354
|
+
if (note) {
|
|
1355
|
+
isAnythingLeftOff = true;
|
|
1356
|
+
bodyElements.push(note);
|
|
1357
|
+
}
|
|
1358
|
+
};
|
|
1359
|
+
|
|
1305
1360
|
// Add severity dropdown if we have severities
|
|
1306
|
-
if (
|
|
1361
|
+
if (shown.severities.choices.length > 0) {
|
|
1307
1362
|
bodyElements.push({
|
|
1308
1363
|
type: "Input.ChoiceSet",
|
|
1309
1364
|
id: "incidentSeverity",
|
|
1310
1365
|
label: "Incident Severity",
|
|
1311
1366
|
style: "compact",
|
|
1312
1367
|
isRequired: true,
|
|
1313
|
-
choices:
|
|
1368
|
+
choices: shown.severities.choices,
|
|
1314
1369
|
});
|
|
1315
1370
|
}
|
|
1316
1371
|
|
|
1317
1372
|
// Add monitor multi-select if we have monitors
|
|
1318
|
-
if (
|
|
1373
|
+
if (shown.monitors.choices.length > 0) {
|
|
1319
1374
|
bodyElements.push({
|
|
1320
1375
|
type: "Input.ChoiceSet",
|
|
1321
1376
|
id: "incidentMonitors",
|
|
1322
1377
|
label: "Affected Monitors (Optional)",
|
|
1323
1378
|
style: "compact",
|
|
1324
1379
|
isMultiSelect: true,
|
|
1325
|
-
choices:
|
|
1380
|
+
choices: shown.monitors.choices,
|
|
1326
1381
|
});
|
|
1327
1382
|
}
|
|
1328
1383
|
|
|
1384
|
+
addNotShownNote(shown.monitors, "monitors");
|
|
1385
|
+
|
|
1329
1386
|
// Add monitor status dropdown if we have statuses and monitors
|
|
1330
|
-
if (
|
|
1387
|
+
if (
|
|
1388
|
+
shown.monitorStatuses.choices.length > 0 &&
|
|
1389
|
+
shown.monitors.choices.length > 0
|
|
1390
|
+
) {
|
|
1331
1391
|
bodyElements.push({
|
|
1332
1392
|
type: "Input.ChoiceSet",
|
|
1333
1393
|
id: "monitorStatus",
|
|
1334
1394
|
label: "Change Monitor Status To (Optional)",
|
|
1335
1395
|
style: "compact",
|
|
1336
|
-
choices:
|
|
1396
|
+
choices: shown.monitorStatuses.choices,
|
|
1337
1397
|
});
|
|
1338
1398
|
}
|
|
1339
1399
|
|
|
1340
1400
|
// Add on-call policy multi-select if we have policies
|
|
1341
|
-
if (
|
|
1401
|
+
if (shown.onCallDutyPolicies.choices.length > 0) {
|
|
1342
1402
|
bodyElements.push({
|
|
1343
1403
|
type: "Input.ChoiceSet",
|
|
1344
1404
|
id: "onCallDutyPolicies",
|
|
1345
1405
|
label: "Execute On-Call Policies (Optional)",
|
|
1346
1406
|
style: "compact",
|
|
1347
1407
|
isMultiSelect: true,
|
|
1348
|
-
choices:
|
|
1408
|
+
choices: shown.onCallDutyPolicies.choices,
|
|
1349
1409
|
});
|
|
1350
1410
|
}
|
|
1351
1411
|
|
|
1412
|
+
addNotShownNote(shown.onCallDutyPolicies, "on-call policies");
|
|
1413
|
+
|
|
1352
1414
|
// Add labels multi-select if we have labels
|
|
1353
|
-
if (
|
|
1415
|
+
if (shown.labels.choices.length > 0) {
|
|
1354
1416
|
bodyElements.push({
|
|
1355
1417
|
type: "Input.ChoiceSet",
|
|
1356
1418
|
id: "labels",
|
|
1357
1419
|
label: "Labels (Optional)",
|
|
1358
1420
|
style: "compact",
|
|
1359
1421
|
isMultiSelect: true,
|
|
1360
|
-
choices:
|
|
1422
|
+
choices: shown.labels.choices,
|
|
1361
1423
|
});
|
|
1362
1424
|
}
|
|
1363
1425
|
|
|
1426
|
+
addNotShownNote(shown.labels, "labels");
|
|
1427
|
+
|
|
1428
|
+
const actions: Array<JSONObject> = [
|
|
1429
|
+
{
|
|
1430
|
+
type: "Action.Submit",
|
|
1431
|
+
title: "Create Incident",
|
|
1432
|
+
data: {
|
|
1433
|
+
action: MicrosoftTeamsIncidentActionType.SubmitNewIncident,
|
|
1434
|
+
},
|
|
1435
|
+
},
|
|
1436
|
+
];
|
|
1437
|
+
|
|
1438
|
+
if (isAnythingLeftOff && data.createInOneUptimeUrl) {
|
|
1439
|
+
actions.push(
|
|
1440
|
+
MicrosoftTeamsCardChoices.buildCreateInOneUptimeAction(
|
|
1441
|
+
data.createInOneUptimeUrl,
|
|
1442
|
+
),
|
|
1443
|
+
);
|
|
1444
|
+
}
|
|
1445
|
+
|
|
1364
1446
|
return {
|
|
1365
1447
|
type: "AdaptiveCard",
|
|
1366
1448
|
$schema: "http://adaptivecards.io/schemas/adaptive-card.json",
|
|
1367
1449
|
version: "1.5",
|
|
1368
1450
|
body: bodyElements,
|
|
1369
|
-
actions:
|
|
1370
|
-
{
|
|
1371
|
-
type: "Action.Submit",
|
|
1372
|
-
title: "Create Incident",
|
|
1373
|
-
data: {
|
|
1374
|
-
action: MicrosoftTeamsIncidentActionType.SubmitNewIncident,
|
|
1375
|
-
},
|
|
1376
|
-
},
|
|
1377
|
-
],
|
|
1451
|
+
actions: actions,
|
|
1378
1452
|
};
|
|
1379
1453
|
}
|
|
1380
1454
|
}
|