@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
|
@@ -22,18 +22,39 @@ import ScheduledMaintenanceState from "../../../../../Models/DatabaseModels/Sche
|
|
|
22
22
|
import ScheduledMaintenanceInternalNoteService from "../../../../Services/ScheduledMaintenanceInternalNoteService";
|
|
23
23
|
import ScheduledMaintenancePublicNoteService from "../../../../Services/ScheduledMaintenancePublicNoteService";
|
|
24
24
|
import ScheduledMaintenanceStateService from "../../../../Services/ScheduledMaintenanceStateService";
|
|
25
|
-
import MonitorService from "../../../../Services/MonitorService";
|
|
26
25
|
import Monitor from "../../../../../Models/DatabaseModels/Monitor";
|
|
27
|
-
import MonitorStatusService from "../../../../Services/MonitorStatusService";
|
|
28
|
-
import MonitorStatus from "../../../../../Models/DatabaseModels/MonitorStatus";
|
|
29
|
-
import LabelService from "../../../../Services/LabelService";
|
|
30
26
|
import Label from "../../../../../Models/DatabaseModels/Label";
|
|
31
|
-
import SortOrder from "../../../../../Types/BaseDatabase/SortOrder";
|
|
32
|
-
import { LIMIT_PER_PROJECT } from "../../../../../Types/Database/LimitMax";
|
|
33
27
|
import BadDataException from "../../../../../Types/Exception/BadDataException";
|
|
34
28
|
import OneUptimeDate from "../../../../../Types/Date";
|
|
35
29
|
import URL from "../../../../../Types/API/URL";
|
|
30
|
+
import ColumnLength from "../../../../../Types/Database/ColumnLength";
|
|
31
|
+
import { truncateToLength } from "../../../Database/TruncateColumnValue";
|
|
36
32
|
import WorkspaceProjectReferenceValidator from "../../WorkspaceProjectReferenceValidator";
|
|
33
|
+
import MicrosoftTeamsCardChoices, {
|
|
34
|
+
MicrosoftTeamsCardChoiceList,
|
|
35
|
+
} from "../MicrosoftTeamsCardChoices";
|
|
36
|
+
import { MICROSOFT_TEAMS_CARD_SIZE_BUDGETS_IN_BYTES } from "../MicrosoftTeamsMessageSize";
|
|
37
|
+
import MicrosoftTeamsReplies from "../MicrosoftTeamsReplies";
|
|
38
|
+
import MicrosoftTeamsTimezone, {
|
|
39
|
+
MicrosoftTeamsUserTimezone,
|
|
40
|
+
} from "../MicrosoftTeamsTimezone";
|
|
41
|
+
|
|
42
|
+
// ScheduledMaintenance.title is a ShortText column.
|
|
43
|
+
const MICROSOFT_TEAMS_SCHEDULED_MAINTENANCE_TITLE_MAX_LENGTH: number =
|
|
44
|
+
ColumnLength.ShortText;
|
|
45
|
+
|
|
46
|
+
/*
|
|
47
|
+
* Input.Time has minute precision, so "start now" is already a minute or two
|
|
48
|
+
* in the past once the form is filled in. A start this recent begins now.
|
|
49
|
+
*/
|
|
50
|
+
const MICROSOFT_TEAMS_MAINTENANCE_START_GRACE_IN_MINUTES: number = 5;
|
|
51
|
+
|
|
52
|
+
// The lists the "Create New Scheduled Maintenance" card offers.
|
|
53
|
+
export interface MicrosoftTeamsNewScheduledMaintenanceFormChoices {
|
|
54
|
+
monitors: MicrosoftTeamsCardChoiceList;
|
|
55
|
+
monitorStatuses: MicrosoftTeamsCardChoiceList;
|
|
56
|
+
labels: MicrosoftTeamsCardChoiceList;
|
|
57
|
+
}
|
|
37
58
|
|
|
38
59
|
export default class MicrosoftTeamsScheduledMaintenanceActions {
|
|
39
60
|
@CaptureSpan()
|
|
@@ -133,10 +154,12 @@ export default class MicrosoftTeamsScheduledMaintenanceActions {
|
|
|
133
154
|
MicrosoftTeamsScheduledMaintenanceActionType.SubmitNewScheduledMaintenance
|
|
134
155
|
) {
|
|
135
156
|
// Handle new scheduled maintenance submission
|
|
136
|
-
const title: string =
|
|
137
|
-
(actionPayload["scheduledMaintenanceTitle"] as string) || ""
|
|
138
|
-
|
|
139
|
-
|
|
157
|
+
const title: string = (
|
|
158
|
+
(actionPayload["scheduledMaintenanceTitle"] as string) || ""
|
|
159
|
+
).trim();
|
|
160
|
+
const description: string = (
|
|
161
|
+
(actionPayload["scheduledMaintenanceDescription"] as string) || ""
|
|
162
|
+
).trim();
|
|
140
163
|
const startDate: string = (actionPayload["startDate"] as string) || "";
|
|
141
164
|
const startTime: string = (actionPayload["startTime"] as string) || "";
|
|
142
165
|
const endDate: string = (actionPayload["endDate"] as string) || "";
|
|
@@ -168,33 +191,96 @@ export default class MicrosoftTeamsScheduledMaintenanceActions {
|
|
|
168
191
|
return;
|
|
169
192
|
}
|
|
170
193
|
|
|
194
|
+
if (
|
|
195
|
+
title.length > MICROSOFT_TEAMS_SCHEDULED_MAINTENANCE_TITLE_MAX_LENGTH
|
|
196
|
+
) {
|
|
197
|
+
await turnContext.sendActivity(
|
|
198
|
+
`Unable to create scheduled maintenance: the title can be at most ${MICROSOFT_TEAMS_SCHEDULED_MAINTENANCE_TITLE_MAX_LENGTH} characters.`,
|
|
199
|
+
);
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
|
|
171
203
|
await WorkspaceActionAuthorization.assertCanCreate({
|
|
172
204
|
props: databaseProps,
|
|
173
205
|
modelType: ScheduledMaintenance,
|
|
174
206
|
action: "create a scheduled maintenance event",
|
|
175
207
|
});
|
|
176
208
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
209
|
+
/*
|
|
210
|
+
* The card submits a bare date and time. They mean the time on the
|
|
211
|
+
* user's clock, so they are read in the user's Teams time zone (see
|
|
212
|
+
* MicrosoftTeamsTimezone), not in the server's.
|
|
213
|
+
*/
|
|
214
|
+
const timezone: MicrosoftTeamsUserTimezone =
|
|
215
|
+
MicrosoftTeamsTimezone.resolve({
|
|
216
|
+
activity: turnContext.activity as unknown as JSONObject,
|
|
217
|
+
timezoneFromCard: actionPayload["timezone"],
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
let startsAt: Date | null = MicrosoftTeamsTimezone.toDate({
|
|
221
|
+
date: startDate,
|
|
222
|
+
time: startTime,
|
|
223
|
+
timezone: timezone,
|
|
224
|
+
});
|
|
225
|
+
const endsAt: Date | null = MicrosoftTeamsTimezone.toDate({
|
|
226
|
+
date: endDate,
|
|
227
|
+
time: endTime,
|
|
228
|
+
timezone: timezone,
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
if (!startsAt || !endsAt) {
|
|
232
|
+
await turnContext.sendActivity(
|
|
233
|
+
"Unable to create scheduled maintenance: the start or end date and time could not be read. Please pick them again.",
|
|
186
234
|
);
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
187
237
|
|
|
188
|
-
|
|
189
|
-
const
|
|
190
|
-
|
|
238
|
+
if (!OneUptimeDate.isInTheFuture(startsAt)) {
|
|
239
|
+
const earliestStart: Date = OneUptimeDate.addRemoveMinutes(
|
|
240
|
+
OneUptimeDate.getCurrentDate(),
|
|
241
|
+
-MICROSOFT_TEAMS_MAINTENANCE_START_GRACE_IN_MINUTES,
|
|
242
|
+
);
|
|
191
243
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
244
|
+
if (OneUptimeDate.isBefore(startsAt, earliestStart)) {
|
|
245
|
+
await turnContext.sendActivity(
|
|
246
|
+
`Unable to create scheduled maintenance: the start time (${MicrosoftTeamsTimezone.format(
|
|
247
|
+
startsAt,
|
|
248
|
+
timezone,
|
|
249
|
+
)}) is in the past.`,
|
|
250
|
+
);
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// A start picked for "now" that has just gone by: start now.
|
|
255
|
+
startsAt = OneUptimeDate.getCurrentDate();
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
if (!OneUptimeDate.isAfter(endsAt, startsAt)) {
|
|
259
|
+
await turnContext.sendActivity(
|
|
260
|
+
`Unable to create scheduled maintenance: the end time (${MicrosoftTeamsTimezone.format(
|
|
261
|
+
endsAt,
|
|
262
|
+
timezone,
|
|
263
|
+
)}) must be after the start time (${MicrosoftTeamsTimezone.format(
|
|
264
|
+
startsAt,
|
|
265
|
+
timezone,
|
|
266
|
+
)}).`,
|
|
267
|
+
);
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
196
270
|
|
|
197
|
-
|
|
271
|
+
const scheduledMaintenanceObj: ScheduledMaintenance =
|
|
272
|
+
new ScheduledMaintenance();
|
|
273
|
+
scheduledMaintenanceObj.title = title;
|
|
274
|
+
scheduledMaintenanceObj.description = description;
|
|
275
|
+
scheduledMaintenanceObj.projectId = request.projectId;
|
|
276
|
+
scheduledMaintenanceObj.createdByUserId = new ObjectID(request.userId);
|
|
277
|
+
scheduledMaintenanceObj.startsAt = startsAt;
|
|
278
|
+
scheduledMaintenanceObj.endsAt = endsAt;
|
|
279
|
+
|
|
280
|
+
let createdScheduledMaintenance: ScheduledMaintenance;
|
|
281
|
+
|
|
282
|
+
try {
|
|
283
|
+
createdScheduledMaintenance =
|
|
198
284
|
await this.createScheduledMaintenanceInProject({
|
|
199
285
|
scheduledMaintenance: scheduledMaintenanceObj,
|
|
200
286
|
projectId: request.projectId,
|
|
@@ -202,38 +288,58 @@ export default class MicrosoftTeamsScheduledMaintenanceActions {
|
|
|
202
288
|
monitorStatusId,
|
|
203
289
|
labelIds,
|
|
204
290
|
});
|
|
205
|
-
|
|
206
|
-
// Hide the form card by deleting it first
|
|
207
|
-
if (turnContext.activity.replyToId) {
|
|
208
|
-
await turnContext.deleteActivity(turnContext.activity.replyToId);
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
// Get the scheduled maintenance link
|
|
212
|
-
const maintenanceLink: URL =
|
|
213
|
-
await ScheduledMaintenanceService.getScheduledMaintenanceLinkInDashboard(
|
|
214
|
-
createdScheduledMaintenance.projectId!,
|
|
215
|
-
createdScheduledMaintenance.id!,
|
|
216
|
-
);
|
|
217
|
-
|
|
218
|
-
// Send confirmation message as a new message in the thread
|
|
219
|
-
await turnContext.sendActivity(
|
|
220
|
-
`✅ Scheduled maintenance created successfully!\n\nView scheduled maintenance: ${maintenanceLink.toString()}`,
|
|
221
|
-
);
|
|
222
|
-
|
|
223
|
-
return;
|
|
224
291
|
} catch (error) {
|
|
225
|
-
|
|
226
|
-
"
|
|
292
|
+
MicrosoftTeamsReplies.logFailure(
|
|
293
|
+
"Could not create a scheduled maintenance event from Microsoft Teams",
|
|
294
|
+
error,
|
|
227
295
|
{
|
|
228
296
|
projectId: request.projectId.toString(),
|
|
229
297
|
},
|
|
230
298
|
);
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
299
|
+
|
|
300
|
+
const reason: string | null =
|
|
301
|
+
MicrosoftTeamsReplies.getUserFacingErrorMessage(error);
|
|
302
|
+
|
|
303
|
+
const createInOneUptimeUrl: string | null = reason
|
|
304
|
+
? null
|
|
305
|
+
: await MicrosoftTeamsReplies.getDashboardLink({
|
|
306
|
+
projectId: request.projectId,
|
|
307
|
+
route: "/scheduled-maintenance-events/create",
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
await MicrosoftTeamsReplies.sendBestEffort(
|
|
311
|
+
turnContext,
|
|
312
|
+
reason
|
|
313
|
+
? `❌ Could not create the scheduled maintenance event: ${reason}`
|
|
314
|
+
: `❌ Could not create the scheduled maintenance event because of an unexpected error. Please try again, or create it in OneUptime${
|
|
315
|
+
createInOneUptimeUrl ? `: ${createInOneUptimeUrl}` : "."
|
|
316
|
+
}`,
|
|
234
317
|
);
|
|
235
318
|
return;
|
|
236
319
|
}
|
|
320
|
+
|
|
321
|
+
/*
|
|
322
|
+
* The event exists from here on, so nothing below may report the
|
|
323
|
+
* create as failed: a user told it failed submits again and gets a
|
|
324
|
+
* second event. The confirmation goes first; removing the submitted
|
|
325
|
+
* form is a courtesy.
|
|
326
|
+
*/
|
|
327
|
+
await MicrosoftTeamsReplies.sendBestEffort(
|
|
328
|
+
turnContext,
|
|
329
|
+
await this.getScheduledMaintenanceCreatedMessage({
|
|
330
|
+
scheduledMaintenance: createdScheduledMaintenance,
|
|
331
|
+
projectId: request.projectId,
|
|
332
|
+
startsAt: startsAt,
|
|
333
|
+
endsAt: endsAt,
|
|
334
|
+
timezone: timezone,
|
|
335
|
+
}),
|
|
336
|
+
);
|
|
337
|
+
await MicrosoftTeamsReplies.deleteBestEffort(
|
|
338
|
+
turnContext,
|
|
339
|
+
turnContext.activity.replyToId,
|
|
340
|
+
);
|
|
341
|
+
|
|
342
|
+
return;
|
|
237
343
|
}
|
|
238
344
|
|
|
239
345
|
// For all other actions, we need an existing scheduled maintenance ID
|
|
@@ -414,12 +520,19 @@ export default class MicrosoftTeamsScheduledMaintenanceActions {
|
|
|
414
520
|
});
|
|
415
521
|
}
|
|
416
522
|
|
|
417
|
-
await
|
|
523
|
+
await MicrosoftTeamsReplies.sendBestEffort(
|
|
524
|
+
turnContext,
|
|
525
|
+
"Note added successfully",
|
|
526
|
+
);
|
|
418
527
|
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
528
|
+
/*
|
|
529
|
+
* The action is done: a refused reply or a failed delete of the
|
|
530
|
+
* form must not read as a failed action, which invites a repeat.
|
|
531
|
+
*/
|
|
532
|
+
await MicrosoftTeamsReplies.deleteBestEffort(
|
|
533
|
+
turnContext,
|
|
534
|
+
turnContext.activity.replyToId,
|
|
535
|
+
);
|
|
423
536
|
|
|
424
537
|
break;
|
|
425
538
|
}
|
|
@@ -463,14 +576,19 @@ export default class MicrosoftTeamsScheduledMaintenanceActions {
|
|
|
463
576
|
},
|
|
464
577
|
});
|
|
465
578
|
|
|
466
|
-
await
|
|
579
|
+
await MicrosoftTeamsReplies.sendBestEffort(
|
|
580
|
+
turnContext,
|
|
467
581
|
"ScheduledMaintenance state changed successfully",
|
|
468
582
|
);
|
|
469
583
|
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
584
|
+
/*
|
|
585
|
+
* The action is done: a refused reply or a failed delete of the
|
|
586
|
+
* form must not read as a failed action, which invites a repeat.
|
|
587
|
+
*/
|
|
588
|
+
await MicrosoftTeamsReplies.deleteBestEffort(
|
|
589
|
+
turnContext,
|
|
590
|
+
turnContext.activity.replyToId,
|
|
591
|
+
);
|
|
474
592
|
|
|
475
593
|
break;
|
|
476
594
|
}
|
|
@@ -745,11 +863,53 @@ export default class MicrosoftTeamsScheduledMaintenanceActions {
|
|
|
745
863
|
}
|
|
746
864
|
}
|
|
747
865
|
|
|
866
|
+
/*
|
|
867
|
+
* The confirmation: when the event starts and ends in the user's time zone
|
|
868
|
+
* (so a wrong zone shows at once), and a link to it when one can be built.
|
|
869
|
+
*/
|
|
870
|
+
private static async getScheduledMaintenanceCreatedMessage(data: {
|
|
871
|
+
scheduledMaintenance: ScheduledMaintenance;
|
|
872
|
+
projectId: ObjectID;
|
|
873
|
+
startsAt: Date;
|
|
874
|
+
endsAt: Date;
|
|
875
|
+
timezone: MicrosoftTeamsUserTimezone;
|
|
876
|
+
}): Promise<string> {
|
|
877
|
+
let message: string = `✅ Scheduled maintenance created successfully!\n\n**Starts:** ${MicrosoftTeamsTimezone.format(
|
|
878
|
+
data.startsAt,
|
|
879
|
+
data.timezone,
|
|
880
|
+
)}\n\n**Ends:** ${MicrosoftTeamsTimezone.format(
|
|
881
|
+
data.endsAt,
|
|
882
|
+
data.timezone,
|
|
883
|
+
)}`;
|
|
884
|
+
|
|
885
|
+
if (MicrosoftTeamsTimezone.isUtcOffsetOnly(data.timezone)) {
|
|
886
|
+
message += `\n\nMicrosoft Teams did not say which time zone you are in, so these times were read at your current offset, ${data.timezone.label}. If daylight saving time changes before then, check them in OneUptime.`;
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
if (data.scheduledMaintenance.id) {
|
|
890
|
+
try {
|
|
891
|
+
const maintenanceLink: URL =
|
|
892
|
+
await ScheduledMaintenanceService.getScheduledMaintenanceLinkInDashboard(
|
|
893
|
+
data.scheduledMaintenance.projectId || data.projectId,
|
|
894
|
+
data.scheduledMaintenance.id,
|
|
895
|
+
);
|
|
896
|
+
|
|
897
|
+
message += `\n\nView scheduled maintenance: ${maintenanceLink.toString()}`;
|
|
898
|
+
} catch (error) {
|
|
899
|
+
logger.debug(
|
|
900
|
+
"Could not build the link to a new scheduled maintenance event",
|
|
901
|
+
);
|
|
902
|
+
logger.debug(error);
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
return message;
|
|
907
|
+
}
|
|
908
|
+
|
|
748
909
|
/*
|
|
749
910
|
* Every id below comes from the submitted card, not from the form we sent,
|
|
750
|
-
* and the
|
|
751
|
-
* before anything is created
|
|
752
|
-
* project as well.
|
|
911
|
+
* and the event is created as root. So they are checked against the linked
|
|
912
|
+
* project before anything is created.
|
|
753
913
|
*/
|
|
754
914
|
private static async createScheduledMaintenanceInProject(data: {
|
|
755
915
|
scheduledMaintenance: ScheduledMaintenance;
|
|
@@ -795,6 +955,18 @@ export default class MicrosoftTeamsScheduledMaintenanceActions {
|
|
|
795
955
|
});
|
|
796
956
|
}
|
|
797
957
|
|
|
958
|
+
/*
|
|
959
|
+
* ScheduledMaintenanceService moves the event's monitors to this status
|
|
960
|
+
* when the event starts, and back when it ends, with status timeline
|
|
961
|
+
* entries, as for an event scheduled in the dashboard or from Slack. Teams
|
|
962
|
+
* used to write currentMonitorStatusId on the monitors directly, the
|
|
963
|
+
* moment the event was created, however far off it was, and nothing ever
|
|
964
|
+
* moved them back.
|
|
965
|
+
*/
|
|
966
|
+
if (monitorStatusId) {
|
|
967
|
+
scheduledMaintenance.changeMonitorStatusToId = monitorStatusId;
|
|
968
|
+
}
|
|
969
|
+
|
|
798
970
|
// Save the scheduled maintenance
|
|
799
971
|
const createdScheduledMaintenance: ScheduledMaintenance =
|
|
800
972
|
await ScheduledMaintenanceService.create({
|
|
@@ -813,112 +985,102 @@ export default class MicrosoftTeamsScheduledMaintenanceActions {
|
|
|
813
985
|
},
|
|
814
986
|
);
|
|
815
987
|
|
|
816
|
-
// Update monitor status if specified
|
|
817
|
-
if (monitorStatusId) {
|
|
818
|
-
for (const monitorId of monitorIdArray) {
|
|
819
|
-
await MonitorService.updateOneBy({
|
|
820
|
-
query: {
|
|
821
|
-
_id: monitorId.toString(),
|
|
822
|
-
projectId: projectId,
|
|
823
|
-
},
|
|
824
|
-
data: {
|
|
825
|
-
currentMonitorStatusId: monitorStatusId,
|
|
826
|
-
},
|
|
827
|
-
props: {
|
|
828
|
-
isRoot: true,
|
|
829
|
-
},
|
|
830
|
-
});
|
|
831
|
-
}
|
|
832
|
-
}
|
|
833
|
-
|
|
834
988
|
return createdScheduledMaintenance;
|
|
835
989
|
}
|
|
836
990
|
|
|
991
|
+
// Every list the "Create New Scheduled Maintenance" card offers.
|
|
992
|
+
public static async getNewScheduledMaintenanceFormChoices(
|
|
993
|
+
projectId: ObjectID,
|
|
994
|
+
): Promise<MicrosoftTeamsNewScheduledMaintenanceFormChoices> {
|
|
995
|
+
const [monitors, monitorStatuses, labels]: [
|
|
996
|
+
MicrosoftTeamsCardChoiceList,
|
|
997
|
+
MicrosoftTeamsCardChoiceList,
|
|
998
|
+
MicrosoftTeamsCardChoiceList,
|
|
999
|
+
] = await Promise.all([
|
|
1000
|
+
MicrosoftTeamsCardChoices.getMonitorChoices(projectId),
|
|
1001
|
+
MicrosoftTeamsCardChoices.getMonitorStatusChoices(projectId),
|
|
1002
|
+
MicrosoftTeamsCardChoices.getLabelChoices(projectId),
|
|
1003
|
+
]);
|
|
1004
|
+
|
|
1005
|
+
return {
|
|
1006
|
+
monitors: monitors,
|
|
1007
|
+
monitorStatuses: monitorStatuses,
|
|
1008
|
+
labels: labels,
|
|
1009
|
+
};
|
|
1010
|
+
}
|
|
1011
|
+
|
|
1012
|
+
/*
|
|
1013
|
+
* The "Create New Scheduled Maintenance" card for a project, fitted to the
|
|
1014
|
+
* first size budget. The bot itself sends the card through
|
|
1015
|
+
* MicrosoftTeamsCreateCommands, which also tries the smaller budgets.
|
|
1016
|
+
*/
|
|
837
1017
|
public static async buildNewScheduledMaintenanceCard(
|
|
838
1018
|
projectId: ObjectID,
|
|
1019
|
+
options?:
|
|
1020
|
+
| {
|
|
1021
|
+
initialTitle?: string | undefined;
|
|
1022
|
+
timezone?: string | undefined;
|
|
1023
|
+
}
|
|
1024
|
+
| undefined,
|
|
839
1025
|
): Promise<JSONObject> {
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
select: {
|
|
846
|
-
name: true,
|
|
847
|
-
},
|
|
848
|
-
props: {
|
|
849
|
-
isRoot: true,
|
|
850
|
-
},
|
|
851
|
-
limit: LIMIT_PER_PROJECT,
|
|
852
|
-
skip: 0,
|
|
1026
|
+
return this.buildNewScheduledMaintenanceCardForBudget({
|
|
1027
|
+
choices: await this.getNewScheduledMaintenanceFormChoices(projectId),
|
|
1028
|
+
budgetInBytes: MICROSOFT_TEAMS_CARD_SIZE_BUDGETS_IN_BYTES[0]!,
|
|
1029
|
+
initialTitle: options?.initialTitle,
|
|
1030
|
+
timezone: options?.timezone,
|
|
853
1031
|
});
|
|
1032
|
+
}
|
|
854
1033
|
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
monitorStatuses
|
|
887
|
-
.map((status: MonitorStatus) => {
|
|
888
|
-
return {
|
|
889
|
-
title: status.name || "",
|
|
890
|
-
value: status._id?.toString() || "",
|
|
891
|
-
};
|
|
892
|
-
})
|
|
893
|
-
.filter((choice: { title: string; value: string }) => {
|
|
894
|
-
return choice.title && choice.value;
|
|
1034
|
+
/*
|
|
1035
|
+
* The "Create New Scheduled Maintenance" card with its monitor and label
|
|
1036
|
+
* lists shortened until it fits the budget (issue #4111: listing all of
|
|
1037
|
+
* them made Teams refuse the card). `timezone` is the IANA zone the user
|
|
1038
|
+
* asked from, when Teams told us; it is named on the card and travels in
|
|
1039
|
+
* the submit data.
|
|
1040
|
+
*/
|
|
1041
|
+
public static buildNewScheduledMaintenanceCardForBudget(data: {
|
|
1042
|
+
choices: MicrosoftTeamsNewScheduledMaintenanceFormChoices;
|
|
1043
|
+
budgetInBytes: number;
|
|
1044
|
+
initialTitle?: string | undefined;
|
|
1045
|
+
createInOneUptimeUrl?: string | null | undefined;
|
|
1046
|
+
timezone?: string | undefined;
|
|
1047
|
+
}): JSONObject {
|
|
1048
|
+
return MicrosoftTeamsCardChoices.fitCardToBudget<
|
|
1049
|
+
keyof MicrosoftTeamsNewScheduledMaintenanceFormChoices
|
|
1050
|
+
>({
|
|
1051
|
+
lists: data.choices,
|
|
1052
|
+
trimmableKeys: ["monitors", "labels"],
|
|
1053
|
+
budgetInBytes: data.budgetInBytes,
|
|
1054
|
+
buildCard: (
|
|
1055
|
+
shown: Record<
|
|
1056
|
+
keyof MicrosoftTeamsNewScheduledMaintenanceFormChoices,
|
|
1057
|
+
MicrosoftTeamsCardChoiceList
|
|
1058
|
+
>,
|
|
1059
|
+
): JSONObject => {
|
|
1060
|
+
return this.buildNewScheduledMaintenanceCardBody({
|
|
1061
|
+
shown: shown,
|
|
1062
|
+
initialTitle: data.initialTitle,
|
|
1063
|
+
createInOneUptimeUrl: data.createInOneUptimeUrl,
|
|
1064
|
+
timezone: data.timezone,
|
|
895
1065
|
});
|
|
896
|
-
|
|
897
|
-
// Fetch labels
|
|
898
|
-
const labels: Array<Label> = await LabelService.findBy({
|
|
899
|
-
query: {
|
|
900
|
-
projectId: projectId,
|
|
901
|
-
},
|
|
902
|
-
select: {
|
|
903
|
-
name: true,
|
|
904
1066
|
},
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
},
|
|
908
|
-
limit: LIMIT_PER_PROJECT,
|
|
909
|
-
skip: 0,
|
|
910
|
-
});
|
|
1067
|
+
}).card;
|
|
1068
|
+
}
|
|
911
1069
|
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
1070
|
+
private static buildNewScheduledMaintenanceCardBody(data: {
|
|
1071
|
+
shown: MicrosoftTeamsNewScheduledMaintenanceFormChoices;
|
|
1072
|
+
initialTitle?: string | undefined;
|
|
1073
|
+
createInOneUptimeUrl?: string | null | undefined;
|
|
1074
|
+
timezone?: string | undefined;
|
|
1075
|
+
}): JSONObject {
|
|
1076
|
+
const { shown } = data;
|
|
1077
|
+
const initialTitle: string = (data.initialTitle || "").trim();
|
|
1078
|
+
const timezone: string | undefined =
|
|
1079
|
+
MicrosoftTeamsTimezone.getKnownTimezone(data.timezone);
|
|
1080
|
+
let isAnythingLeftOff: boolean = false;
|
|
1081
|
+
|
|
1082
|
+
const addLaterHint: string =
|
|
1083
|
+
"You can add them to the event in OneUptime after it is created.";
|
|
922
1084
|
|
|
923
1085
|
// Build the card
|
|
924
1086
|
const bodyElements: Array<JSONObject> = [
|
|
@@ -934,6 +1096,15 @@ export default class MicrosoftTeamsScheduledMaintenanceActions {
|
|
|
934
1096
|
label: "Event Title",
|
|
935
1097
|
placeholder: "Enter maintenance event title",
|
|
936
1098
|
isRequired: true,
|
|
1099
|
+
maxLength: MICROSOFT_TEAMS_SCHEDULED_MAINTENANCE_TITLE_MAX_LENGTH,
|
|
1100
|
+
...(initialTitle
|
|
1101
|
+
? {
|
|
1102
|
+
value: truncateToLength(
|
|
1103
|
+
initialTitle,
|
|
1104
|
+
MICROSOFT_TEAMS_SCHEDULED_MAINTENANCE_TITLE_MAX_LENGTH,
|
|
1105
|
+
),
|
|
1106
|
+
}
|
|
1107
|
+
: {}),
|
|
937
1108
|
},
|
|
938
1109
|
{
|
|
939
1110
|
type: "Input.Text",
|
|
@@ -943,6 +1114,11 @@ export default class MicrosoftTeamsScheduledMaintenanceActions {
|
|
|
943
1114
|
isMultiline: true,
|
|
944
1115
|
isRequired: true,
|
|
945
1116
|
},
|
|
1117
|
+
MicrosoftTeamsCardChoices.buildNoteElement(
|
|
1118
|
+
timezone
|
|
1119
|
+
? `Start and end times are in ${timezone}.`
|
|
1120
|
+
: "Start and end times are in the time zone Microsoft Teams reports for you, or in UTC if it does not report one.",
|
|
1121
|
+
),
|
|
946
1122
|
{
|
|
947
1123
|
type: "Input.Date",
|
|
948
1124
|
id: "startDate",
|
|
@@ -969,56 +1145,94 @@ export default class MicrosoftTeamsScheduledMaintenanceActions {
|
|
|
969
1145
|
},
|
|
970
1146
|
];
|
|
971
1147
|
|
|
1148
|
+
const addNotShownNote: (
|
|
1149
|
+
list: MicrosoftTeamsCardChoiceList,
|
|
1150
|
+
pluralNoun: string,
|
|
1151
|
+
) => void = (
|
|
1152
|
+
list: MicrosoftTeamsCardChoiceList,
|
|
1153
|
+
pluralNoun: string,
|
|
1154
|
+
): void => {
|
|
1155
|
+
const note: JSONObject | null =
|
|
1156
|
+
MicrosoftTeamsCardChoices.buildNotShownNoteElement({
|
|
1157
|
+
list: list,
|
|
1158
|
+
pluralNoun: pluralNoun,
|
|
1159
|
+
addLaterHint: addLaterHint,
|
|
1160
|
+
});
|
|
1161
|
+
|
|
1162
|
+
if (note) {
|
|
1163
|
+
isAnythingLeftOff = true;
|
|
1164
|
+
bodyElements.push(note);
|
|
1165
|
+
}
|
|
1166
|
+
};
|
|
1167
|
+
|
|
972
1168
|
// Add monitor multi-select if we have monitors
|
|
973
|
-
if (
|
|
1169
|
+
if (shown.monitors.choices.length > 0) {
|
|
974
1170
|
bodyElements.push({
|
|
975
1171
|
type: "Input.ChoiceSet",
|
|
976
1172
|
id: "scheduledMaintenanceMonitors",
|
|
977
1173
|
label: "Affected Monitors (Optional)",
|
|
978
1174
|
style: "compact",
|
|
979
1175
|
isMultiSelect: true,
|
|
980
|
-
choices:
|
|
1176
|
+
choices: shown.monitors.choices,
|
|
981
1177
|
});
|
|
982
1178
|
}
|
|
983
1179
|
|
|
1180
|
+
addNotShownNote(shown.monitors, "monitors");
|
|
1181
|
+
|
|
984
1182
|
// Add monitor status dropdown if we have statuses and monitors
|
|
985
|
-
if (
|
|
1183
|
+
if (
|
|
1184
|
+
shown.monitorStatuses.choices.length > 0 &&
|
|
1185
|
+
shown.monitors.choices.length > 0
|
|
1186
|
+
) {
|
|
986
1187
|
bodyElements.push({
|
|
987
1188
|
type: "Input.ChoiceSet",
|
|
988
1189
|
id: "monitorStatus",
|
|
989
1190
|
label: "Change Monitor Status To (Optional)",
|
|
990
1191
|
style: "compact",
|
|
991
|
-
choices:
|
|
1192
|
+
choices: shown.monitorStatuses.choices,
|
|
992
1193
|
});
|
|
993
1194
|
}
|
|
994
1195
|
|
|
995
1196
|
// Add labels multi-select if we have labels
|
|
996
|
-
if (
|
|
1197
|
+
if (shown.labels.choices.length > 0) {
|
|
997
1198
|
bodyElements.push({
|
|
998
1199
|
type: "Input.ChoiceSet",
|
|
999
1200
|
id: "labels",
|
|
1000
1201
|
label: "Labels (Optional)",
|
|
1001
1202
|
style: "compact",
|
|
1002
1203
|
isMultiSelect: true,
|
|
1003
|
-
choices:
|
|
1204
|
+
choices: shown.labels.choices,
|
|
1004
1205
|
});
|
|
1005
1206
|
}
|
|
1006
1207
|
|
|
1208
|
+
addNotShownNote(shown.labels, "labels");
|
|
1209
|
+
|
|
1210
|
+
const actions: Array<JSONObject> = [
|
|
1211
|
+
{
|
|
1212
|
+
type: "Action.Submit",
|
|
1213
|
+
title: "Create Maintenance Event",
|
|
1214
|
+
data: {
|
|
1215
|
+
action:
|
|
1216
|
+
MicrosoftTeamsScheduledMaintenanceActionType.SubmitNewScheduledMaintenance,
|
|
1217
|
+
...(timezone ? { timezone: timezone } : {}),
|
|
1218
|
+
},
|
|
1219
|
+
},
|
|
1220
|
+
];
|
|
1221
|
+
|
|
1222
|
+
if (isAnythingLeftOff && data.createInOneUptimeUrl) {
|
|
1223
|
+
actions.push(
|
|
1224
|
+
MicrosoftTeamsCardChoices.buildCreateInOneUptimeAction(
|
|
1225
|
+
data.createInOneUptimeUrl,
|
|
1226
|
+
),
|
|
1227
|
+
);
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1007
1230
|
return {
|
|
1008
1231
|
type: "AdaptiveCard",
|
|
1009
1232
|
$schema: "http://adaptivecards.io/schemas/adaptive-card.json",
|
|
1010
1233
|
version: "1.5",
|
|
1011
1234
|
body: bodyElements,
|
|
1012
|
-
actions:
|
|
1013
|
-
{
|
|
1014
|
-
type: "Action.Submit",
|
|
1015
|
-
title: "Create Maintenance Event",
|
|
1016
|
-
data: {
|
|
1017
|
-
action:
|
|
1018
|
-
MicrosoftTeamsScheduledMaintenanceActionType.SubmitNewScheduledMaintenance,
|
|
1019
|
-
},
|
|
1020
|
-
},
|
|
1021
|
-
],
|
|
1235
|
+
actions: actions,
|
|
1022
1236
|
};
|
|
1023
1237
|
}
|
|
1024
1238
|
}
|