@oneuptime/common 11.0.2 → 11.0.3

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 (344) hide show
  1. package/Models/DatabaseModels/Alert.ts +166 -0
  2. package/Models/DatabaseModels/AlertLabelRule.ts +38 -0
  3. package/Models/DatabaseModels/AlertOwnerRule.ts +38 -0
  4. package/Models/DatabaseModels/DockerSwarmCluster.ts +989 -0
  5. package/Models/DatabaseModels/DockerSwarmClusterLabelRule.ts +514 -0
  6. package/Models/DatabaseModels/DockerSwarmClusterOwnerRule.ts +596 -0
  7. package/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.ts +487 -0
  8. package/Models/DatabaseModels/DockerSwarmClusterOwnerUser.ts +486 -0
  9. package/Models/DatabaseModels/DockerSwarmResource.ts +750 -0
  10. package/Models/DatabaseModels/Incident.ts +166 -0
  11. package/Models/DatabaseModels/IncidentLabelRule.ts +38 -0
  12. package/Models/DatabaseModels/IncidentOwnerRule.ts +38 -0
  13. package/Models/DatabaseModels/IncidentTemplate.ts +56 -0
  14. package/Models/DatabaseModels/Index.ts +24 -0
  15. package/Models/DatabaseModels/PodmanHost.ts +859 -0
  16. package/Models/DatabaseModels/PodmanHostLabelRule.ts +514 -0
  17. package/Models/DatabaseModels/PodmanHostOwnerRule.ts +596 -0
  18. package/Models/DatabaseModels/PodmanHostOwnerTeam.ts +487 -0
  19. package/Models/DatabaseModels/PodmanHostOwnerUser.ts +486 -0
  20. package/Models/DatabaseModels/PodmanResource.ts +498 -0
  21. package/Models/DatabaseModels/ScheduledMaintenance.ts +110 -0
  22. package/Models/DatabaseModels/ScheduledMaintenanceLabelRule.ts +38 -0
  23. package/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.ts +38 -0
  24. package/Models/DatabaseModels/ScheduledMaintenanceTemplate.ts +56 -0
  25. package/Models/DatabaseModels/TelemetryException.ts +2 -0
  26. package/Server/API/DashboardAPI.ts +89 -0
  27. package/Server/API/DockerSwarmResourceAPI.ts +137 -0
  28. package/Server/API/TelemetryAPI.ts +8 -1
  29. package/Server/Infrastructure/Postgres/SchemaMigrations/1781587937032-MigrationName.ts +3199 -0
  30. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
  31. package/Server/Services/AlertLabelRuleEngineService.ts +29 -0
  32. package/Server/Services/AlertOwnerRuleEngineService.ts +67 -0
  33. package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +214 -0
  34. package/Server/Services/DockerSwarmClusterLabelRuleService.ts +14 -0
  35. package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +232 -0
  36. package/Server/Services/DockerSwarmClusterOwnerRuleService.ts +14 -0
  37. package/Server/Services/DockerSwarmClusterOwnerTeamService.ts +10 -0
  38. package/Server/Services/DockerSwarmClusterOwnerUserService.ts +10 -0
  39. package/Server/Services/DockerSwarmClusterService.ts +404 -0
  40. package/Server/Services/DockerSwarmResourceService.ts +381 -0
  41. package/Server/Services/ExceptionAggregationService.ts +1 -0
  42. package/Server/Services/IncidentLabelRuleEngineService.ts +27 -0
  43. package/Server/Services/IncidentOwnerRuleEngineService.ts +67 -0
  44. package/Server/Services/IncidentService.ts +11 -0
  45. package/Server/Services/Index.ts +14 -0
  46. package/Server/Services/LogAggregationService.ts +1 -0
  47. package/Server/Services/MetricAggregationService.ts +1 -0
  48. package/Server/Services/OpenTelemetryIngestService.ts +37 -0
  49. package/Server/Services/PodmanHostLabelRuleEngineService.ts +198 -0
  50. package/Server/Services/PodmanHostLabelRuleService.ts +14 -0
  51. package/Server/Services/PodmanHostOwnerRuleEngineService.ts +216 -0
  52. package/Server/Services/PodmanHostOwnerRuleService.ts +14 -0
  53. package/Server/Services/PodmanHostOwnerTeamService.ts +10 -0
  54. package/Server/Services/PodmanHostOwnerUserService.ts +10 -0
  55. package/Server/Services/PodmanHostService.ts +368 -0
  56. package/Server/Services/PodmanResourceService.ts +310 -0
  57. package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +29 -0
  58. package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +67 -0
  59. package/Server/Services/TelemetryUsageBillingService.ts +18 -0
  60. package/Server/Services/TraceAggregationService.ts +1 -0
  61. package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +13 -0
  62. package/Server/Utils/Monitor/MonitorAlert.ts +10 -0
  63. package/Server/Utils/Monitor/MonitorClusterContext.ts +35 -6
  64. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +306 -0
  65. package/Server/Utils/Monitor/MonitorIncident.ts +45 -0
  66. package/Server/Utils/Monitor/MonitorMaintenanceSuppression.ts +17 -0
  67. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +3 -0
  68. package/Server/Utils/Monitor/SeriesResourceLabels.ts +26 -0
  69. package/Server/Utils/Telemetry/ResourceFacetResolver.ts +49 -0
  70. package/Server/Utils/Telemetry/Telemetry.ts +10 -0
  71. package/Server/Utils/Telemetry/TelemetryEntity.ts +22 -0
  72. package/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.ts +1 -0
  73. package/Tests/Types/DockerSwarm/DockerSwarmInventoryExtractor.test.ts +667 -0
  74. package/Tests/Types/Monitor/DockerSwarmAlertTemplates.test.ts +528 -0
  75. package/Types/Dashboard/DashboardComponentType.ts +7 -0
  76. package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +2 -0
  77. package/Types/Dashboard/DashboardComponents/DashboardDockerSwarmNodeListComponent.ts +17 -0
  78. package/Types/Dashboard/DashboardComponents/DashboardDockerSwarmServiceListComponent.ts +17 -0
  79. package/Types/Dashboard/DashboardComponents/DashboardPodmanContainerListComponent.ts +16 -0
  80. package/Types/Dashboard/DashboardComponents/DashboardPodmanHostListComponent.ts +15 -0
  81. package/Types/Dashboard/DashboardComponents/DashboardPodmanImageListComponent.ts +16 -0
  82. package/Types/Dashboard/DashboardComponents/DashboardPodmanNetworkListComponent.ts +15 -0
  83. package/Types/Dashboard/DashboardComponents/DashboardPodmanVolumeListComponent.ts +15 -0
  84. package/Types/Dashboard/DashboardTemplates.ts +194 -0
  85. package/Types/DockerSwarm/DockerSwarmInventoryExtractor.ts +452 -0
  86. package/Types/Icon/IconProp.ts +1 -0
  87. package/Types/Monitor/DockerSwarmAlertTemplates.ts +461 -0
  88. package/Types/Monitor/DockerSwarmMetricCatalog.ts +139 -0
  89. package/Types/Monitor/HostAlertTemplates.ts +455 -0
  90. package/Types/Monitor/HostMetricCatalog.ts +177 -0
  91. package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +21 -0
  92. package/Types/Monitor/MonitorStep.ts +99 -0
  93. package/Types/Monitor/MonitorStepDockerSwarmMonitor.ts +74 -0
  94. package/Types/Monitor/MonitorStepHostMonitor.ts +30 -0
  95. package/Types/Monitor/MonitorStepPodmanMonitor.ts +38 -0
  96. package/Types/Monitor/MonitorType.ts +42 -0
  97. package/Types/Monitor/PodmanAlertTemplates.ts +507 -0
  98. package/Types/Monitor/PodmanMetricCatalog.ts +226 -0
  99. package/Types/Permission.ts +465 -4
  100. package/Types/Podman/PodmanInventoryExtractor.ts +343 -0
  101. package/Types/Telemetry/EntityType.ts +12 -0
  102. package/Types/Telemetry/ServiceType.ts +2 -0
  103. package/UI/Components/Icon/Icon.tsx +57 -0
  104. package/UI/Components/LogsViewer/LogsViewer.tsx +44 -1
  105. package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +28 -0
  106. package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +6 -0
  107. package/UI/Utils/TelemetryService.ts +1 -0
  108. package/Utils/Dashboard/Components/DashboardDockerSwarmNodeListComponent.ts +70 -0
  109. package/Utils/Dashboard/Components/DashboardDockerSwarmResourceListShared.ts +61 -0
  110. package/Utils/Dashboard/Components/DashboardDockerSwarmServiceListComponent.ts +71 -0
  111. package/Utils/Dashboard/Components/DashboardPodmanContainerListComponent.ts +100 -0
  112. package/Utils/Dashboard/Components/DashboardPodmanHostListComponent.ts +88 -0
  113. package/Utils/Dashboard/Components/DashboardPodmanImageListComponent.ts +97 -0
  114. package/Utils/Dashboard/Components/DashboardPodmanNetworkListComponent.ts +87 -0
  115. package/Utils/Dashboard/Components/DashboardPodmanVolumeListComponent.ts +87 -0
  116. package/Utils/Dashboard/Components/Index.ts +51 -0
  117. package/Utils/Telemetry/EntityKey.ts +18 -0
  118. package/build/dist/Models/DatabaseModels/Alert.js +162 -0
  119. package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
  120. package/build/dist/Models/DatabaseModels/AlertLabelRule.js +39 -0
  121. package/build/dist/Models/DatabaseModels/AlertLabelRule.js.map +1 -1
  122. package/build/dist/Models/DatabaseModels/AlertOwnerRule.js +39 -0
  123. package/build/dist/Models/DatabaseModels/AlertOwnerRule.js.map +1 -1
  124. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js +1018 -0
  125. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js.map +1 -0
  126. package/build/dist/Models/DatabaseModels/DockerSwarmClusterLabelRule.js +522 -0
  127. package/build/dist/Models/DatabaseModels/DockerSwarmClusterLabelRule.js.map +1 -0
  128. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerRule.js +603 -0
  129. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerRule.js.map +1 -0
  130. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.js +503 -0
  131. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.js.map +1 -0
  132. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerUser.js +502 -0
  133. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerUser.js.map +1 -0
  134. package/build/dist/Models/DatabaseModels/DockerSwarmResource.js +787 -0
  135. package/build/dist/Models/DatabaseModels/DockerSwarmResource.js.map +1 -0
  136. package/build/dist/Models/DatabaseModels/Incident.js +162 -0
  137. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  138. package/build/dist/Models/DatabaseModels/IncidentLabelRule.js +39 -0
  139. package/build/dist/Models/DatabaseModels/IncidentLabelRule.js.map +1 -1
  140. package/build/dist/Models/DatabaseModels/IncidentOwnerRule.js +39 -0
  141. package/build/dist/Models/DatabaseModels/IncidentOwnerRule.js.map +1 -1
  142. package/build/dist/Models/DatabaseModels/IncidentTemplate.js +54 -0
  143. package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
  144. package/build/dist/Models/DatabaseModels/Index.js +24 -0
  145. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  146. package/build/dist/Models/DatabaseModels/PodmanHost.js +885 -0
  147. package/build/dist/Models/DatabaseModels/PodmanHost.js.map +1 -0
  148. package/build/dist/Models/DatabaseModels/PodmanHostLabelRule.js +522 -0
  149. package/build/dist/Models/DatabaseModels/PodmanHostLabelRule.js.map +1 -0
  150. package/build/dist/Models/DatabaseModels/PodmanHostOwnerRule.js +603 -0
  151. package/build/dist/Models/DatabaseModels/PodmanHostOwnerRule.js.map +1 -0
  152. package/build/dist/Models/DatabaseModels/PodmanHostOwnerTeam.js +503 -0
  153. package/build/dist/Models/DatabaseModels/PodmanHostOwnerTeam.js.map +1 -0
  154. package/build/dist/Models/DatabaseModels/PodmanHostOwnerUser.js +502 -0
  155. package/build/dist/Models/DatabaseModels/PodmanHostOwnerUser.js.map +1 -0
  156. package/build/dist/Models/DatabaseModels/PodmanResource.js +526 -0
  157. package/build/dist/Models/DatabaseModels/PodmanResource.js.map +1 -0
  158. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +108 -0
  159. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  160. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceLabelRule.js +39 -0
  161. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceLabelRule.js.map +1 -1
  162. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.js +39 -0
  163. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.js.map +1 -1
  164. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js +54 -0
  165. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js.map +1 -1
  166. package/build/dist/Models/DatabaseModels/TelemetryException.js +2 -0
  167. package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
  168. package/build/dist/Server/API/DashboardAPI.js +89 -0
  169. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  170. package/build/dist/Server/API/DockerSwarmResourceAPI.js +100 -0
  171. package/build/dist/Server/API/DockerSwarmResourceAPI.js.map +1 -0
  172. package/build/dist/Server/API/TelemetryAPI.js +8 -1
  173. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  174. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781587937032-MigrationName.js +1100 -0
  175. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781587937032-MigrationName.js.map +1 -0
  176. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
  177. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  178. package/build/dist/Server/Services/AlertLabelRuleEngineService.js +30 -4
  179. package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
  180. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +62 -5
  181. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
  182. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +168 -0
  183. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -0
  184. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleService.js +13 -0
  185. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleService.js.map +1 -0
  186. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +188 -0
  187. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -0
  188. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleService.js +13 -0
  189. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleService.js.map +1 -0
  190. package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js +9 -0
  191. package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js.map +1 -0
  192. package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js +9 -0
  193. package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js.map +1 -0
  194. package/build/dist/Server/Services/DockerSwarmClusterService.js +353 -0
  195. package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -0
  196. package/build/dist/Server/Services/DockerSwarmResourceService.js +258 -0
  197. package/build/dist/Server/Services/DockerSwarmResourceService.js.map +1 -0
  198. package/build/dist/Server/Services/ExceptionAggregationService.js +1 -0
  199. package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
  200. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +28 -4
  201. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
  202. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +62 -5
  203. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
  204. package/build/dist/Server/Services/IncidentService.js +8 -0
  205. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  206. package/build/dist/Server/Services/Index.js +14 -0
  207. package/build/dist/Server/Services/Index.js.map +1 -1
  208. package/build/dist/Server/Services/LogAggregationService.js +1 -0
  209. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  210. package/build/dist/Server/Services/MetricAggregationService.js +1 -0
  211. package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
  212. package/build/dist/Server/Services/OpenTelemetryIngestService.js +43 -13
  213. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  214. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +166 -0
  215. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -0
  216. package/build/dist/Server/Services/PodmanHostLabelRuleService.js +13 -0
  217. package/build/dist/Server/Services/PodmanHostLabelRuleService.js.map +1 -0
  218. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +186 -0
  219. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -0
  220. package/build/dist/Server/Services/PodmanHostOwnerRuleService.js +13 -0
  221. package/build/dist/Server/Services/PodmanHostOwnerRuleService.js.map +1 -0
  222. package/build/dist/Server/Services/PodmanHostOwnerTeamService.js +9 -0
  223. package/build/dist/Server/Services/PodmanHostOwnerTeamService.js.map +1 -0
  224. package/build/dist/Server/Services/PodmanHostOwnerUserService.js +9 -0
  225. package/build/dist/Server/Services/PodmanHostOwnerUserService.js.map +1 -0
  226. package/build/dist/Server/Services/PodmanHostService.js +319 -0
  227. package/build/dist/Server/Services/PodmanHostService.js.map +1 -0
  228. package/build/dist/Server/Services/PodmanResourceService.js +196 -0
  229. package/build/dist/Server/Services/PodmanResourceService.js.map +1 -0
  230. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +30 -4
  231. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
  232. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +62 -5
  233. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
  234. package/build/dist/Server/Services/TelemetryUsageBillingService.js +13 -0
  235. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  236. package/build/dist/Server/Services/TraceAggregationService.js +1 -0
  237. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  238. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +13 -0
  239. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
  240. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +8 -0
  241. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  242. package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js +35 -7
  243. package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js.map +1 -1
  244. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +194 -0
  245. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  246. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +35 -1
  247. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  248. package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js +9 -0
  249. package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js.map +1 -1
  250. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +3 -0
  251. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  252. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +16 -0
  253. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
  254. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js +30 -0
  255. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js.map +1 -1
  256. package/build/dist/Server/Utils/Telemetry/Telemetry.js +6 -0
  257. package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
  258. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +18 -0
  259. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
  260. package/build/dist/Types/Dashboard/DashboardComponentType.js +7 -0
  261. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  262. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +2 -0
  263. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
  264. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmNodeListComponent.js +2 -0
  265. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmNodeListComponent.js.map +1 -0
  266. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmServiceListComponent.js +2 -0
  267. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmServiceListComponent.js.map +1 -0
  268. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanContainerListComponent.js +2 -0
  269. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanContainerListComponent.js.map +1 -0
  270. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanHostListComponent.js +2 -0
  271. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanHostListComponent.js.map +1 -0
  272. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanImageListComponent.js +2 -0
  273. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanImageListComponent.js.map +1 -0
  274. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanNetworkListComponent.js +2 -0
  275. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanNetworkListComponent.js.map +1 -0
  276. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanVolumeListComponent.js +2 -0
  277. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanVolumeListComponent.js.map +1 -0
  278. package/build/dist/Types/Dashboard/DashboardTemplates.js +168 -0
  279. package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
  280. package/build/dist/Types/DockerSwarm/DockerSwarmInventoryExtractor.js +359 -0
  281. package/build/dist/Types/DockerSwarm/DockerSwarmInventoryExtractor.js.map +1 -0
  282. package/build/dist/Types/Icon/IconProp.js +1 -0
  283. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  284. package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js +358 -0
  285. package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js.map +1 -0
  286. package/build/dist/Types/Monitor/DockerSwarmMetricCatalog.js +103 -0
  287. package/build/dist/Types/Monitor/DockerSwarmMetricCatalog.js.map +1 -0
  288. package/build/dist/Types/Monitor/HostAlertTemplates.js +365 -0
  289. package/build/dist/Types/Monitor/HostAlertTemplates.js.map +1 -0
  290. package/build/dist/Types/Monitor/HostMetricCatalog.js +138 -0
  291. package/build/dist/Types/Monitor/HostMetricCatalog.js.map +1 -0
  292. package/build/dist/Types/Monitor/MonitorStep.js +69 -0
  293. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  294. package/build/dist/Types/Monitor/MonitorStepDockerSwarmMonitor.js +21 -0
  295. package/build/dist/Types/Monitor/MonitorStepDockerSwarmMonitor.js.map +1 -0
  296. package/build/dist/Types/Monitor/MonitorStepHostMonitor.js +20 -0
  297. package/build/dist/Types/Monitor/MonitorStepHostMonitor.js.map +1 -0
  298. package/build/dist/Types/Monitor/MonitorStepPodmanMonitor.js +21 -0
  299. package/build/dist/Types/Monitor/MonitorStepPodmanMonitor.js.map +1 -0
  300. package/build/dist/Types/Monitor/MonitorType.js +39 -0
  301. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  302. package/build/dist/Types/Monitor/PodmanAlertTemplates.js +410 -0
  303. package/build/dist/Types/Monitor/PodmanAlertTemplates.js.map +1 -0
  304. package/build/dist/Types/Monitor/PodmanMetricCatalog.js +192 -0
  305. package/build/dist/Types/Monitor/PodmanMetricCatalog.js.map +1 -0
  306. package/build/dist/Types/Permission.js +420 -4
  307. package/build/dist/Types/Permission.js.map +1 -1
  308. package/build/dist/Types/Podman/PodmanInventoryExtractor.js +293 -0
  309. package/build/dist/Types/Podman/PodmanInventoryExtractor.js.map +1 -0
  310. package/build/dist/Types/Telemetry/EntityType.js +12 -0
  311. package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
  312. package/build/dist/Types/Telemetry/ServiceType.js +2 -0
  313. package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
  314. package/build/dist/UI/Components/Icon/Icon.js +16 -0
  315. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  316. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +30 -2
  317. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  318. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +22 -0
  319. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
  320. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +6 -0
  321. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
  322. package/build/dist/UI/Utils/TelemetryService.js +1 -0
  323. package/build/dist/UI/Utils/TelemetryService.js.map +1 -1
  324. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmNodeListComponent.js +55 -0
  325. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmNodeListComponent.js.map +1 -0
  326. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmResourceListShared.js +46 -0
  327. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmResourceListShared.js.map +1 -0
  328. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmServiceListComponent.js +55 -0
  329. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmServiceListComponent.js.map +1 -0
  330. package/build/dist/Utils/Dashboard/Components/DashboardPodmanContainerListComponent.js +77 -0
  331. package/build/dist/Utils/Dashboard/Components/DashboardPodmanContainerListComponent.js.map +1 -0
  332. package/build/dist/Utils/Dashboard/Components/DashboardPodmanHostListComponent.js +71 -0
  333. package/build/dist/Utils/Dashboard/Components/DashboardPodmanHostListComponent.js.map +1 -0
  334. package/build/dist/Utils/Dashboard/Components/DashboardPodmanImageListComponent.js +77 -0
  335. package/build/dist/Utils/Dashboard/Components/DashboardPodmanImageListComponent.js.map +1 -0
  336. package/build/dist/Utils/Dashboard/Components/DashboardPodmanNetworkListComponent.js +68 -0
  337. package/build/dist/Utils/Dashboard/Components/DashboardPodmanNetworkListComponent.js.map +1 -0
  338. package/build/dist/Utils/Dashboard/Components/DashboardPodmanVolumeListComponent.js +68 -0
  339. package/build/dist/Utils/Dashboard/Components/DashboardPodmanVolumeListComponent.js.map +1 -0
  340. package/build/dist/Utils/Dashboard/Components/Index.js +28 -0
  341. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  342. package/build/dist/Utils/Telemetry/EntityKey.js +14 -0
  343. package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
  344. package/package.json +1 -1
