@oneuptime/common 11.4.1 → 11.5.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 (324) hide show
  1. package/Models/DatabaseModels/AIRun.ts +50 -0
  2. package/Models/DatabaseModels/AlertSeverity.ts +6 -0
  3. package/Models/DatabaseModels/IncidentSeverity.ts +6 -0
  4. package/Models/DatabaseModels/Index.ts +16 -0
  5. package/Models/DatabaseModels/IoTDeviceCredential.ts +471 -0
  6. package/Models/DatabaseModels/LlmLog.ts +56 -0
  7. package/Models/DatabaseModels/LlmProvider.ts +33 -0
  8. package/Models/DatabaseModels/NetworkDevice.ts +1385 -0
  9. package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +717 -0
  10. package/Models/DatabaseModels/NetworkDeviceLabelRule.ts +514 -0
  11. package/Models/DatabaseModels/NetworkDeviceOwnerRule.ts +596 -0
  12. package/Models/DatabaseModels/NetworkDeviceOwnerTeam.ts +487 -0
  13. package/Models/DatabaseModels/NetworkDeviceOwnerUser.ts +486 -0
  14. package/Models/DatabaseModels/NetworkInterface.ts +563 -0
  15. package/Models/DatabaseModels/Project.ts +145 -0
  16. package/Models/DatabaseModels/TelemetryEntityRelationship.ts +54 -0
  17. package/Server/API/AIInvestigationAPI.ts +131 -63
  18. package/Server/API/AlertAPI.ts +5 -0
  19. package/Server/API/IncidentAPI.ts +10 -0
  20. package/Server/API/IncidentEpisodeAPI.ts +5 -0
  21. package/Server/API/LlmProviderAPI.ts +4 -0
  22. package/Server/API/ScheduledMaintenanceAPI.ts +5 -0
  23. package/Server/Infrastructure/Postgres/SchemaMigrations/1783650000000-AddAdditionalParamsToLlmProvider.ts +19 -0
  24. package/Server/Infrastructure/Postgres/SchemaMigrations/1783695782697-AddCacheTokenColumnsToLlmLog.ts +25 -0
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/1783701585317-AddAlertInvestigationGating.ts +31 -0
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/1783702431535-AddAiDailyAutonomousTokenLimitToProject.ts +19 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/1783720000000-AddNetworkDeviceTables.ts +105 -0
  28. package/Server/Infrastructure/Postgres/SchemaMigrations/1783721121260-AddAttemptCountToAIRun.ts +15 -0
  29. package/Server/Infrastructure/Postgres/SchemaMigrations/1783730000000-AddNetworkDeviceOwnersAndRules.ts +192 -0
  30. package/Server/Infrastructure/Postgres/SchemaMigrations/1783740000000-AddNetworkDeviceDiscoveryScan.ts +37 -0
  31. package/Server/Infrastructure/Postgres/SchemaMigrations/1783750000000-AddLldpNeighborsToNetworkDevice.ts +19 -0
  32. package/Server/Infrastructure/Postgres/SchemaMigrations/1783760576655-AddInvestigationTuningToProject.ts +25 -0
  33. package/Server/Infrastructure/Postgres/SchemaMigrations/1783762505482-AddTelemetryEntityRelationshipMetrics.ts +31 -0
  34. package/Server/Infrastructure/Postgres/SchemaMigrations/1783780000000-AddIoTDeviceCredentialTable.ts +79 -0
  35. package/Server/Infrastructure/Postgres/SchemaMigrations/1783790000000-AddSnmpV3AuthColumnsToNetworkDevice.ts +49 -0
  36. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +26 -0
  37. package/Server/Services/AIRunService.ts +58 -0
  38. package/Server/Services/AIService.ts +101 -0
  39. package/Server/Services/IncidentService.ts +14 -41
  40. package/Server/Services/Index.ts +14 -0
  41. package/Server/Services/IoTDeviceCredentialService.ts +351 -0
  42. package/Server/Services/IoTDeviceService.ts +64 -21
  43. package/Server/Services/LlmLogService.ts +26 -0
  44. package/Server/Services/LlmProviderService.ts +3 -0
  45. package/Server/Services/MonitorService.ts +4 -1
  46. package/Server/Services/NetworkDeviceDiscoveryScanService.ts +10 -0
  47. package/Server/Services/NetworkDeviceLabelRuleEngineService.ts +204 -0
  48. package/Server/Services/NetworkDeviceLabelRuleService.ts +14 -0
  49. package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +222 -0
  50. package/Server/Services/NetworkDeviceOwnerRuleService.ts +14 -0
  51. package/Server/Services/NetworkDeviceOwnerTeamService.ts +10 -0
  52. package/Server/Services/NetworkDeviceOwnerUserService.ts +10 -0
  53. package/Server/Services/NetworkDeviceService.ts +50 -0
  54. package/Server/Services/NetworkInterfaceService.ts +10 -0
  55. package/Server/Services/TelemetryEntityRelationshipService.ts +23 -0
  56. package/Server/Services/TelemetryEntityService.ts +72 -2
  57. package/Server/Utils/AI/Sentinel/AlertInvestigationRunner.ts +244 -12
  58. package/Server/Utils/AI/Sentinel/IncidentInvestigationRunner.ts +92 -19
  59. package/Server/Utils/AI/Sentinel/InvestigationQueue.ts +493 -0
  60. package/Server/Utils/AI/Sentinel/SentinelInvestigationEngine.ts +88 -68
  61. package/Server/Utils/AI/Toolbox/Index.ts +2 -1
  62. package/Server/Utils/AI/Toolbox/MetricTools.ts +391 -0
  63. package/Server/Utils/LLM/LLMService.ts +21 -0
  64. package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +170 -2
  65. package/Server/Utils/Monitor/IoTDeviceAbsenceSeries.ts +101 -0
  66. package/Server/Utils/Monitor/MonitorAlert.ts +15 -3
  67. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +1 -1
  68. package/Server/Utils/Monitor/MonitorIncident.ts +19 -3
  69. package/Server/Utils/Monitor/MonitorMetricUtil.ts +87 -0
  70. package/Server/Utils/Monitor/MonitorResource.ts +77 -21
  71. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +1 -1
  72. package/Server/Utils/Monitor/NetworkDeviceHydrationUtil.ts +201 -0
  73. package/Server/Utils/Monitor/NetworkInventoryUtil.ts +215 -0
  74. package/Server/Utils/Monitor/SnmpInterfaceRateUtil.ts +169 -0
  75. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +173 -0
  76. package/Tests/Server/Services/IncidentInternalNoteAnnouncement.test.ts +97 -0
  77. package/Tests/Server/Services/IoTDeviceService.test.ts +54 -0
  78. package/Tests/Server/Utils/AI/BaselineAnomalyTool.test.ts +253 -0
  79. package/Tests/Server/Utils/AI/LLMServiceToolCalling.test.ts +44 -0
  80. package/Tests/Server/Utils/AI/SentinelAlertGating.test.ts +360 -0
  81. package/Tests/Server/Utils/AI/SentinelInvestigationQueue.test.ts +295 -0
  82. package/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.ts +59 -0
  83. package/Tests/Server/Utils/Monitor/IoTDeviceAbsenceSeries.test.ts +113 -0
  84. package/Tests/Server/Utils/Monitor/PerSeriesRecoveryResolution.test.ts +198 -0
  85. package/Tests/Types/Monitor/MonitorType.test.ts +1 -1
  86. package/Tests/Utils/Monitor/LatencyMatrixUtil.test.ts +111 -0
  87. package/Types/AI/AIRunStatus.ts +9 -0
  88. package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +0 -1
  89. package/Types/Dashboard/DashboardComponents/DashboardLogChartComponent.ts +8 -3
  90. package/Types/LlmLogStatus.ts +1 -0
  91. package/Types/Monitor/CriteriaFilter.ts +5 -0
  92. package/Types/Monitor/IotAlertTemplates.ts +22 -3
  93. package/Types/Monitor/LatencyMatrix.ts +27 -0
  94. package/Types/Monitor/MonitorCriteriaInstance.ts +2 -2
  95. package/Types/Monitor/MonitorMetricType.ts +10 -0
  96. package/Types/Monitor/MonitorStep.ts +36 -11
  97. package/Types/Monitor/MonitorStepNetworkDeviceMonitor.ts +55 -0
  98. package/Types/Monitor/MonitorStepSnmpMonitor.ts +8 -0
  99. package/Types/Monitor/MonitorType.ts +14 -9
  100. package/Types/Monitor/SnmpMonitor/LldpNeighbor.ts +12 -0
  101. package/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.ts +116 -0
  102. package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +29 -0
  103. package/Types/Monitor/SnmpMonitor/SnmpInterface.ts +31 -0
  104. package/Types/Monitor/SnmpMonitor/SnmpMonitorResponse.ts +24 -0
  105. package/Types/Monitor/SnmpMonitor/SnmpTrap.ts +20 -0
  106. package/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.ts +173 -0
  107. package/Types/Permission.ts +314 -0
  108. package/Types/Probe/ProbeMonitorResponse.ts +8 -0
  109. package/UI/Components/Icon/Icon.tsx +8 -6
  110. package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +2 -2
  111. package/UI/Components/MoreMenu/MoreMenu.tsx +61 -2
  112. package/UI/Components/Tabs/Tabs.tsx +10 -1
  113. package/UI/Utils/Navigation.ts +10 -1
  114. package/Utils/Dashboard/Components/DashboardLogChartComponent.ts +16 -21
  115. package/Utils/Monitor/LatencyMatrixUtil.ts +162 -0
  116. package/Utils/Monitor/MonitorMetricType.ts +71 -1
  117. package/Utils/Monitor/NetworkTopologyUtil.ts +159 -0
  118. package/Utils/Telemetry/EntityRelationship.ts +11 -0
  119. package/build/dist/Models/DatabaseModels/AIRun.js +52 -0
  120. package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
  121. package/build/dist/Models/DatabaseModels/AlertSeverity.js +6 -0
  122. package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
  123. package/build/dist/Models/DatabaseModels/IncidentSeverity.js +6 -0
  124. package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
  125. package/build/dist/Models/DatabaseModels/Index.js +16 -0
  126. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  127. package/build/dist/Models/DatabaseModels/IoTDeviceCredential.js +493 -0
  128. package/build/dist/Models/DatabaseModels/IoTDeviceCredential.js.map +1 -0
  129. package/build/dist/Models/DatabaseModels/LlmLog.js +58 -0
  130. package/build/dist/Models/DatabaseModels/LlmLog.js.map +1 -1
  131. package/build/dist/Models/DatabaseModels/LlmProvider.js +33 -0
  132. package/build/dist/Models/DatabaseModels/LlmProvider.js.map +1 -1
  133. package/build/dist/Models/DatabaseModels/NetworkDevice.js +1426 -0
  134. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -0
  135. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +738 -0
  136. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -0
  137. package/build/dist/Models/DatabaseModels/NetworkDeviceLabelRule.js +522 -0
  138. package/build/dist/Models/DatabaseModels/NetworkDeviceLabelRule.js.map +1 -0
  139. package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerRule.js +603 -0
  140. package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerRule.js.map +1 -0
  141. package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerTeam.js +503 -0
  142. package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerTeam.js.map +1 -0
  143. package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerUser.js +502 -0
  144. package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerUser.js.map +1 -0
  145. package/build/dist/Models/DatabaseModels/NetworkInterface.js +589 -0
  146. package/build/dist/Models/DatabaseModels/NetworkInterface.js.map +1 -0
  147. package/build/dist/Models/DatabaseModels/Project.js +147 -0
  148. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  149. package/build/dist/Models/DatabaseModels/TelemetryEntityRelationship.js +57 -0
  150. package/build/dist/Models/DatabaseModels/TelemetryEntityRelationship.js.map +1 -1
  151. package/build/dist/Server/API/AIInvestigationAPI.js +95 -55
  152. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  153. package/build/dist/Server/API/AlertAPI.js +5 -0
  154. package/build/dist/Server/API/AlertAPI.js.map +1 -1
  155. package/build/dist/Server/API/IncidentAPI.js +10 -0
  156. package/build/dist/Server/API/IncidentAPI.js.map +1 -1
  157. package/build/dist/Server/API/IncidentEpisodeAPI.js +5 -0
  158. package/build/dist/Server/API/IncidentEpisodeAPI.js.map +1 -1
  159. package/build/dist/Server/API/LlmProviderAPI.js +5 -7
  160. package/build/dist/Server/API/LlmProviderAPI.js.map +1 -1
  161. package/build/dist/Server/API/ScheduledMaintenanceAPI.js +5 -0
  162. package/build/dist/Server/API/ScheduledMaintenanceAPI.js.map +1 -1
  163. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783650000000-AddAdditionalParamsToLlmProvider.js +12 -0
  164. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783650000000-AddAdditionalParamsToLlmProvider.js.map +1 -0
  165. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783695782697-AddCacheTokenColumnsToLlmLog.js +14 -0
  166. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783695782697-AddCacheTokenColumnsToLlmLog.js.map +1 -0
  167. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783701585317-AddAlertInvestigationGating.js +18 -0
  168. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783701585317-AddAlertInvestigationGating.js.map +1 -0
  169. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783702431535-AddAiDailyAutonomousTokenLimitToProject.js +12 -0
  170. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783702431535-AddAiDailyAutonomousTokenLimitToProject.js.map +1 -0
  171. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783720000000-AddNetworkDeviceTables.js +51 -0
  172. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783720000000-AddNetworkDeviceTables.js.map +1 -0
  173. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783721121260-AddAttemptCountToAIRun.js +12 -0
  174. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783721121260-AddAttemptCountToAIRun.js.map +1 -0
  175. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783730000000-AddNetworkDeviceOwnersAndRules.js +101 -0
  176. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783730000000-AddNetworkDeviceOwnersAndRules.js.map +1 -0
  177. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783740000000-AddNetworkDeviceDiscoveryScan.js +18 -0
  178. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783740000000-AddNetworkDeviceDiscoveryScan.js.map +1 -0
  179. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783750000000-AddLldpNeighborsToNetworkDevice.js +12 -0
  180. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783750000000-AddLldpNeighborsToNetworkDevice.js.map +1 -0
  181. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783760576655-AddInvestigationTuningToProject.js +14 -0
  182. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783760576655-AddInvestigationTuningToProject.js.map +1 -0
  183. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783762505482-AddTelemetryEntityRelationshipMetrics.js +16 -0
  184. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783762505482-AddTelemetryEntityRelationshipMetrics.js.map +1 -0
  185. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783780000000-AddIoTDeviceCredentialTable.js +38 -0
  186. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783780000000-AddIoTDeviceCredentialTable.js.map +1 -0
  187. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783790000000-AddSnmpV3AuthColumnsToNetworkDevice.js +22 -0
  188. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783790000000-AddSnmpV3AuthColumnsToNetworkDevice.js.map +1 -0
  189. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +26 -0
  190. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  191. package/build/dist/Server/Services/AIRunService.js +33 -0
  192. package/build/dist/Server/Services/AIRunService.js.map +1 -1
  193. package/build/dist/Server/Services/AIService.js +82 -9
  194. package/build/dist/Server/Services/AIService.js.map +1 -1
  195. package/build/dist/Server/Services/IncidentService.js +14 -25
  196. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  197. package/build/dist/Server/Services/Index.js +14 -0
  198. package/build/dist/Server/Services/Index.js.map +1 -1
  199. package/build/dist/Server/Services/IoTDeviceCredentialService.js +321 -0
  200. package/build/dist/Server/Services/IoTDeviceCredentialService.js.map +1 -0
  201. package/build/dist/Server/Services/IoTDeviceService.js +49 -15
  202. package/build/dist/Server/Services/IoTDeviceService.js.map +1 -1
  203. package/build/dist/Server/Services/LlmLogService.js +29 -0
  204. package/build/dist/Server/Services/LlmLogService.js.map +1 -1
  205. package/build/dist/Server/Services/LlmProviderService.js +3 -0
  206. package/build/dist/Server/Services/LlmProviderService.js.map +1 -1
  207. package/build/dist/Server/Services/MonitorService.js +2 -1
  208. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  209. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js +9 -0
  210. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js.map +1 -0
  211. package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js +166 -0
  212. package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js.map +1 -0
  213. package/build/dist/Server/Services/NetworkDeviceLabelRuleService.js +13 -0
  214. package/build/dist/Server/Services/NetworkDeviceLabelRuleService.js.map +1 -0
  215. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +186 -0
  216. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -0
  217. package/build/dist/Server/Services/NetworkDeviceOwnerRuleService.js +13 -0
  218. package/build/dist/Server/Services/NetworkDeviceOwnerRuleService.js.map +1 -0
  219. package/build/dist/Server/Services/NetworkDeviceOwnerTeamService.js +9 -0
  220. package/build/dist/Server/Services/NetworkDeviceOwnerTeamService.js.map +1 -0
  221. package/build/dist/Server/Services/NetworkDeviceOwnerUserService.js +9 -0
  222. package/build/dist/Server/Services/NetworkDeviceOwnerUserService.js.map +1 -0
  223. package/build/dist/Server/Services/NetworkDeviceService.js +52 -0
  224. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -0
  225. package/build/dist/Server/Services/NetworkInterfaceService.js +9 -0
  226. package/build/dist/Server/Services/NetworkInterfaceService.js.map +1 -0
  227. package/build/dist/Server/Services/TelemetryEntityRelationshipService.js +22 -0
  228. package/build/dist/Server/Services/TelemetryEntityRelationshipService.js.map +1 -1
  229. package/build/dist/Server/Services/TelemetryEntityService.js +64 -2
  230. package/build/dist/Server/Services/TelemetryEntityService.js.map +1 -1
  231. package/build/dist/Server/Utils/AI/Sentinel/AlertInvestigationRunner.js +189 -9
  232. package/build/dist/Server/Utils/AI/Sentinel/AlertInvestigationRunner.js.map +1 -1
  233. package/build/dist/Server/Utils/AI/Sentinel/IncidentInvestigationRunner.js +84 -17
  234. package/build/dist/Server/Utils/AI/Sentinel/IncidentInvestigationRunner.js.map +1 -1
  235. package/build/dist/Server/Utils/AI/Sentinel/InvestigationQueue.js +428 -0
  236. package/build/dist/Server/Utils/AI/Sentinel/InvestigationQueue.js.map +1 -0
  237. package/build/dist/Server/Utils/AI/Sentinel/SentinelInvestigationEngine.js +63 -47
  238. package/build/dist/Server/Utils/AI/Sentinel/SentinelInvestigationEngine.js.map +1 -1
  239. package/build/dist/Server/Utils/AI/Toolbox/Index.js +2 -1
  240. package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
  241. package/build/dist/Server/Utils/AI/Toolbox/MetricTools.js +300 -0
  242. package/build/dist/Server/Utils/AI/Toolbox/MetricTools.js.map +1 -1
  243. package/build/dist/Server/Utils/LLM/LLMService.js +16 -0
  244. package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
  245. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +130 -2
  246. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
  247. package/build/dist/Server/Utils/Monitor/IoTDeviceAbsenceSeries.js +81 -0
  248. package/build/dist/Server/Utils/Monitor/IoTDeviceAbsenceSeries.js.map +1 -0
  249. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +18 -7
  250. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  251. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +1 -1
  252. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  253. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +25 -10
  254. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  255. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +69 -3
  256. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
  257. package/build/dist/Server/Utils/Monitor/MonitorResource.js +76 -30
  258. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  259. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +1 -1
  260. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  261. package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js +147 -0
  262. package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js.map +1 -0
  263. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +167 -0
  264. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -0
  265. package/build/dist/Server/Utils/Monitor/SnmpInterfaceRateUtil.js +93 -0
  266. package/build/dist/Server/Utils/Monitor/SnmpInterfaceRateUtil.js.map +1 -0
  267. package/build/dist/Types/AI/AIRunStatus.js +9 -0
  268. package/build/dist/Types/AI/AIRunStatus.js.map +1 -1
  269. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +0 -1
  270. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
  271. package/build/dist/Types/LlmLogStatus.js +1 -0
  272. package/build/dist/Types/LlmLogStatus.js.map +1 -1
  273. package/build/dist/Types/Monitor/CriteriaFilter.js +5 -0
  274. package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
  275. package/build/dist/Types/Monitor/IotAlertTemplates.js +7 -7
  276. package/build/dist/Types/Monitor/IotAlertTemplates.js.map +1 -1
  277. package/build/dist/Types/Monitor/LatencyMatrix.js +2 -0
  278. package/build/dist/Types/Monitor/LatencyMatrix.js.map +1 -0
  279. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +2 -2
  280. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
  281. package/build/dist/Types/Monitor/MonitorMetricType.js +9 -0
  282. package/build/dist/Types/Monitor/MonitorMetricType.js.map +1 -1
  283. package/build/dist/Types/Monitor/MonitorStep.js +22 -9
  284. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  285. package/build/dist/Types/Monitor/MonitorStepNetworkDeviceMonitor.js +36 -0
  286. package/build/dist/Types/Monitor/MonitorStepNetworkDeviceMonitor.js.map +1 -0
  287. package/build/dist/Types/Monitor/MonitorStepSnmpMonitor.js +3 -0
  288. package/build/dist/Types/Monitor/MonitorStepSnmpMonitor.js.map +1 -1
  289. package/build/dist/Types/Monitor/MonitorType.js +14 -9
  290. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  291. package/build/dist/Types/Monitor/SnmpMonitor/LldpNeighbor.js +2 -0
  292. package/build/dist/Types/Monitor/SnmpMonitor/LldpNeighbor.js.map +1 -0
  293. package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js +89 -0
  294. package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js.map +1 -0
  295. package/build/dist/Types/Monitor/SnmpMonitor/NetworkTopology.js +2 -0
  296. package/build/dist/Types/Monitor/SnmpMonitor/NetworkTopology.js.map +1 -0
  297. package/build/dist/Types/Monitor/SnmpMonitor/SnmpInterface.js +2 -0
  298. package/build/dist/Types/Monitor/SnmpMonitor/SnmpInterface.js.map +1 -0
  299. package/build/dist/Types/Monitor/SnmpMonitor/SnmpTrap.js +2 -0
  300. package/build/dist/Types/Monitor/SnmpMonitor/SnmpTrap.js.map +1 -0
  301. package/build/dist/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.js +137 -0
  302. package/build/dist/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.js.map +1 -0
  303. package/build/dist/Types/Permission.js +280 -0
  304. package/build/dist/Types/Permission.js.map +1 -1
  305. package/build/dist/UI/Components/Icon/Icon.js +8 -6
  306. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  307. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +2 -2
  308. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
  309. package/build/dist/UI/Components/MoreMenu/MoreMenu.js +44 -4
  310. package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
  311. package/build/dist/UI/Components/Tabs/Tabs.js +3 -1
  312. package/build/dist/UI/Components/Tabs/Tabs.js.map +1 -1
  313. package/build/dist/UI/Utils/Navigation.js +11 -1
  314. package/build/dist/UI/Utils/Navigation.js.map +1 -1
  315. package/build/dist/Utils/Dashboard/Components/DashboardLogChartComponent.js +17 -20
  316. package/build/dist/Utils/Dashboard/Components/DashboardLogChartComponent.js.map +1 -1
  317. package/build/dist/Utils/Monitor/LatencyMatrixUtil.js +89 -0
  318. package/build/dist/Utils/Monitor/LatencyMatrixUtil.js.map +1 -0
  319. package/build/dist/Utils/Monitor/MonitorMetricType.js +68 -1
  320. package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
  321. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +112 -0
  322. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -0
  323. package/build/dist/Utils/Telemetry/EntityRelationship.js.map +1 -1
  324. package/package.json +1 -1
