@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.
Files changed (383) hide show
  1. package/Models/DatabaseModels/AutoRemediationSuggestion.ts +60 -0
  2. package/Models/DatabaseModels/CephCluster.ts +213 -0
  3. package/Models/DatabaseModels/DatabaseServer.ts +213 -0
  4. package/Models/DatabaseModels/DockerHost.ts +213 -0
  5. package/Models/DatabaseModels/DockerSwarmCluster.ts +213 -0
  6. package/Models/DatabaseModels/GlobalConfig.ts +1 -1
  7. package/Models/DatabaseModels/Host.ts +213 -0
  8. package/Models/DatabaseModels/Index.ts +2 -0
  9. package/Models/DatabaseModels/PodmanHost.ts +213 -0
  10. package/Models/DatabaseModels/ProxmoxCluster.ts +213 -0
  11. package/Models/DatabaseModels/ResourceAiAgent.ts +419 -0
  12. package/Models/DatabaseModels/RunnerJob.ts +144 -0
  13. package/Models/DatabaseModels/VMwareVCenter.ts +213 -0
  14. package/Server/API/AutoRemediationAPI.ts +392 -1
  15. package/Server/API/ResourceAiAccessAPI.ts +1669 -0
  16. package/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.ts +423 -0
  17. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
  18. package/Server/Infrastructure/Semaphore.ts +22 -0
  19. package/Server/Middleware/TelemetryIngest.ts +15 -5
  20. package/Server/Services/AnalyticsDatabaseService.ts +45 -1
  21. package/Server/Services/AutoRemediationRuleEngineService.ts +940 -112
  22. package/Server/Services/CephClusterService.ts +109 -1
  23. package/Server/Services/DatabaseServerService.ts +116 -1
  24. package/Server/Services/DockerHostService.ts +109 -1
  25. package/Server/Services/DockerSwarmClusterService.ts +113 -1
  26. package/Server/Services/HostService.ts +126 -4
  27. package/Server/Services/MetricRecordingRuleService.ts +47 -0
  28. package/Server/Services/PodmanHostService.ts +109 -1
  29. package/Server/Services/ProxmoxClusterService.ts +110 -1
  30. package/Server/Services/ResourceAiAccessService.ts +1439 -0
  31. package/Server/Services/ResourceAiAgentJobService.ts +202 -0
  32. package/Server/Services/ResourceAiAgentService.ts +2432 -0
  33. package/Server/Services/RunnerJobService.ts +611 -4
  34. package/Server/Services/TelemetryUsageBillingService.ts +28 -0
  35. package/Server/Services/TraceRecordingRuleService.ts +33 -0
  36. package/Server/Services/VMwareVCenterService.ts +110 -1
  37. package/Server/Utils/AI/Remediation/RemediationCommandTools.ts +1434 -32
  38. package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +935 -21
  39. package/Server/Utils/AI/Remediation/RemediationPlanRunner.ts +25 -1
  40. package/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.ts +577 -0
  41. package/Server/Utils/AI/ResourceAccess/ResourceAccessContext.ts +271 -0
  42. package/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.ts +45 -0
  43. package/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.ts +964 -0
  44. package/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.ts +333 -0
  45. package/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.ts +873 -0
  46. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +72 -2
  47. package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +72 -5
  48. package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +72 -5
  49. package/Server/Utils/AutoRemediation/CommandPlanExecutor.ts +396 -13
  50. package/Server/Utils/AutoRemediation/RemediationVerifier.ts +35 -2
  51. package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +9 -1
  52. package/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.ts +920 -0
  53. package/Server/Utils/SessionReplay/SessionReplayUsage.ts +84 -6
  54. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.ts +35 -15
  55. package/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.ts +33 -15
  56. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.ts +21 -1
  57. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.ts +298 -224
  58. package/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.ts +35 -15
  59. package/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.ts +389 -175
  60. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +366 -143
  61. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.ts +163 -0
  62. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.ts +396 -0
  63. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.ts +418 -0
  64. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.ts +152 -0
  65. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.ts +251 -0
  66. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.ts +214 -0
  67. package/Tests/App/Dashboard/ClusterAccessNotice.test.tsx +93 -0
  68. package/Tests/App/Dashboard/DatabaseDocumentationMarkdown.test.ts +18 -6
  69. package/Tests/App/Dashboard/InvestigationInfrastructureTools.test.tsx +506 -0
  70. package/Tests/App/Dashboard/RemediationSuggestionCardDescription.test.tsx +209 -0
  71. package/Tests/App/Dashboard/RemediationSuggestionCardResource.test.tsx +317 -0
  72. package/Tests/App/Dashboard/ResourceAiAccessSettingsUtil.test.ts +921 -0
  73. package/Tests/App/Dashboard/ResourceAiAgentInstall.test.ts +860 -0
  74. package/Tests/App/Dashboard/ResourceAiAgentPage.test.tsx +1721 -0
  75. package/Tests/App/Dashboard/ResourceAiAgentStatus.test.ts +1002 -0
  76. package/Tests/App/Dashboard/ResourceAiInsightsPage.test.tsx +931 -0
  77. package/Tests/App/Dashboard/ResourceAiNavigation.test.tsx +575 -0
  78. package/Tests/App/Dashboard/RunbookStepTypeMaps.test.ts +38 -7
  79. package/Tests/Models/DatabaseModels/DatabaseServerModels.test.ts +33 -1
  80. package/Tests/Models/DatabaseModels/ResourceAiAccessColumns.test.ts +738 -0
  81. package/Tests/Models/DatabaseModels/ResourceAiAgentModel.test.ts +842 -0
  82. package/Tests/Server/API/AutoRemediationApproveResourceRound.test.ts +835 -0
  83. package/Tests/Server/API/ResourceAiAccessAPI.test.ts +2730 -0
  84. package/Tests/Server/Infrastructure/Postgres/AddDatabaseServerTablesMigration.test.ts +60 -0
  85. package/Tests/Server/Infrastructure/Postgres/AddResourceAiAgentsMigration.test.ts +659 -0
  86. package/Tests/Server/Infrastructure/SemaphoreMutex.test.ts +31 -0
  87. package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +63 -5
  88. package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerPinnedKey.test.ts +103 -5
  89. package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerRateLimit.test.ts +19 -1
  90. package/Tests/Server/Services/AutoRemediationResourceRuleEngine.test.ts +1279 -0
  91. package/Tests/Server/Services/DatabaseServerService.test.ts +55 -0
  92. package/Tests/Server/Services/GroupTelemetryUsageExcludeNames.test.ts +299 -0
  93. package/Tests/Server/Services/HostServiceFindOrCreateMemo.test.ts +44 -0
  94. package/Tests/Server/Services/MonitorProbeServiceIntervalScheduling.test.ts +45 -6
  95. package/Tests/Server/Services/RecordingRuleReservedMetricName.test.ts +171 -0
  96. package/Tests/Server/Services/ResourceAiAccessChangeAuthorization.test.ts +256 -0
  97. package/Tests/Server/Services/ResourceAiAccessService.test.ts +1373 -0
  98. package/Tests/Server/Services/ResourceAiAgentJobService.test.ts +375 -0
  99. package/Tests/Server/Services/ResourceAiAgentServiceHelpers.test.ts +1114 -0
  100. package/Tests/Server/Services/ResourceAiAgentServiceLifecycle.test.ts +1050 -0
  101. package/Tests/Server/Services/ResourceAiAgentServiceRegister.test.ts +2251 -0
  102. package/Tests/Server/Services/ResourceAiSettingsCreate.test.ts +373 -0
  103. package/Tests/Server/Services/ResourceAiSettingsPermission.test.ts +1042 -0
  104. package/Tests/Server/Services/ResourceServiceDeleteCleansUpAi.test.ts +319 -0
  105. package/Tests/Server/Services/RunnerJobEnqueueKubectl.test.ts +105 -0
  106. package/Tests/Server/Services/RunnerJobEnqueueResourceCommand.test.ts +986 -0
  107. package/Tests/Server/Services/RunnerJobResourceCommandLane.test.ts +211 -0
  108. package/Tests/Server/Services/RunnerJobResourceCommandTimeoutAndRedaction.test.ts +352 -0
  109. package/Tests/Server/Services/TelemetryUsageBillingSloExclusion.test.ts +218 -0
  110. package/Tests/Server/TestingUtils/Services/FakeRunnerJobCount.ts +145 -0
  111. package/Tests/Server/Utils/AI/InvestigationInfrastructureAccessWiring.test.ts +453 -0
  112. package/Tests/Server/Utils/AI/InvestigationInfrastructureReport.test.ts +721 -0
  113. package/Tests/Server/Utils/AI/RemediationCommandTools.test.ts +94 -1
  114. package/Tests/Server/Utils/AI/RemediationCommandToolsResource.test.ts +1530 -0
  115. package/Tests/Server/Utils/AI/RemediationExecutionRunnerResourceMode.test.ts +1249 -0
  116. package/Tests/Server/Utils/AI/RemediationPlanRunner.test.ts +117 -0
  117. package/Tests/Server/Utils/AI/RemediationResourceCopyParity.test.ts +463 -0
  118. package/Tests/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.test.ts +722 -0
  119. package/Tests/Server/Utils/AI/ResourceAccess/ResourceAccessContext.test.ts +266 -0
  120. package/Tests/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.test.ts +1220 -0
  121. package/Tests/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.test.ts +569 -0
  122. package/Tests/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.test.ts +830 -0
  123. package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutorResource.test.ts +717 -0
  124. package/Tests/Server/Utils/AutoRemediation/RemediationVerifierResourceFollowUp.test.ts +338 -0
  125. package/Tests/Server/Utils/Monitor/Criteria/SessionReplayBudgetTemplateCriteria.test.ts +422 -0
  126. package/Tests/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.test.ts +1647 -0
  127. package/Tests/Server/Utils/SessionReplay/SessionReplayUsage.test.ts +143 -1
  128. package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +33 -3
  129. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsAccountNotLinked.test.ts +1093 -0
  130. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.test.ts +1049 -0
  131. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.test.ts +1676 -0
  132. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCards.test.ts +2884 -0
  133. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.test.ts +2490 -0
  134. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateSubmit.test.ts +2293 -0
  135. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateSubmitServerTimezone.test.ts +386 -0
  136. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.test.ts +1477 -0
  137. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.test.ts +1967 -0
  138. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsStripHtmlTags.test.ts +92 -0
  139. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsSubmittedFormRemoval.test.ts +1819 -0
  140. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.test.ts +1033 -0
  141. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezoneServerZone.test.ts +610 -0
  142. package/Tests/Server/Utils/Workspace/MicrosoftTeamsBotMessageHandling.test.ts +2610 -0
  143. package/Tests/Server/Utils/Workspace/MicrosoftTeamsCreateCommandsEndToEnd.test.ts +4672 -0
  144. package/Tests/Server/Utils/Workspace/WorkspaceCreateProjectReferences.test.ts +190 -65
  145. package/Tests/Types/AutoRemediation/AiRemediationCommandPlan.test.ts +10 -4
  146. package/Tests/Types/AutoRemediation/AiRemediationCommandPlanResourceCommand.test.ts +305 -0
  147. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +277 -13
  148. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +113 -0
  149. package/Tests/Types/Monitor/RumAlertTemplates.test.ts +773 -2
  150. package/Tests/Types/ResourceAiAgent/AiResourceType.test.ts +419 -0
  151. package/Tests/Types/ResourceAiAgent/ResourceAiAccess.test.ts +517 -0
  152. package/Tests/Types/Runbook/RunbookStepType.test.ts +147 -8
  153. package/Tests/UI/Rum/RecordingHealthDashboard.test.tsx +769 -1
  154. package/Tests/Utils/AiRemediation/Resource/CephCommandPolicy.test.ts +1653 -0
  155. package/Tests/Utils/AiRemediation/Resource/CephOutputRedaction.test.ts +204 -0
  156. package/Tests/Utils/AiRemediation/Resource/DatabaseCommandPolicy.test.ts +1077 -0
  157. package/Tests/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.test.ts +558 -0
  158. package/Tests/Utils/AiRemediation/Resource/DatabaseQueryRedactor.test.ts +834 -0
  159. package/Tests/Utils/AiRemediation/Resource/DockerCliGrammar.test.ts +747 -0
  160. package/Tests/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.test.ts +1259 -0
  161. package/Tests/Utils/AiRemediation/Resource/DockerOutputRedaction.test.ts +386 -0
  162. package/Tests/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.test.ts +782 -0
  163. package/Tests/Utils/AiRemediation/Resource/GovcCommandPolicy.test.ts +2259 -0
  164. package/Tests/Utils/AiRemediation/Resource/HostCommandPolicy.test.ts +2019 -0
  165. package/Tests/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.test.ts +2497 -0
  166. package/Tests/Utils/AiRemediation/Resource/ResourceCommandPolicy.test.ts +1305 -0
  167. package/Tests/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.test.ts +585 -0
  168. package/Tests/Utils/AiRemediation/Resource/ResourceOutputRedactor.test.ts +334 -0
  169. package/Tests/Utils/AiRemediation/Resource/ResourceOutputRedactorCopyParity.test.ts +98 -0
  170. package/Tests/Utils/AiRemediation/Resource/ResourcePolicyImportClosure.test.ts +391 -0
  171. package/Tests/Utils/AiRemediation/ResourceAiAgentPolicyCopyParity.test.ts +497 -0
  172. package/Tests/Utils/SessionReplay/SessionReplayBudgetMetricType.test.ts +383 -0
  173. package/Types/AI/ResourceAiAccessApi.ts +140 -0
  174. package/Types/AI/ResourceAiAccessPermissions.ts +126 -0
  175. package/Types/AutoRemediation/AiRemediationCommandPlan.ts +183 -2
  176. package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +55 -22
  177. package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +35 -3
  178. package/Types/Monitor/RumAlertTemplates.ts +351 -4
  179. package/Types/ResourceAiAgent/AiResourceType.ts +310 -0
  180. package/Types/ResourceAiAgent/ResourceAiAccess.ts +574 -0
  181. package/Types/Rum/SessionReplayBudgetMetricType.ts +47 -0
  182. package/Types/Runbook/RunbookStepType.ts +29 -0
  183. package/Types/Telemetry/TelemetryIngestSurface.ts +14 -2
  184. package/Utils/AI/InvestigationReport.ts +121 -15
  185. package/Utils/AiRemediation/Resource/CephCommandPolicy.ts +1936 -0
  186. package/Utils/AiRemediation/Resource/DatabaseCommandPolicy.ts +166 -0
  187. package/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.ts +1532 -0
  188. package/Utils/AiRemediation/Resource/DatabaseQueryRedactor.ts +1394 -0
  189. package/Utils/AiRemediation/Resource/DockerCliGrammar.ts +1839 -0
  190. package/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.ts +490 -0
  191. package/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.ts +687 -0
  192. package/Utils/AiRemediation/Resource/GovcCommandPolicy.ts +2096 -0
  193. package/Utils/AiRemediation/Resource/HostCommandPolicy.ts +2982 -0
  194. package/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.ts +1679 -0
  195. package/Utils/AiRemediation/Resource/ResourceCommandPolicy.ts +851 -0
  196. package/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.ts +593 -0
  197. package/Utils/AiRemediation/Resource/ResourceOutputRedactor.ts +2812 -0
  198. package/Utils/SessionReplay/SessionReplayBudgetMetricType.ts +184 -0
  199. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js +62 -0
  200. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js.map +1 -1
  201. package/build/dist/Models/DatabaseModels/CephCluster.js +219 -0
  202. package/build/dist/Models/DatabaseModels/CephCluster.js.map +1 -1
  203. package/build/dist/Models/DatabaseModels/DatabaseServer.js +219 -0
  204. package/build/dist/Models/DatabaseModels/DatabaseServer.js.map +1 -1
  205. package/build/dist/Models/DatabaseModels/DockerHost.js +219 -0
  206. package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
  207. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js +219 -0
  208. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js.map +1 -1
  209. package/build/dist/Models/DatabaseModels/GlobalConfig.js +1 -1
  210. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  211. package/build/dist/Models/DatabaseModels/Host.js +219 -0
  212. package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
  213. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  214. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  215. package/build/dist/Models/DatabaseModels/PodmanHost.js +219 -0
  216. package/build/dist/Models/DatabaseModels/PodmanHost.js.map +1 -1
  217. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js +219 -0
  218. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js.map +1 -1
  219. package/build/dist/Models/DatabaseModels/ResourceAiAgent.js +439 -0
  220. package/build/dist/Models/DatabaseModels/ResourceAiAgent.js.map +1 -0
  221. package/build/dist/Models/DatabaseModels/RunnerJob.js +145 -0
  222. package/build/dist/Models/DatabaseModels/RunnerJob.js.map +1 -1
  223. package/build/dist/Models/DatabaseModels/VMwareVCenter.js +219 -0
  224. package/build/dist/Models/DatabaseModels/VMwareVCenter.js.map +1 -1
  225. package/build/dist/Server/API/AutoRemediationAPI.js +231 -1
  226. package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -1
  227. package/build/dist/Server/API/ResourceAiAccessAPI.js +1119 -0
  228. package/build/dist/Server/API/ResourceAiAccessAPI.js.map +1 -0
  229. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.js +168 -0
  230. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.js.map +1 -0
  231. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
  232. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  233. package/build/dist/Server/Infrastructure/Semaphore.js +6 -0
  234. package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
  235. package/build/dist/Server/Middleware/TelemetryIngest.js +12 -5
  236. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  237. package/build/dist/Server/Services/AnalyticsDatabaseService.js +26 -1
  238. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  239. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +601 -3
  240. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
  241. package/build/dist/Server/Services/CephClusterService.js +104 -0
  242. package/build/dist/Server/Services/CephClusterService.js.map +1 -1
  243. package/build/dist/Server/Services/DatabaseServerService.js +99 -0
  244. package/build/dist/Server/Services/DatabaseServerService.js.map +1 -1
  245. package/build/dist/Server/Services/DockerHostService.js +104 -0
  246. package/build/dist/Server/Services/DockerHostService.js.map +1 -1
  247. package/build/dist/Server/Services/DockerSwarmClusterService.js +104 -0
  248. package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -1
  249. package/build/dist/Server/Services/HostService.js +114 -2
  250. package/build/dist/Server/Services/HostService.js.map +1 -1
  251. package/build/dist/Server/Services/MetricRecordingRuleService.js +46 -0
  252. package/build/dist/Server/Services/MetricRecordingRuleService.js.map +1 -1
  253. package/build/dist/Server/Services/PodmanHostService.js +104 -0
  254. package/build/dist/Server/Services/PodmanHostService.js.map +1 -1
  255. package/build/dist/Server/Services/ProxmoxClusterService.js +104 -0
  256. package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -1
  257. package/build/dist/Server/Services/ResourceAiAccessService.js +1028 -0
  258. package/build/dist/Server/Services/ResourceAiAccessService.js.map +1 -0
  259. package/build/dist/Server/Services/ResourceAiAgentJobService.js +173 -0
  260. package/build/dist/Server/Services/ResourceAiAgentJobService.js.map +1 -0
  261. package/build/dist/Server/Services/ResourceAiAgentService.js +1687 -0
  262. package/build/dist/Server/Services/ResourceAiAgentService.js.map +1 -0
  263. package/build/dist/Server/Services/RunnerJobService.js +344 -5
  264. package/build/dist/Server/Services/RunnerJobService.js.map +1 -1
  265. package/build/dist/Server/Services/TelemetryUsageBillingService.js +26 -0
  266. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  267. package/build/dist/Server/Services/TraceRecordingRuleService.js +37 -0
  268. package/build/dist/Server/Services/TraceRecordingRuleService.js.map +1 -1
  269. package/build/dist/Server/Services/VMwareVCenterService.js +104 -0
  270. package/build/dist/Server/Services/VMwareVCenterService.js.map +1 -1
  271. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js +1029 -30
  272. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -1
  273. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +633 -28
  274. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
  275. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js +21 -1
  276. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js.map +1 -1
  277. package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js +330 -0
  278. package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js.map +1 -0
  279. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessContext.js +160 -0
  280. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessContext.js.map +1 -0
  281. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.js +33 -0
  282. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.js.map +1 -0
  283. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.js +640 -0
  284. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.js.map +1 -0
  285. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.js +226 -0
  286. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.js.map +1 -0
  287. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js +600 -0
  288. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js.map +1 -0
  289. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +50 -4
  290. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  291. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +55 -4
  292. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
  293. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +55 -4
  294. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
  295. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js +290 -13
  296. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js.map +1 -1
  297. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js +29 -1
  298. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js.map +1 -1
  299. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js +9 -1
  300. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js.map +1 -1
  301. package/build/dist/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.js +627 -0
  302. package/build/dist/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.js.map +1 -0
  303. package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js +60 -5
  304. package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js.map +1 -1
  305. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js +19 -15
  306. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js.map +1 -1
  307. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js +19 -15
  308. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js.map +1 -1
  309. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js +17 -1
  310. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js.map +1 -1
  311. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js +183 -209
  312. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js.map +1 -1
  313. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js +19 -15
  314. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js.map +1 -1
  315. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js +233 -167
  316. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js.map +1 -1
  317. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +263 -110
  318. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  319. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.js +129 -0
  320. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.js.map +1 -0
  321. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.js +266 -0
  322. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.js.map +1 -0
  323. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.js +258 -0
  324. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.js.map +1 -0
  325. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.js +104 -0
  326. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.js.map +1 -0
  327. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.js +183 -0
  328. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.js.map +1 -0
  329. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.js +123 -0
  330. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.js.map +1 -0
  331. package/build/dist/Types/AI/ResourceAiAccessApi.js +30 -0
  332. package/build/dist/Types/AI/ResourceAiAccessApi.js.map +1 -0
  333. package/build/dist/Types/AI/ResourceAiAccessPermissions.js +98 -0
  334. package/build/dist/Types/AI/ResourceAiAccessPermissions.js.map +1 -0
  335. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js +116 -29
  336. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js.map +1 -1
  337. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +47 -21
  338. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
  339. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +5 -0
  340. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
  341. package/build/dist/Types/Monitor/RumAlertTemplates.js +199 -3
  342. package/build/dist/Types/Monitor/RumAlertTemplates.js.map +1 -1
  343. package/build/dist/Types/ResourceAiAgent/AiResourceType.js +242 -0
  344. package/build/dist/Types/ResourceAiAgent/AiResourceType.js.map +1 -0
  345. package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js +275 -0
  346. package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js.map +1 -0
  347. package/build/dist/Types/Rum/SessionReplayBudgetMetricType.js +45 -0
  348. package/build/dist/Types/Rum/SessionReplayBudgetMetricType.js.map +1 -0
  349. package/build/dist/Types/Runbook/RunbookStepType.js +27 -0
  350. package/build/dist/Types/Runbook/RunbookStepType.js.map +1 -1
  351. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +13 -2
  352. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -1
  353. package/build/dist/Utils/AI/InvestigationReport.js +71 -11
  354. package/build/dist/Utils/AI/InvestigationReport.js.map +1 -1
  355. package/build/dist/Utils/AiRemediation/Resource/CephCommandPolicy.js +1462 -0
  356. package/build/dist/Utils/AiRemediation/Resource/CephCommandPolicy.js.map +1 -0
  357. package/build/dist/Utils/AiRemediation/Resource/DatabaseCommandPolicy.js +122 -0
  358. package/build/dist/Utils/AiRemediation/Resource/DatabaseCommandPolicy.js.map +1 -0
  359. package/build/dist/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.js +1139 -0
  360. package/build/dist/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.js.map +1 -0
  361. package/build/dist/Utils/AiRemediation/Resource/DatabaseQueryRedactor.js +1060 -0
  362. package/build/dist/Utils/AiRemediation/Resource/DatabaseQueryRedactor.js.map +1 -0
  363. package/build/dist/Utils/AiRemediation/Resource/DockerCliGrammar.js +1301 -0
  364. package/build/dist/Utils/AiRemediation/Resource/DockerCliGrammar.js.map +1 -0
  365. package/build/dist/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.js +370 -0
  366. package/build/dist/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.js.map +1 -0
  367. package/build/dist/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.js +498 -0
  368. package/build/dist/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.js.map +1 -0
  369. package/build/dist/Utils/AiRemediation/Resource/GovcCommandPolicy.js +1565 -0
  370. package/build/dist/Utils/AiRemediation/Resource/GovcCommandPolicy.js.map +1 -0
  371. package/build/dist/Utils/AiRemediation/Resource/HostCommandPolicy.js +2206 -0
  372. package/build/dist/Utils/AiRemediation/Resource/HostCommandPolicy.js.map +1 -0
  373. package/build/dist/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.js +1129 -0
  374. package/build/dist/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.js.map +1 -0
  375. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicy.js +565 -0
  376. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicy.js.map +1 -0
  377. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.js +408 -0
  378. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.js.map +1 -0
  379. package/build/dist/Utils/AiRemediation/Resource/ResourceOutputRedactor.js +1910 -0
  380. package/build/dist/Utils/AiRemediation/Resource/ResourceOutputRedactor.js.map +1 -0
  381. package/build/dist/Utils/SessionReplay/SessionReplayBudgetMetricType.js +160 -0
  382. package/build/dist/Utils/SessionReplay/SessionReplayBudgetMetricType.js.map +1 -0
  383. 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 = "Core Web Vitals" | "Errors";
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: EvaluateOverTimeType.Average,
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: EvaluateOverTimeType.Average,
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: `The RUM signal for ${data.args.monitorName} is within its recommended threshold.`,
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 {