@@ -0,0 +1,9 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/PodmanHostOwnerUser";
3
+ export class Service extends DatabaseService {
4
+ constructor() {
5
+ super(Model);
6
+ }
7
+ }
8
+ export default new Service();
9
+ //# sourceMappingURL=PodmanHostOwnerUserService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PodmanHostOwnerUserService.js","sourceRoot":"","sources":["../../../../Server/Services/PodmanHostOwnerUserService.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,iDAAiD,CAAC;AAEpE,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IACjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;CACF;AAED,eAAe,IAAI,OAAO,EAAE,CAAC"}
@@ -0,0 +1,319 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import DatabaseService from "./DatabaseService";
11
+ import PodmanHostLabelRuleEngineService from "./PodmanHostLabelRuleEngineService";
12
+ import PodmanHostOwnerRuleEngineService from "./PodmanHostOwnerRuleEngineService";
13
+ import Model from "../../Models/DatabaseModels/PodmanHost";
14
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
15
+ import ObjectID from "../../Types/ObjectID";
16
+ import QueryHelper from "../Types/Database/QueryHelper";
17
+ import OneUptimeDate from "../../Types/Date";
18
+ import LIMIT_MAX from "../../Types/Database/LimitMax";
19
+ import GlobalCache from "../Infrastructure/GlobalCache";
20
+ import logger from "../Utils/Logger";
21
+ import crypto from "crypto";
22
+ const LAST_SEEN_CACHE_NAMESPACE = "podman-host-last-seen";
23
+ const LAST_SEEN_THROTTLE_SECONDS = 60;
24
+ const LABELS_APPLIED_CACHE_NAMESPACE = "podman-host-labels-applied";
25
+ const LABELS_APPLIED_CACHE_TTL_SECONDS = 60;
26
+ export class Service extends DatabaseService {
27
+ constructor() {
28
+ super(Model);
29
+ }
30
+ async onCreateSuccess(_onCreate, createdItem) {
31
+ if (createdItem.projectId && createdItem.id) {
32
+ Promise.resolve()
33
+ .then(async () => {
34
+ await PodmanHostLabelRuleEngineService.applyRulesToPodmanHost(createdItem);
35
+ })
36
+ .then(async () => {
37
+ await PodmanHostOwnerRuleEngineService.applyRulesToPodmanHost(createdItem);
38
+ })
39
+ .catch((error) => {
40
+ var _a, _b;
41
+ logger.error(`Error applying podman host rules in PodmanHostService.onCreateSuccess: ${error}`, {
42
+ projectId: (_a = createdItem.projectId) === null || _a === void 0 ? void 0 : _a.toString(),
43
+ podmanHostId: (_b = createdItem.id) === null || _b === void 0 ? void 0 : _b.toString(),
44
+ });
45
+ });
46
+ }
47
+ return createdItem;
48
+ }
49
+ async findOrCreateByHostIdentifier(data) {
50
+ /*
51
+ * Canonicalize + look up case-insensitively. A Podman host is keyed by
52
+ * the OTel `host.name` resource attribute (see autoDiscoverPodmanHost),
53
+ * whose casing is not stable — Windows surfaces PRIMARY01 vs primary01
54
+ * across resource detectors. Ingest already canonicalizes host.name
55
+ * (OtelIngestBaseService.normalizeHostNameAttributesInPlace); we repeat
56
+ * it here so the method is correct for any caller. A case-sensitive
57
+ * lookup would miss an existing row, then fail to create it because the
58
+ * unique guard (checkUniqueColumnBy -> findWithSameText) compares
59
+ * case-insensitively, wedging ingest for that host. Mirrors HostService.
60
+ */
61
+ const hostIdentifier = data.hostIdentifier.trim().toLowerCase();
62
+ const existingHost = await this.findOneBy({
63
+ query: {
64
+ projectId: data.projectId,
65
+ hostIdentifier: QueryHelper.findWithSameText(hostIdentifier),
66
+ },
67
+ select: {
68
+ _id: true,
69
+ projectId: true,
70
+ hostIdentifier: true,
71
+ },
72
+ props: {
73
+ isRoot: true,
74
+ },
75
+ });
76
+ if (existingHost) {
77
+ /*
78
+ * Converge a legacy mixed-case identifier onto the canonical form so
79
+ * the stored resource.host.name (canonicalized at ingest) keeps
80
+ * matching the Podman-host detail page filter. Best-effort — never
81
+ * block ingest on it. Updates don't re-run the unique guard.
82
+ */
83
+ if (existingHost._id &&
84
+ existingHost.hostIdentifier &&
85
+ existingHost.hostIdentifier !== hostIdentifier) {
86
+ try {
87
+ await this.updateOneById({
88
+ id: new ObjectID(existingHost._id.toString()),
89
+ data: {
90
+ hostIdentifier: hostIdentifier,
91
+ },
92
+ props: {
93
+ isRoot: true,
94
+ },
95
+ });
96
+ existingHost.hostIdentifier = hostIdentifier;
97
+ }
98
+ catch (err) {
99
+ logger.warn(`PodmanHostService: failed to canonicalize hostIdentifier for host ${existingHost._id.toString()}: ${err instanceof Error ? err.message : String(err)}`);
100
+ }
101
+ }
102
+ return existingHost;
103
+ }
104
+ try {
105
+ // Create new host
106
+ const newHost = new Model();
107
+ newHost.projectId = data.projectId;
108
+ newHost.name = hostIdentifier;
109
+ newHost.hostIdentifier = hostIdentifier;
110
+ newHost.otelCollectorStatus = "connected";
111
+ newHost.lastSeenAt = OneUptimeDate.getCurrentDate();
112
+ const createdHost = await this.create({
113
+ data: newHost,
114
+ props: {
115
+ isRoot: true,
116
+ },
117
+ });
118
+ return createdHost;
119
+ }
120
+ catch (_a) {
121
+ /*
122
+ * Either two ingest workers raced to create the same host, or a host
123
+ * with this identifier in a different case already existed and the
124
+ * unique guard rejected the insert. Re-resolve case-insensitively so
125
+ * the caller still gets the existing row instead of throwing.
126
+ */
127
+ const reFetchedHost = await this.findOneBy({
128
+ query: {
129
+ projectId: data.projectId,
130
+ hostIdentifier: QueryHelper.findWithSameText(hostIdentifier),
131
+ },
132
+ select: {
133
+ _id: true,
134
+ projectId: true,
135
+ hostIdentifier: true,
136
+ },
137
+ props: {
138
+ isRoot: true,
139
+ },
140
+ });
141
+ if (reFetchedHost) {
142
+ return reFetchedHost;
143
+ }
144
+ throw new Error("Failed to create or find Podman host: " + hostIdentifier);
145
+ }
146
+ }
147
+ async updateLastSeen(hostId, extra) {
148
+ var _a, _b, _c;
149
+ const cacheKey = hostId.toString();
150
+ const extrasFingerprint = crypto
151
+ .createHash("sha1")
152
+ .update(JSON.stringify({
153
+ osType: (_a = extra === null || extra === void 0 ? void 0 : extra.osType) !== null && _a !== void 0 ? _a : null,
154
+ osVersion: (_b = extra === null || extra === void 0 ? void 0 : extra.osVersion) !== null && _b !== void 0 ? _b : null,
155
+ agentVersion: (_c = extra === null || extra === void 0 ? void 0 : extra.agentVersion) !== null && _c !== void 0 ? _c : null,
156
+ }))
157
+ .digest("hex");
158
+ const cached = await GlobalCache.getString(LAST_SEEN_CACHE_NAMESPACE, cacheKey);
159
+ if (cached === extrasFingerprint) {
160
+ return; // same data was written recently
161
+ }
162
+ await GlobalCache.setString(LAST_SEEN_CACHE_NAMESPACE, cacheKey, extrasFingerprint, { expiresInSeconds: LAST_SEEN_THROTTLE_SECONDS });
163
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
164
+ const data = {
165
+ lastSeenAt: OneUptimeDate.getCurrentDate(),
166
+ otelCollectorStatus: "connected",
167
+ };
168
+ if (extra === null || extra === void 0 ? void 0 : extra.osType) {
169
+ data.osType = extra.osType;
170
+ }
171
+ if (extra === null || extra === void 0 ? void 0 : extra.osVersion) {
172
+ data.osVersion = extra.osVersion;
173
+ }
174
+ if (extra === null || extra === void 0 ? void 0 : extra.agentVersion) {
175
+ data.agentVersion = extra.agentVersion;
176
+ }
177
+ await this.updateOneById({
178
+ id: hostId,
179
+ data: data,
180
+ props: {
181
+ isRoot: true,
182
+ },
183
+ });
184
+ }
185
+ /**
186
+ * Additively attach labels to a Podman host. Existing labels are
187
+ * never removed — manual labels set via the UI survive ingest. The
188
+ * set of labelIds passed in is fingerprinted and cached for 60s so
189
+ * the common case (steady-state collector pushing the same label
190
+ * set every batch) costs one in-memory lookup, not a join-table
191
+ * scan.
192
+ */
193
+ async attachLabels(data) {
194
+ var _a;
195
+ if (!data.labelIds || data.labelIds.length === 0) {
196
+ return;
197
+ }
198
+ const cacheKey = data.podmanHostId.toString();
199
+ const fingerprint = fingerprintLabelIds(data.labelIds);
200
+ const cached = await GlobalCache.getString(LABELS_APPLIED_CACHE_NAMESPACE, cacheKey);
201
+ if (cached === fingerprint) {
202
+ return;
203
+ }
204
+ try {
205
+ const podmanHostIdStr = data.podmanHostId.toString();
206
+ const existingLabels = await this.getRepository()
207
+ .createQueryBuilder()
208
+ .relation(Model, "labels")
209
+ .of(podmanHostIdStr)
210
+ .loadMany();
211
+ const existingIds = new Set();
212
+ for (const lbl of existingLabels) {
213
+ const idStr = (_a = lbl._id) === null || _a === void 0 ? void 0 : _a.toString();
214
+ if (idStr) {
215
+ existingIds.add(idStr);
216
+ }
217
+ }
218
+ const toAddIds = [];
219
+ const seen = new Set();
220
+ for (const id of data.labelIds) {
221
+ const idStr = id.toString();
222
+ if (existingIds.has(idStr) || seen.has(idStr)) {
223
+ continue;
224
+ }
225
+ seen.add(idStr);
226
+ toAddIds.push(idStr);
227
+ }
228
+ if (toAddIds.length > 0) {
229
+ await this.getRepository()
230
+ .createQueryBuilder()
231
+ .relation(Model, "labels")
232
+ .of(podmanHostIdStr)
233
+ .add(toAddIds);
234
+ }
235
+ await GlobalCache.setString(LABELS_APPLIED_CACHE_NAMESPACE, cacheKey, fingerprint, { expiresInSeconds: LABELS_APPLIED_CACHE_TTL_SECONDS });
236
+ }
237
+ catch (err) {
238
+ logger.warn(`PodmanHostService.attachLabels failed for podman host ${data.podmanHostId.toString()}: ${err instanceof Error ? err.message : String(err)}`);
239
+ }
240
+ }
241
+ async markDisconnectedHosts() {
242
+ /*
243
+ * Threshold must stay well above the 5-minute OTel ingest
244
+ * maintenance fence (MAINTENANCE_FENCE_TTL_SECONDS in
245
+ * OtelIngestBaseService) — lastSeenAt is legitimately up to
246
+ * ~5 minutes stale during continuous telemetry, so a threshold
247
+ * equal to the fence TTL flaps healthy resources. 15 minutes
248
+ * gives 3x headroom.
249
+ */
250
+ const fifteenMinutesAgo = OneUptimeDate.addRemoveMinutes(OneUptimeDate.getCurrentDate(), -15);
251
+ const connectedHosts = await this.findBy({
252
+ query: {
253
+ otelCollectorStatus: "connected",
254
+ lastSeenAt: QueryHelper.lessThan(fifteenMinutesAgo),
255
+ },
256
+ select: {
257
+ _id: true,
258
+ },
259
+ limit: LIMIT_MAX,
260
+ skip: 0,
261
+ props: {
262
+ isRoot: true,
263
+ },
264
+ });
265
+ for (const host of connectedHosts) {
266
+ if (host._id) {
267
+ await this.updateOneById({
268
+ id: new ObjectID(host._id.toString()),
269
+ data: {
270
+ otelCollectorStatus: "disconnected",
271
+ },
272
+ props: {
273
+ isRoot: true,
274
+ },
275
+ });
276
+ }
277
+ }
278
+ }
279
+ }
280
+ __decorate([
281
+ CaptureSpan(),
282
+ __metadata("design:type", Function),
283
+ __metadata("design:paramtypes", [Object, Model]),
284
+ __metadata("design:returntype", Promise)
285
+ ], Service.prototype, "onCreateSuccess", null);
286
+ __decorate([
287
+ CaptureSpan(),
288
+ __metadata("design:type", Function),
289
+ __metadata("design:paramtypes", [Object]),
290
+ __metadata("design:returntype", Promise)
291
+ ], Service.prototype, "findOrCreateByHostIdentifier", null);
292
+ __decorate([
293
+ CaptureSpan(),
294
+ __metadata("design:type", Function),
295
+ __metadata("design:paramtypes", [ObjectID, Object]),
296
+ __metadata("design:returntype", Promise)
297
+ ], Service.prototype, "updateLastSeen", null);
298
+ __decorate([
299
+ CaptureSpan(),
300
+ __metadata("design:type", Function),
301
+ __metadata("design:paramtypes", [Object]),
302
+ __metadata("design:returntype", Promise)
303
+ ], Service.prototype, "attachLabels", null);
304
+ __decorate([
305
+ CaptureSpan(),
306
+ __metadata("design:type", Function),
307
+ __metadata("design:paramtypes", []),
308
+ __metadata("design:returntype", Promise)
309
+ ], Service.prototype, "markDisconnectedHosts", null);
310
+ function fingerprintLabelIds(labelIds) {
311
+ const sorted = labelIds
312
+ .map((id) => {
313
+ return id.toString();
314
+ })
315
+ .sort();
316
+ return crypto.createHash("sha1").update(sorted.join(",")).digest("hex");
317
+ }
318
+ export default new Service();
319
+ //# sourceMappingURL=PodmanHostService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PodmanHostService.js","sourceRoot":"","sources":["../../../../Server/Services/PodmanHostService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,196 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import DatabaseService from "./DatabaseService";
11
+ import Model from "../../Models/DatabaseModels/PodmanResource";
12
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
13
+ import OneUptimeDate from "../../Types/Date";
14
+ import logger from "../Utils/Logger";
15
+ const UPSERT_BATCH_SIZE = 500;
16
+ const STALE_DELETE_WARN_THRESHOLD = 100;
17
+ export class Service extends DatabaseService {
18
+ constructor() {
19
+ super(Model);
20
+ }
21
+ /**
22
+ * Upsert a batch of Container rows for a single (project, host)
23
+ * pair. Uses ON CONFLICT on the UNIQUE (projectId, podmanHostId,
24
+ * kind, name) index with a dominance guard on lastSeenAt so
25
+ * out-of-order ingest never regresses a newer observation.
26
+ *
27
+ * Containers are upserted from metric snapshots (no separate
28
+ * inventory snapshot path), so this also writes
29
+ * latestCpuPercent / latestMemoryBytes / metricsUpdatedAt in the
30
+ * same statement — saves a round trip vs. the K8s pattern of
31
+ * upsert-then-update.
32
+ */
33
+ async bulkUpsertContainers(data) {
34
+ if (data.containers.length === 0) {
35
+ return;
36
+ }
37
+ for (let i = 0; i < data.containers.length; i += UPSERT_BATCH_SIZE) {
38
+ const chunk = data.containers.slice(i, i + UPSERT_BATCH_SIZE);
39
+ const valueFragments = [];
40
+ const params = [];
41
+ let p = 1;
42
+ for (const c of chunk) {
43
+ valueFragments.push(`($${p++}, $${p++}, $${p++}, $${p++}, $${p++}, $${p++}, $${p++}, $${p++}::numeric, $${p++}::bigint, $${p++}::timestamptz, $${p++}::timestamptz, $${p++})`);
44
+ params.push(data.projectId.toString(), data.podmanHostId.toString(), "Container", c.containerName, c.containerId, c.imageName, c.state, c.cpuPercent !== null && c.cpuPercent !== undefined
45
+ ? c.cpuPercent
46
+ : null, c.memoryBytes !== null && c.memoryBytes !== undefined
47
+ ? Math.trunc(c.memoryBytes).toString()
48
+ : null, c.observedAt, c.observedAt, 0);
49
+ }
50
+ const sql = `
51
+ INSERT INTO "PodmanResource" (
52
+ "projectId", "podmanHostId", "kind", "name",
53
+ "containerId", "imageName", "state",
54
+ "latestCpuPercent", "latestMemoryBytes",
55
+ "metricsUpdatedAt", "lastSeenAt", "version"
56
+ )
57
+ VALUES ${valueFragments.join(", ")}
58
+ ON CONFLICT ("projectId", "podmanHostId", "kind", "name")
59
+ DO UPDATE SET
60
+ "containerId" = COALESCE(EXCLUDED."containerId", "PodmanResource"."containerId"),
61
+ "imageName" = COALESCE(EXCLUDED."imageName", "PodmanResource"."imageName"),
62
+ "state" = EXCLUDED."state",
63
+ "latestCpuPercent" = COALESCE(EXCLUDED."latestCpuPercent", "PodmanResource"."latestCpuPercent"),
64
+ "latestMemoryBytes" = COALESCE(EXCLUDED."latestMemoryBytes", "PodmanResource"."latestMemoryBytes"),
65
+ "metricsUpdatedAt" = EXCLUDED."metricsUpdatedAt",
66
+ "lastSeenAt" = EXCLUDED."lastSeenAt",
67
+ "updatedAt" = now()
68
+ WHERE EXCLUDED."lastSeenAt" >= "PodmanResource"."lastSeenAt"
69
+ `;
70
+ await this.getRepository().manager.query(sql, params);
71
+ }
72
+ }
73
+ /**
74
+ * Upsert a batch of resources for any kind. Used by the snapshot
75
+ * ingest path (Container / Image / Network / Volume rows from the
76
+ * Podman agent's inventory poller). Container rows from this path
77
+ * carry full state (running / exited / paused / restarting / dead /
78
+ * created), unlike the metric-derived path which only sees running
79
+ * containers.
80
+ */
81
+ async bulkUpsert(data) {
82
+ if (data.resources.length === 0) {
83
+ return;
84
+ }
85
+ for (let i = 0; i < data.resources.length; i += UPSERT_BATCH_SIZE) {
86
+ const chunk = data.resources.slice(i, i + UPSERT_BATCH_SIZE);
87
+ const valueFragments = [];
88
+ const params = [];
89
+ let p = 1;
90
+ for (const r of chunk) {
91
+ valueFragments.push(`($${p++}, $${p++}, $${p++}, $${p++}, $${p++}, $${p++}, $${p++}, $${p++}, $${p++}::timestamptz, $${p++}::timestamptz, $${p++})`);
92
+ params.push(data.projectId.toString(), data.podmanHostId.toString(), r.kind, r.name, r.containerId, r.imageName, r.state, r.labels ? JSON.stringify(r.labels) : null, r.resourceCreationTimestamp, r.lastSeenAt, 0);
93
+ }
94
+ const sql = `
95
+ INSERT INTO "PodmanResource" (
96
+ "projectId", "podmanHostId", "kind", "name",
97
+ "containerId", "imageName", "state", "labels",
98
+ "resourceCreationTimestamp", "lastSeenAt", "version"
99
+ )
100
+ VALUES ${valueFragments.join(", ")}
101
+ ON CONFLICT ("projectId", "podmanHostId", "kind", "name")
102
+ DO UPDATE SET
103
+ "containerId" = COALESCE(EXCLUDED."containerId", "PodmanResource"."containerId"),
104
+ "imageName" = COALESCE(EXCLUDED."imageName", "PodmanResource"."imageName"),
105
+ "state" = COALESCE(EXCLUDED."state", "PodmanResource"."state"),
106
+ "labels" = COALESCE(EXCLUDED."labels", "PodmanResource"."labels"),
107
+ "resourceCreationTimestamp" = COALESCE(EXCLUDED."resourceCreationTimestamp", "PodmanResource"."resourceCreationTimestamp"),
108
+ "lastSeenAt" = EXCLUDED."lastSeenAt",
109
+ "updatedAt" = now()
110
+ WHERE EXCLUDED."lastSeenAt" >= "PodmanResource"."lastSeenAt"
111
+ `;
112
+ await this.getRepository().manager.query(sql, params);
113
+ }
114
+ }
115
+ /**
116
+ * Hard-delete all resources on a host whose last observation is
117
+ * older than olderThan. Returns the number of deleted rows.
118
+ */
119
+ async deleteStaleForHost(data) {
120
+ const result = await this.getRepository().manager.query(`DELETE FROM "PodmanResource" WHERE "podmanHostId" = $1 AND "lastSeenAt" < $2`, [data.podmanHostId.toString(), data.olderThan]);
121
+ let affected = 0;
122
+ if (Array.isArray(result) && result.length >= 2) {
123
+ const second = result[1];
124
+ if (typeof second === "number") {
125
+ affected = second;
126
+ }
127
+ }
128
+ if (affected > STALE_DELETE_WARN_THRESHOLD) {
129
+ logger.warn(`PodmanResource cleanup deleted ${affected} stale rows for host ${data.podmanHostId.toString()} — larger than expected; investigate agent health.`);
130
+ }
131
+ return affected;
132
+ }
133
+ /**
134
+ * Compute container state breakdowns for a single host from the
135
+ * inventory table. Used by the cleanup worker to refresh the cached
136
+ * counts on PodmanHost so the Hosts page / dashboard widget shows
137
+ * accurate numbers without needing a SQL aggregation per render.
138
+ */
139
+ async getContainerCountsForHost(data) {
140
+ const rows = await this.getRepository().manager.query(`SELECT
141
+ COUNT(*) FILTER (WHERE LOWER("state") = 'running')::text AS "running",
142
+ COUNT(*) FILTER (WHERE LOWER("state") IN ('exited', 'dead', 'created'))::text AS "stopped",
143
+ COUNT(*) FILTER (WHERE LOWER("state") = 'paused')::text AS "paused"
144
+ FROM "PodmanResource"
145
+ WHERE "projectId" = $1
146
+ AND "podmanHostId" = $2
147
+ AND "kind" = 'Container'
148
+ AND "deletedAt" IS NULL`, [data.projectId.toString(), data.podmanHostId.toString()]);
149
+ const row = rows[0];
150
+ return {
151
+ containersRunning: row ? parseInt(row.running, 10) || 0 : 0,
152
+ containersStopped: row ? parseInt(row.stopped, 10) || 0 : 0,
153
+ containersPaused: row ? parseInt(row.paused, 10) || 0 : 0,
154
+ };
155
+ }
156
+ getStaleThresholdDate(nowOverride) {
157
+ const minutes = this.getStaleThresholdMinutes();
158
+ return OneUptimeDate.addRemoveMinutes(nowOverride || OneUptimeDate.getCurrentDate(), -minutes);
159
+ }
160
+ getStaleThresholdMinutes() {
161
+ const raw = process.env["PODMAN_INVENTORY_STALE_MINUTES"];
162
+ if (raw) {
163
+ const parsed = parseInt(raw, 10);
164
+ if (!isNaN(parsed) && parsed >= 5) {
165
+ return parsed;
166
+ }
167
+ }
168
+ return 15;
169
+ }
170
+ }
171
+ __decorate([
172
+ CaptureSpan(),
173
+ __metadata("design:type", Function),
174
+ __metadata("design:paramtypes", [Object]),
175
+ __metadata("design:returntype", Promise)
176
+ ], Service.prototype, "bulkUpsertContainers", null);
177
+ __decorate([
178
+ CaptureSpan(),
179
+ __metadata("design:type", Function),
180
+ __metadata("design:paramtypes", [Object]),
181
+ __metadata("design:returntype", Promise)
182
+ ], Service.prototype, "bulkUpsert", null);
183
+ __decorate([
184
+ CaptureSpan(),
185
+ __metadata("design:type", Function),
186
+ __metadata("design:paramtypes", [Object]),
187
+ __metadata("design:returntype", Promise)
188
+ ], Service.prototype, "deleteStaleForHost", null);
189
+ __decorate([
190
+ CaptureSpan(),
191
+ __metadata("design:type", Function),
192
+ __metadata("design:paramtypes", [Object]),
193
+ __metadata("design:returntype", Promise)
194
+ ], Service.prototype, "getContainerCountsForHost", null);
195
+ export default new Service();
196
+ //# sourceMappingURL=PodmanResourceService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PodmanResourceService.js","sourceRoot":"","sources":["../../../../Server/Services/PodmanResourceService.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@ import Label from "../../Models/DatabaseModels/Label";
11
11
  import ScheduledMaintenance from "../../Models/DatabaseModels/ScheduledMaintenance";
