@oneuptime/common 11.7.4 → 12.0.1

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 (896) hide show
  1. package/Models/AnalyticsModels/ExceptionInstance.ts +67 -0
  2. package/Models/AnalyticsModels/Index.ts +10 -0
  3. package/Models/AnalyticsModels/Log.ts +60 -0
  4. package/Models/AnalyticsModels/RumSession.ts +1401 -0
  5. package/Models/AnalyticsModels/RumSessionChunk.ts +798 -0
  6. package/Models/AnalyticsModels/Span.ts +60 -0
  7. package/Models/DatabaseModels/AIAgentTaskPullRequest.ts +52 -0
  8. package/Models/DatabaseModels/AIRun.ts +31 -0
  9. package/Models/DatabaseModels/Alert.ts +29 -0
  10. package/Models/DatabaseModels/AlertCustomField.ts +1 -1
  11. package/Models/DatabaseModels/AlertFeed.ts +1 -0
  12. package/Models/DatabaseModels/AutoRemediationRule.ts +989 -0
  13. package/Models/DatabaseModels/AutoRemediationSuggestion.ts +874 -0
  14. package/Models/DatabaseModels/CodeRepository.ts +129 -0
  15. package/Models/DatabaseModels/GlobalConfig.ts +312 -0
  16. package/Models/DatabaseModels/Incident.ts +29 -0
  17. package/Models/DatabaseModels/IncidentCustomField.ts +1 -1
  18. package/Models/DatabaseModels/IncidentFeed.ts +1 -0
  19. package/Models/DatabaseModels/Index.ts +21 -8
  20. package/Models/DatabaseModels/InstanceHealthLog.ts +8 -0
  21. package/Models/DatabaseModels/MonitorCustomField.ts +1 -1
  22. package/Models/DatabaseModels/MonitorStatus.ts +1 -1
  23. package/Models/DatabaseModels/NetworkDeviceLabelRule.ts +2 -2
  24. package/Models/DatabaseModels/NetworkDeviceOwnerRule.ts +2 -2
  25. package/Models/DatabaseModels/NetworkSiteAssignmentRule.ts +1 -1
  26. package/Models/DatabaseModels/OnCallDutyPolicyCustomField.ts +1 -1
  27. package/Models/DatabaseModels/OnCallDutyPolicyScheduleLayer.ts +12 -2
  28. package/Models/DatabaseModels/Project.ts +231 -0
  29. package/Models/DatabaseModels/RumApplication.ts +906 -0
  30. package/Models/DatabaseModels/RumSessionErasureRequest.ts +561 -0
  31. package/Models/DatabaseModels/RumSessionPin.ts +457 -0
  32. package/Models/DatabaseModels/RumSessionReplayView.ts +406 -0
  33. package/Models/DatabaseModels/RunbookCredential.ts +673 -0
  34. package/Models/DatabaseModels/RunbookSecret.ts +7 -7
  35. package/Models/DatabaseModels/{RunbookAgent.ts → Runner.ts} +206 -46
  36. package/Models/DatabaseModels/{RunbookAgentJob.ts → RunnerJob.ts} +151 -18
  37. package/Models/DatabaseModels/{RunbookAgentOwnerTeam.ts → RunnerOwnerTeam.ts} +41 -43
  38. package/Models/DatabaseModels/{RunbookAgentOwnerUser.ts → RunnerOwnerUser.ts} +41 -43
  39. package/Models/DatabaseModels/ScheduledMaintenanceCustomField.ts +1 -1
  40. package/Models/DatabaseModels/StatusPageCustomField.ts +1 -1
  41. package/Models/DatabaseModels/TeamCustomField.ts +1 -1
  42. package/Models/DatabaseModels/TeamMemberCustomField.ts +1 -1
  43. package/Server/API/AIAgentDataAPI.ts +179 -48
  44. package/Server/API/AIAgentTaskAPI.ts +36 -37
  45. package/Server/API/AIAgentTaskLogAPI.ts +19 -33
  46. package/Server/API/AutoRemediationAPI.ts +557 -0
  47. package/Server/API/BaseAnalyticsAPI.ts +4 -1
  48. package/Server/API/CommonAPI.ts +35 -0
  49. package/Server/API/DashboardAPI.ts +340 -15
  50. package/Server/API/TelemetryAPI.ts +1622 -3
  51. package/Server/API/UserIncomingCallNumberAPI.ts +31 -0
  52. package/Server/DatabaseConfig.ts +26 -1
  53. package/Server/EnvironmentConfig.ts +13 -0
  54. package/Server/Infrastructure/Postgres/LocalMigrationGenerationDataSource.ts +12 -2
  55. package/Server/Infrastructure/Postgres/SchemaMigrations/1785417351021-AddSessionReplay.ts +293 -0
  56. package/Server/Infrastructure/Postgres/SchemaMigrations/1785491583874-EnableSessionReplayByDefault.ts +67 -0
  57. package/Server/Infrastructure/Postgres/SchemaMigrations/1785496223183-AddMonitorSummaryToIncidentAndAlert.ts +33 -0
  58. package/Server/Infrastructure/Postgres/SchemaMigrations/1785516996695-AddSessionReplayReliabilityColumns.ts +40 -0
  59. package/Server/Infrastructure/Postgres/SchemaMigrations/1785533806494-AddSessionReplayCorrelationColumns.ts +54 -0
  60. package/Server/Infrastructure/Postgres/SchemaMigrations/1785749674203-AddRedisAndPostgresHealthNotificationColumns.ts +104 -0
  61. package/Server/Infrastructure/Postgres/SchemaMigrations/1785763818197-AddAutoRemediation.ts +349 -0
  62. package/Server/Infrastructure/Postgres/SchemaMigrations/1785768089408-AddRemediationVerification.ts +67 -0
  63. package/Server/Infrastructure/Postgres/SchemaMigrations/1785776960660-AddRunnerCapabilities.ts +23 -0
  64. package/Server/Infrastructure/Postgres/SchemaMigrations/1785790000000-AddIncidentInvestigationGating.ts +42 -0
  65. package/Server/Infrastructure/Postgres/SchemaMigrations/1785800000000-AddRunbookCredential.ts +84 -0
  66. package/Server/Infrastructure/Postgres/SchemaMigrations/1785810000000-RenameRunbookAgentToRunner.ts +152 -0
  67. package/Server/Infrastructure/Postgres/SchemaMigrations/1785860000000-SessionReplayDefaultToSensitiveInputMasking.ts +81 -0
  68. package/Server/Infrastructure/Postgres/SchemaMigrations/1785870000000-AddAiCommandRemediation.ts +151 -0
  69. package/Server/Infrastructure/Postgres/SchemaMigrations/1785880000000-AlignRunnerSchemaWithEntities.ts +597 -0
  70. package/Server/Infrastructure/Postgres/SchemaMigrations/1785890000000-AddFixVerificationAndAutomaticCodeFixes.ts +71 -0
  71. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +32 -0
  72. package/Server/Services/AIRunService.ts +10 -0
  73. package/Server/Services/AIService.ts +30 -0
  74. package/Server/Services/AlertService.ts +41 -4
  75. package/Server/Services/AlertSeverityService.ts +25 -11
  76. package/Server/Services/AlertStateService.ts +25 -11
  77. package/Server/Services/AutoRemediationRuleEngineService.ts +1101 -0
  78. package/Server/Services/{RunbookAgentOwnerTeamService.ts → AutoRemediationRuleService.ts} +1 -1
  79. package/Server/Services/AutoRemediationSuggestionService.ts +183 -0
  80. package/Server/Services/BillingService.ts +50 -1
  81. package/Server/Services/DatabaseService.ts +92 -4
  82. package/Server/Services/IncidentService.ts +56 -4
  83. package/Server/Services/IncidentSeverityService.ts +25 -11
  84. package/Server/Services/IncidentStateService.ts +25 -11
  85. package/Server/Services/Index.ts +19 -0
  86. package/Server/Services/LlmProviderService.ts +69 -9
  87. package/Server/Services/MonitorService.ts +24 -0
  88. package/Server/Services/MonitorStatusService.ts +25 -11
  89. package/Server/Services/NetworkDeviceLabelRuleEngineService.ts +18 -19
  90. package/Server/Services/NetworkDeviceLabelRuleService.ts +39 -0
  91. package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +18 -19
  92. package/Server/Services/NetworkDeviceOwnerRuleService.ts +37 -0
  93. package/Server/Services/NetworkDeviceService.ts +172 -21
  94. package/Server/Services/NetworkSiteAssignmentRuleService.ts +92 -12
  95. package/Server/Services/NetworkSiteService.ts +27 -10
  96. package/Server/Services/ProjectService.ts +47 -0
  97. package/Server/Services/RumApplicationService.ts +240 -1
  98. package/Server/Services/RumSessionChunkService.ts +11 -0
  99. package/Server/Services/RumSessionErasureRequestService.ts +197 -0
  100. package/Server/Services/RumSessionPinService.ts +213 -0
  101. package/Server/Services/RumSessionReplayViewService.ts +201 -0
  102. package/Server/Services/RumSessionService.ts +123 -0
  103. package/Server/Services/RunbookCredentialService.ts +76 -0
  104. package/Server/Services/{RunbookAgentJobService.ts → RunnerJobService.ts} +202 -51
  105. package/Server/Services/{RunbookAgentOwnerUserService.ts → RunnerOwnerTeamService.ts} +1 -1
  106. package/Server/Services/RunnerOwnerUserService.ts +10 -0
  107. package/Server/Services/RunnerService.ts +166 -0
  108. package/Server/Services/ScheduledMaintenanceStateService.ts +25 -11
  109. package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +15 -1
  110. package/Server/Services/ServiceService.ts +8 -2
  111. package/Server/Services/StatusPageService.ts +240 -36
  112. package/Server/Services/StatusPageSubscriberNotificationTemplateService.ts +20 -1
  113. package/Server/Services/TelemetryExceptionService.ts +3 -16
  114. package/Server/Services/TelemetryUsageBillingService.ts +33 -2
  115. package/Server/Services/TraceAggregationService.ts +196 -32
  116. package/Server/Types/Billing/MeteredPlan/AllMeteredPlans.ts +17 -0
  117. package/Server/Types/Billing/MeteredPlan/ServerMeteredPlan.ts +10 -0
  118. package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +63 -7
  119. package/Server/Utils/AI/CodeFix/CodeFixAgentAuth.ts +128 -0
  120. package/Server/Utils/AI/CodeFix/CodeFixAgentAvailability.ts +54 -0
  121. package/Server/Utils/AI/CodeFix/CodeFixReadiness.ts +17 -10
  122. package/Server/Utils/AI/CodeFix/CodeFixRunQueue.ts +8 -6
  123. package/Server/Utils/AI/Remediation/RemediationCommandTools.ts +943 -0
  124. package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +866 -0
  125. package/Server/Utils/AI/Remediation/RemediationPlanRunner.ts +823 -0
  126. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +103 -12
  127. package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +75 -17
  128. package/Server/Utils/AI/SRE/ConfidenceSignal.ts +28 -6
  129. package/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.ts +202 -12
  130. package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +264 -14
  131. package/Server/Utils/AI/SRE/Insights/Triage.ts +2 -7
  132. package/Server/Utils/AI/SRE/InvestigationGrader.ts +5 -24
  133. package/Server/Utils/AI/SRE/InvestigationQueue.ts +259 -20
  134. package/Server/Utils/AI/SRE/PostedRootCause.ts +82 -0
  135. package/Server/Utils/AI/SRE/README.md +3 -2
  136. package/Server/Utils/AI/SRE/RemediationHandoff.ts +82 -0
  137. package/Server/Utils/AI/SRE/SubjectCodeFixRun.ts +6 -19
  138. package/Server/Utils/AI/Toolbox/CodeWriteTools.ts +2 -2
  139. package/Server/Utils/Alert/AlertPrivacyFilter.ts +58 -0
  140. package/Server/Utils/AutoRemediation/CommandPlanExecutor.ts +604 -0
  141. package/Server/Utils/AutoRemediation/RemediationVerifier.ts +619 -0
  142. package/Server/Utils/CorsOptions.ts +52 -0
  143. package/Server/Utils/Database/RelationIdUtil.ts +68 -0
  144. package/Server/Utils/Incident/IncidentPrivacyFilter.ts +60 -0
  145. package/Server/Utils/InstanceHealth/PostgresHealth.ts +286 -0
  146. package/Server/Utils/InstanceHealth/RedisHealth.ts +434 -0
  147. package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +12 -0
  148. package/Server/Utils/Monitor/MonitorAlert.ts +20 -0
  149. package/Server/Utils/Monitor/MonitorIncident.ts +20 -0
  150. package/Server/Utils/Monitor/MonitorResource.ts +19 -0
  151. package/Server/Utils/Monitor/MonitorSummaryCapture.ts +104 -0
  152. package/Server/Utils/NetworkDevice/RulePatternValidator.ts +44 -0
  153. package/Server/Utils/OpenAPI.ts +2 -1
  154. package/Server/Utils/Runbook/RunbookExecutePermission.ts +94 -0
  155. package/Server/Utils/SessionReplay/SessionReplayErasureTombstone.ts +128 -0
  156. package/Server/Utils/SessionReplay/SessionReplayGateCache.ts +586 -0
  157. package/Server/Utils/SessionReplay/SessionReplayGateCacheStore.ts +188 -0
  158. package/Server/Utils/SessionReplay/SessionReplayReadService.ts +1449 -0
  159. package/Server/Utils/SessionReplay/SessionReplayRetention.ts +114 -0
  160. package/Server/Utils/SessionReplay/SessionReplayTargeting.ts +144 -0
  161. package/Server/Utils/SessionReplay/SessionReplayUsage.ts +92 -0
  162. package/Server/Utils/StartServer.ts +47 -3
  163. package/Server/Utils/Telemetry/TelemetryFanInWriter.ts +44 -10
  164. package/Tests/App/Dashboard/AddWidgetModal.test.tsx +557 -0
  165. package/Tests/App/Dashboard/RunnerInstallInstructions.test.tsx +119 -0
  166. package/Tests/App/Dashboard/RunnerStatus.test.tsx +274 -0
  167. package/Tests/App/Dashboard/WidgetCatalog.test.ts +479 -0
  168. package/Tests/App/StatusPage/BulkAddStatusPageMonitors.test.ts +343 -0
  169. package/Tests/App/StatusPage/BulkAddStatusPageMonitorsModal.test.tsx +320 -0
  170. package/Tests/Models/AnalyticsModels/RumSessionSchema.test.ts +455 -0
  171. package/Tests/Models/AnalyticsModels/SessionIdCorrelation.test.ts +158 -0
  172. package/Tests/Models/DatabaseModels/SessionReplayModels.test.ts +447 -0
  173. package/Tests/Models/RunnerVersionLabel.test.ts +223 -0
  174. package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +1287 -0
  175. package/Tests/Server/API/LegacyRunbookAgentRoutes.test.ts +117 -0
  176. package/Tests/Server/API/SessionReplayAPI.test.ts +2093 -0
  177. package/Tests/Server/API/UserIncomingCallNumberApi.test.ts +429 -0
  178. package/Tests/Server/API/UserSmsApi.test.ts +68 -2
  179. package/Tests/Server/DatabaseConfig.test.ts +150 -0
  180. package/Tests/Server/Infrastructure/ContainerBootConfiguration.test.ts +2 -2
  181. package/Tests/Server/Infrastructure/ProcessSignalDelivery.test.ts +2 -3
  182. package/Tests/Server/Services/AIRunCodeFixClaimScoping.test.ts +100 -0
  183. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +8 -0
  184. package/Tests/Server/Services/AutoRemediationCommandRuleEngine.test.ts +334 -0
  185. package/Tests/Server/Services/AutoRemediationRuleEngineService.test.ts +517 -0
  186. package/Tests/Server/Services/BillingService.test.ts +158 -1
  187. package/Tests/Server/Services/DatabaseServiceEmptyUpdate.test.ts +24 -2
  188. package/Tests/Server/Services/DatabaseServiceSanitizeUpdateData.test.ts +17 -10
  189. package/Tests/Server/Services/DatabaseServiceUpdateColumnsWithoutHooks.test.ts +128 -0
  190. package/Tests/Server/Services/DatabaseServiceUpdateWriteRouting.test.ts +178 -0
  191. package/Tests/Server/Services/DatabaseServiceUpdateWriteRoutingMonitor.test.ts +206 -0
  192. package/Tests/Server/Services/LlmProviderUsableByProject.test.ts +293 -0
  193. package/Tests/Server/Services/MonitorServiceOperationalStatusSelection.test.ts +145 -0
  194. package/Tests/Server/Services/NetworkDeviceRuleEngines.test.ts +726 -0
  195. package/Tests/Server/Services/NetworkDeviceSiteAssignment.test.ts +570 -9
  196. package/Tests/Server/Services/NetworkSiteAssignmentRuleService.test.ts +94 -1
  197. package/Tests/Server/Services/NetworkSiteService.test.ts +85 -0
  198. package/Tests/Server/Services/RumApplicationReplayHealth.test.ts +114 -0
  199. package/Tests/Server/Services/RunbookCredentialService.test.ts +657 -0
  200. package/Tests/Server/Services/SessionReplayCreatePath.test.ts +376 -0
  201. package/Tests/Server/Services/SessionReplayGateCacheInvalidation.test.ts +211 -0
  202. package/Tests/Server/Services/SessionReplayMetering.test.ts +174 -0
  203. package/Tests/Server/Services/StatusPageSubscriberReport.test.ts +555 -0
  204. package/Tests/Server/Services/TelemetryExceptionAIFixReadiness.test.ts +25 -4
  205. package/Tests/Server/Services/TelemetryExceptionCodeFixRun.test.ts +17 -2
  206. package/Tests/Server/Services/TraceAggregationService.test.ts +48 -0
  207. package/Tests/Server/Services/TraceAnalyticsResourceDisplayNames.test.ts +855 -0
  208. package/Tests/Server/Services/UpdateOneByIdKeepsRowId.test.ts +38 -27
  209. package/Tests/Server/Utils/AI/AIConfidenceSignal.test.ts +44 -0
  210. package/Tests/Server/Utils/AI/AIIncidentGating.test.ts +475 -0
  211. package/Tests/Server/Utils/AI/CodeFix/CodeFixAgentAuth.test.ts +257 -0
  212. package/Tests/Server/Utils/AI/CodeFix/CodeFixAgentAvailability.test.ts +236 -0
  213. package/Tests/Server/Utils/AI/CodeFixReadiness.test.ts +44 -6
  214. package/Tests/Server/Utils/AI/CodeFixRunQueue.test.ts +47 -1
  215. package/Tests/Server/Utils/AI/CodeWriteTools.test.ts +2 -2
  216. package/Tests/Server/Utils/AI/FixFromIncidentAutoTrigger.test.ts +294 -0
  217. package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +2 -2
  218. package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +47 -3
  219. package/Tests/Server/Utils/AI/InvestigationQueueRemediationExecution.test.ts +233 -0
  220. package/Tests/Server/Utils/AI/InvestigationSettlement.test.ts +463 -0
  221. package/Tests/Server/Utils/AI/PostedRootCause.test.ts +254 -0
  222. package/Tests/Server/Utils/AI/RemediationAllowlistNormalization.test.ts +248 -0
  223. package/Tests/Server/Utils/AI/RemediationCommandTools.test.ts +1008 -0
  224. package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +887 -0
  225. package/Tests/Server/Utils/AI/RemediationHandoff.test.ts +306 -0
  226. package/Tests/Server/Utils/AI/RemediationPlanRunner.test.ts +745 -0
  227. package/Tests/Server/Utils/AI/SubjectCodeFixRunDedupe.test.ts +291 -0
  228. package/Tests/Server/Utils/AI/ToolArgsExtractors.test.ts +141 -0
  229. package/Tests/Server/Utils/AI/Toolbox/WidgetBuilder.test.ts +205 -0
  230. package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutor.test.ts +1050 -0
  231. package/Tests/Server/Utils/AutoRemediation/CommandPlanVerification.test.ts +350 -0
  232. package/Tests/Server/Utils/AutoRemediation/RemediationVerifier.test.ts +341 -0
  233. package/Tests/Server/Utils/CorsOptions.test.ts +119 -0
  234. package/Tests/Server/Utils/Database/RelationIdUtil.test.ts +120 -0
  235. package/Tests/Server/Utils/Database/ResolveReferenceId.test.ts +60 -0
  236. package/Tests/Server/Utils/InstanceHealth/PostgresHealth.test.ts +337 -0
  237. package/Tests/Server/Utils/InstanceHealth/RedisHealth.test.ts +671 -0
  238. package/Tests/Server/Utils/Monitor/Criteria/CompareCriteria.test.ts +897 -0
  239. package/Tests/Server/Utils/Monitor/MonitorSummaryCapture.test.ts +205 -0
  240. package/Tests/Server/Utils/Monitor/MonitorSummaryPersistence.test.ts +313 -0
  241. package/Tests/Server/Utils/PushNotificationUtil.test.ts +228 -0
  242. package/Tests/Server/Utils/SessionReplay/SessionReplayGateCachePolicy.test.ts +177 -0
  243. package/Tests/Server/Utils/SessionReplay/SessionReplayOriginAllowlist.test.ts +108 -0
  244. package/Tests/Server/Utils/SessionReplay/SessionReplayRetention.test.ts +229 -0
  245. package/Tests/Server/Utils/SessionReplay/SessionReplayTargeting.test.ts +246 -0
  246. package/Tests/Server/Utils/Telemetry/TelemetryFanInWriter.test.ts +110 -0
  247. package/Tests/Types/AI/AIRunStatus.test.ts +25 -0
  248. package/Tests/Types/AutoRemediation/AiRemediationCommandPlan.test.ts +1063 -0
  249. package/Tests/Types/BaseDatabase/AggregationType.test.ts +56 -0
  250. package/Tests/Types/CustomField/CustomFieldDropdownOption.test.ts +227 -0
  251. package/Tests/Types/Dashboard/DashboardTemplateInvariants.test.ts +811 -0
  252. package/Tests/Types/Dashboard/RumDashboardTemplate.test.ts +1238 -0
  253. package/Tests/Types/Day/DayOfWeek.test.ts +46 -0
  254. package/Tests/Types/Docker/DockerInventoryExtractor.test.ts +249 -0
  255. package/Tests/Types/Kubernetes/KubernetesInventoryExtractor.test.ts +231 -0
  256. package/Tests/Types/Kubernetes/KubernetesRightSizing.test.ts +323 -0
  257. package/Tests/Types/Metrics/MetricDownsamplingRetentionDays.test.ts +77 -0
  258. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +42 -14
  259. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +2 -2
  260. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +3 -2
  261. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.test.ts +1 -1
  262. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +6 -3
  263. package/Tests/Types/Monitor/RumAlertTemplates.test.ts +285 -0
  264. package/Tests/Types/Podman/PodmanInventoryExtractor.test.ts +159 -0
  265. package/Tests/Types/Runbook/RunbookExecutionDeadline.test.ts +268 -0
  266. package/Tests/Types/Runbook/RunbookStepType.test.ts +242 -0
  267. package/Tests/Types/Runner/RunnerLiveStatus.test.ts +320 -0
  268. package/Tests/Types/Telemetry/TelemetryRetentionConfig.test.ts +225 -0
  269. package/Tests/Types/Text.test.ts +60 -0
  270. package/Tests/UI/Components/AiInvestigationSettingsCard.test.tsx +285 -0
  271. package/Tests/UI/Components/AutocompleteTextInputMenu.test.tsx +555 -0
  272. package/Tests/UI/Components/BulkLabelActions.test.tsx +1502 -0
  273. package/Tests/UI/Components/BulkOwnerActions.test.tsx +1255 -0
  274. package/Tests/UI/Components/CustomFields/DropdownOptionsInput.test.tsx +228 -0
  275. package/Tests/UI/Components/Detail/DropdownColors.test.tsx +128 -0
  276. package/Tests/UI/Components/Detail/EntityFields.test.tsx +166 -0
  277. package/Tests/UI/Components/Dropdown/DropdownValueBadge.test.tsx +60 -0
  278. package/Tests/UI/Components/FilterModalOperatorMenu.test.tsx +674 -0
  279. package/Tests/UI/Components/Forms/ColorPicker.test.tsx +48 -0
  280. package/Tests/UI/Components/Forms/ColorPickerPopup.test.tsx +222 -0
  281. package/Tests/UI/Components/Forms/IconPickerPopup.test.tsx +270 -0
  282. package/Tests/UI/Components/ModelTable/CustomFieldColumns.test.tsx +125 -6
  283. package/Tests/UI/Components/OperatorSelectorFilterTypes.test.tsx +1595 -0
  284. package/Tests/UI/Components/OperatorSelectorKeyboard.test.tsx +851 -0
  285. package/Tests/UI/Components/OperatorSelectorMenu.test.tsx +1229 -0
  286. package/Tests/UI/Components/Pagination.test.tsx +85 -0
  287. package/Tests/UI/Monitor/MonitorSummarySnapshotRender.test.tsx +248 -0
  288. package/Tests/UI/Rum/ChunkLoader.test.ts +790 -0
  289. package/Tests/UI/Rum/ReplayScrubber.test.tsx +236 -0
  290. package/Tests/UI/Rum/ReplayStage.test.tsx +606 -0
  291. package/Tests/UI/Utils/Timezone.test.ts +86 -0
  292. package/Tests/UI/Utils/UseClockTick.test.tsx +276 -0
  293. package/Tests/Utils/AiRemediation/CommandPolicy.test.ts +1063 -0
  294. package/Tests/Utils/Dashboard/ClockWidgetFormat.test.ts +1374 -0
  295. package/Tests/Utils/Dashboard/DashboardClockComponent.test.ts +362 -0
  296. package/Tests/Utils/Dashboard/DashboardHtmlComponent.test.ts +217 -0
  297. package/Tests/Utils/Dashboard/HtmlWidgetDocument.test.ts +656 -0
  298. package/Tests/Utils/Dashboard/ValueWidgetLayout.test.ts +1007 -0
  299. package/Tests/Utils/Metrics/MetricSeriesScope.test.ts +1197 -0
  300. package/Tests/Utils/Monitor/MonitorSummarySnapshotUtil.test.ts +839 -0
  301. package/Tests/Utils/NetworkSite/CidrMatchUtil.test.ts +69 -0
  302. package/Tests/Utils/Rules/RulePatternMatchUtil.test.ts +274 -0
  303. package/Tests/Utils/Rum/ChunkMath.test.ts +286 -0
  304. package/Tests/Utils/Rum/Masking.test.ts +186 -0
  305. package/Tests/Utils/Rum/SessionIdentity.test.ts +272 -0
  306. package/Tests/Utils/Rum/SessionSampling.test.ts +164 -0
  307. package/Tests/Utils/Rum/UrlScrubber.test.ts +175 -0
  308. package/Tests/Utils/StatusPage/Report.test.ts +708 -0
  309. package/Tests/Utils/ValueFormatter.test.ts +299 -1
  310. package/Types/AI/AIRunStatus.ts +18 -7
  311. package/Types/AI/AIRunType.ts +18 -0
  312. package/Types/AI/FixVerificationStatus.ts +21 -0
  313. package/Types/AnalyticsDatabase/AnalyticsTableName.ts +16 -0
  314. package/Types/AutoRemediation/AiRemediationCommandPlan.ts +304 -0
  315. package/Types/AutoRemediation/AutoRemediationExecutionMode.ts +17 -0
  316. package/Types/AutoRemediation/AutoRemediationSuggestionStatus.ts +35 -0
  317. package/Types/AutoRemediation/AutoRemediationSuggestionType.ts +17 -0
  318. package/Types/AutoRemediation/AutoRemediationTriggerEntity.ts +11 -0
  319. package/Types/AutoRemediation/AutoRemediationVerificationStatus.ts +21 -0
  320. package/Types/CustomField/CustomFieldDropdownOption.ts +190 -0
  321. package/Types/Dashboard/DashboardComponentType.ts +2 -0
  322. package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +4 -0
  323. package/Types/Dashboard/DashboardComponents/DashboardClockComponent.ts +45 -0
  324. package/Types/Dashboard/DashboardComponents/DashboardHtmlComponent.ts +27 -0
  325. package/Types/Dashboard/DashboardComponents/DashboardValueComponent.ts +8 -0
  326. package/Types/Dashboard/DashboardTemplates.ts +516 -0
  327. package/Types/Date.ts +6 -0
  328. package/Types/Email/EmailTemplateType.ts +2 -0
  329. package/Types/Kubernetes/KubernetesRightSizing.ts +353 -0
  330. package/Types/MeteredPlan/ProductType.ts +1 -0
  331. package/Types/Monitor/MonitorStepMetricMonitor.ts +27 -1
  332. package/Types/Monitor/MonitorSteps.ts +5 -0
  333. package/Types/Monitor/MonitorSummarySnapshot.ts +88 -0
  334. package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +52 -10
  335. package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +7 -5
  336. package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +101 -20
  337. package/Types/Monitor/RumAlertTemplates.ts +386 -0
  338. package/Types/Permission.ts +204 -24
  339. package/Types/Rum/SessionReplay.ts +452 -0
  340. package/Types/Rum/SessionReplayCaptureTrigger.ts +26 -0
  341. package/Types/Rum/SessionReplayConsentMode.ts +27 -0
  342. package/Types/Rum/SessionReplayMaskingMode.ts +86 -0
  343. package/Types/Rum/SessionReplayTriggerReason.ts +31 -0
  344. package/Types/Runbook/RunbookCredentialType.ts +6 -0
  345. package/Types/Runbook/RunbookStep.ts +81 -1
  346. package/Types/Runbook/RunbookStepType.ts +26 -0
  347. package/Types/Runbook/RunnerJobOrigin.ts +20 -0
  348. package/Types/Runbook/{RunbookAgentJobStatus.ts → RunnerJobStatus.ts} +2 -2
  349. package/Types/Runner/RunnerLiveStatus.ts +114 -0
  350. package/Types/StatusPage/StatusPageReport.ts +99 -0
  351. package/Types/Telemetry/TelemetryRetentionConfig.ts +18 -1
  352. package/Types/Text.ts +33 -0
  353. package/UI/Components/AutocompleteTextInput/AutocompleteTextInput.tsx +260 -75
  354. package/UI/Components/BulkUpdate/BulkLabelActions.tsx +99 -9
  355. package/UI/Components/BulkUpdate/BulkOwnerActions.tsx +11 -0
  356. package/UI/Components/CustomFields/CustomFieldsDetail.tsx +19 -14
  357. package/UI/Components/CustomFields/DropdownOptionsInput.tsx +144 -54
  358. package/UI/Components/Detail/Detail.tsx +164 -22
  359. package/UI/Components/Dropdown/Dropdown.tsx +2 -5
  360. package/UI/Components/Dropdown/DropdownMenuZIndex.ts +7 -0
  361. package/UI/Components/Dropdown/DropdownValueBadge.tsx +61 -0
  362. package/UI/Components/Filters/OperatorSelector.tsx +350 -39
  363. package/UI/Components/Forms/Fields/ColorPicker.tsx +60 -27
  364. package/UI/Components/Forms/Fields/IconPicker.tsx +89 -60
  365. package/UI/Components/Forms/Validation.ts +9 -4
  366. package/UI/Components/List/List.tsx +1 -0
  367. package/UI/Components/ModelTable/CustomFieldColumns.tsx +41 -32
  368. package/UI/Components/Pagination/Pagination.tsx +33 -10
  369. package/UI/Components/Table/Table.tsx +1 -0
  370. package/UI/Types/UseAnchoredFieldPopup.ts +321 -0
  371. package/UI/Utils/Dropdown.ts +26 -0
  372. package/UI/Utils/Timezone.ts +18 -2
  373. package/UI/Utils/UseClockTick.ts +78 -0
  374. package/Utils/AiRemediation/CommandPolicy.ts +398 -0
  375. package/Utils/Dashboard/ClockWidgetFormat.ts +604 -0
  376. package/Utils/Dashboard/Components/DashboardClockComponent.ts +181 -0
  377. package/Utils/Dashboard/Components/DashboardHtmlComponent.ts +162 -0
  378. package/Utils/Dashboard/Components/DashboardValueComponent.ts +12 -1
  379. package/Utils/Dashboard/Components/Index.ts +14 -0
  380. package/Utils/Dashboard/HtmlWidgetDocument.ts +309 -0
  381. package/Utils/Dashboard/ValueWidgetLayout.ts +471 -0
  382. package/Utils/Metrics/MetricSeriesScope.ts +301 -0
  383. package/Utils/Monitor/MonitorSummarySnapshotUtil.ts +593 -0
  384. package/Utils/NetworkSite/CidrMatchUtil.ts +30 -17
  385. package/Utils/Rules/RulePatternMatchUtil.ts +103 -0
  386. package/Utils/Rum/ChunkMath.ts +211 -0
  387. package/Utils/Rum/Masking.ts +168 -0
  388. package/Utils/Rum/SessionIdentity.ts +230 -0
  389. package/Utils/Rum/SessionSampling.ts +108 -0
  390. package/Utils/Rum/UrlScrubber.ts +185 -0
  391. package/Utils/Schema/ModelSchema.ts +27 -3
  392. package/Utils/StatusPage/Report.ts +304 -0
  393. package/Utils/ValueFormatter.ts +300 -54
  394. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js +63 -0
  395. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js.map +1 -1
  396. package/build/dist/Models/AnalyticsModels/Index.js +10 -0
  397. package/build/dist/Models/AnalyticsModels/Index.js.map +1 -1
  398. package/build/dist/Models/AnalyticsModels/Log.js +56 -0
  399. package/build/dist/Models/AnalyticsModels/Log.js.map +1 -1
  400. package/build/dist/Models/AnalyticsModels/RumSession.js +1159 -0
  401. package/build/dist/Models/AnalyticsModels/RumSession.js.map +1 -0
  402. package/build/dist/Models/AnalyticsModels/RumSessionChunk.js +670 -0
  403. package/build/dist/Models/AnalyticsModels/RumSessionChunk.js.map +1 -0
  404. package/build/dist/Models/AnalyticsModels/Span.js +56 -0
  405. package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
  406. package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js +54 -0
  407. package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js.map +1 -1
  408. package/build/dist/Models/DatabaseModels/AIRun.js +32 -0
  409. package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
  410. package/build/dist/Models/DatabaseModels/Alert.js +30 -0
  411. package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
  412. package/build/dist/Models/DatabaseModels/AlertCustomField.js +1 -1
  413. package/build/dist/Models/DatabaseModels/AlertCustomField.js.map +1 -1
  414. package/build/dist/Models/DatabaseModels/AlertFeed.js +1 -0
  415. package/build/dist/Models/DatabaseModels/AlertFeed.js.map +1 -1
  416. package/build/dist/Models/DatabaseModels/AutoRemediationRule.js +998 -0
  417. package/build/dist/Models/DatabaseModels/AutoRemediationRule.js.map +1 -0
  418. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js +917 -0
  419. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js.map +1 -0
  420. package/build/dist/Models/DatabaseModels/CodeRepository.js +132 -0
  421. package/build/dist/Models/DatabaseModels/CodeRepository.js.map +1 -1
  422. package/build/dist/Models/DatabaseModels/GlobalConfig.js +327 -0
  423. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  424. package/build/dist/Models/DatabaseModels/Incident.js +30 -0
  425. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  426. package/build/dist/Models/DatabaseModels/IncidentCustomField.js +1 -1
  427. package/build/dist/Models/DatabaseModels/IncidentCustomField.js.map +1 -1
  428. package/build/dist/Models/DatabaseModels/IncidentFeed.js +1 -0
  429. package/build/dist/Models/DatabaseModels/IncidentFeed.js.map +1 -1
  430. package/build/dist/Models/DatabaseModels/Index.js +20 -8
  431. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  432. package/build/dist/Models/DatabaseModels/InstanceHealthLog.js +8 -0
  433. package/build/dist/Models/DatabaseModels/InstanceHealthLog.js.map +1 -1
  434. package/build/dist/Models/DatabaseModels/MonitorCustomField.js +1 -1
  435. package/build/dist/Models/DatabaseModels/MonitorCustomField.js.map +1 -1
  436. package/build/dist/Models/DatabaseModels/MonitorStatus.js +1 -1
  437. package/build/dist/Models/DatabaseModels/MonitorStatus.js.map +1 -1
  438. package/build/dist/Models/DatabaseModels/NetworkDeviceLabelRule.js +2 -2
  439. package/build/dist/Models/DatabaseModels/NetworkDeviceLabelRule.js.map +1 -1
  440. package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerRule.js +2 -2
  441. package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerRule.js.map +1 -1
  442. package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js +1 -1
  443. package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js.map +1 -1
  444. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyCustomField.js +1 -1
  445. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyCustomField.js.map +1 -1
  446. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLayer.js +16 -4
  447. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLayer.js.map +1 -1
  448. package/build/dist/Models/DatabaseModels/Project.js +235 -0
  449. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  450. package/build/dist/Models/DatabaseModels/RumApplication.js +930 -0
  451. package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
  452. package/build/dist/Models/DatabaseModels/RumSessionErasureRequest.js +591 -0
  453. package/build/dist/Models/DatabaseModels/RumSessionErasureRequest.js.map +1 -0
  454. package/build/dist/Models/DatabaseModels/RumSessionPin.js +483 -0
  455. package/build/dist/Models/DatabaseModels/RumSessionPin.js.map +1 -0
  456. package/build/dist/Models/DatabaseModels/RumSessionReplayView.js +433 -0
  457. package/build/dist/Models/DatabaseModels/RumSessionReplayView.js.map +1 -0
  458. package/build/dist/Models/DatabaseModels/RunbookCredential.js +693 -0
  459. package/build/dist/Models/DatabaseModels/RunbookCredential.js.map +1 -0
  460. package/build/dist/Models/DatabaseModels/RunbookSecret.js +8 -8
  461. package/build/dist/Models/DatabaseModels/RunbookSecret.js.map +1 -1
  462. package/build/dist/Models/DatabaseModels/{RunbookAgent.js → Runner.js} +235 -70
  463. package/build/dist/Models/DatabaseModels/Runner.js.map +1 -0
  464. package/build/dist/Models/DatabaseModels/{RunbookAgentJob.js → RunnerJob.js} +173 -40
  465. package/build/dist/Models/DatabaseModels/RunnerJob.js.map +1 -0
  466. package/build/dist/Models/DatabaseModels/{RunbookAgentOwnerTeam.js → RunnerOwnerTeam.js} +57 -57
  467. package/build/dist/Models/DatabaseModels/RunnerOwnerTeam.js.map +1 -0
  468. package/build/dist/Models/DatabaseModels/{RunbookAgentOwnerUser.js → RunnerOwnerUser.js} +57 -57
  469. package/build/dist/Models/DatabaseModels/RunnerOwnerUser.js.map +1 -0
  470. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceCustomField.js +1 -1
  471. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceCustomField.js.map +1 -1
  472. package/build/dist/Models/DatabaseModels/StatusPageCustomField.js +1 -1
  473. package/build/dist/Models/DatabaseModels/StatusPageCustomField.js.map +1 -1
  474. package/build/dist/Models/DatabaseModels/TeamCustomField.js +1 -1
  475. package/build/dist/Models/DatabaseModels/TeamCustomField.js.map +1 -1
  476. package/build/dist/Models/DatabaseModels/TeamMemberCustomField.js +1 -1
  477. package/build/dist/Models/DatabaseModels/TeamMemberCustomField.js.map +1 -1
  478. package/build/dist/Server/API/AIAgentDataAPI.js +130 -45
  479. package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
  480. package/build/dist/Server/API/AIAgentTaskAPI.js +26 -36
  481. package/build/dist/Server/API/AIAgentTaskAPI.js.map +1 -1
  482. package/build/dist/Server/API/AIAgentTaskLogAPI.js +11 -28
  483. package/build/dist/Server/API/AIAgentTaskLogAPI.js.map +1 -1
  484. package/build/dist/Server/API/AutoRemediationAPI.js +416 -0
  485. package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -0
  486. package/build/dist/Server/API/BaseAnalyticsAPI.js +4 -1
  487. package/build/dist/Server/API/BaseAnalyticsAPI.js.map +1 -1
  488. package/build/dist/Server/API/CommonAPI.js +24 -0
  489. package/build/dist/Server/API/CommonAPI.js.map +1 -1
  490. package/build/dist/Server/API/DashboardAPI.js +265 -6
  491. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  492. package/build/dist/Server/API/TelemetryAPI.js +940 -3
  493. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  494. package/build/dist/Server/API/UserIncomingCallNumberAPI.js +18 -0
  495. package/build/dist/Server/API/UserIncomingCallNumberAPI.js.map +1 -1
  496. package/build/dist/Server/DatabaseConfig.js +23 -4
  497. package/build/dist/Server/DatabaseConfig.js.map +1 -1
  498. package/build/dist/Server/EnvironmentConfig.js +8 -0
  499. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  500. package/build/dist/Server/Infrastructure/Postgres/LocalMigrationGenerationDataSource.js +11 -1
  501. package/build/dist/Server/Infrastructure/Postgres/LocalMigrationGenerationDataSource.js.map +1 -1
  502. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785417351021-AddSessionReplay.js +106 -0
  503. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785417351021-AddSessionReplay.js.map +1 -0
  504. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785491583874-EnableSessionReplayByDefault.js +37 -0
  505. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785491583874-EnableSessionReplayByDefault.js.map +1 -0
  506. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785496223183-AddMonitorSummaryToIncidentAndAlert.js +18 -0
  507. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785496223183-AddMonitorSummaryToIncidentAndAlert.js.map +1 -0
  508. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785516996695-AddSessionReplayReliabilityColumns.js +29 -0
  509. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785516996695-AddSessionReplayReliabilityColumns.js.map +1 -0
  510. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785533806494-AddSessionReplayCorrelationColumns.js +35 -0
  511. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785533806494-AddSessionReplayCorrelationColumns.js.map +1 -0
  512. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785749674203-AddRedisAndPostgresHealthNotificationColumns.js +40 -0
  513. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785749674203-AddRedisAndPostgresHealthNotificationColumns.js.map +1 -0
  514. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785763818197-AddAutoRemediation.js +128 -0
  515. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785763818197-AddAutoRemediation.js.map +1 -0
  516. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785768089408-AddRemediationVerification.js +28 -0
  517. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785768089408-AddRemediationVerification.js.map +1 -0
  518. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785776960660-AddRunnerCapabilities.js +14 -0
  519. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785776960660-AddRunnerCapabilities.js.map +1 -0
  520. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785790000000-AddIncidentInvestigationGating.js +27 -0
  521. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785790000000-AddIncidentInvestigationGating.js.map +1 -0
  522. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785800000000-AddRunbookCredential.js +44 -0
  523. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785800000000-AddRunbookCredential.js.map +1 -0
  524. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785810000000-RenameRunbookAgentToRunner.js +88 -0
  525. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785810000000-RenameRunbookAgentToRunner.js.map +1 -0
  526. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785860000000-SessionReplayDefaultToSensitiveInputMasking.js +59 -0
  527. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785860000000-SessionReplayDefaultToSensitiveInputMasking.js.map +1 -0
  528. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785870000000-AddAiCommandRemediation.js +76 -0
  529. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785870000000-AddAiCommandRemediation.js.map +1 -0
  530. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785880000000-AlignRunnerSchemaWithEntities.js +214 -0
  531. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785880000000-AlignRunnerSchemaWithEntities.js.map +1 -0
  532. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785890000000-AddFixVerificationAndAutomaticCodeFixes.js +44 -0
  533. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785890000000-AddFixVerificationAndAutomaticCodeFixes.js.map +1 -0
  534. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +32 -0
  535. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  536. package/build/dist/Server/Services/AIRunService.js +1 -4
  537. package/build/dist/Server/Services/AIRunService.js.map +1 -1
  538. package/build/dist/Server/Services/AIService.js +26 -0
  539. package/build/dist/Server/Services/AIService.js.map +1 -1
  540. package/build/dist/Server/Services/AlertService.js +37 -4
  541. package/build/dist/Server/Services/AlertService.js.map +1 -1
  542. package/build/dist/Server/Services/AlertSeverityService.js +24 -11
  543. package/build/dist/Server/Services/AlertSeverityService.js.map +1 -1
  544. package/build/dist/Server/Services/AlertStateService.js +24 -11
  545. package/build/dist/Server/Services/AlertStateService.js.map +1 -1
  546. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +917 -0
  547. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -0
  548. package/build/dist/Server/Services/{RunbookAgentOwnerTeamService.js → AutoRemediationRuleService.js} +2 -2
  549. package/build/dist/Server/Services/AutoRemediationRuleService.js.map +1 -0
  550. package/build/dist/Server/Services/AutoRemediationSuggestionService.js +127 -0
  551. package/build/dist/Server/Services/AutoRemediationSuggestionService.js.map +1 -0
  552. package/build/dist/Server/Services/BillingService.js +45 -1
  553. package/build/dist/Server/Services/BillingService.js.map +1 -1
  554. package/build/dist/Server/Services/DatabaseService.js +72 -4
  555. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  556. package/build/dist/Server/Services/IncidentService.js +52 -4
  557. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  558. package/build/dist/Server/Services/IncidentSeverityService.js +24 -11
  559. package/build/dist/Server/Services/IncidentSeverityService.js.map +1 -1
  560. package/build/dist/Server/Services/IncidentStateService.js +24 -11
  561. package/build/dist/Server/Services/IncidentStateService.js.map +1 -1
  562. package/build/dist/Server/Services/Index.js +18 -0
  563. package/build/dist/Server/Services/Index.js.map +1 -1
  564. package/build/dist/Server/Services/LlmProviderService.js +61 -8
  565. package/build/dist/Server/Services/LlmProviderService.js.map +1 -1
  566. package/build/dist/Server/Services/MonitorService.js +24 -0
  567. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  568. package/build/dist/Server/Services/MonitorStatusService.js +25 -11
  569. package/build/dist/Server/Services/MonitorStatusService.js.map +1 -1
  570. package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js +12 -11
  571. package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js.map +1 -1
  572. package/build/dist/Server/Services/NetworkDeviceLabelRuleService.js +43 -0
  573. package/build/dist/Server/Services/NetworkDeviceLabelRuleService.js.map +1 -1
  574. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +12 -11
  575. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
  576. package/build/dist/Server/Services/NetworkDeviceOwnerRuleService.js +41 -0
  577. package/build/dist/Server/Services/NetworkDeviceOwnerRuleService.js.map +1 -1
  578. package/build/dist/Server/Services/NetworkDeviceService.js +129 -20
  579. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  580. package/build/dist/Server/Services/NetworkSiteAssignmentRuleService.js +67 -10
  581. package/build/dist/Server/Services/NetworkSiteAssignmentRuleService.js.map +1 -1
  582. package/build/dist/Server/Services/NetworkSiteService.js +19 -8
  583. package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
  584. package/build/dist/Server/Services/ProjectService.js +43 -0
  585. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  586. package/build/dist/Server/Services/RumApplicationService.js +202 -0
  587. package/build/dist/Server/Services/RumApplicationService.js.map +1 -1
  588. package/build/dist/Server/Services/RumSessionChunkService.js +9 -0
  589. package/build/dist/Server/Services/RumSessionChunkService.js.map +1 -0
  590. package/build/dist/Server/Services/RumSessionErasureRequestService.js +190 -0
  591. package/build/dist/Server/Services/RumSessionErasureRequestService.js.map +1 -0
  592. package/build/dist/Server/Services/RumSessionPinService.js +208 -0
  593. package/build/dist/Server/Services/RumSessionPinService.js.map +1 -0
  594. package/build/dist/Server/Services/RumSessionReplayViewService.js +180 -0
  595. package/build/dist/Server/Services/RumSessionReplayViewService.js.map +1 -0
  596. package/build/dist/Server/Services/RumSessionService.js +102 -0
  597. package/build/dist/Server/Services/RumSessionService.js.map +1 -0
  598. package/build/dist/Server/Services/RunbookCredentialService.js +67 -0
  599. package/build/dist/Server/Services/RunbookCredentialService.js.map +1 -0
  600. package/build/dist/Server/Services/{RunbookAgentJobService.js → RunnerJobService.js} +158 -46
  601. package/build/dist/Server/Services/RunnerJobService.js.map +1 -0
  602. package/build/dist/Server/Services/{RunbookAgentOwnerUserService.js → RunnerOwnerTeamService.js} +2 -2
  603. package/build/dist/Server/Services/RunnerOwnerTeamService.js.map +1 -0
  604. package/build/dist/Server/Services/RunnerOwnerUserService.js +9 -0
  605. package/build/dist/Server/Services/RunnerOwnerUserService.js.map +1 -0
  606. package/build/dist/Server/Services/RunnerService.js +163 -0
  607. package/build/dist/Server/Services/RunnerService.js.map +1 -0
  608. package/build/dist/Server/Services/ScheduledMaintenanceStateService.js +24 -11
  609. package/build/dist/Server/Services/ScheduledMaintenanceStateService.js.map +1 -1
  610. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +15 -1
  611. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
  612. package/build/dist/Server/Services/ServiceService.js +8 -2
  613. package/build/dist/Server/Services/ServiceService.js.map +1 -1
  614. package/build/dist/Server/Services/StatusPageService.js +173 -16
  615. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  616. package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js +17 -1
  617. package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js.map +1 -1
  618. package/build/dist/Server/Services/TelemetryExceptionService.js +3 -16
  619. package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
  620. package/build/dist/Server/Services/TelemetryUsageBillingService.js +31 -3
  621. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  622. package/build/dist/Server/Services/TraceAggregationService.js +106 -2
  623. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  624. package/build/dist/Server/Types/Billing/MeteredPlan/AllMeteredPlans.js +16 -0
  625. package/build/dist/Server/Types/Billing/MeteredPlan/AllMeteredPlans.js.map +1 -1
  626. package/build/dist/Server/Types/Billing/MeteredPlan/ServerMeteredPlan.js +9 -0
  627. package/build/dist/Server/Types/Billing/MeteredPlan/ServerMeteredPlan.js.map +1 -1
  628. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +38 -6
  629. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
  630. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentAuth.js +104 -0
  631. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentAuth.js.map +1 -0
  632. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentAvailability.js +54 -0
  633. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentAvailability.js.map +1 -0
  634. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js +11 -7
  635. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js.map +1 -1
  636. package/build/dist/Server/Utils/AI/CodeFix/CodeFixRunQueue.js +3 -4
  637. package/build/dist/Server/Utils/AI/CodeFix/CodeFixRunQueue.js.map +1 -1
  638. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js +724 -0
  639. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -0
  640. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +668 -0
  641. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -0
  642. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js +657 -0
  643. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js.map +1 -0
  644. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +52 -7
  645. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  646. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +53 -5
  647. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
  648. package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js +25 -6
  649. package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js.map +1 -1
  650. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js +131 -17
  651. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js.map +1 -1
  652. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +200 -5
  653. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
  654. package/build/dist/Server/Utils/AI/SRE/Insights/Triage.js +2 -7
  655. package/build/dist/Server/Utils/AI/SRE/Insights/Triage.js.map +1 -1
  656. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +4 -17
  657. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js.map +1 -1
  658. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js +203 -19
  659. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -1
  660. package/build/dist/Server/Utils/AI/SRE/PostedRootCause.js +89 -0
  661. package/build/dist/Server/Utils/AI/SRE/PostedRootCause.js.map +1 -0
  662. package/build/dist/Server/Utils/AI/SRE/RemediationHandoff.js +82 -0
  663. package/build/dist/Server/Utils/AI/SRE/RemediationHandoff.js.map +1 -0
  664. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js +4 -19
  665. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js.map +1 -1
  666. package/build/dist/Server/Utils/AI/Toolbox/CodeWriteTools.js +2 -2
  667. package/build/dist/Server/Utils/Alert/AlertPrivacyFilter.js +36 -0
  668. package/build/dist/Server/Utils/Alert/AlertPrivacyFilter.js.map +1 -1
  669. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js +498 -0
  670. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js.map +1 -0
  671. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js +492 -0
  672. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js.map +1 -0
  673. package/build/dist/Server/Utils/CorsOptions.js +47 -0
  674. package/build/dist/Server/Utils/CorsOptions.js.map +1 -0
  675. package/build/dist/Server/Utils/Database/RelationIdUtil.js +51 -0
  676. package/build/dist/Server/Utils/Database/RelationIdUtil.js.map +1 -0
  677. package/build/dist/Server/Utils/Incident/IncidentPrivacyFilter.js +38 -0
  678. package/build/dist/Server/Utils/Incident/IncidentPrivacyFilter.js.map +1 -1
  679. package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js +194 -0
  680. package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js.map +1 -0
  681. package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js +292 -0
  682. package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js.map +1 -0
  683. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +11 -0
  684. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js.map +1 -1
  685. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +9 -0
  686. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  687. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +9 -0
  688. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  689. package/build/dist/Server/Utils/Monitor/MonitorResource.js +16 -0
  690. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  691. package/build/dist/Server/Utils/Monitor/MonitorSummaryCapture.js +92 -0
  692. package/build/dist/Server/Utils/Monitor/MonitorSummaryCapture.js.map +1 -0
  693. package/build/dist/Server/Utils/NetworkDevice/RulePatternValidator.js +27 -0
  694. package/build/dist/Server/Utils/NetworkDevice/RulePatternValidator.js.map +1 -0
  695. package/build/dist/Server/Utils/OpenAPI.js +2 -1
  696. package/build/dist/Server/Utils/OpenAPI.js.map +1 -1
  697. package/build/dist/Server/Utils/Runbook/RunbookExecutePermission.js +67 -0
  698. package/build/dist/Server/Utils/Runbook/RunbookExecutePermission.js.map +1 -0
  699. package/build/dist/Server/Utils/SessionReplay/SessionReplayErasureTombstone.js +98 -0
  700. package/build/dist/Server/Utils/SessionReplay/SessionReplayErasureTombstone.js.map +1 -0
  701. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js +378 -0
  702. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js.map +1 -0
  703. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCacheStore.js +137 -0
  704. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCacheStore.js.map +1 -0
  705. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +998 -0
  706. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -0
  707. package/build/dist/Server/Utils/SessionReplay/SessionReplayRetention.js +59 -0
  708. package/build/dist/Server/Utils/SessionReplay/SessionReplayRetention.js.map +1 -0
  709. package/build/dist/Server/Utils/SessionReplay/SessionReplayTargeting.js +98 -0
  710. package/build/dist/Server/Utils/SessionReplay/SessionReplayTargeting.js.map +1 -0
  711. package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js +69 -0
  712. package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js.map +1 -0
  713. package/build/dist/Server/Utils/StartServer.js +40 -3
  714. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  715. package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js +27 -6
  716. package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js.map +1 -1
  717. package/build/dist/Types/AI/AIRunStatus.js +17 -5
  718. package/build/dist/Types/AI/AIRunStatus.js.map +1 -1
  719. package/build/dist/Types/AI/AIRunType.js +18 -0
  720. package/build/dist/Types/AI/AIRunType.js.map +1 -1
  721. package/build/dist/Types/AI/FixVerificationStatus.js +22 -0
  722. package/build/dist/Types/AI/FixVerificationStatus.js.map +1 -0
  723. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +16 -0
  724. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js.map +1 -1
  725. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js +192 -0
  726. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js.map +1 -0
  727. package/build/dist/Types/AutoRemediation/AutoRemediationExecutionMode.js +18 -0
  728. package/build/dist/Types/AutoRemediation/AutoRemediationExecutionMode.js.map +1 -0
  729. package/build/dist/Types/AutoRemediation/AutoRemediationSuggestionStatus.js +31 -0
  730. package/build/dist/Types/AutoRemediation/AutoRemediationSuggestionStatus.js.map +1 -0
  731. package/build/dist/Types/AutoRemediation/AutoRemediationSuggestionType.js +18 -0
  732. package/build/dist/Types/AutoRemediation/AutoRemediationSuggestionType.js.map +1 -0
  733. package/build/dist/Types/AutoRemediation/AutoRemediationTriggerEntity.js +12 -0
  734. package/build/dist/Types/AutoRemediation/AutoRemediationTriggerEntity.js.map +1 -0
  735. package/build/dist/Types/AutoRemediation/AutoRemediationVerificationStatus.js +22 -0
  736. package/build/dist/Types/AutoRemediation/AutoRemediationVerificationStatus.js.map +1 -0
  737. package/build/dist/Types/CustomField/CustomFieldDropdownOption.js +110 -0
  738. package/build/dist/Types/CustomField/CustomFieldDropdownOption.js.map +1 -0
  739. package/build/dist/Types/Dashboard/DashboardComponentType.js +2 -0
  740. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  741. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +4 -0
  742. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
  743. package/build/dist/Types/Dashboard/DashboardComponents/DashboardClockComponent.js +19 -0
  744. package/build/dist/Types/Dashboard/DashboardComponents/DashboardClockComponent.js.map +1 -0
  745. package/build/dist/Types/Dashboard/DashboardComponents/DashboardHtmlComponent.js +2 -0
  746. package/build/dist/Types/Dashboard/DashboardComponents/DashboardHtmlComponent.js.map +1 -0
  747. package/build/dist/Types/Dashboard/DashboardTemplates.js +487 -0
  748. package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
  749. package/build/dist/Types/Date.js +6 -0
  750. package/build/dist/Types/Date.js.map +1 -1
  751. package/build/dist/Types/Email/EmailTemplateType.js +2 -0
  752. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  753. package/build/dist/Types/Kubernetes/KubernetesRightSizing.js +229 -0
  754. package/build/dist/Types/Kubernetes/KubernetesRightSizing.js.map +1 -0
  755. package/build/dist/Types/MeteredPlan/ProductType.js +1 -0
  756. package/build/dist/Types/MeteredPlan/ProductType.js.map +1 -1
  757. package/build/dist/Types/Monitor/MonitorStepMetricMonitor.js +12 -2
  758. package/build/dist/Types/Monitor/MonitorStepMetricMonitor.js.map +1 -1
  759. package/build/dist/Types/Monitor/MonitorSteps.js +5 -0
  760. package/build/dist/Types/Monitor/MonitorSteps.js.map +1 -1
  761. package/build/dist/Types/Monitor/MonitorSummarySnapshot.js +13 -0
  762. package/build/dist/Types/Monitor/MonitorSummarySnapshot.js.map +1 -0
  763. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +40 -8
  764. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
  765. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +4 -3
  766. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
  767. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +50 -10
  768. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
  769. package/build/dist/Types/Monitor/RumAlertTemplates.js +297 -0
  770. package/build/dist/Types/Monitor/RumAlertTemplates.js.map +1 -0
  771. package/build/dist/Types/Permission.js +184 -24
  772. package/build/dist/Types/Permission.js.map +1 -1
  773. package/build/dist/Types/Rum/SessionReplay.js +155 -0
  774. package/build/dist/Types/Rum/SessionReplay.js.map +1 -0
  775. package/build/dist/Types/Rum/SessionReplayCaptureTrigger.js +26 -0
  776. package/build/dist/Types/Rum/SessionReplayCaptureTrigger.js.map +1 -0
  777. package/build/dist/Types/Rum/SessionReplayConsentMode.js +27 -0
  778. package/build/dist/Types/Rum/SessionReplayConsentMode.js.map +1 -0
  779. package/build/dist/Types/Rum/SessionReplayMaskingMode.js +79 -0
  780. package/build/dist/Types/Rum/SessionReplayMaskingMode.js.map +1 -0
  781. package/build/dist/Types/Rum/SessionReplayTriggerReason.js +28 -0
  782. package/build/dist/Types/Rum/SessionReplayTriggerReason.js.map +1 -0
  783. package/build/dist/Types/Runbook/RunbookCredentialType.js +7 -0
  784. package/build/dist/Types/Runbook/RunbookCredentialType.js.map +1 -0
  785. package/build/dist/Types/Runbook/RunbookStep.js +20 -1
  786. package/build/dist/Types/Runbook/RunbookStep.js.map +1 -1
  787. package/build/dist/Types/Runbook/RunbookStepType.js +24 -0
  788. package/build/dist/Types/Runbook/RunbookStepType.js.map +1 -1
  789. package/build/dist/Types/Runbook/RunnerJobOrigin.js +21 -0
  790. package/build/dist/Types/Runbook/RunnerJobOrigin.js.map +1 -0
  791. package/build/dist/Types/Runbook/RunnerJobStatus.js +22 -0
  792. package/build/dist/Types/Runbook/RunnerJobStatus.js.map +1 -0
  793. package/build/dist/Types/Runner/RunnerLiveStatus.js +69 -0
  794. package/build/dist/Types/Runner/RunnerLiveStatus.js.map +1 -0
  795. package/build/dist/Types/StatusPage/StatusPageReport.js +22 -0
  796. package/build/dist/Types/StatusPage/StatusPageReport.js.map +1 -0
  797. package/build/dist/Types/Telemetry/TelemetryRetentionConfig.js.map +1 -1
  798. package/build/dist/Types/Text.js +29 -0
  799. package/build/dist/Types/Text.js.map +1 -1
  800. package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js +143 -28
  801. package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js.map +1 -1
  802. package/build/dist/UI/Components/BulkUpdate/BulkLabelActions.js +82 -9
  803. package/build/dist/UI/Components/BulkUpdate/BulkLabelActions.js.map +1 -1
  804. package/build/dist/UI/Components/BulkUpdate/BulkOwnerActions.js +11 -0
  805. package/build/dist/UI/Components/BulkUpdate/BulkOwnerActions.js.map +1 -1
  806. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +11 -13
  807. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
  808. package/build/dist/UI/Components/CustomFields/DropdownOptionsInput.js +76 -45
  809. package/build/dist/UI/Components/CustomFields/DropdownOptionsInput.js.map +1 -1
  810. package/build/dist/UI/Components/Detail/Detail.js +100 -8
  811. package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
  812. package/build/dist/UI/Components/Dropdown/Dropdown.js +2 -5
  813. package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
  814. package/build/dist/UI/Components/Dropdown/DropdownMenuZIndex.js +7 -0
  815. package/build/dist/UI/Components/Dropdown/DropdownMenuZIndex.js.map +1 -0
  816. package/build/dist/UI/Components/Dropdown/DropdownValueBadge.js +32 -0
  817. package/build/dist/UI/Components/Dropdown/DropdownValueBadge.js.map +1 -0
  818. package/build/dist/UI/Components/Filters/OperatorSelector.js +210 -20
  819. package/build/dist/UI/Components/Filters/OperatorSelector.js.map +1 -1
  820. package/build/dist/UI/Components/Forms/Fields/ColorPicker.js +26 -10
  821. package/build/dist/UI/Components/Forms/Fields/ColorPicker.js.map +1 -1
  822. package/build/dist/UI/Components/Forms/Fields/IconPicker.js +28 -13
  823. package/build/dist/UI/Components/Forms/Fields/IconPicker.js.map +1 -1
  824. package/build/dist/UI/Components/Forms/Validation.js +9 -5
  825. package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
  826. package/build/dist/UI/Components/List/List.js +1 -1
  827. package/build/dist/UI/Components/List/List.js.map +1 -1
  828. package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js +21 -19
  829. package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js.map +1 -1
  830. package/build/dist/UI/Components/Pagination/Pagination.js +14 -3
  831. package/build/dist/UI/Components/Pagination/Pagination.js.map +1 -1
  832. package/build/dist/UI/Components/Table/Table.js +1 -1
  833. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  834. package/build/dist/UI/Types/UseAnchoredFieldPopup.js +197 -0
  835. package/build/dist/UI/Types/UseAnchoredFieldPopup.js.map +1 -0
  836. package/build/dist/UI/Utils/Dropdown.js +18 -0
  837. package/build/dist/UI/Utils/Dropdown.js.map +1 -1
  838. package/build/dist/UI/Utils/Timezone.js +13 -2
  839. package/build/dist/UI/Utils/Timezone.js.map +1 -1
  840. package/build/dist/UI/Utils/UseClockTick.js +41 -0
  841. package/build/dist/UI/Utils/UseClockTick.js.map +1 -0
  842. package/build/dist/Utils/AiRemediation/CommandPolicy.js +303 -0
  843. package/build/dist/Utils/AiRemediation/CommandPolicy.js.map +1 -0
  844. package/build/dist/Utils/Dashboard/ClockWidgetFormat.js +232 -0
  845. package/build/dist/Utils/Dashboard/ClockWidgetFormat.js.map +1 -0
  846. package/build/dist/Utils/Dashboard/Components/DashboardClockComponent.js +146 -0
  847. package/build/dist/Utils/Dashboard/Components/DashboardClockComponent.js.map +1 -0
  848. package/build/dist/Utils/Dashboard/Components/DashboardHtmlComponent.js +133 -0
  849. package/build/dist/Utils/Dashboard/Components/DashboardHtmlComponent.js.map +1 -0
  850. package/build/dist/Utils/Dashboard/Components/DashboardValueComponent.js +10 -1
  851. package/build/dist/Utils/Dashboard/Components/DashboardValueComponent.js.map +1 -1
  852. package/build/dist/Utils/Dashboard/Components/Index.js +8 -0
  853. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  854. package/build/dist/Utils/Dashboard/HtmlWidgetDocument.js +198 -0
  855. package/build/dist/Utils/Dashboard/HtmlWidgetDocument.js.map +1 -0
  856. package/build/dist/Utils/Dashboard/ValueWidgetLayout.js +276 -0
  857. package/build/dist/Utils/Dashboard/ValueWidgetLayout.js.map +1 -0
  858. package/build/dist/Utils/Metrics/MetricSeriesScope.js +203 -0
  859. package/build/dist/Utils/Metrics/MetricSeriesScope.js.map +1 -0
  860. package/build/dist/Utils/Monitor/MonitorSummarySnapshotUtil.js +382 -0
  861. package/build/dist/Utils/Monitor/MonitorSummarySnapshotUtil.js.map +1 -0
  862. package/build/dist/Utils/NetworkSite/CidrMatchUtil.js +13 -7
  863. package/build/dist/Utils/NetworkSite/CidrMatchUtil.js.map +1 -1
  864. package/build/dist/Utils/Rules/RulePatternMatchUtil.js +87 -0
  865. package/build/dist/Utils/Rules/RulePatternMatchUtil.js.map +1 -0
  866. package/build/dist/Utils/Rum/ChunkMath.js +147 -0
  867. package/build/dist/Utils/Rum/ChunkMath.js.map +1 -0
  868. package/build/dist/Utils/Rum/Masking.js +143 -0
  869. package/build/dist/Utils/Rum/Masking.js.map +1 -0
  870. package/build/dist/Utils/Rum/SessionIdentity.js +161 -0
  871. package/build/dist/Utils/Rum/SessionIdentity.js.map +1 -0
  872. package/build/dist/Utils/Rum/SessionSampling.js +91 -0
  873. package/build/dist/Utils/Rum/SessionSampling.js.map +1 -0
  874. package/build/dist/Utils/Rum/UrlScrubber.js +144 -0
  875. package/build/dist/Utils/Rum/UrlScrubber.js.map +1 -0
  876. package/build/dist/Utils/Schema/ModelSchema.js +28 -3
  877. package/build/dist/Utils/Schema/ModelSchema.js.map +1 -1
  878. package/build/dist/Utils/StatusPage/Report.js +194 -0
  879. package/build/dist/Utils/StatusPage/Report.js.map +1 -0
  880. package/build/dist/Utils/ValueFormatter.js +239 -46
  881. package/build/dist/Utils/ValueFormatter.js.map +1 -1
  882. package/jest.config.json +3 -0
  883. package/package.json +1 -1
  884. package/tsconfig.json +19 -1
  885. package/Server/Services/RunbookAgentService.ts +0 -93
  886. package/build/dist/Models/DatabaseModels/RunbookAgent.js.map +0 -1
  887. package/build/dist/Models/DatabaseModels/RunbookAgentJob.js.map +0 -1
  888. package/build/dist/Models/DatabaseModels/RunbookAgentOwnerTeam.js.map +0 -1
  889. package/build/dist/Models/DatabaseModels/RunbookAgentOwnerUser.js.map +0 -1
  890. package/build/dist/Server/Services/RunbookAgentJobService.js.map +0 -1
  891. package/build/dist/Server/Services/RunbookAgentOwnerTeamService.js.map +0 -1
  892. package/build/dist/Server/Services/RunbookAgentOwnerUserService.js.map +0 -1
  893. package/build/dist/Server/Services/RunbookAgentService.js +0 -91
  894. package/build/dist/Server/Services/RunbookAgentService.js.map +0 -1
  895. package/build/dist/Types/Runbook/RunbookAgentJobStatus.js +0 -22
  896. package/build/dist/Types/Runbook/RunbookAgentJobStatus.js.map +0 -1
