@oneuptime/common 14.0.9 → 14.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/DatabaseModels/AutoRemediationSuggestion.ts +60 -0
- package/Models/DatabaseModels/CephCluster.ts +213 -0
- package/Models/DatabaseModels/DatabaseServer.ts +213 -0
- package/Models/DatabaseModels/DockerHost.ts +213 -0
- package/Models/DatabaseModels/DockerSwarmCluster.ts +213 -0
- package/Models/DatabaseModels/GlobalConfig.ts +1 -1
- package/Models/DatabaseModels/Host.ts +213 -0
- package/Models/DatabaseModels/Index.ts +2 -0
- package/Models/DatabaseModels/PodmanHost.ts +213 -0
- package/Models/DatabaseModels/ProxmoxCluster.ts +213 -0
- package/Models/DatabaseModels/ResourceAiAgent.ts +419 -0
- package/Models/DatabaseModels/RunnerJob.ts +144 -0
- package/Models/DatabaseModels/VMwareVCenter.ts +213 -0
- package/Server/API/AutoRemediationAPI.ts +392 -1
- package/Server/API/ResourceAiAccessAPI.ts +1669 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.ts +423 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
- package/Server/Infrastructure/Semaphore.ts +22 -0
- package/Server/Middleware/TelemetryIngest.ts +15 -5
- package/Server/Services/AnalyticsDatabaseService.ts +45 -1
- package/Server/Services/AutoRemediationRuleEngineService.ts +940 -112
- package/Server/Services/CephClusterService.ts +109 -1
- package/Server/Services/DatabaseServerService.ts +116 -1
- package/Server/Services/DockerHostService.ts +109 -1
- package/Server/Services/DockerSwarmClusterService.ts +113 -1
- package/Server/Services/HostService.ts +126 -4
- package/Server/Services/MetricRecordingRuleService.ts +47 -0
- package/Server/Services/PodmanHostService.ts +109 -1
- package/Server/Services/ProxmoxClusterService.ts +110 -1
- package/Server/Services/ResourceAiAccessService.ts +1439 -0
- package/Server/Services/ResourceAiAgentJobService.ts +202 -0
- package/Server/Services/ResourceAiAgentService.ts +2432 -0
- package/Server/Services/RunnerJobService.ts +611 -4
- package/Server/Services/TelemetryUsageBillingService.ts +28 -0
- package/Server/Services/TraceRecordingRuleService.ts +33 -0
- package/Server/Services/VMwareVCenterService.ts +110 -1
- package/Server/Utils/AI/Remediation/RemediationCommandTools.ts +1434 -32
- package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +935 -21
- package/Server/Utils/AI/Remediation/RemediationPlanRunner.ts +25 -1
- package/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.ts +577 -0
- package/Server/Utils/AI/ResourceAccess/ResourceAccessContext.ts +271 -0
- package/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.ts +45 -0
- package/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.ts +964 -0
- package/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.ts +333 -0
- package/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.ts +873 -0
- package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +72 -2
- package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +72 -5
- package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +72 -5
- package/Server/Utils/AutoRemediation/CommandPlanExecutor.ts +396 -13
- package/Server/Utils/AutoRemediation/RemediationVerifier.ts +35 -2
- package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +9 -1
- package/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.ts +920 -0
- package/Server/Utils/SessionReplay/SessionReplayUsage.ts +84 -6
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.ts +35 -15
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.ts +33 -15
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.ts +21 -1
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.ts +298 -224
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.ts +35 -15
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.ts +389 -175
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +366 -143
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.ts +163 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.ts +396 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.ts +418 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.ts +152 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.ts +251 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.ts +214 -0
- package/Tests/App/Dashboard/ClusterAccessNotice.test.tsx +93 -0
- package/Tests/App/Dashboard/DatabaseDocumentationMarkdown.test.ts +18 -6
- package/Tests/App/Dashboard/InvestigationInfrastructureTools.test.tsx +506 -0
- package/Tests/App/Dashboard/RemediationSuggestionCardDescription.test.tsx +209 -0
- package/Tests/App/Dashboard/RemediationSuggestionCardResource.test.tsx +317 -0
- package/Tests/App/Dashboard/ResourceAiAccessSettingsUtil.test.ts +921 -0
- package/Tests/App/Dashboard/ResourceAiAgentInstall.test.ts +860 -0
- package/Tests/App/Dashboard/ResourceAiAgentPage.test.tsx +1721 -0
- package/Tests/App/Dashboard/ResourceAiAgentStatus.test.ts +1002 -0
- package/Tests/App/Dashboard/ResourceAiInsightsPage.test.tsx +931 -0
- package/Tests/App/Dashboard/ResourceAiNavigation.test.tsx +575 -0
- package/Tests/App/Dashboard/RunbookStepTypeMaps.test.ts +38 -7
- package/Tests/Models/DatabaseModels/DatabaseServerModels.test.ts +33 -1
- package/Tests/Models/DatabaseModels/ResourceAiAccessColumns.test.ts +738 -0
- package/Tests/Models/DatabaseModels/ResourceAiAgentModel.test.ts +842 -0
- package/Tests/Server/API/AutoRemediationApproveResourceRound.test.ts +835 -0
- package/Tests/Server/API/ResourceAiAccessAPI.test.ts +2730 -0
- package/Tests/Server/Infrastructure/Postgres/AddDatabaseServerTablesMigration.test.ts +60 -0
- package/Tests/Server/Infrastructure/Postgres/AddResourceAiAgentsMigration.test.ts +659 -0
- package/Tests/Server/Infrastructure/SemaphoreMutex.test.ts +31 -0
- package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +63 -5
- package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerPinnedKey.test.ts +103 -5
- package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerRateLimit.test.ts +19 -1
- package/Tests/Server/Services/AutoRemediationResourceRuleEngine.test.ts +1279 -0
- package/Tests/Server/Services/DatabaseServerService.test.ts +55 -0
- package/Tests/Server/Services/GroupTelemetryUsageExcludeNames.test.ts +299 -0
- package/Tests/Server/Services/HostServiceFindOrCreateMemo.test.ts +44 -0
- package/Tests/Server/Services/MonitorProbeServiceIntervalScheduling.test.ts +45 -6
- package/Tests/Server/Services/RecordingRuleReservedMetricName.test.ts +171 -0
- package/Tests/Server/Services/ResourceAiAccessChangeAuthorization.test.ts +256 -0
- package/Tests/Server/Services/ResourceAiAccessService.test.ts +1373 -0
- package/Tests/Server/Services/ResourceAiAgentJobService.test.ts +375 -0
- package/Tests/Server/Services/ResourceAiAgentServiceHelpers.test.ts +1114 -0
- package/Tests/Server/Services/ResourceAiAgentServiceLifecycle.test.ts +1050 -0
- package/Tests/Server/Services/ResourceAiAgentServiceRegister.test.ts +2251 -0
- package/Tests/Server/Services/ResourceAiSettingsCreate.test.ts +373 -0
- package/Tests/Server/Services/ResourceAiSettingsPermission.test.ts +1042 -0
- package/Tests/Server/Services/ResourceServiceDeleteCleansUpAi.test.ts +319 -0
- package/Tests/Server/Services/RunnerJobEnqueueKubectl.test.ts +105 -0
- package/Tests/Server/Services/RunnerJobEnqueueResourceCommand.test.ts +986 -0
- package/Tests/Server/Services/RunnerJobResourceCommandLane.test.ts +211 -0
- package/Tests/Server/Services/RunnerJobResourceCommandTimeoutAndRedaction.test.ts +352 -0
- package/Tests/Server/Services/TelemetryUsageBillingSloExclusion.test.ts +218 -0
- package/Tests/Server/TestingUtils/Services/FakeRunnerJobCount.ts +145 -0
- package/Tests/Server/Utils/AI/InvestigationInfrastructureAccessWiring.test.ts +453 -0
- package/Tests/Server/Utils/AI/InvestigationInfrastructureReport.test.ts +721 -0
- package/Tests/Server/Utils/AI/RemediationCommandTools.test.ts +94 -1
- package/Tests/Server/Utils/AI/RemediationCommandToolsResource.test.ts +1530 -0
- package/Tests/Server/Utils/AI/RemediationExecutionRunnerResourceMode.test.ts +1249 -0
- package/Tests/Server/Utils/AI/RemediationPlanRunner.test.ts +117 -0
- package/Tests/Server/Utils/AI/RemediationResourceCopyParity.test.ts +463 -0
- package/Tests/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.test.ts +722 -0
- package/Tests/Server/Utils/AI/ResourceAccess/ResourceAccessContext.test.ts +266 -0
- package/Tests/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.test.ts +1220 -0
- package/Tests/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.test.ts +569 -0
- package/Tests/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.test.ts +830 -0
- package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutorResource.test.ts +717 -0
- package/Tests/Server/Utils/AutoRemediation/RemediationVerifierResourceFollowUp.test.ts +338 -0
- package/Tests/Server/Utils/Monitor/Criteria/SessionReplayBudgetTemplateCriteria.test.ts +422 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.test.ts +1647 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayUsage.test.ts +143 -1
- package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +33 -3
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsAccountNotLinked.test.ts +1093 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.test.ts +1049 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.test.ts +1676 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCards.test.ts +2884 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.test.ts +2490 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateSubmit.test.ts +2293 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateSubmitServerTimezone.test.ts +386 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.test.ts +1477 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.test.ts +1967 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsStripHtmlTags.test.ts +92 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsSubmittedFormRemoval.test.ts +1819 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.test.ts +1033 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezoneServerZone.test.ts +610 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsBotMessageHandling.test.ts +2610 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsCreateCommandsEndToEnd.test.ts +4672 -0
- package/Tests/Server/Utils/Workspace/WorkspaceCreateProjectReferences.test.ts +190 -65
- package/Tests/Types/AutoRemediation/AiRemediationCommandPlan.test.ts +10 -4
- package/Tests/Types/AutoRemediation/AiRemediationCommandPlanResourceCommand.test.ts +305 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +277 -13
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +113 -0
- package/Tests/Types/Monitor/RumAlertTemplates.test.ts +773 -2
- package/Tests/Types/ResourceAiAgent/AiResourceType.test.ts +419 -0
- package/Tests/Types/ResourceAiAgent/ResourceAiAccess.test.ts +517 -0
- package/Tests/Types/Runbook/RunbookStepType.test.ts +147 -8
- package/Tests/UI/Rum/RecordingHealthDashboard.test.tsx +769 -1
- package/Tests/Utils/AiRemediation/Resource/CephCommandPolicy.test.ts +1653 -0
- package/Tests/Utils/AiRemediation/Resource/CephOutputRedaction.test.ts +204 -0
- package/Tests/Utils/AiRemediation/Resource/DatabaseCommandPolicy.test.ts +1077 -0
- package/Tests/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.test.ts +558 -0
- package/Tests/Utils/AiRemediation/Resource/DatabaseQueryRedactor.test.ts +834 -0
- package/Tests/Utils/AiRemediation/Resource/DockerCliGrammar.test.ts +747 -0
- package/Tests/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.test.ts +1259 -0
- package/Tests/Utils/AiRemediation/Resource/DockerOutputRedaction.test.ts +386 -0
- package/Tests/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.test.ts +782 -0
- package/Tests/Utils/AiRemediation/Resource/GovcCommandPolicy.test.ts +2259 -0
- package/Tests/Utils/AiRemediation/Resource/HostCommandPolicy.test.ts +2019 -0
- package/Tests/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.test.ts +2497 -0
- package/Tests/Utils/AiRemediation/Resource/ResourceCommandPolicy.test.ts +1305 -0
- package/Tests/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.test.ts +585 -0
- package/Tests/Utils/AiRemediation/Resource/ResourceOutputRedactor.test.ts +334 -0
- package/Tests/Utils/AiRemediation/Resource/ResourceOutputRedactorCopyParity.test.ts +98 -0
- package/Tests/Utils/AiRemediation/Resource/ResourcePolicyImportClosure.test.ts +391 -0
- package/Tests/Utils/AiRemediation/ResourceAiAgentPolicyCopyParity.test.ts +497 -0
- package/Tests/Utils/SessionReplay/SessionReplayBudgetMetricType.test.ts +383 -0
- package/Types/AI/ResourceAiAccessApi.ts +140 -0
- package/Types/AI/ResourceAiAccessPermissions.ts +126 -0
- package/Types/AutoRemediation/AiRemediationCommandPlan.ts +183 -2
- package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +55 -22
- package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +35 -3
- package/Types/Monitor/RumAlertTemplates.ts +351 -4
- package/Types/ResourceAiAgent/AiResourceType.ts +310 -0
- package/Types/ResourceAiAgent/ResourceAiAccess.ts +574 -0
- package/Types/Rum/SessionReplayBudgetMetricType.ts +47 -0
- package/Types/Runbook/RunbookStepType.ts +29 -0
- package/Types/Telemetry/TelemetryIngestSurface.ts +14 -2
- package/Utils/AI/InvestigationReport.ts +121 -15
- package/Utils/AiRemediation/Resource/CephCommandPolicy.ts +1936 -0
- package/Utils/AiRemediation/Resource/DatabaseCommandPolicy.ts +166 -0
- package/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.ts +1532 -0
- package/Utils/AiRemediation/Resource/DatabaseQueryRedactor.ts +1394 -0
- package/Utils/AiRemediation/Resource/DockerCliGrammar.ts +1839 -0
- package/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.ts +490 -0
- package/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.ts +687 -0
- package/Utils/AiRemediation/Resource/GovcCommandPolicy.ts +2096 -0
- package/Utils/AiRemediation/Resource/HostCommandPolicy.ts +2982 -0
- package/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.ts +1679 -0
- package/Utils/AiRemediation/Resource/ResourceCommandPolicy.ts +851 -0
- package/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.ts +593 -0
- package/Utils/AiRemediation/Resource/ResourceOutputRedactor.ts +2812 -0
- package/Utils/SessionReplay/SessionReplayBudgetMetricType.ts +184 -0
- package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js +62 -0
- package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CephCluster.js +219 -0
- package/build/dist/Models/DatabaseModels/CephCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DatabaseServer.js +219 -0
- package/build/dist/Models/DatabaseModels/DatabaseServer.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerHost.js +219 -0
- package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js +219 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalConfig.js +1 -1
- package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Host.js +219 -0
- package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/PodmanHost.js +219 -0
- package/build/dist/Models/DatabaseModels/PodmanHost.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProxmoxCluster.js +219 -0
- package/build/dist/Models/DatabaseModels/ProxmoxCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ResourceAiAgent.js +439 -0
- package/build/dist/Models/DatabaseModels/ResourceAiAgent.js.map +1 -0
- package/build/dist/Models/DatabaseModels/RunnerJob.js +145 -0
- package/build/dist/Models/DatabaseModels/RunnerJob.js.map +1 -1
- package/build/dist/Models/DatabaseModels/VMwareVCenter.js +219 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenter.js.map +1 -1
- package/build/dist/Server/API/AutoRemediationAPI.js +231 -1
- package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -1
- package/build/dist/Server/API/ResourceAiAccessAPI.js +1119 -0
- package/build/dist/Server/API/ResourceAiAccessAPI.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.js +168 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/Semaphore.js +6 -0
- package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
- package/build/dist/Server/Middleware/TelemetryIngest.js +12 -5
- package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
- package/build/dist/Server/Services/AnalyticsDatabaseService.js +26 -1
- package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +601 -3
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterService.js +104 -0
- package/build/dist/Server/Services/CephClusterService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseServerService.js +99 -0
- package/build/dist/Server/Services/DatabaseServerService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostService.js +104 -0
- package/build/dist/Server/Services/DockerHostService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterService.js +104 -0
- package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -1
- package/build/dist/Server/Services/HostService.js +114 -2
- package/build/dist/Server/Services/HostService.js.map +1 -1
- package/build/dist/Server/Services/MetricRecordingRuleService.js +46 -0
- package/build/dist/Server/Services/MetricRecordingRuleService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostService.js +104 -0
- package/build/dist/Server/Services/PodmanHostService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterService.js +104 -0
- package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -1
- package/build/dist/Server/Services/ResourceAiAccessService.js +1028 -0
- package/build/dist/Server/Services/ResourceAiAccessService.js.map +1 -0
- package/build/dist/Server/Services/ResourceAiAgentJobService.js +173 -0
- package/build/dist/Server/Services/ResourceAiAgentJobService.js.map +1 -0
- package/build/dist/Server/Services/ResourceAiAgentService.js +1687 -0
- package/build/dist/Server/Services/ResourceAiAgentService.js.map +1 -0
- package/build/dist/Server/Services/RunnerJobService.js +344 -5
- package/build/dist/Server/Services/RunnerJobService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryUsageBillingService.js +26 -0
- package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
- package/build/dist/Server/Services/TraceRecordingRuleService.js +37 -0
- package/build/dist/Server/Services/TraceRecordingRuleService.js.map +1 -1
- package/build/dist/Server/Services/VMwareVCenterService.js +104 -0
- package/build/dist/Server/Services/VMwareVCenterService.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js +1029 -30
- package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +633 -28
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js +21 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js +330 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js.map +1 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessContext.js +160 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessContext.js.map +1 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.js +33 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.js.map +1 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.js +640 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.js.map +1 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.js +226 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.js.map +1 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js +600 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +50 -4
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +55 -4
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +55 -4
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js +290 -13
- package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js.map +1 -1
- package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js +29 -1
- package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js.map +1 -1
- package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js +9 -1
- package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js.map +1 -1
- package/build/dist/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.js +627 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.js.map +1 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js +60 -5
- package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js +19 -15
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js +19 -15
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js +17 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js +183 -209
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js +19 -15
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js +233 -167
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +263 -110
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.js +129 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.js +266 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.js +258 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.js +104 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.js +183 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.js +123 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.js.map +1 -0
- package/build/dist/Types/AI/ResourceAiAccessApi.js +30 -0
- package/build/dist/Types/AI/ResourceAiAccessApi.js.map +1 -0
- package/build/dist/Types/AI/ResourceAiAccessPermissions.js +98 -0
- package/build/dist/Types/AI/ResourceAiAccessPermissions.js.map +1 -0
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js +116 -29
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +47 -21
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +5 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
- package/build/dist/Types/Monitor/RumAlertTemplates.js +199 -3
- package/build/dist/Types/Monitor/RumAlertTemplates.js.map +1 -1
- package/build/dist/Types/ResourceAiAgent/AiResourceType.js +242 -0
- package/build/dist/Types/ResourceAiAgent/AiResourceType.js.map +1 -0
- package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js +275 -0
- package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js.map +1 -0
- package/build/dist/Types/Rum/SessionReplayBudgetMetricType.js +45 -0
- package/build/dist/Types/Rum/SessionReplayBudgetMetricType.js.map +1 -0
- package/build/dist/Types/Runbook/RunbookStepType.js +27 -0
- package/build/dist/Types/Runbook/RunbookStepType.js.map +1 -1
- package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +13 -2
- package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -1
- package/build/dist/Utils/AI/InvestigationReport.js +71 -11
- package/build/dist/Utils/AI/InvestigationReport.js.map +1 -1
- package/build/dist/Utils/AiRemediation/Resource/CephCommandPolicy.js +1462 -0
- package/build/dist/Utils/AiRemediation/Resource/CephCommandPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/DatabaseCommandPolicy.js +122 -0
- package/build/dist/Utils/AiRemediation/Resource/DatabaseCommandPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.js +1139 -0
- package/build/dist/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/DatabaseQueryRedactor.js +1060 -0
- package/build/dist/Utils/AiRemediation/Resource/DatabaseQueryRedactor.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/DockerCliGrammar.js +1301 -0
- package/build/dist/Utils/AiRemediation/Resource/DockerCliGrammar.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.js +370 -0
- package/build/dist/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.js +498 -0
- package/build/dist/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/GovcCommandPolicy.js +1565 -0
- package/build/dist/Utils/AiRemediation/Resource/GovcCommandPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/HostCommandPolicy.js +2206 -0
- package/build/dist/Utils/AiRemediation/Resource/HostCommandPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.js +1129 -0
- package/build/dist/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicy.js +565 -0
- package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.js +408 -0
- package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/ResourceOutputRedactor.js +1910 -0
- package/build/dist/Utils/AiRemediation/Resource/ResourceOutputRedactor.js.map +1 -0
- package/build/dist/Utils/SessionReplay/SessionReplayBudgetMetricType.js +160 -0
- package/build/dist/Utils/SessionReplay/SessionReplayBudgetMetricType.js.map +1 -0
- package/package.json +1 -1
|
@@ -8,11 +8,48 @@ import { CheckOn, EvaluateOverTimeType, FilterType } from "./CriteriaFilter";
|
|
|
8
8
|
import MonitorType from "./MonitorType";
|
|
9
9
|
import RollingTime from "../RollingTime/RollingTime";
|
|
10
10
|
import MetricsAggregationType from "../Metrics/MetricsAggregationType";
|
|
11
|
+
import SessionReplayBudgetMetricType from "../Rum/SessionReplayBudgetMetricType";
|
|
11
12
|
|
|
12
|
-
export type RumAlertTemplateCategory =
|
|
13
|
+
export type RumAlertTemplateCategory =
|
|
14
|
+
| "Core Web Vitals"
|
|
15
|
+
| "Errors"
|
|
16
|
+
| "Session Replay";
|
|
13
17
|
|
|
14
18
|
export type RumAlertTemplateSeverity = "Critical" | "Warning";
|
|
15
19
|
|
|
20
|
+
/*
|
|
21
|
+
* What has to be true of ONE application before a template is offered to it,
|
|
22
|
+
* for the templates whose metric only exists for some applications. See
|
|
23
|
+
* getRumAlertTemplates:
|
|
24
|
+
*
|
|
25
|
+
* SessionReplayRecording session replay is on for the application and
|
|
26
|
+
* it has recorded at least one replay
|
|
27
|
+
* SessionReplayMonthlyBudget the above, and it has a monthly budget
|
|
28
|
+
*/
|
|
29
|
+
export type RumAlertTemplateRequirement =
|
|
30
|
+
| "SessionReplayRecording"
|
|
31
|
+
| "SessionReplayMonthlyBudget";
|
|
32
|
+
|
|
33
|
+
/*
|
|
34
|
+
* What is known about one RUM application, for the templates that carry a
|
|
35
|
+
* `requirement`. Every field is optional, and `null` and `undefined` both
|
|
36
|
+
* mean "not known" - which withholds rather than offers, because a monitor
|
|
37
|
+
* over a series nobody posts never fires and never says why.
|
|
38
|
+
*/
|
|
39
|
+
export interface RumAlertTemplateContext {
|
|
40
|
+
// The application's own switch, `isSessionReplayEnabled`.
|
|
41
|
+
sessionReplayEnabled?: boolean | null | undefined;
|
|
42
|
+
/*
|
|
43
|
+
* Whether a replay chunk was ever accepted for the application (its
|
|
44
|
+
* `sessionReplayLastChunkReceivedAt` is set). The switch alone says
|
|
45
|
+
* nothing: it defaults to on, so it is on for every RUM application,
|
|
46
|
+
* including the ones that have never loaded the recorder.
|
|
47
|
+
*/
|
|
48
|
+
sessionReplayHasRecorded?: boolean | null | undefined;
|
|
49
|
+
// `sessionReplayMonthlyBudgetInGB`. Only a finite number above 0 is a budget.
|
|
50
|
+
sessionReplayMonthlyBudgetInGB?: number | null | undefined;
|
|
51
|
+
}
|
|
52
|
+
|
|
16
53
|
export interface RumAlertTemplateArgs {
|
|
17
54
|
rumApplicationId: string;
|
|
18
55
|
onlineMonitorStatusId: ObjectID;
|
|
@@ -29,6 +66,11 @@ export interface RumAlertTemplate {
|
|
|
29
66
|
category: RumAlertTemplateCategory;
|
|
30
67
|
severity: RumAlertTemplateSeverity;
|
|
31
68
|
monitorType: MonitorType;
|
|
69
|
+
/*
|
|
70
|
+
* Absent on the templates whose signal exists for every RUM application,
|
|
71
|
+
* which are offered to all of them.
|
|
72
|
+
*/
|
|
73
|
+
requirement?: RumAlertTemplateRequirement | undefined;
|
|
32
74
|
getMonitorStep: (args: RumAlertTemplateArgs) => MonitorStep;
|
|
33
75
|
}
|
|
34
76
|
|
|
@@ -44,9 +86,23 @@ interface CriteriaArgs {
|
|
|
44
86
|
incidentDescription: string;
|
|
45
87
|
metricAlias?: string | undefined;
|
|
46
88
|
thresholdUnit?: string | undefined;
|
|
89
|
+
/*
|
|
90
|
+
* How a metric criteria reduces its window to the value it compares.
|
|
91
|
+
* Average unless set, which is what the web vitals have always been
|
|
92
|
+
* evaluated with. Applied to BOTH criteria: a recovery that reduced the
|
|
93
|
+
* window differently from its breach could find a window that meets both,
|
|
94
|
+
* or neither. Only takes effect together with `metricAlias` - without one,
|
|
95
|
+
* no `metricMonitorOptions` are written at all.
|
|
96
|
+
*/
|
|
97
|
+
metricAggregationType?: EvaluateOverTimeType | undefined;
|
|
98
|
+
// The Healthy criteria's description, when the generic sentence does not fit.
|
|
99
|
+
healthyDescription?: string | undefined;
|
|
47
100
|
}
|
|
48
101
|
|
|
49
102
|
function buildCriteria(data: CriteriaArgs): MonitorCriteria {
|
|
103
|
+
const metricAggregationType: EvaluateOverTimeType =
|
|
104
|
+
data.metricAggregationType || EvaluateOverTimeType.Average;
|
|
105
|
+
|
|
50
106
|
const unhealthy: MonitorCriteriaInstance = new MonitorCriteriaInstance();
|
|
51
107
|
|
|
52
108
|
unhealthy.data = {
|
|
@@ -60,7 +116,7 @@ function buildCriteria(data: CriteriaArgs): MonitorCriteria {
|
|
|
60
116
|
value: data.threshold,
|
|
61
117
|
metricMonitorOptions: data.metricAlias
|
|
62
118
|
? {
|
|
63
|
-
metricAggregationType:
|
|
119
|
+
metricAggregationType: metricAggregationType,
|
|
64
120
|
metricAlias: data.metricAlias,
|
|
65
121
|
thresholdUnit: data.thresholdUnit,
|
|
66
122
|
}
|
|
@@ -107,7 +163,7 @@ function buildCriteria(data: CriteriaArgs): MonitorCriteria {
|
|
|
107
163
|
value: data.threshold,
|
|
108
164
|
metricMonitorOptions: data.metricAlias
|
|
109
165
|
? {
|
|
110
|
-
metricAggregationType:
|
|
166
|
+
metricAggregationType: metricAggregationType,
|
|
111
167
|
metricAlias: data.metricAlias,
|
|
112
168
|
thresholdUnit: data.thresholdUnit,
|
|
113
169
|
}
|
|
@@ -120,7 +176,9 @@ function buildCriteria(data: CriteriaArgs): MonitorCriteria {
|
|
|
120
176
|
createIncidents: false,
|
|
121
177
|
createAlerts: false,
|
|
122
178
|
name: "Healthy",
|
|
123
|
-
description:
|
|
179
|
+
description:
|
|
180
|
+
data.healthyDescription ||
|
|
181
|
+
`The RUM signal for ${data.args.monitorName} is within its recommended threshold.`,
|
|
124
182
|
};
|
|
125
183
|
|
|
126
184
|
const criteria: MonitorCriteria = new MonitorCriteria();
|
|
@@ -406,16 +464,305 @@ const unhandledExceptionsTemplate: RumAlertTemplate = {
|
|
|
406
464
|
},
|
|
407
465
|
};
|
|
408
466
|
|
|
467
|
+
/*
|
|
468
|
+
* Session replay storage budget.
|
|
469
|
+
*
|
|
470
|
+
* Replay uploads are refused once the project's daily limit
|
|
471
|
+
* (SESSION_REPLAY_MAX_BYTES_PER_PROJECT_PER_DAY) or the application's Monthly
|
|
472
|
+
* budget is spent, and before these templates that was visible only on the
|
|
473
|
+
* Replay Health page: recorders are told to stop, quietly, and recordings
|
|
474
|
+
* simply stop appearing. A worker sweep posts both budgets every five minutes
|
|
475
|
+
* as the `oneuptime.rum.session.replay.budget.*` metrics
|
|
476
|
+
* (SessionReplayBudgetMetricType), keyed to the RUM application, so these are
|
|
477
|
+
* ordinary Metrics monitors scoped to one application, like the web vitals.
|
|
478
|
+
* Every choice below follows from how that sweep writes:
|
|
479
|
+
*
|
|
480
|
+
* - PERCENT, never bytes. Both budgets are GiB (a Monthly budget of 10 "GB"
|
|
481
|
+
* is 10 x 1024^3 bytes, and the daily default is 1 GiB), while every byte
|
|
482
|
+
* threshold, unit and chart in the metric stack is decimal: a "1 GB"
|
|
483
|
+
* threshold fires at 93% of a 1 GiB limit. The sweep computes the percent
|
|
484
|
+
* against the exact byte limit the gate enforces, rounded DOWN, so 100 or
|
|
485
|
+
* more means exactly what the gate means by spent.
|
|
486
|
+
*
|
|
487
|
+
* - Max, then MaximumValue, over Past15Minutes. A point lands every five
|
|
488
|
+
* minutes, so fifteen minutes holds two or three of them and one late
|
|
489
|
+
* sweep cannot empty the window - an empty window meets no criteria,
|
|
490
|
+
* which resolves an open alert, so a shorter one would flap. Budget use
|
|
491
|
+
* only climbs within its day or month, so the highest point in the window
|
|
492
|
+
* is the latest: Average would lag a crossing by most of a window, and
|
|
493
|
+
* All Values (what a filter falls back to without a metricAlias) would
|
|
494
|
+
* wait for every point to cross. Recovery reduces the same way, so it
|
|
495
|
+
* holds until the last point at or over the threshold has left the
|
|
496
|
+
* window, 10-15 minutes after the value falls. Max at the query is the
|
|
497
|
+
* aggregation SessionReplayBudgetMetricTypeUtil.getAggregationType names
|
|
498
|
+
* for these series (and the docs and the catalog descriptions tell anyone
|
|
499
|
+
* charting them to use): the one that stays right wherever the project's
|
|
500
|
+
* value appears once per application, which Sum would multiply.
|
|
501
|
+
*
|
|
502
|
+
* - The daily limit belongs to the PROJECT. The sweep posts the project's
|
|
503
|
+
* value under every application that records, identical on each, so the
|
|
504
|
+
* daily pair is offered on each of them and any one monitor covers them
|
|
505
|
+
* all. The cards say so: one created per application pages the same
|
|
506
|
+
* exhaustion once per application.
|
|
507
|
+
*
|
|
508
|
+
* - Gating (`requirement`). The sweep only posts for applications that have
|
|
509
|
+
* session replay on and have recorded at least once, and the monthly
|
|
510
|
+
* series only while the application has a Monthly budget. A monitor over
|
|
511
|
+
* a series nobody posts never fires, so each pair is offered only once its
|
|
512
|
+
* series can exist - see getRumAlertTemplates.
|
|
513
|
+
*/
|
|
514
|
+
interface SessionReplayBudgetTemplateData {
|
|
515
|
+
id: string;
|
|
516
|
+
name: string;
|
|
517
|
+
description: string;
|
|
518
|
+
severity: RumAlertTemplateSeverity;
|
|
519
|
+
requirement: RumAlertTemplateRequirement;
|
|
520
|
+
metricName: SessionReplayBudgetMetricType;
|
|
521
|
+
metricAlias: string;
|
|
522
|
+
// Percent of the budget used, the unit the series is posted in.
|
|
523
|
+
threshold: number;
|
|
524
|
+
// Completes the breach criteria's name: "<name> - 80% or more used".
|
|
525
|
+
thresholdLabel: string;
|
|
526
|
+
breachDescription: string;
|
|
527
|
+
// What goes between "[RUM] " and " - <application>" in the titles.
|
|
528
|
+
incidentHeadline: string;
|
|
529
|
+
getIncidentDescription: (monitorName: string) => string;
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
// The unit the percent series are posted in, and so the one to read them in.
|
|
533
|
+
const SESSION_REPLAY_BUDGET_PERCENT_UNIT: string = "%";
|
|
534
|
+
|
|
535
|
+
function buildSessionReplayBudgetTemplate(
|
|
536
|
+
data: SessionReplayBudgetTemplateData,
|
|
537
|
+
): RumAlertTemplate {
|
|
538
|
+
return {
|
|
539
|
+
id: data.id,
|
|
540
|
+
name: data.name,
|
|
541
|
+
description: data.description,
|
|
542
|
+
category: "Session Replay",
|
|
543
|
+
severity: data.severity,
|
|
544
|
+
monitorType: MonitorType.Metrics,
|
|
545
|
+
requirement: data.requirement,
|
|
546
|
+
getMonitorStep: (args: RumAlertTemplateArgs): MonitorStep => {
|
|
547
|
+
const step: MonitorStep = MonitorStep.getDefaultMonitorStep({
|
|
548
|
+
monitorName: args.monitorName,
|
|
549
|
+
monitorType: MonitorType.Metrics,
|
|
550
|
+
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
551
|
+
offlineMonitorStatusId: args.offlineMonitorStatusId,
|
|
552
|
+
defaultIncidentSeverityId: args.defaultIncidentSeverityId,
|
|
553
|
+
defaultAlertSeverityId: args.defaultAlertSeverityId,
|
|
554
|
+
});
|
|
555
|
+
|
|
556
|
+
step.setMetricMonitor({
|
|
557
|
+
telemetryServiceIds: [new ObjectID(args.rumApplicationId)],
|
|
558
|
+
rollingTime: RollingTime.Past15Minutes,
|
|
559
|
+
metricViewConfig: {
|
|
560
|
+
queryConfigs: [
|
|
561
|
+
{
|
|
562
|
+
metricAliasData: {
|
|
563
|
+
metricVariable: data.metricAlias,
|
|
564
|
+
title: data.name,
|
|
565
|
+
description: data.description,
|
|
566
|
+
legend: data.name,
|
|
567
|
+
legendUnit: SESSION_REPLAY_BUDGET_PERCENT_UNIT,
|
|
568
|
+
},
|
|
569
|
+
metricQueryData: {
|
|
570
|
+
filterData: {
|
|
571
|
+
metricName: data.metricName,
|
|
572
|
+
attributes: {},
|
|
573
|
+
aggegationType: MetricsAggregationType.Max,
|
|
574
|
+
aggregateBy: {},
|
|
575
|
+
},
|
|
576
|
+
},
|
|
577
|
+
},
|
|
578
|
+
],
|
|
579
|
+
formulaConfigs: [],
|
|
580
|
+
},
|
|
581
|
+
});
|
|
582
|
+
|
|
583
|
+
step.setMonitorCriteria(
|
|
584
|
+
buildCriteria({
|
|
585
|
+
args: args,
|
|
586
|
+
checkOn: CheckOn.MetricValue,
|
|
587
|
+
unhealthyFilterType: FilterType.GreaterThanOrEqualTo,
|
|
588
|
+
healthyFilterType: FilterType.LessThan,
|
|
589
|
+
threshold: data.threshold,
|
|
590
|
+
/*
|
|
591
|
+
* Load-bearing: without the alias no metricMonitorOptions are
|
|
592
|
+
* written, and the window silently falls back to All Values.
|
|
593
|
+
*/
|
|
594
|
+
metricAlias: data.metricAlias,
|
|
595
|
+
thresholdUnit: SESSION_REPLAY_BUDGET_PERCENT_UNIT,
|
|
596
|
+
metricAggregationType: EvaluateOverTimeType.MaximumValue,
|
|
597
|
+
unhealthyName: `${data.name} - ${data.thresholdLabel}`,
|
|
598
|
+
unhealthyDescription: data.breachDescription,
|
|
599
|
+
incidentTitle: `[RUM] ${data.incidentHeadline} - ${args.monitorName}`,
|
|
600
|
+
incidentDescription: data.getIncidentDescription(args.monitorName),
|
|
601
|
+
healthyDescription: `Session replay budget use for ${args.monitorName} is below the alert threshold.`,
|
|
602
|
+
}),
|
|
603
|
+
);
|
|
604
|
+
|
|
605
|
+
return step;
|
|
606
|
+
},
|
|
607
|
+
};
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
/*
|
|
611
|
+
* The incident descriptions only name levers that take effect BEFORE a byte
|
|
612
|
+
* is charged - the allowed origins and the sample percentage are checked
|
|
613
|
+
* ahead of the charge, and "On error or frustration" keeps ordinary sessions
|
|
614
|
+
* from uploading at all - because a setting that acts on what was already
|
|
615
|
+
* uploaded (retention, deleting recordings) gives none of the budget back.
|
|
616
|
+
* The daily limit itself cannot be raised from the dashboard, only by the
|
|
617
|
+
* deployment.
|
|
618
|
+
*/
|
|
619
|
+
const sessionReplayBudgetTemplates: Array<RumAlertTemplate> = [
|
|
620
|
+
buildSessionReplayBudgetTemplate({
|
|
621
|
+
id: "rum-session-replay-daily-budget-nearly-spent",
|
|
622
|
+
name: "Session Replay Daily Budget Nearly Spent",
|
|
623
|
+
description:
|
|
624
|
+
"Alert when the project's session replay uploads today reach 80% of its daily limit, before recorders are told to stop. The limit is shared by every application in the project and resets at 00:00 UTC, so one of these monitors covers them all.",
|
|
625
|
+
severity: "Warning",
|
|
626
|
+
requirement: "SessionReplayRecording",
|
|
627
|
+
metricName: SessionReplayBudgetMetricType.ProjectDailyUsedPercent,
|
|
628
|
+
metricAlias: "rum_replay_daily_budget_used",
|
|
629
|
+
threshold: 80,
|
|
630
|
+
thresholdLabel: "80% or more used",
|
|
631
|
+
breachDescription:
|
|
632
|
+
"Triggers when the project's session replay uploads today reach 80% of its daily limit at any point in the last 15 minutes.",
|
|
633
|
+
incidentHeadline: "Project's daily session replay budget nearly spent",
|
|
634
|
+
getIncidentDescription: (): string => {
|
|
635
|
+
return "This project has used 80% of today's session replay upload limit, which all of its RUM applications share. At 100% every recorder in the project is told to stop until 00:00 UTC. To make the rest of the day last, open the Replay Policy page of the busiest applications and lower the Sample percentage, upload only On error or frustration, or narrow the Allowed origins so staging traffic stops spending it. Self-hosted: the limit is SESSION_REPLAY_MAX_BYTES_PER_PROJECT_PER_DAY.";
|
|
636
|
+
},
|
|
637
|
+
}),
|
|
638
|
+
buildSessionReplayBudgetTemplate({
|
|
639
|
+
id: "rum-session-replay-daily-budget-spent",
|
|
640
|
+
name: "Session Replay Daily Budget Spent",
|
|
641
|
+
description:
|
|
642
|
+
"Alert when the project's daily session replay limit is spent: every recorder in the project has been told to stop until 00:00 UTC. The limit is shared by every application in the project, so one of these monitors covers them all.",
|
|
643
|
+
severity: "Critical",
|
|
644
|
+
requirement: "SessionReplayRecording",
|
|
645
|
+
metricName: SessionReplayBudgetMetricType.ProjectDailyUsedPercent,
|
|
646
|
+
metricAlias: "rum_replay_daily_budget_used",
|
|
647
|
+
threshold: 100,
|
|
648
|
+
thresholdLabel: "100% used",
|
|
649
|
+
breachDescription:
|
|
650
|
+
"Triggers when the project's session replay uploads today reach 100% of its daily limit at any point in the last 15 minutes.",
|
|
651
|
+
incidentHeadline: "Session replay paused: project's daily budget spent",
|
|
652
|
+
getIncidentDescription: (): string => {
|
|
653
|
+
return "This project has spent today's session replay upload limit, which all of its RUM applications share: every recorder in the project has been told to stop, and nothing more is recorded until 00:00 UTC. This resolves on its own at about 00:10-00:15 UTC, once the last reading over the limit has left the monitor's 15-minute window. To make tomorrow's limit last, lower the Sample percentage, upload only On error or frustration, or narrow the Allowed origins on the busiest applications' Replay Policy page. Self-hosted: the limit is SESSION_REPLAY_MAX_BYTES_PER_PROJECT_PER_DAY.";
|
|
654
|
+
},
|
|
655
|
+
}),
|
|
656
|
+
buildSessionReplayBudgetTemplate({
|
|
657
|
+
id: "rum-session-replay-monthly-budget-nearly-spent",
|
|
658
|
+
name: "Session Replay Monthly Budget Nearly Spent",
|
|
659
|
+
description:
|
|
660
|
+
"Alert when this application's session replay uploads this month reach 80% of its monthly budget, before its recorders are told to stop for the rest of the month (UTC).",
|
|
661
|
+
severity: "Warning",
|
|
662
|
+
requirement: "SessionReplayMonthlyBudget",
|
|
663
|
+
metricName: SessionReplayBudgetMetricType.ApplicationMonthlyUsedPercent,
|
|
664
|
+
metricAlias: "rum_replay_monthly_budget_used",
|
|
665
|
+
threshold: 80,
|
|
666
|
+
thresholdLabel: "80% or more used",
|
|
667
|
+
breachDescription:
|
|
668
|
+
"Triggers when this application's session replay uploads this month reach 80% of its monthly budget at any point in the last 15 minutes.",
|
|
669
|
+
incidentHeadline: "Monthly session replay budget nearly spent",
|
|
670
|
+
getIncidentDescription: (monitorName: string): string => {
|
|
671
|
+
return `${monitorName} has used 80% of its monthly session replay budget. At 100% its recorders are told to stop until the 1st of next month (UTC). Raise the Monthly budget on its Replay Policy page, lower the Sample percentage, or upload only On error or frustration.`;
|
|
672
|
+
},
|
|
673
|
+
}),
|
|
674
|
+
buildSessionReplayBudgetTemplate({
|
|
675
|
+
id: "rum-session-replay-monthly-budget-spent",
|
|
676
|
+
name: "Session Replay Monthly Budget Spent",
|
|
677
|
+
description:
|
|
678
|
+
"Alert when this application's monthly session replay budget is spent: its recorders have been told to stop until the 1st of next month (UTC) or until the budget is raised.",
|
|
679
|
+
severity: "Critical",
|
|
680
|
+
requirement: "SessionReplayMonthlyBudget",
|
|
681
|
+
metricName: SessionReplayBudgetMetricType.ApplicationMonthlyUsedPercent,
|
|
682
|
+
metricAlias: "rum_replay_monthly_budget_used",
|
|
683
|
+
threshold: 100,
|
|
684
|
+
thresholdLabel: "100% used",
|
|
685
|
+
breachDescription:
|
|
686
|
+
"Triggers when this application's session replay uploads this month reach 100% of its monthly budget at any point in the last 15 minutes.",
|
|
687
|
+
incidentHeadline: "Session replay paused: monthly budget spent",
|
|
688
|
+
getIncidentDescription: (monitorName: string): string => {
|
|
689
|
+
return `${monitorName} has spent its monthly session replay budget: its recorders have been told to stop, and nothing more is recorded until the 1st of next month (UTC) or until the budget is raised on its Replay Policy page. This resolves on its own.`;
|
|
690
|
+
},
|
|
691
|
+
}),
|
|
692
|
+
];
|
|
693
|
+
|
|
409
694
|
const ALL_RUM_ALERT_TEMPLATES: Array<RumAlertTemplate> = [
|
|
410
695
|
...webVitalTemplates,
|
|
411
696
|
failedUserOperationsTemplate,
|
|
412
697
|
unhandledExceptionsTemplate,
|
|
698
|
+
...sessionReplayBudgetTemplates,
|
|
413
699
|
];
|
|
414
700
|
|
|
701
|
+
/*
|
|
702
|
+
* Every template this module ships, whatever the application - the set that
|
|
703
|
+
* resolving an id and the catalog-wide invariants have to run over. What to
|
|
704
|
+
* offer ONE application is getRumAlertTemplates.
|
|
705
|
+
*/
|
|
415
706
|
export function getAllRumAlertTemplates(): Array<RumAlertTemplate> {
|
|
416
707
|
return [...ALL_RUM_ALERT_TEMPLATES];
|
|
417
708
|
}
|
|
418
709
|
|
|
710
|
+
/*
|
|
711
|
+
* Whether one application meets a template's requirement. Only an explicit
|
|
712
|
+
* `true` (and a real budget) counts: unknown is never read as yes.
|
|
713
|
+
*/
|
|
714
|
+
function isRequirementMet(data: {
|
|
715
|
+
requirement: RumAlertTemplateRequirement | undefined;
|
|
716
|
+
context: RumAlertTemplateContext | undefined;
|
|
717
|
+
}): boolean {
|
|
718
|
+
if (!data.requirement) {
|
|
719
|
+
return true;
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
const isRecording: boolean =
|
|
723
|
+
data.context?.sessionReplayEnabled === true &&
|
|
724
|
+
data.context?.sessionReplayHasRecorded === true;
|
|
725
|
+
|
|
726
|
+
const budgetInGB: number | null | undefined =
|
|
727
|
+
data.context?.sessionReplayMonthlyBudgetInGB;
|
|
728
|
+
|
|
729
|
+
switch (data.requirement) {
|
|
730
|
+
case "SessionReplayRecording":
|
|
731
|
+
return isRecording;
|
|
732
|
+
case "SessionReplayMonthlyBudget":
|
|
733
|
+
return (
|
|
734
|
+
isRecording &&
|
|
735
|
+
typeof budgetInGB === "number" &&
|
|
736
|
+
Number.isFinite(budgetInGB) &&
|
|
737
|
+
budgetInGB > 0
|
|
738
|
+
);
|
|
739
|
+
default:
|
|
740
|
+
return false;
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
/*
|
|
745
|
+
* The templates to offer ONE application, given what is known about it.
|
|
746
|
+
*
|
|
747
|
+
* Every template without a requirement, always. The session replay budget
|
|
748
|
+
* pairs only once their series can exist (see the storage budget comment
|
|
749
|
+
* above): the daily pair once the application has session replay on and has
|
|
750
|
+
* recorded, the monthly pair once it also has a Monthly budget. No context,
|
|
751
|
+
* or a field that is null or undefined, withholds them - so what an unknown
|
|
752
|
+
* application is offered is exactly the set every application was offered
|
|
753
|
+
* before they existed.
|
|
754
|
+
*/
|
|
755
|
+
export function getRumAlertTemplates(
|
|
756
|
+
context?: RumAlertTemplateContext | undefined,
|
|
757
|
+
): Array<RumAlertTemplate> {
|
|
758
|
+
return ALL_RUM_ALERT_TEMPLATES.filter((template: RumAlertTemplate) => {
|
|
759
|
+
return isRequirementMet({
|
|
760
|
+
requirement: template.requirement,
|
|
761
|
+
context: context,
|
|
762
|
+
});
|
|
763
|
+
});
|
|
764
|
+
}
|
|
765
|
+
|
|
419
766
|
export function getRumAlertTemplateById(
|
|
420
767
|
id: string,
|
|
421
768
|
): RumAlertTemplate | undefined {
|