12
12
  import ScheduledMaintenanceLabelRule from "../../Models/DatabaseModels/ScheduledMaintenanceLabelRule";
13
13
  import DockerHostService from "./DockerHostService";
14
+ import PodmanHostService from "./PodmanHostService";
14
15
  import HostService from "./HostService";
15
16
  import KubernetesClusterService from "./KubernetesClusterService";
16
17
  import LabelService from "./LabelService";
@@ -35,12 +36,13 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
35
36
  * - all labels of the event's hosts when `inheritLabelsFromHosts`
36
37
  * - all labels of the event's Kubernetes clusters when `inheritLabelsFromKubernetesClusters`
37
38
  * - all labels of the event's Docker hosts when `inheritLabelsFromDockerHosts`
39
+ * - all labels of the event's Podman hosts when `inheritLabelsFromPodmanHosts`
38
40
  * - all labels of the event's services when `inheritLabelsFromServices`
39
41
  * The union is deduped against labels already on the event before insert
40
42
  * to avoid PK conflicts on the ScheduledMaintenanceLabel join table.
41
43
  */
42
44
  async applyRulesToScheduledMaintenance(scheduledMaintenance) {
43
- var _a, _b, _c, _d, _e, _f, _g;
45
+ var _a, _b, _c, _d, _e, _f, _g, _h;
44
46
  if (!scheduledMaintenance.id || !scheduledMaintenance.projectId) {
45
47
  return;
46
48
  }
@@ -66,6 +68,7 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
66
68
  inheritLabelsFromHosts: true,
67
69
  inheritLabelsFromKubernetesClusters: true,
68
70
  inheritLabelsFromDockerHosts: true,
71
+ inheritLabelsFromPodmanHosts: true,
69
72
  inheritLabelsFromServices: true,
70
73
  },