@@ -94,4 +94,42 @@ export function applyIncidentRelatedRecordPrivacyFilter(query, props) {
94
94
  query.incidentId = combineWithPrivacyClause(query.incidentId, rawClause);
95
95
  return query;
96
96
  }
97
+ /*
98
+ * Null-tolerant variant of the related-record filter for child tables whose
99
+ * incident link is OPTIONAL (e.g. AutoRemediationSuggestion, which links an
100
+ * incident OR an alert). In SQL, `NULL IN (subquery)` evaluates to NULL, so
101
+ * the strict clause above would hide every row whose incidentId is NULL —
102
+ * this variant lets NULL-linked rows through and defers to the sibling
103
+ * column's own filter.
104
+ */
105
+ export function getOptionalIncidentRelatedRecordPrivacyRaw(props) {
106
+ if (shouldBypassIncidentPrivacy(props)) {
107
+ return undefined;
108
+ }
109
+ if (!props.userId) {
110
+ return Raw((alias) => {
111
+ return `(${alias} IS NULL OR ${alias} IN (SELECT i."_id" FROM "Incident" i WHERE i."deletedAt" IS NULL AND (i."isPrivate" IS NULL OR i."isPrivate" = FALSE)))`;
112
+ });
113
+ }
114
+ const uidRid = "uidRelOpt_" + Text.generateRandomText(10);
115
+ return Raw((alias) => {
116
+ return (`(${alias} IS NULL OR ${alias} IN (SELECT i."_id" FROM "Incident" i WHERE i."deletedAt" IS NULL AND (` +
117
+ `i."isPrivate" IS NULL OR i."isPrivate" = FALSE OR ` +
118
+ `i."_id" IN (SELECT iou."incidentId" FROM "IncidentOwnerUser" iou WHERE iou."userId" = :${uidRid} AND iou."deletedAt" IS NULL) OR ` +
119
+ `i."_id" IN (SELECT iot."incidentId" FROM "IncidentOwnerTeam" iot INNER JOIN "TeamMember" tm ON tm."teamId" = iot."teamId" WHERE tm."userId" = :${uidRid} AND tm."deletedAt" IS NULL AND iot."deletedAt" IS NULL))))`);
120
+ }, {
121
+ [uidRid]: props.userId.toString(),
122
+ });
123
+ }
124
+ export function applyOptionalIncidentRelatedRecordPrivacyFilter(query, props) {
125
+ const rawClause = getOptionalIncidentRelatedRecordPrivacyRaw(props);
126
+ if (!rawClause) {
127
+ return query;
128
+ }
129
+ if (!query) {
130
+ return { incidentId: rawClause };
131
+ }
132
+ query.incidentId = combineWithPrivacyClause(query.incidentId, rawClause);
133
+ return query;
134
+ }
97
135
  //# sourceMappingURL=IncidentPrivacyFilter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IncidentPrivacyFilter.js","sourceRoot":"","sources":["../../../../../Server/Utils/Incident/IncidentPrivacyFilter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IncidentPrivacyFilter.js","sourceRoot":"","sources":["../../../../../Server/Utils/Incident/IncidentPrivacyFilter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,194 @@