@@ -205,6 +205,60 @@ export default class TelemetryEntityRelationship extends DatabaseBaseModel {
205
205
  @Column({ type: ColumnType.Date, nullable: true })
206
206
  public lastSeenAt?: Date = undefined;
207
207
 
208
+ /*
209
+ * Traffic metrics for `depends-on` edges, refreshed each run of the
210
+ * ComputeServiceDependencies cron from the most recent span window
211
+ * (~15 min). Null on co-occurrence-inferred edges, which carry no
212
+ * call semantics.
213
+ */
214
+ @ColumnAccessControl({
215
+ create: CREATE_PERMS,
216
+ read: READ_PERMS,
217
+ update: UPDATE_PERMS,
218
+ })
219
+ @TableColumn({
220
+ type: TableColumnType.Number,
221
+ required: false,
222
+ title: "Call Count",
223
+ description:
224
+ "Calls observed over this edge in the most recent computation window (depends-on edges only).",
225
+ example: "1240",
226
+ })
227
+ @Column({ type: ColumnType.Number, nullable: true })
228
+ public callCount?: number = undefined;
229
+
230
+ @ColumnAccessControl({
231
+ create: CREATE_PERMS,
232
+ read: READ_PERMS,
233
+ update: UPDATE_PERMS,
234
+ })
235
+ @TableColumn({
236
+ type: TableColumnType.Number,
237
+ required: false,
238
+ title: "Error Count",
239
+ description:
240
+ "Errored calls observed over this edge in the most recent computation window (depends-on edges only).",
241
+ example: "12",
242
+ })
243
+ @Column({ type: ColumnType.Number, nullable: true })
244
+ public errorCount?: number = undefined;
245
+
246
+ @ColumnAccessControl({
247
+ create: CREATE_PERMS,
248
+ read: READ_PERMS,
249
+ update: UPDATE_PERMS,
250
+ })
251
+ @TableColumn({
252
+ type: TableColumnType.Number,
253
+ required: false,
254
+ title: "Average Duration (ms)",
255
+ description:
256
+ "Average call duration in milliseconds over this edge in the most recent computation window (depends-on edges only).",
257
+ example: "38",
258
+ })
259
+ @Column({ type: ColumnType.Number, nullable: true })
260
+ public avgDurationMs?: number = undefined;
261
+
208
262
  @ColumnAccessControl({ create: CREATE_PERMS, read: READ_PERMS, update: [] })
209
263
  @TableColumn({
210
264
  manyToOneRelationColumn: "createdByUserId",
@@ -12,13 +12,16 @@ import ObjectID from "../../Types/ObjectID";
12
12
  import BadDataException from "../../Types/Exception/BadDataException";
13
13
  import NotAuthorizedException from "../../Types/Exception/NotAuthorizedException";
14
14
  import SortOrder from "../../Types/BaseDatabase/SortOrder";
15
+ import Query from "../../Types/BaseDatabase/Query";
15
16
  import { JSONArray, JSONObject } from "../../Types/JSON";
16
17
  import AIRunType from "../../Types/AI/AIRunType";
17
18
  import AIRun from "../../Models/DatabaseModels/AIRun";
18
19
  import AIRunEvent from "../../Models/DatabaseModels/AIRunEvent";
19
20
  import Incident from "../../Models/DatabaseModels/Incident";
21
+ import Alert from "../../Models/DatabaseModels/Alert";
20
22
  import BaseModel from "../../Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
21
23
  import IncidentService from "../Services/IncidentService";
24
+ import AlertService from "../Services/AlertService";
22
25
  import AIRunService from "../Services/AIRunService";
23
26
  import AIRunEventService from "../Services/AIRunEventService";
24
27
 
@@ -28,14 +31,96 @@ const MAX_EVENTS: number = 500;
28
31
 
29
32
  /*
30
33
  * Returns the latest Sentinel investigation (the AIRun + its ordered
31
- * AIRunEvents) for an incident, so the dashboard can render a live "watch it
32
- * think" panel.
34
+ * AIRunEvents) for an incident or alert, so the dashboard can render a live
35
+ * "watch it think" panel.
33
36
  *
34
37
  * Investigation runs are system-authored (userId = null) and are therefore
35
38
  * hidden by the per-user privacy pin on the generic AIRun / AIRunEvent CRUD. So
36
- * we gate access explicitly here: first confirm the caller can read the incident
37
- * under THEIR permissions, then read the run + events as root.
39
+ * we gate access explicitly here: first confirm the caller can read the
40
+ * incident/alert under THEIR permissions, then read the run + events as root.
38
41
  */
42
+
43
+ async function getLoggedInProps(
44
+ req: ExpressRequest,
45
+ ): Promise<DatabaseCommonInteractionProps> {
46
+ const props: DatabaseCommonInteractionProps =
47
+ await CommonAPI.getDatabaseCommonInteractionProps(req);
48
+
49
+ if (!props.userId) {
50
+ throw new NotAuthorizedException("A logged-in user session is required.");
51
+ }
52
+
53
+ return props;
54
+ }
55
+
56
+ /*
57
+ * Read the latest investigation run + its events as root (bypasses the
58
+ * per-user pin) and send them. Callers must have already access-checked the
59
+ * subject under the USER's permissions.
60
+ */
61
+ async function sendLatestInvestigation(
62
+ req: ExpressRequest,
63
+ res: ExpressResponse,
64
+ runQuery: Query<AIRun>,
65
+ ): Promise<void> {
66
+ const runs: Array<AIRun> = await AIRunService.findBy({
67
+ query: runQuery,
68
+ select: {
69
+ _id: true,
70
+ status: true,
71
+ startedAt: true,
72
+ completedAt: true,
73
+ errorMessage: true,
74
+ llmCallCount: true,
75
+ toolCallCount: true,
76
+ totalTokens: true,
77
+ createdAt: true,
78
+ },
79
+ sort: { createdAt: SortOrder.Descending },
80
+ limit: 1,
81
+ skip: 0,
82
+ props: { isRoot: true },
83
+ });
84
+
85
+ const run: AIRun | undefined = runs[0];
86
+
87
+ if (!run) {
88
+ Response.sendJsonObjectResponse(req, res, {
89
+ run: null,
90
+ events: [],
91
+ });
92
+ return;
93
+ }
94
+
95
+ const events: Array<AIRunEvent> = await AIRunEventService.findBy({
96
+ query: { aiRunId: run.id! },
97
+ select: {
98
+ _id: true,
99
+ sequence: true,
100
+ eventType: true,
101
+ toolName: true,
102
+ resultSummary: true,
103
+ createdAt: true,
104
+ },
105
+ sort: { sequence: SortOrder.Ascending },
106
+ limit: MAX_EVENTS,
107
+ skip: 0,
108
+ props: { isRoot: true },
109
+ });
110
+
111
+ const runJson: JSONObject | undefined = BaseModel.toJSONArray(
112
+ [run],
113
+ AIRun,
114
+ )[0];
115
+
116
+ const eventsJson: JSONArray = BaseModel.toJSONArray(events, AIRunEvent);
117
+
118
+ Response.sendJsonObjectResponse(req, res, {
119
+ run: runJson || null,
120
+ events: eventsJson,
121
+ });
122
+ }
123
+
39
124
  router.post(
40
125
  "/ai-investigation/incident",
41
126
  UserMiddleware.getUserMiddleware,
@@ -45,14 +130,7 @@ router.post(
45
130
  next: NextFunction,
46
131
  ): Promise<void> => {
47
132
  try {
48
- const props: DatabaseCommonInteractionProps =
49
- await CommonAPI.getDatabaseCommonInteractionProps(req);
50
-
51
- if (!props.userId) {
52
- throw new NotAuthorizedException(
53
- "A logged-in user session is required.",
54
- );
55
- }
133
+ const props: DatabaseCommonInteractionProps = await getLoggedInProps(req);
56
134
 
57
135
  const incidentIdString: string | undefined = req.body["incidentId"] as
58
136
  | string
@@ -77,65 +155,55 @@ router.post(
77
155
  );
78
156
  }
79
157
 
80
- // Read the latest investigation run as root (bypasses the per-user pin).
81
- const runs: Array<AIRun> = await AIRunService.findBy({
82
- query: {
83
- triggeredByIncidentId: incidentId,
84
- runType: AIRunType.Investigation,
85
- },
86
- select: {
87
- _id: true,
88
- status: true,
89
- startedAt: true,
90
- completedAt: true,
91
- errorMessage: true,
92
- llmCallCount: true,
93
- toolCallCount: true,
94
- totalTokens: true,
95
- createdAt: true,
96
- },
97
- sort: { createdAt: SortOrder.Descending },
98
- limit: 1,
99
- skip: 0,
100
- props: { isRoot: true },
158
+ await sendLatestInvestigation(req, res, {
159
+ triggeredByIncidentId: incidentId,
160
+ runType: AIRunType.Investigation,
101
161
  });
162
+ return;
163
+ } catch (err) {
164
+ next(err);
165
+ return;
166
+ }
167
+ },
168
+ );
169
+
170
+ router.post(
171
+ "/ai-investigation/alert",
172
+ UserMiddleware.getUserMiddleware,
173
+ async (
174
+ req: ExpressRequest,
175
+ res: ExpressResponse,
176
+ next: NextFunction,
177
+ ): Promise<void> => {
178
+ try {
179
+ const props: DatabaseCommonInteractionProps = await getLoggedInProps(req);
102
180
 
103
- const run: AIRun | undefined = runs[0];
181
+ const alertIdString: string | undefined = req.body["alertId"] as
182
+ | string
183
+ | undefined;
104
184
 
105
- if (!run) {
106
- Response.sendJsonObjectResponse(req, res, {
107
- run: null,
108
- events: [],
109
- });
110
- return;
185
+ if (!alertIdString) {
186
+ throw new BadDataException("alertId is required.");
111
187
  }
112
188
 
113
- const events: Array<AIRunEvent> = await AIRunEventService.findBy({
114
- query: { aiRunId: run.id! },
115
- select: {
116
- _id: true,
117
- sequence: true,
118
- eventType: true,
119
- toolName: true,
120
- resultSummary: true,
121
- createdAt: true,
122
- },
123
- sort: { sequence: SortOrder.Ascending },
124
- limit: MAX_EVENTS,
125
- skip: 0,
126
- props: { isRoot: true },
127
- });
189
+ const alertId: ObjectID = new ObjectID(alertIdString);
128
190
 
129
- const runJson: JSONObject | undefined = BaseModel.toJSONArray(
130
- [run],
131
- AIRun,
132
- )[0];
191
+ // Access check under the USER's permissions (null when not allowed).
192
+ const alert: Alert | null = await AlertService.findOneById({
193
+ id: alertId,
194
+ select: { _id: true },
195
+ props,
196
+ });
133
197
 
134
- const eventsJson: JSONArray = BaseModel.toJSONArray(events, AIRunEvent);
198
+ if (!alert) {
199
+ throw new BadDataException(
200
+ "Alert not found (or you do not have access to it).",
201
+ );
202
+ }
135
203
 
136
- Response.sendJsonObjectResponse(req, res, {
137
- run: runJson || null,
138
- events: eventsJson,
204
+ await sendLatestInvestigation(req, res, {
205
+ triggeredByAlertId: alertId,
206
+ runType: AIRunType.Investigation,
139
207
  });
140
208
  return;
141
209
  } catch (err) {
@@ -123,6 +123,11 @@ export default class AlertAPI extends BaseAPI<Alert, AlertServiceType> {
123
123
  messages: aiContext.messages,
124
124
  maxTokens: 4096,
125
125
  temperature: 0.2,
126
+ /*
127
+ * G8: the prompt embeds incident/alert/maintenance context whose read
128
+ * ACLs are narrower than LlmLog's — do not store previews.
129
+ */
130
+ storeContentPreviews: false,
126
131
  };
127
132
 
128
133
  if (props.userId) {
@@ -231,6 +231,11 @@ export default class IncidentAPI extends BaseAPI<
231
231
  messages: aiContext.messages,
232
232
  maxTokens: 8192,
233
233
  temperature: 0.2,
234
+ /*
235
+ * G8: the prompt embeds incident/alert/maintenance context whose read
236
+ * ACLs are narrower than LlmLog's — do not store previews.
237
+ */
238
+ storeContentPreviews: false,
234
239
  };
235
240
 
236
241
  if (props.userId) {
@@ -348,6 +353,11 @@ export default class IncidentAPI extends BaseAPI<
348
353
  messages: aiContext.messages,
349
354
  maxTokens: 4096,
350
355
  temperature: 0.2,
356
+ /*
357
+ * G8: the prompt embeds incident/alert/maintenance context whose read
358
+ * ACLs are narrower than LlmLog's — do not store previews.
359
+ */
360
+ storeContentPreviews: false,
351
361
  };
352
362
 
353
363
  if (props.userId) {
@@ -134,6 +134,11 @@ export default class IncidentEpisodeAPI extends BaseAPI<
134
134
  messages: aiContext.messages,
135
135
  maxTokens: 8192,
136
136
  temperature: 0.2,
137
+ /*
138
+ * G8: the prompt embeds incident/alert/maintenance context whose read
139
+ * ACLs are narrower than LlmLog's — do not store previews.
140
+ */
141
+ storeContentPreviews: false,
137
142
  };
138
143
 
139
144
  if (props.userId) {
@@ -152,6 +152,7 @@ export default class LlmProviderAPI extends BaseAPI<
152
152
  apiKey: true,
153
153
  baseUrl: true,
154
154
  modelName: true,
155
+ additionalParams: true,
155
156
  },
156
157
  props: {
157
158
  isRoot: true,
@@ -191,6 +192,9 @@ export default class LlmProviderAPI extends BaseAPI<
191
192
  temperature: 0,
192
193
  maxTokens: 16,
193
194
  llmProviderConfig: llmProviderConfig,
195
+ ...(provider.additionalParams
196
+ ? { additionalParams: provider.additionalParams }
197
+ : {}),
194
198
  });
195
199
  } catch (err) {
196
200
  logger.error(err);
@@ -148,6 +148,11 @@ export default class ScheduledMaintenanceAPI extends BaseAPI<
148
148
  messages: aiContext.messages,
149
149
  maxTokens: 4096,
150
150
  temperature: 0.2,
151
+ /*
152
+ * G8: the prompt embeds incident/alert/maintenance context whose read
153
+ * ACLs are narrower than LlmLog's — do not store previews.
154
+ */
155
+ storeContentPreviews: false,
151
156
  };
152
157
 
153
158
  if (props.userId) {
@@ -0,0 +1,19 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ export class AddAdditionalParamsToLlmProvider1783650000000
4
+ implements MigrationInterface
5
+ {
6
+ public name = "AddAdditionalParamsToLlmProvider1783650000000";
7
+
8
+ public async up(queryRunner: QueryRunner): Promise<void> {
9
+ await queryRunner.query(
10
+ `ALTER TABLE "LlmProvider" ADD COLUMN IF NOT EXISTS "additionalParams" jsonb`,
11
+ );
12
+ }
13
+
14
+ public async down(queryRunner: QueryRunner): Promise<void> {
15
+ await queryRunner.query(
16
+ `ALTER TABLE "LlmProvider" DROP COLUMN IF EXISTS "additionalParams"`,
17
+ );
18
+ }
19
+ }
@@ -0,0 +1,25 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ export class AddCacheTokenColumnsToLlmLog1783695782697
4
+ implements MigrationInterface
5
+ {
6
+ public name = "AddCacheTokenColumnsToLlmLog1783695782697";
7
+
8
+ public async up(queryRunner: QueryRunner): Promise<void> {
9
+ await queryRunner.query(
10
+ `ALTER TABLE "LlmLog" ADD "cachedInputTokens" integer NOT NULL DEFAULT '0'`,
11
+ );
12
+ await queryRunner.query(
13
+ `ALTER TABLE "LlmLog" ADD "cacheCreationTokens" integer NOT NULL DEFAULT '0'`,
14
+ );
15
+ }
16
+
17
+ public async down(queryRunner: QueryRunner): Promise<void> {
18
+ await queryRunner.query(
19
+ `ALTER TABLE "LlmLog" DROP COLUMN "cacheCreationTokens"`,
20
+ );
21
+ await queryRunner.query(
22
+ `ALTER TABLE "LlmLog" DROP COLUMN "cachedInputTokens"`,
23
+ );
24
+ }
25
+ }
@@ -0,0 +1,31 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ export class AddAlertInvestigationGating1783701585317
4
+ implements MigrationInterface
5
+ {
6
+ public name = "AddAlertInvestigationGating1783701585317";
7
+
8
+ public async up(queryRunner: QueryRunner): Promise<void> {
9
+ await queryRunner.query(
10
+ `ALTER TABLE "Project" ADD "alertInvestigationMinimumSeverityId" uuid`,
11
+ );
12
+ await queryRunner.query(
13
+ `ALTER TABLE "Project" ADD CONSTRAINT "FK_Project_alertInvestigationMinimumSeverityId" FOREIGN KEY ("alertInvestigationMinimumSeverityId") REFERENCES "AlertSeverity"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
14
+ );
15
+ await queryRunner.query(`ALTER TABLE "AIRun" ADD "monitorId" uuid`);
16
+ await queryRunner.query(
17
+ `CREATE INDEX "IDX_AIRun_monitorId" ON "AIRun" ("monitorId")`,
18
+ );
19
+ }
20
+
21
+ public async down(queryRunner: QueryRunner): Promise<void> {
22
+ await queryRunner.query(`DROP INDEX "IDX_AIRun_monitorId"`);
23
+ await queryRunner.query(`ALTER TABLE "AIRun" DROP COLUMN "monitorId"`);
24
+ await queryRunner.query(
25
+ `ALTER TABLE "Project" DROP CONSTRAINT "FK_Project_alertInvestigationMinimumSeverityId"`,
26
+ );
27
+ await queryRunner.query(
28
+ `ALTER TABLE "Project" DROP COLUMN "alertInvestigationMinimumSeverityId"`,
29
+ );
30
+ }
31
+ }
@@ -0,0 +1,19 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ export class AddAiDailyAutonomousTokenLimitToProject1783702431535
4
+ implements MigrationInterface
5
+ {
6
+ public name = "AddAiDailyAutonomousTokenLimitToProject1783702431535";
7
+
8
+ public async up(queryRunner: QueryRunner): Promise<void> {
9
+ await queryRunner.query(
10
+ `ALTER TABLE "Project" ADD "aiDailyAutonomousTokenLimit" integer`,
11
+ );
12
+ }
13
+
14
+ public async down(queryRunner: QueryRunner): Promise<void> {
15
+ await queryRunner.query(
16
+ `ALTER TABLE "Project" DROP COLUMN "aiDailyAutonomousTokenLimit"`,
17
+ );
18
+ }
19
+ }
@@ -0,0 +1,105 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ export class AddNetworkDeviceTables1783720000000 implements MigrationInterface {
4
+ public name = "AddNetworkDeviceTables1783720000000";
5
+
6
+ public async up(queryRunner: QueryRunner): Promise<void> {
7
+ await queryRunner.query(
8
+ `CREATE TABLE "NetworkDevice" ("_id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "version" integer NOT NULL, "projectId" uuid NOT NULL, "name" character varying(100) NOT NULL, "slug" character varying(100) NOT NULL, "description" character varying(500), "hostname" character varying(100) NOT NULL, "probeId" uuid, "snmpVersion" character varying(100) DEFAULT '2c', "snmpCommunityString" character varying(100), "snmpPort" integer DEFAULT '161', "snmpV3Auth" jsonb, "sysDescr" character varying(500), "sysName" character varying(100), "lastSeenAt" TIMESTAMP WITH TIME ZONE, "interfacesTotal" integer DEFAULT '0', "interfacesUp" integer DEFAULT '0', "interfacesDown" integer DEFAULT '0', "createdByUserId" uuid, "isArchived" boolean NOT NULL DEFAULT false, "archivedAt" TIMESTAMP WITH TIME ZONE, "archivedByUserId" uuid, "deletedByUserId" uuid, CONSTRAINT "PK_network_device_id" PRIMARY KEY ("_id"))`,
9
+ );
10
+ await queryRunner.query(
11
+ `CREATE INDEX "IDX_network_device_projectId" ON "NetworkDevice" ("projectId")`,
12
+ );
13
+ await queryRunner.query(
14
+ `CREATE INDEX "IDX_network_device_projectId_isArchived" ON "NetworkDevice" ("projectId", "isArchived")`,
15
+ );
16
+ await queryRunner.query(
17
+ `CREATE INDEX "IDX_network_device_hostname" ON "NetworkDevice" ("hostname")`,
18
+ );
19
+ await queryRunner.query(
20
+ `CREATE UNIQUE INDEX "IDX_network_device_slug" ON "NetworkDevice" ("slug")`,
21
+ );
22
+ await queryRunner.query(
23
+ `ALTER TABLE "NetworkDevice" ADD CONSTRAINT "FK_network_device_projectId" FOREIGN KEY ("projectId") REFERENCES "Project"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
24
+ );
25
+ await queryRunner.query(
26
+ `ALTER TABLE "NetworkDevice" ADD CONSTRAINT "FK_network_device_probeId" FOREIGN KEY ("probeId") REFERENCES "Probe"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
27
+ );
28
+ await queryRunner.query(
29
+ `ALTER TABLE "NetworkDevice" ADD CONSTRAINT "FK_network_device_createdByUserId" FOREIGN KEY ("createdByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
30
+ );
31
+ await queryRunner.query(
32
+ `ALTER TABLE "NetworkDevice" ADD CONSTRAINT "FK_network_device_archivedByUserId" FOREIGN KEY ("archivedByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
33
+ );
34
+ await queryRunner.query(
35
+ `ALTER TABLE "NetworkDevice" ADD CONSTRAINT "FK_network_device_deletedByUserId" FOREIGN KEY ("deletedByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
36
+ );
37
+
38
+ // Label join table
39
+ await queryRunner.query(
40
+ `CREATE TABLE "NetworkDeviceLabel" ("networkDeviceId" uuid NOT NULL, "labelId" uuid NOT NULL, CONSTRAINT "PK_network_device_label" PRIMARY KEY ("networkDeviceId", "labelId"))`,
41
+ );
42
+ await queryRunner.query(
43
+ `CREATE INDEX "IDX_network_device_label_networkDeviceId" ON "NetworkDeviceLabel" ("networkDeviceId")`,
44
+ );
45
+ await queryRunner.query(
46
+ `CREATE INDEX "IDX_network_device_label_labelId" ON "NetworkDeviceLabel" ("labelId")`,
47
+ );
48
+ await queryRunner.query(
49
+ `ALTER TABLE "NetworkDeviceLabel" ADD CONSTRAINT "FK_network_device_label_networkDeviceId" FOREIGN KEY ("networkDeviceId") REFERENCES "NetworkDevice"("_id") ON DELETE CASCADE ON UPDATE CASCADE`,
50
+ );
51
+ await queryRunner.query(
52
+ `ALTER TABLE "NetworkDeviceLabel" ADD CONSTRAINT "FK_network_device_label_labelId" FOREIGN KEY ("labelId") REFERENCES "Label"("_id") ON DELETE CASCADE ON UPDATE CASCADE`,
53
+ );
54
+
55
+ // Interfaces
56
+ await queryRunner.query(
57
+ `CREATE TABLE "NetworkInterface" ("_id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "version" integer NOT NULL, "projectId" uuid NOT NULL, "networkDeviceId" uuid NOT NULL, "interfaceIndex" integer NOT NULL, "name" character varying(100) NOT NULL, "alias" character varying(100), "isMonitored" boolean NOT NULL DEFAULT true, "isOperationallyUp" boolean, "isAdministrativelyUp" boolean, "speedInMbps" decimal, "inRateMbps" decimal, "outRateMbps" decimal, "utilizationPercent" decimal, "errorsPerSecond" decimal, "lastSeenAt" TIMESTAMP WITH TIME ZONE, "createdByUserId" uuid, "deletedByUserId" uuid, CONSTRAINT "PK_network_interface_id" PRIMARY KEY ("_id"))`,
58
+ );
59
+ await queryRunner.query(
60
+ `CREATE INDEX "IDX_network_interface_projectId" ON "NetworkInterface" ("projectId")`,
61
+ );
62
+ await queryRunner.query(
63
+ `CREATE INDEX "IDX_network_interface_networkDeviceId" ON "NetworkInterface" ("networkDeviceId")`,
64
+ );
65
+ await queryRunner.query(
66
+ `CREATE INDEX "IDX_network_interface_projectId_networkDeviceId" ON "NetworkInterface" ("projectId", "networkDeviceId")`,
67
+ );
68
+ /*
69
+ * The upsert path looks interfaces up by (device, ifIndex); enforce
70
+ * uniqueness at the DB level for soft-delete-aware rows.
71
+ */
72
+ await queryRunner.query(
73
+ `CREATE UNIQUE INDEX "IDX_network_interface_device_ifindex" ON "NetworkInterface" ("networkDeviceId", "interfaceIndex") WHERE "deletedAt" IS NULL`,
74
+ );
75
+ await queryRunner.query(
76
+ `ALTER TABLE "NetworkInterface" ADD CONSTRAINT "FK_network_interface_projectId" FOREIGN KEY ("projectId") REFERENCES "Project"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
77
+ );
78
+ await queryRunner.query(
79
+ `ALTER TABLE "NetworkInterface" ADD CONSTRAINT "FK_network_interface_networkDeviceId" FOREIGN KEY ("networkDeviceId") REFERENCES "NetworkDevice"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
80
+ );
81
+ await queryRunner.query(
82
+ `ALTER TABLE "NetworkInterface" ADD CONSTRAINT "FK_network_interface_createdByUserId" FOREIGN KEY ("createdByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
83
+ );
84
+ await queryRunner.query(
85
+ `ALTER TABLE "NetworkInterface" ADD CONSTRAINT "FK_network_interface_deletedByUserId" FOREIGN KEY ("deletedByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
86
+ );
87
+
88
+ /*
89
+ * SNMP monitor type retirement: the monitor type was replaced by
90
+ * Network Device monitors backed by NetworkDevice resources. The few
91
+ * existing SNMP monitors are soft-deleted (customers were notified);
92
+ * their rows remain recoverable but stop being scheduled or listed.
93
+ */
94
+ await queryRunner.query(
95
+ `UPDATE "Monitor" SET "deletedAt" = now() WHERE "monitorType" = 'SNMP' AND "deletedAt" IS NULL`,
96
+ );
97
+ }
98
+
99
+ public async down(queryRunner: QueryRunner): Promise<void> {
100
+ await queryRunner.query(`DROP TABLE IF EXISTS "NetworkInterface"`);
101
+ await queryRunner.query(`DROP TABLE IF EXISTS "NetworkDeviceLabel"`);
102
+ await queryRunner.query(`DROP TABLE IF EXISTS "NetworkDevice"`);
103
+ // Soft-deleted SNMP monitors are not restored on rollback.
104
+ }
105
+ }
@@ -0,0 +1,15 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ export class AddAttemptCountToAIRun1783721121260 implements MigrationInterface {
4
+ public name = "AddAttemptCountToAIRun1783721121260";
5
+
6
+ public async up(queryRunner: QueryRunner): Promise<void> {
7
+ await queryRunner.query(
8
+ `ALTER TABLE "AIRun" ADD "attemptCount" integer NOT NULL DEFAULT '0'`,
9
+ );
10
+ }
11
+
12
+ public async down(queryRunner: QueryRunner): Promise<void> {
13
+ await queryRunner.query(`ALTER TABLE "AIRun" DROP COLUMN "attemptCount"`);
14
+ }
15
+ }