71
74
  limit: 100,
@@ -79,6 +82,7 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
79
82
  let inheritFromHosts = false;
80
83
  let inheritFromKubernetesClusters = false;
81
84
  let inheritFromDockerHosts = false;
85
+ let inheritFromPodmanHosts = false;
82
86
  let inheritFromServices = false;
83
87
  const matchedRules = [];
84
88
  for (const rule of rules) {
@@ -104,6 +108,9 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
104
108
  if (rule.inheritLabelsFromDockerHosts) {
105
109
  inheritFromDockerHosts = true;
106
110
  }
111
+ if (rule.inheritLabelsFromPodmanHosts) {
112
+ inheritFromPodmanHosts = true;
113
+ }
107
114
  if (rule.inheritLabelsFromServices) {
108
115
  inheritFromServices = true;
109
116
  }
@@ -111,6 +118,7 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
111
118
  const needsRelatedResources = inheritFromHosts ||
112
119
  inheritFromKubernetesClusters ||
113
120
  inheritFromDockerHosts ||
121
+ inheritFromPodmanHosts ||
114
122
  inheritFromServices;
115
123
  let eventWithResources = null;
116
124
  if (needsRelatedResources) {
@@ -120,6 +128,7 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
120
128
  hosts: { _id: true },
121
129
  kubernetesClusters: { _id: true },
122
130
  dockerHosts: { _id: true },
131
+ podmanHosts: { _id: true },
123
132
  services: { _id: true },
124
133
  },
125
134
  props: { isRoot: true },
@@ -194,7 +203,24 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
194
203
  }