1
+ import PostgresAppInstance from "../../Infrastructure/PostgresDatabase";
2
+ import logger from "../Logger";
3
+ /*
4
+ * Postgres refuses all writes once transaction-ID age reaches 2^31. Utilization
5
+ * is expressed against that hard ceiling rather than autovacuum_freeze_max_age,
6
+ * which is only the point where autovacuum is forced to intervene and is
7
+ * routinely exceeded on a healthy instance.
8
+ */
9
+ export const POSTGRES_WRAPAROUND_CEILING = 2147483648;
10
+ const BYTES_PER_GB = 1024 * 1024 * 1024;
11
+ export function gigabytesToBytes(gigabytes) {
12
+ return gigabytes * BYTES_PER_GB;
13
+ }
14
+ function toNumberOrNull(value) {
15
+ if (value === null || value === undefined || value === "") {
16
+ return null;
17
+ }
18
+ const parsed = Number(value);
19
+ return Number.isFinite(parsed) ? parsed : null;
20
+ }
21
+ /*
22
+ * Every probe is guarded on its own so a permission error or a feature missing
23
+ * on this Postgres version (pg_replication_slots columns differ across major
24
+ * versions) leaves that one field null instead of blanking the whole snapshot.
25
+ * A null field means "not evaluated"; callers must not read it as healthy.
26
+ */
27
+ export async function getPostgresHealthSnapshot() {
28
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
29
+ const dataSource = PostgresAppInstance.getDataSource();
30
+ if (!dataSource) {
31
+ return null;
32
+ }
33
+ const snapshot = {
34
+ databaseSizeInBytes: null,
35
+ walSizeInBytes: null,
36
+ maxConnections: null,
37
+ usableConnections: null,
38
+ clientBackends: null,
39
+ connectionUtilizationPercent: null,
40
+ transactionIdAge: null,
41
+ multiXactIdAge: null,
42
+ maxTransactionIdAge: null,
43
+ wraparoundUtilizationPercent: null,
44
+ replicationSlots: null,
45
+ isInRecovery: false,
46
+ };
47
+ try {
48
+ const rows = await dataSource.query("SELECT pg_is_in_recovery() AS in_recovery");
49
+ snapshot.isInRecovery = Boolean((_a = rows === null || rows === void 0 ? void 0 : rows[0]) === null || _a === void 0 ? void 0 : _a.in_recovery);
50
+ }
51
+ catch (error) {
52
+ logger.debug("InstanceHealth: postgres recovery-state probe failed");
53
+ logger.debug(error);
54
+ }
55
+ try {
56
+ const rows = await dataSource.query("SELECT pg_database_size(current_database()) AS size");
57
+ snapshot.databaseSizeInBytes = toNumberOrNull((_b = rows === null || rows === void 0 ? void 0 : rows[0]) === null || _b === void 0 ? void 0 : _b.size);
58
+ }
59
+ catch (error) {
60
+ logger.debug("InstanceHealth: pg_database_size probe failed");
61
+ logger.debug(error);
62
+ }
63
+ /*
64
+ * WAL is measured separately because it lives on the same volume but outside
65
+ * pg_database_size, and an abandoned replication slot parks tens of gigabytes
66
+ * there. Without it the storage check can read comfortably under threshold
67
+ * while the volume is full and writes are already failing. pg_ls_waldir()
68
+ * needs superuser or pg_monitor, so this stays best-effort.
69
+ */
70
+ try {
71
+ const rows = await dataSource.query("SELECT COALESCE(sum(size), 0) AS size FROM pg_ls_waldir()");
72
+ snapshot.walSizeInBytes = toNumberOrNull((_c = rows === null || rows === void 0 ? void 0 : rows[0]) === null || _c === void 0 ? void 0 : _c.size);
73
+ }
74
+ catch (error) {
75
+ logger.debug("InstanceHealth: pg_ls_waldir probe failed");
76
+ logger.debug(error);
77
+ }
78
+ /*
79
+ * Backends come from pg_stat_database.numbackends rather than counting
80
+ * pg_stat_activity rows. pg_stat_activity nulls backend_type (and state, and
81
+ * client_addr) for backends belonging to other roles unless the caller is a
82
+ * superuser or holds pg_read_all_stats/pg_monitor, so a filtered count sees
83
+ * only OneUptime's own connections on a managed or hardened cluster. That
84
+ * failure is silent — no error, no null — so it would read as healthy while
85
+ * another tenant exhausts the cluster, and would actively resolve an alert
86
+ * raised earlier from a privileged role. numbackends is not masked.
87
+ *
88
+ * The denominator subtracts the slots reserved for superusers (and, from PG
89
+ * 16, for pg_use_reserved_connections): ordinary clients are refused once
90
+ * those are all that remain, so measuring against raw max_connections
91
+ * understates saturation and can put the critical tier out of reach entirely
92
+ * on a small max_connections.
93
+ */
94
+ try {
95
+ const rows = await dataSource.query(`SELECT
96
+ (SELECT setting::int FROM pg_settings WHERE name = 'max_connections') AS max_connections,
97
+ COALESCE((SELECT setting::int FROM pg_settings WHERE name = 'superuser_reserved_connections'), 0)
98
+ + COALESCE((SELECT setting::int FROM pg_settings WHERE name = 'reserved_connections'), 0)
99
+ AS reserved_connections,
100
+ (SELECT COALESCE(sum(numbackends), 0) FROM pg_stat_database) AS backends`);
101
+ const maxConnections = toNumberOrNull((_d = rows === null || rows === void 0 ? void 0 : rows[0]) === null || _d === void 0 ? void 0 : _d.max_connections);
102
+ const reservedConnections = (_f = toNumberOrNull((_e = rows === null || rows === void 0 ? void 0 : rows[0]) === null || _e === void 0 ? void 0 : _e.reserved_connections)) !== null && _f !== void 0 ? _f : 0;
103
+ const clientBackends = toNumberOrNull((_g = rows === null || rows === void 0 ? void 0 : rows[0]) === null || _g === void 0 ? void 0 : _g.backends);
104
+ const usableConnections = maxConnections === null
105
+ ? null
106
+ : Math.max(1, maxConnections - reservedConnections);
107
+ snapshot.maxConnections = maxConnections;
108
+ snapshot.usableConnections = usableConnections;
109
+ snapshot.clientBackends = clientBackends;
110
+ snapshot.connectionUtilizationPercent =
111
+ usableConnections !== null && clientBackends !== null
112
+ ? (clientBackends / usableConnections) * 100
113
+ : null;
114
+ }
115
+ catch (error) {
116
+ logger.debug("InstanceHealth: postgres connection probe failed");
117
+ logger.debug(error);
118
+ }
119
+ /*
120
+ * Multixact age is an independent counter with the same 2^31 ceiling and the
121
+ * same consequence — Postgres stops accepting commands to avoid wraparound
122
+ * data loss. An FK-heavy or SELECT ... FOR SHARE workload can exhaust it while
123
+ * ordinary XID age looks fine, so the check reports whichever is worse.
124
+ */
125
+ try {
126
+ const rows = await dataSource.query(`SELECT
127
+ max(age(datfrozenxid)) AS max_xid_age,
128
+ max(mxid_age(datminmxid)) AS max_mxid_age
129
+ FROM pg_database`);
130
+ const transactionIdAge = toNumberOrNull((_h = rows === null || rows === void 0 ? void 0 : rows[0]) === null || _h === void 0 ? void 0 : _h.max_xid_age);
131
+ const multiXactIdAge = toNumberOrNull((_j = rows === null || rows === void 0 ? void 0 : rows[0]) === null || _j === void 0 ? void 0 : _j.max_mxid_age);
132
+ const maxTransactionIdAge = transactionIdAge === null && multiXactIdAge === null
133
+ ? null
134
+ : Math.max(transactionIdAge !== null && transactionIdAge !== void 0 ? transactionIdAge : 0, multiXactIdAge !== null && multiXactIdAge !== void 0 ? multiXactIdAge : 0);
135
+ snapshot.transactionIdAge = transactionIdAge;
136
+ snapshot.multiXactIdAge = multiXactIdAge;
137
+ snapshot.maxTransactionIdAge = maxTransactionIdAge;
138
+ snapshot.wraparoundUtilizationPercent =
139
+ maxTransactionIdAge !== null
140
+ ? (maxTransactionIdAge / POSTGRES_WRAPAROUND_CEILING) * 100
141
+ : null;
142
+ }
143
+ catch (error) {
144
+ logger.debug("InstanceHealth: postgres wraparound probe failed");
145
+ logger.debug(error);
146
+ }
147
+ /*
148
+ * wal_status arrived in Postgres 13. On an older external database the column
149
+ * simply does not exist and the whole statement errors, which would silence
150
+ * the slot check entirely — even though restart_lsn and pg_wal_lsn_diff are
151
+ * available there and the retained-WAL half of the check works fine. So the
152
+ * version-specific column is dropped on a retry rather than taking the rest
153
+ * of the probe down with it.
154
+ */
155
+ const buildSlotQuery = (withWalStatus) => {
156
+ return `SELECT
157
+ slot_name,
158
+ slot_type,
159
+ active,
160
+ ${withWalStatus ? "COALESCE(wal_status, 'unknown')" : "'unknown'"} AS wal_status,
161
+ CASE WHEN pg_is_in_recovery() THEN NULL
162
+ ELSE pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn) END AS retained_bytes
163
+ FROM pg_replication_slots
164
+ ORDER BY slot_name ASC`;
165
+ };
166
+ let slotRows = null;
167
+ try {
168
+ slotRows = await dataSource.query(buildSlotQuery(true));
169
+ }
170
+ catch (error) {
171
+ logger.debug("InstanceHealth: pg_replication_slots probe failed, retrying without wal_status");
172
+ logger.debug(error);
173
+ try {
174
+ slotRows = await dataSource.query(buildSlotQuery(false));
175
+ }
176
+ catch (retryError) {
177
+ logger.debug("InstanceHealth: pg_replication_slots probe failed");
178
+ logger.debug(retryError);
179
+ }
180
+ }
181
+ if (slotRows) {
182
+ snapshot.replicationSlots = slotRows.map((row) => {
183
+ return {
184
+ slotName: String(row.slot_name || ""),
185
+ slotType: String(row.slot_type || "unknown"),
186
+ isActive: Boolean(row.active),
187
+ walStatus: String(row.wal_status || "unknown"),
188
+ retainedWalInBytes: toNumberOrNull(row.retained_bytes),
189
+ };
190
+ });
191
+ }
192
+ return snapshot;
193
+ }
194
+ //# sourceMappingURL=PostgresHealth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostgresHealth.js","sourceRoot":"","sources":["../../../../../Server/Utils/InstanceHealth/PostgresHealth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,292 @@
1
+ import Redis from "../../Infrastructure/Redis";
2
+ /*
3
+ * Where the previous counter sample is kept so a later run can turn Redis'
4
+ * monotonic counters into "did this happen since we last looked".
5
+ *
6
+ * Redis stores its own history here on purpose: the counters and the sample
7
+ * then share a lifetime, so a Redis restart clears both together and cannot
8
+ * leave a stale baseline that fabricates an enormous delta. The uptime guard
9
+ * below covers the case where the sample somehow outlives a restart anyway.
10
+ *
11
+ * Under memory pressure with an eviction policy this key can itself be evicted,
12
+ * which costs one interval of eviction detection: the next run finds no sample,
13
+ * re-seeds it, and reports deltas again from there.
14
+ */
15
+ const COUNTER_SAMPLE_KEY = "oneuptime-instance-health-redis-sample";
16
+ const COUNTER_SAMPLE_TTL_IN_SECONDS = 60 * 60;
17
+ /*
18
+ * The minimum age of the baseline the counter deltas are measured against, so
19
+ * every evaluation answers "did this happen in at least the last half hour"
20
+ * rather than "did it happen in the last five minutes".
21
+ *
22
+ * That span is what keeps an edge-triggered signal from flapping. Evictions
23
+ * arriving in bursts would otherwise clear on the first quiet tick and fire
24
+ * again on the next, emailing every other cycle.
25
+ *
26
+ * Two samples are kept rather than one because a single rolling baseline is a
27
+ * TUMBLING window, not a sliding one: the tick immediately after a roll would
28
+ * compare against a five-minute-old sample and a lone quiet tick there would
29
+ * resolve the notification, re-notifying on the next burst of the same ongoing
30
+ * incident. Measuring against the OLDER of two samples makes the lookback
31
+ * always at least this long (and at most twice it).
32
+ */
33
+ export const COUNTER_WINDOW_IN_SECONDS = 30 * 60;
34
+ /*
35
+ * INFO is a flat `field:value` document split into `# Section` blocks. Section
36
+ * headers and comment lines are dropped; field names are unique across sections
37
+ * so a single flat map is unambiguous.
38
+ */
39
+ export function parseRedisInfo(info) {
40
+ const values = {};
41
+ for (const line of info.split(/\r?\n/)) {
42
+ const trimmed = line.trim();
43
+ if (!trimmed || trimmed.startsWith("#")) {
44
+ continue;
45
+ }
46
+ const separatorIndex = trimmed.indexOf(":");
47
+ if (separatorIndex <= 0) {
48
+ continue;
49
+ }
50
+ values[trimmed.slice(0, separatorIndex)] = trimmed.slice(separatorIndex + 1);
51
+ }
52
+ return values;
53
+ }
54
+ function toNumber(value) {
55
+ const parsed = Number(value);
56
+ return Number.isFinite(parsed) ? parsed : 0;
57
+ }
58
+ function toNumberOrNull(value) {
59
+ if (value === undefined || value === "") {
60
+ return null;
61
+ }
62
+ const parsed = Number(value);
63
+ return Number.isFinite(parsed) ? parsed : null;
64
+ }
65
+ export function buildRedisInfoSnapshot(data) {
66
+ const maxMemoryInBytes = toNumber(data.info["maxmemory"]);
67
+ const usedMemoryInBytes = toNumber(data.info["used_memory"]);
68
+ const connectedClients = toNumber(data.info["connected_clients"]);
69
+ return {
70
+ usedMemoryInBytes,
71
+ maxMemoryInBytes,
72
+ maxMemoryPolicy: data.info["maxmemory_policy"] || "unknown",
73
+ memoryUtilizationPercent: maxMemoryInBytes > 0
74
+ ? (usedMemoryInBytes / maxMemoryInBytes) * 100
75
+ : null,
76
+ connectedClients,
77
+ maxClients: data.maxClients,
78
+ clientUtilizationPercent: data.maxClients !== null && data.maxClients > 0
79
+ ? (connectedClients / data.maxClients) * 100
80
+ : null,
81
+ blockedClients: toNumber(data.info["blocked_clients"]),
82
+ evictedKeys: toNumber(data.info["evicted_keys"]),
83
+ rejectedConnections: toNumber(data.info["rejected_connections"]),
84
+ rdbLastBgsaveStatus: data.info["rdb_last_bgsave_status"] || "unknown",
85
+ isAofEnabled: data.info["aof_enabled"] === "1",
86
+ aofLastWriteStatus: data.info["aof_last_write_status"] || "unknown",
87
+ aofLastBgrewriteStatus: data.info["aof_last_bgrewrite_status"] || "unknown",
88
+ uptimeInSeconds: toNumber(data.info["uptime_in_seconds"]),
89
+ };
90
+ }
91
+ /*
92
+ * maxclients moved into INFO clients in Redis 6.2. Older servers, and any
93
+ * server whose INFO omits it, need the CONFIG round trip — which managed Redis
94
+ * offerings sometimes disable, hence the null (and a skipped check) rather than
95
+ * a thrown error.
96
+ */
97
+ async function getMaxClients(client, info) {
98
+ const fromInfo = toNumberOrNull(info["maxclients"]);
99
+ if (fromInfo !== null) {
100
+ return fromInfo;
101
+ }
102
+ try {
103
+ const reply = await client.call("CONFIG", "GET", "maxclients");
104
+ if (Array.isArray(reply) && reply.length >= 2) {
105
+ return toNumberOrNull(String(reply[1]));
106
+ }
107
+ }
108
+ catch (_a) {
109
+ // CONFIG is unavailable on this server; the caller skips the check.
110
+ }
111
+ return null;
112
+ }
113
+ function parseCounterSample(value) {
114
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
115
+ return null;
116
+ }
117
+ const sample = value;
118
+ const evictedKeys = Number(sample["evictedKeys"]);
119
+ const rejectedConnections = Number(sample["rejectedConnections"]);
120
+ const uptimeInSeconds = Number(sample["uptimeInSeconds"]);
121
+ if (!Number.isFinite(evictedKeys) ||
122
+ !Number.isFinite(rejectedConnections) ||
123
+ !Number.isFinite(uptimeInSeconds)) {
124
+ return null;
125
+ }
126
+ return { evictedKeys, rejectedConnections, uptimeInSeconds };
127
+ }
128
+ async function readCounterSamples(client) {
129
+ try {
130
+ const raw = await client.get(COUNTER_SAMPLE_KEY);
131
+ if (!raw) {
132
+ return null;
133
+ }
134
+ const parsed = JSON.parse(raw);
135
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
136
+ return null;
137
+ }
138
+ const stored = parsed;
139
+ const older = parseCounterSample(stored["older"]);
140
+ const newer = parseCounterSample(stored["newer"]);
141
+ if (older && newer) {
142
+ return { older, newer };
143
+ }
144
+ /*
145
+ * A single-sample payload is what the previous release wrote. Treat it as
146
+ * both ends of the pair so an upgrade keeps its baseline instead of going
147
+ * blind for a window.
148
+ */
149
+ const legacy = parseCounterSample(parsed);
150
+ return legacy ? { older: legacy, newer: legacy } : null;
151
+ }
152
+ catch (_a) {
153
+ // A missing or unreadable sample simply means no delta this run.
154
+ return null;
155
+ }
156
+ }
157
+ /*
158
+ * Returns whether the baseline was actually stored. The caller needs to know,
159
+ * because a write can fail for a reason that does not stop the key from being
160
+ * kept alive by other means — see getRedisHealthSnapshot.
161
+ */
162
+ async function writeCounterSamples(client, samples) {
163
+ try {
164
+ await client.set(COUNTER_SAMPLE_KEY, JSON.stringify(samples), "EX", COUNTER_SAMPLE_TTL_IN_SECONDS);
165
+ return true;
166
+ }
167
+ catch (_a) {
168
+ /*
169
+ * Losing the baseline must never fail the health evaluation that produced
170
+ * this snapshot, so the error is swallowed and reported through the return.
171
+ */
172
+ return false;
173
+ }
174
+ }
175
+ // Keep a baseline alive across the runs that do not rewrite it.
176
+ async function refreshCounterSampleTtl(client) {
177
+ try {
178
+ await client.expire(COUNTER_SAMPLE_KEY, COUNTER_SAMPLE_TTL_IN_SECONDS);
179
+ }
180
+ catch (_a) {
181
+ // Same reasoning as writeCounterSamples: never fail the evaluation over this.
182
+ }
183
+ }
184
+ /*
185
+ * The pair rolls only once the NEWER sample has aged past the window, which
186
+ * promotes it to `older` and starts a fresh one. Deltas are always measured
187
+ * against `older`, so the lookback never drops below the window. Redis' own
188
+ * uptime measures that age, which avoids trusting either machine's clock.
189
+ */
190
+ export function shouldRollCounterSamples(data) {
191
+ if (!data.previous || data.didRestart) {
192
+ return true;
193
+ }
194
+ return (data.currentUptimeInSeconds - data.previous.newer.uptimeInSeconds >=
195
+ COUNTER_WINDOW_IN_SECONDS);
196
+ }
197
+ /*
198
+ * Compare a monotonic counter against its previous value. A decrease, or a
199
+ * shorter uptime than the sample was taken at, means Redis restarted and the
200
+ * counter began again from zero — the difference is meaningless, so report no
201
+ * delta rather than a fabricated spike.
202
+ */
203
+ export function getCounterDelta(data) {
204
+ if (data.didRestart || data.current < data.previous) {
205
+ return null;
206
+ }
207
+ return data.current - data.previous;
208
+ }
209
+ async function readInfoSnapshot(client) {
210
+ const info = parseRedisInfo(await client.info());
211
+ return buildRedisInfoSnapshot({
212
+ info,
213
+ maxClients: await getMaxClients(client, info),
214
+ });
215
+ }
216
+ /*
217
+ * Read-only view for the admin health API. It deliberately does NOT touch the
218
+ * stored counter sample: advancing that baseline here would consume the delta
219
+ * the worker needs, so a page refresh could hide an eviction burst from the
220
+ * notification that exists to catch it.
221
+ */
222
+ export async function getRedisInfoSnapshot() {
223
+ const client = Redis.getClient();
224
+ if (!client || !Redis.isConnected()) {
225
+ return null;
226
+ }
227
+ return await readInfoSnapshot(client);
228
+ }
229
+ /*
230
+ * The evaluating worker's view: the same INFO read, plus the counter deltas
231
+ * that turn cumulative totals into "did this happen in roughly the last
232
+ * COUNTER_WINDOW_IN_SECONDS". Returns null when Redis is unreachable, which the
233
+ * caller treats as "cannot evaluate" rather than "healthy".
234
+ */
235
+ export async function getRedisHealthSnapshot() {
236
+ const client = Redis.getClient();
237
+ if (!client || !Redis.isConnected()) {
238
+ return null;
239
+ }
240
+ const snapshot = await readInfoSnapshot(client);
241
+ const previousSamples = await readCounterSamples(client);
242
+ const didRestart = Boolean(previousSamples &&
243
+ previousSamples.older.uptimeInSeconds > snapshot.uptimeInSeconds);
244
+ // Deltas always measure against the older half, never the freshly rolled one.
245
+ const baseline = previousSamples
246
+ ? previousSamples.older
247
+ : null;
248
+ const current = {
249
+ evictedKeys: snapshot.evictedKeys,
250
+ rejectedConnections: snapshot.rejectedConnections,
251
+ uptimeInSeconds: snapshot.uptimeInSeconds,
252
+ };
253
+ const wantsRoll = shouldRollCounterSamples({
254
+ previous: previousSamples,
255
+ currentUptimeInSeconds: snapshot.uptimeInSeconds,
256
+ didRestart,
257
+ });
258
+ const didRoll = wantsRoll
259
+ ? await writeCounterSamples(client, {
260
+ older: previousSamples && !didRestart ? previousSamples.newer : current,
261
+ newer: current,
262
+ })
263
+ : false;
264
+ /*
265
+ * Keep the existing samples alive whenever they were not rolled — including
266
+ * when the roll FAILED, which is the case that matters most. Under the
267
+ * noeviction policy Redis rejects SET once it is out of memory but still
268
+ * serves EXPIRE, so letting a failed write skip the refresh would expire the
269
+ * baseline precisely when memory is full: eviction detection would then go
270
+ * permanently blind at the moment it is needed, because every later write
271
+ * fails the same way and the key never returns.
272
+ */
273
+ if (!didRoll) {
274
+ await refreshCounterSampleTtl(client);
275
+ }
276
+ return Object.assign(Object.assign({}, snapshot), { counterWindowInSeconds: baseline
277
+ ? snapshot.uptimeInSeconds - baseline.uptimeInSeconds
278
+ : null, evictedKeysDelta: baseline
279
+ ? getCounterDelta({
280
+ current: snapshot.evictedKeys,
281
+ previous: baseline.evictedKeys,
282
+ didRestart,
283
+ })
284
+ : null, rejectedConnectionsDelta: baseline
285
+ ? getCounterDelta({
286
+ current: snapshot.rejectedConnections,
287
+ previous: baseline.rejectedConnections,
288
+ didRestart,
289
+ })
290
+ : null });
291
+ }
292
+ //# sourceMappingURL=RedisHealth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RedisHealth.js","sourceRoot":"","sources":["../../../../../Server/Utils/InstanceHealth/RedisHealth.ts"],"names":[],"mappings":"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"}
@@ -134,6 +134,17 @@ export default class CompareCriteria {
134
134
  if (typeof threshold !== Typeof.Number) {
135
135
  return null;
136
136
  }
137
+ /*
138
+ * parseInt("abc") returns NaN rather than throwing, and NaN is typeof
139
+ * "number" — so without this guard a non-numeric threshold would leak
140
+ * past callers that only check for `=== null`, leaving every numeric
141
+ * comparison silently false (value > NaN is always false). Treat an
142
+ * unparseable value the same as a missing one so the caller can ignore
143
+ * it instead of firing a broken criterion.
144
+ */
145
+ if (Number.isNaN(threshold)) {
146
+ return null;
147
+ }
137
148
  return threshold;
138
149
  }
139
150
  static checkEqualToOrNotEqualTo(data) {