195
204
  }
196
205
  }
197
- if (inheritFromServices && ((_e = eventWithResources === null || eventWithResources === void 0 ? void 0 : eventWithResources.services) === null || _e === void 0 ? void 0 : _e.length)) {
206
+ if (inheritFromPodmanHosts && ((_e = eventWithResources === null || eventWithResources === void 0 ? void 0 : eventWithResources.podmanHosts) === null || _e === void 0 ? void 0 : _e.length)) {
207
+ for (const eventPodmanHost of eventWithResources.podmanHosts) {
208
+ if (!eventPodmanHost.id) {
209
+ continue;
210
+ }
211
+ const podmanHost = await PodmanHostService.findOneById({
212
+ id: eventPodmanHost.id,
213
+ select: { labels: { _id: true } },
214
+ props: { isRoot: true },
215
+ });
216
+ for (const label of (podmanHost === null || podmanHost === void 0 ? void 0 : podmanHost.labels) || []) {
217
+ if (label.id) {
218
+ labelIdsToAdd.add(label.id.toString());
219
+ }
220
+ }
221
+ }
222
+ }
223
+ if (inheritFromServices && ((_f = eventWithResources === null || eventWithResources === void 0 ? void 0 : eventWithResources.services) === null || _f === void 0 ? void 0 : _f.length)) {
198
224
  for (const eventService of eventWithResources.services) {
199
225
  if (!eventService.id) {
200
226
  continue;
@@ -263,8 +289,8 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
263
289
  }
264
290
  catch (error) {
265
291
  logger.error(`Error applying scheduled maintenance label rules: ${error}`, {
266
- projectId: (_f = scheduledMaintenance.projectId) === null || _f === void 0 ? void 0 : _f.toString(),
267
- scheduledMaintenanceId: (_g = scheduledMaintenance.id) === null || _g === void 0 ? void 0 : _g.toString(),
292
+ projectId: (_g = scheduledMaintenance.projectId) === null || _g === void 0 ? void 0 : _g.toString(),
293
+ scheduledMaintenanceId: (_h = scheduledMaintenance.id) === null || _h === void 0 ? void 0 : _h.toString(),
268
294
  });
269
295
  }
270
296
  }