@oneuptime/common 11.0.1 → 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 (577) hide show
  1. package/Models/DatabaseModels/Alert.ts +276 -0
  2. package/Models/DatabaseModels/AlertLabelRule.ts +38 -0
  3. package/Models/DatabaseModels/AlertOwnerRule.ts +38 -0
  4. package/Models/DatabaseModels/CephCluster.ts +964 -0
  5. package/Models/DatabaseModels/CephClusterLabelRule.ts +514 -0
  6. package/Models/DatabaseModels/CephClusterOwnerRule.ts +596 -0
  7. package/Models/DatabaseModels/CephClusterOwnerTeam.ts +487 -0
  8. package/Models/DatabaseModels/CephClusterOwnerUser.ts +486 -0
  9. package/Models/DatabaseModels/CephResource.ts +809 -0
  10. package/Models/DatabaseModels/DockerSwarmCluster.ts +989 -0
  11. package/Models/DatabaseModels/DockerSwarmClusterLabelRule.ts +514 -0
  12. package/Models/DatabaseModels/DockerSwarmClusterOwnerRule.ts +596 -0
  13. package/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.ts +487 -0
  14. package/Models/DatabaseModels/DockerSwarmClusterOwnerUser.ts +486 -0
  15. package/Models/DatabaseModels/DockerSwarmResource.ts +750 -0
  16. package/Models/DatabaseModels/Host.ts +64 -0
  17. package/Models/DatabaseModels/Incident.ts +276 -0
  18. package/Models/DatabaseModels/IncidentLabelRule.ts +38 -0
  19. package/Models/DatabaseModels/IncidentOwnerRule.ts +38 -0
  20. package/Models/DatabaseModels/IncidentTemplate.ts +56 -0
  21. package/Models/DatabaseModels/Index.ts +48 -0
  22. package/Models/DatabaseModels/PodmanHost.ts +859 -0
  23. package/Models/DatabaseModels/PodmanHostLabelRule.ts +514 -0
  24. package/Models/DatabaseModels/PodmanHostOwnerRule.ts +596 -0
  25. package/Models/DatabaseModels/PodmanHostOwnerTeam.ts +487 -0
  26. package/Models/DatabaseModels/PodmanHostOwnerUser.ts +486 -0
  27. package/Models/DatabaseModels/PodmanResource.ts +498 -0
  28. package/Models/DatabaseModels/ProxmoxCluster.ts +943 -0
  29. package/Models/DatabaseModels/ProxmoxClusterLabelRule.ts +514 -0
  30. package/Models/DatabaseModels/ProxmoxClusterOwnerRule.ts +596 -0
  31. package/Models/DatabaseModels/ProxmoxClusterOwnerTeam.ts +487 -0
  32. package/Models/DatabaseModels/ProxmoxClusterOwnerUser.ts +486 -0
  33. package/Models/DatabaseModels/ProxmoxResource.ts +726 -0
  34. package/Models/DatabaseModels/ScheduledMaintenance.ts +220 -0
  35. package/Models/DatabaseModels/ScheduledMaintenanceLabelRule.ts +38 -0
  36. package/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.ts +38 -0
  37. package/Models/DatabaseModels/ScheduledMaintenanceTemplate.ts +56 -0
  38. package/Models/DatabaseModels/TelemetryException.ts +2 -0
  39. package/Server/API/BillingInvoiceAPI.ts +47 -7
  40. package/Server/API/CephResourceAPI.ts +134 -0
  41. package/Server/API/DashboardAPI.ts +135 -0
  42. package/Server/API/DockerSwarmResourceAPI.ts +137 -0
  43. package/Server/API/ProjectAPI.ts +15 -0
  44. package/Server/API/ProxmoxResourceAPI.ts +132 -0
  45. package/Server/API/ResellerPlanAPI.ts +17 -0
  46. package/Server/API/TelemetryAPI.ts +8 -1
  47. package/Server/Infrastructure/GlobalCache.ts +8 -2
  48. package/Server/Infrastructure/Postgres/SchemaMigrations/1781500000000-AddProxmoxAndCephClusterTables.ts +163 -0
  49. package/Server/Infrastructure/Postgres/SchemaMigrations/1781587937032-MigrationName.ts +3199 -0
  50. package/Server/Infrastructure/Postgres/SchemaMigrations/1781600000000-AddProxmoxCephV2Columns.ts +211 -0
  51. package/Server/Infrastructure/Postgres/SchemaMigrations/1781600000001-AddProxmoxCephActivityAndRules.ts +590 -0
  52. package/Server/Infrastructure/Postgres/SchemaMigrations/1781700000000-AddProxmoxCephV3Columns.ts +64 -0
  53. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
  54. package/Server/Infrastructure/Redis.ts +40 -12
  55. package/Server/Services/AlertLabelRuleEngineService.ts +29 -0
  56. package/Server/Services/AlertOwnerRuleEngineService.ts +67 -0
  57. package/Server/Services/AnalyticsDatabaseService.ts +1 -1
  58. package/Server/Services/BillingService.ts +109 -21
  59. package/Server/Services/CephClusterLabelRuleEngineService.ts +200 -0
  60. package/Server/Services/CephClusterLabelRuleService.ts +14 -0
  61. package/Server/Services/CephClusterOwnerRuleEngineService.ts +218 -0
  62. package/Server/Services/CephClusterOwnerRuleService.ts +14 -0
  63. package/Server/Services/CephClusterOwnerTeamService.ts +10 -0
  64. package/Server/Services/CephClusterOwnerUserService.ts +10 -0
  65. package/Server/Services/CephClusterService.ts +401 -0
  66. package/Server/Services/CephResourceService.ts +383 -0
  67. package/Server/Services/CloudResourceService.ts +11 -3
  68. package/Server/Services/DockerHostService.ts +11 -3
  69. package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +214 -0
  70. package/Server/Services/DockerSwarmClusterLabelRuleService.ts +14 -0
  71. package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +232 -0
  72. package/Server/Services/DockerSwarmClusterOwnerRuleService.ts +14 -0
  73. package/Server/Services/DockerSwarmClusterOwnerTeamService.ts +10 -0
  74. package/Server/Services/DockerSwarmClusterOwnerUserService.ts +10 -0
  75. package/Server/Services/DockerSwarmClusterService.ts +404 -0
  76. package/Server/Services/DockerSwarmResourceService.ts +381 -0
  77. package/Server/Services/ExceptionAggregationService.ts +3 -0
  78. package/Server/Services/HostService.ts +11 -3
  79. package/Server/Services/IncidentLabelRuleEngineService.ts +27 -0
  80. package/Server/Services/IncidentOwnerRuleEngineService.ts +67 -0
  81. package/Server/Services/IncidentService.ts +11 -0
  82. package/Server/Services/Index.ts +38 -0
  83. package/Server/Services/KubernetesClusterService.ts +11 -3
  84. package/Server/Services/LogAggregationService.ts +3 -0
  85. package/Server/Services/MetricAggregationService.ts +3 -0
  86. package/Server/Services/OpenTelemetryIngestService.ts +73 -0
  87. package/Server/Services/PodmanHostLabelRuleEngineService.ts +198 -0
  88. package/Server/Services/PodmanHostLabelRuleService.ts +14 -0
  89. package/Server/Services/PodmanHostOwnerRuleEngineService.ts +216 -0
  90. package/Server/Services/PodmanHostOwnerRuleService.ts +14 -0
  91. package/Server/Services/PodmanHostOwnerTeamService.ts +10 -0
  92. package/Server/Services/PodmanHostOwnerUserService.ts +10 -0
  93. package/Server/Services/PodmanHostService.ts +368 -0
  94. package/Server/Services/PodmanResourceService.ts +310 -0
  95. package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +204 -0
  96. package/Server/Services/ProxmoxClusterLabelRuleService.ts +14 -0
  97. package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +222 -0
  98. package/Server/Services/ProxmoxClusterOwnerRuleService.ts +14 -0
  99. package/Server/Services/ProxmoxClusterOwnerTeamService.ts +10 -0
  100. package/Server/Services/ProxmoxClusterOwnerUserService.ts +10 -0
  101. package/Server/Services/ProxmoxClusterService.ts +382 -0
  102. package/Server/Services/ProxmoxResourceService.ts +404 -0
  103. package/Server/Services/RumApplicationService.ts +11 -3
  104. package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +29 -0
  105. package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +67 -0
  106. package/Server/Services/ServerlessFunctionService.ts +11 -3
  107. package/Server/Services/TelemetryUsageBillingService.ts +59 -3
  108. package/Server/Services/TraceAggregationService.ts +3 -0
  109. package/Server/Types/AnalyticsDatabase/AggregateBy.ts +8 -23
  110. package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +13 -0
  111. package/Server/Utils/Monitor/MonitorAlert.ts +55 -0
  112. package/Server/Utils/Monitor/MonitorClusterContext.ts +158 -0
  113. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +650 -4
  114. package/Server/Utils/Monitor/MonitorIncident.ts +175 -7
  115. package/Server/Utils/Monitor/MonitorMaintenanceSuppression.ts +56 -6
  116. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +6 -1
  117. package/Server/Utils/Monitor/SeriesResourceLabels.ts +59 -0
  118. package/Server/Utils/Profiling.ts +37 -2
  119. package/Server/Utils/Telemetry/EntityRegistry.ts +4 -0
  120. package/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.ts +1096 -0
  121. package/Server/Utils/Telemetry/ResourceFacetResolver.ts +49 -0
  122. package/Server/Utils/Telemetry/Telemetry.ts +10 -0
  123. package/Server/Utils/Telemetry/TelemetryEntity.ts +107 -0
  124. package/Server/Utils/Telemetry.ts +8 -19
  125. package/Tests/Server/API/BillingInvoiceAPI.test.ts +194 -0
  126. package/Tests/Server/API/ProjectAPI.test.ts +91 -0
  127. package/Tests/Server/API/ResellerPlanAPI.test.ts +207 -0
  128. package/Tests/Server/Infrastructure/GlobalCache.test.ts +100 -0
  129. package/Tests/Server/Services/BillingService.test.ts +323 -0
  130. package/Tests/Server/Services/CephResourceService.test.ts +264 -0
  131. package/Tests/Server/Services/ProxmoxResourceService.test.ts +326 -0
  132. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +322 -0
  133. package/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.ts +14 -0
  134. package/Tests/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.test.ts +879 -0
  135. package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +196 -0
  136. package/Tests/Types/DockerSwarm/DockerSwarmInventoryExtractor.test.ts +667 -0
  137. package/Tests/Types/Monitor/CephAlertTemplates.test.ts +1231 -0
  138. package/Tests/Types/Monitor/DockerSwarmAlertTemplates.test.ts +528 -0
  139. package/Tests/Types/Monitor/ProxmoxAlertTemplates.test.ts +732 -0
  140. package/Tests/Utils/Telemetry/EntityRelationship.test.ts +49 -0
  141. package/Tests/Utils/Telemetry/HeartbeatAvailability.test.ts +423 -0
  142. package/Types/BaseDatabase/AggregationIntervalUtil.ts +74 -0
  143. package/Types/Dashboard/DashboardComponentType.ts +11 -0
  144. package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +4 -0
  145. package/Types/Dashboard/DashboardComponents/DashboardCephOsdListComponent.ts +15 -0
  146. package/Types/Dashboard/DashboardComponents/DashboardCephPoolListComponent.ts +14 -0
  147. package/Types/Dashboard/DashboardComponents/DashboardDockerSwarmNodeListComponent.ts +17 -0
  148. package/Types/Dashboard/DashboardComponents/DashboardDockerSwarmServiceListComponent.ts +17 -0
  149. package/Types/Dashboard/DashboardComponents/DashboardPodmanContainerListComponent.ts +16 -0
  150. package/Types/Dashboard/DashboardComponents/DashboardPodmanHostListComponent.ts +15 -0
  151. package/Types/Dashboard/DashboardComponents/DashboardPodmanImageListComponent.ts +16 -0
  152. package/Types/Dashboard/DashboardComponents/DashboardPodmanNetworkListComponent.ts +15 -0
  153. package/Types/Dashboard/DashboardComponents/DashboardPodmanVolumeListComponent.ts +15 -0
  154. package/Types/Dashboard/DashboardComponents/DashboardProxmoxGuestListComponent.ts +17 -0
  155. package/Types/Dashboard/DashboardComponents/DashboardProxmoxNodeListComponent.ts +16 -0
  156. package/Types/Dashboard/DashboardTemplates.ts +640 -0
  157. package/Types/DockerSwarm/DockerSwarmInventoryExtractor.ts +452 -0
  158. package/Types/Icon/IconProp.ts +3 -0
  159. package/Types/Monitor/CephAlertTemplates.ts +1647 -0
  160. package/Types/Monitor/CephMetricCatalog.ts +409 -0
  161. package/Types/Monitor/DockerSwarmAlertTemplates.ts +461 -0
  162. package/Types/Monitor/DockerSwarmMetricCatalog.ts +139 -0
  163. package/Types/Monitor/HostAlertTemplates.ts +455 -0
  164. package/Types/Monitor/HostMetricCatalog.ts +177 -0
  165. package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +65 -0
  166. package/Types/Monitor/MonitorStep.ts +163 -0
  167. package/Types/Monitor/MonitorStepCephMonitor.ts +57 -0
  168. package/Types/Monitor/MonitorStepDockerSwarmMonitor.ts +74 -0
  169. package/Types/Monitor/MonitorStepHostMonitor.ts +30 -0
  170. package/Types/Monitor/MonitorStepPodmanMonitor.ts +38 -0
  171. package/Types/Monitor/MonitorStepProxmoxMonitor.ts +81 -0
  172. package/Types/Monitor/MonitorType.ts +71 -1
  173. package/Types/Monitor/PodmanAlertTemplates.ts +507 -0
  174. package/Types/Monitor/PodmanMetricCatalog.ts +226 -0
  175. package/Types/Monitor/ProxmoxAlertTemplates.ts +899 -0
  176. package/Types/Monitor/ProxmoxMetricCatalog.ts +382 -0
  177. package/Types/Permission.ts +1029 -104
  178. package/Types/Podman/PodmanInventoryExtractor.ts +343 -0
  179. package/Types/Telemetry/EntityType.ts +23 -0
  180. package/Types/Telemetry/ServiceType.ts +4 -0
  181. package/UI/Components/Icon/Icon.tsx +141 -0
  182. package/UI/Components/LogsViewer/LogsViewer.tsx +44 -1
  183. package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +28 -0
  184. package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +15 -5
  185. package/UI/Utils/Telemetry/Telemetry.ts +16 -21
  186. package/UI/Utils/TelemetryService.ts +8 -3
  187. package/Utils/Dashboard/Components/DashboardCephOsdListComponent.ts +63 -0
  188. package/Utils/Dashboard/Components/DashboardCephPoolListComponent.ts +32 -0
  189. package/Utils/Dashboard/Components/DashboardCephResourceListShared.ts +61 -0
  190. package/Utils/Dashboard/Components/DashboardDockerSwarmNodeListComponent.ts +70 -0
  191. package/Utils/Dashboard/Components/DashboardDockerSwarmResourceListShared.ts +61 -0
  192. package/Utils/Dashboard/Components/DashboardDockerSwarmServiceListComponent.ts +71 -0
  193. package/Utils/Dashboard/Components/DashboardPodmanContainerListComponent.ts +100 -0
  194. package/Utils/Dashboard/Components/DashboardPodmanHostListComponent.ts +88 -0
  195. package/Utils/Dashboard/Components/DashboardPodmanImageListComponent.ts +97 -0
  196. package/Utils/Dashboard/Components/DashboardPodmanNetworkListComponent.ts +87 -0
  197. package/Utils/Dashboard/Components/DashboardPodmanVolumeListComponent.ts +87 -0
  198. package/Utils/Dashboard/Components/DashboardProxmoxGuestListComponent.ts +69 -0
  199. package/Utils/Dashboard/Components/DashboardProxmoxNodeListComponent.ts +55 -0
  200. package/Utils/Dashboard/Components/DashboardProxmoxResourceListShared.ts +61 -0
  201. package/Utils/Dashboard/Components/Index.ts +79 -0
  202. package/Utils/Telemetry/EntityKey.ts +53 -0
  203. package/Utils/Telemetry/EntityRelationship.ts +6 -0
  204. package/Utils/Telemetry/HeartbeatAvailability.ts +262 -0
  205. package/build/dist/Models/DatabaseModels/Alert.js +270 -0
  206. package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
  207. package/build/dist/Models/DatabaseModels/AlertLabelRule.js +39 -0
  208. package/build/dist/Models/DatabaseModels/AlertLabelRule.js.map +1 -1
  209. package/build/dist/Models/DatabaseModels/AlertOwnerRule.js +39 -0
  210. package/build/dist/Models/DatabaseModels/AlertOwnerRule.js.map +1 -1
  211. package/build/dist/Models/DatabaseModels/CephCluster.js +992 -0
  212. package/build/dist/Models/DatabaseModels/CephCluster.js.map +1 -0
  213. package/build/dist/Models/DatabaseModels/CephClusterLabelRule.js +522 -0
  214. package/build/dist/Models/DatabaseModels/CephClusterLabelRule.js.map +1 -0
  215. package/build/dist/Models/DatabaseModels/CephClusterOwnerRule.js +603 -0
  216. package/build/dist/Models/DatabaseModels/CephClusterOwnerRule.js.map +1 -0
  217. package/build/dist/Models/DatabaseModels/CephClusterOwnerTeam.js +503 -0
  218. package/build/dist/Models/DatabaseModels/CephClusterOwnerTeam.js.map +1 -0
  219. package/build/dist/Models/DatabaseModels/CephClusterOwnerUser.js +502 -0
  220. package/build/dist/Models/DatabaseModels/CephClusterOwnerUser.js.map +1 -0
  221. package/build/dist/Models/DatabaseModels/CephResource.js +846 -0
  222. package/build/dist/Models/DatabaseModels/CephResource.js.map +1 -0
  223. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js +1018 -0
  224. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js.map +1 -0
  225. package/build/dist/Models/DatabaseModels/DockerSwarmClusterLabelRule.js +522 -0
  226. package/build/dist/Models/DatabaseModels/DockerSwarmClusterLabelRule.js.map +1 -0
  227. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerRule.js +603 -0
  228. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerRule.js.map +1 -0
  229. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.js +503 -0
  230. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.js.map +1 -0
  231. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerUser.js +502 -0
  232. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerUser.js.map +1 -0
  233. package/build/dist/Models/DatabaseModels/DockerSwarmResource.js +787 -0
  234. package/build/dist/Models/DatabaseModels/DockerSwarmResource.js.map +1 -0
  235. package/build/dist/Models/DatabaseModels/Host.js +63 -0
  236. package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
  237. package/build/dist/Models/DatabaseModels/Incident.js +270 -0
  238. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  239. package/build/dist/Models/DatabaseModels/IncidentLabelRule.js +39 -0
  240. package/build/dist/Models/DatabaseModels/IncidentLabelRule.js.map +1 -1
  241. package/build/dist/Models/DatabaseModels/IncidentOwnerRule.js +39 -0
  242. package/build/dist/Models/DatabaseModels/IncidentOwnerRule.js.map +1 -1
  243. package/build/dist/Models/DatabaseModels/IncidentTemplate.js +54 -0
  244. package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
  245. package/build/dist/Models/DatabaseModels/Index.js +48 -0
  246. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  247. package/build/dist/Models/DatabaseModels/PodmanHost.js +885 -0
  248. package/build/dist/Models/DatabaseModels/PodmanHost.js.map +1 -0
  249. package/build/dist/Models/DatabaseModels/PodmanHostLabelRule.js +522 -0
  250. package/build/dist/Models/DatabaseModels/PodmanHostLabelRule.js.map +1 -0
  251. package/build/dist/Models/DatabaseModels/PodmanHostOwnerRule.js +603 -0
  252. package/build/dist/Models/DatabaseModels/PodmanHostOwnerRule.js.map +1 -0
  253. package/build/dist/Models/DatabaseModels/PodmanHostOwnerTeam.js +503 -0
  254. package/build/dist/Models/DatabaseModels/PodmanHostOwnerTeam.js.map +1 -0
  255. package/build/dist/Models/DatabaseModels/PodmanHostOwnerUser.js +502 -0
  256. package/build/dist/Models/DatabaseModels/PodmanHostOwnerUser.js.map +1 -0
  257. package/build/dist/Models/DatabaseModels/PodmanResource.js +526 -0
  258. package/build/dist/Models/DatabaseModels/PodmanResource.js.map +1 -0
  259. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js +967 -0
  260. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js.map +1 -0
  261. package/build/dist/Models/DatabaseModels/ProxmoxClusterLabelRule.js +522 -0
  262. package/build/dist/Models/DatabaseModels/ProxmoxClusterLabelRule.js.map +1 -0
  263. package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerRule.js +603 -0
  264. package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerRule.js.map +1 -0
  265. package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerTeam.js +503 -0
  266. package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerTeam.js.map +1 -0
  267. package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerUser.js +502 -0
  268. package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerUser.js.map +1 -0
  269. package/build/dist/Models/DatabaseModels/ProxmoxResource.js +761 -0
  270. package/build/dist/Models/DatabaseModels/ProxmoxResource.js.map +1 -0
  271. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +216 -0
  272. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  273. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceLabelRule.js +39 -0
  274. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceLabelRule.js.map +1 -1
  275. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.js +39 -0
  276. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.js.map +1 -1
  277. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js +54 -0
  278. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js.map +1 -1
  279. package/build/dist/Models/DatabaseModels/TelemetryException.js +2 -0
  280. package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
  281. package/build/dist/Server/API/BillingInvoiceAPI.js +35 -5
  282. package/build/dist/Server/API/BillingInvoiceAPI.js.map +1 -1
  283. package/build/dist/Server/API/CephResourceAPI.js +98 -0
  284. package/build/dist/Server/API/CephResourceAPI.js.map +1 -0
  285. package/build/dist/Server/API/DashboardAPI.js +135 -0
  286. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  287. package/build/dist/Server/API/DockerSwarmResourceAPI.js +100 -0
  288. package/build/dist/Server/API/DockerSwarmResourceAPI.js.map +1 -0
  289. package/build/dist/Server/API/ProjectAPI.js +11 -0
  290. package/build/dist/Server/API/ProjectAPI.js.map +1 -1
  291. package/build/dist/Server/API/ProxmoxResourceAPI.js +95 -0
  292. package/build/dist/Server/API/ProxmoxResourceAPI.js.map +1 -0
  293. package/build/dist/Server/API/ResellerPlanAPI.js +17 -3
  294. package/build/dist/Server/API/ResellerPlanAPI.js.map +1 -1
  295. package/build/dist/Server/API/TelemetryAPI.js +8 -1
  296. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  297. package/build/dist/Server/Infrastructure/GlobalCache.js +7 -2
  298. package/build/dist/Server/Infrastructure/GlobalCache.js.map +1 -1
  299. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781500000000-AddProxmoxAndCephClusterTables.js +76 -0
  300. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781500000000-AddProxmoxAndCephClusterTables.js.map +1 -0
  301. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781587937032-MigrationName.js +1100 -0
  302. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781587937032-MigrationName.js.map +1 -0
  303. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781600000000-AddProxmoxCephV2Columns.js +108 -0
  304. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781600000000-AddProxmoxCephV2Columns.js.map +1 -0
  305. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781600000001-AddProxmoxCephActivityAndRules.js +253 -0
  306. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781600000001-AddProxmoxCephActivityAndRules.js.map +1 -0
  307. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781700000000-AddProxmoxCephV3Columns.js +43 -0
  308. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781700000000-AddProxmoxCephV3Columns.js.map +1 -0
  309. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
  310. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  311. package/build/dist/Server/Infrastructure/Redis.js +31 -8
  312. package/build/dist/Server/Infrastructure/Redis.js.map +1 -1
  313. package/build/dist/Server/Services/AlertLabelRuleEngineService.js +30 -4
  314. package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
  315. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +62 -5
  316. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
  317. package/build/dist/Server/Services/AnalyticsDatabaseService.js +1 -1
  318. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  319. package/build/dist/Server/Services/BillingService.js +85 -23
  320. package/build/dist/Server/Services/BillingService.js.map +1 -1
  321. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +166 -0
  322. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -0
  323. package/build/dist/Server/Services/CephClusterLabelRuleService.js +13 -0
  324. package/build/dist/Server/Services/CephClusterLabelRuleService.js.map +1 -0
  325. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +186 -0
  326. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -0
  327. package/build/dist/Server/Services/CephClusterOwnerRuleService.js +13 -0
  328. package/build/dist/Server/Services/CephClusterOwnerRuleService.js.map +1 -0
  329. package/build/dist/Server/Services/CephClusterOwnerTeamService.js +9 -0
  330. package/build/dist/Server/Services/CephClusterOwnerTeamService.js.map +1 -0
  331. package/build/dist/Server/Services/CephClusterOwnerUserService.js +9 -0
  332. package/build/dist/Server/Services/CephClusterOwnerUserService.js.map +1 -0
  333. package/build/dist/Server/Services/CephClusterService.js +353 -0
  334. package/build/dist/Server/Services/CephClusterService.js.map +1 -0
  335. package/build/dist/Server/Services/CephResourceService.js +257 -0
  336. package/build/dist/Server/Services/CephResourceService.js.map +1 -0
  337. package/build/dist/Server/Services/CloudResourceService.js +10 -2
  338. package/build/dist/Server/Services/CloudResourceService.js.map +1 -1
  339. package/build/dist/Server/Services/DockerHostService.js +10 -2
  340. package/build/dist/Server/Services/DockerHostService.js.map +1 -1
  341. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +168 -0
  342. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -0
  343. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleService.js +13 -0
  344. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleService.js.map +1 -0
  345. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +188 -0
  346. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -0
  347. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleService.js +13 -0
  348. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleService.js.map +1 -0
  349. package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js +9 -0
  350. package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js.map +1 -0
  351. package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js +9 -0
  352. package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js.map +1 -0
  353. package/build/dist/Server/Services/DockerSwarmClusterService.js +353 -0
  354. package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -0
  355. package/build/dist/Server/Services/DockerSwarmResourceService.js +258 -0
  356. package/build/dist/Server/Services/DockerSwarmResourceService.js.map +1 -0
  357. package/build/dist/Server/Services/ExceptionAggregationService.js +3 -0
  358. package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
  359. package/build/dist/Server/Services/HostService.js +10 -2
  360. package/build/dist/Server/Services/HostService.js.map +1 -1
  361. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +28 -4
  362. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
  363. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +62 -5
  364. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
  365. package/build/dist/Server/Services/IncidentService.js +8 -0
  366. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  367. package/build/dist/Server/Services/Index.js +38 -0
  368. package/build/dist/Server/Services/Index.js.map +1 -1
  369. package/build/dist/Server/Services/KubernetesClusterService.js +10 -2
  370. package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
  371. package/build/dist/Server/Services/LogAggregationService.js +3 -0
  372. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  373. package/build/dist/Server/Services/MetricAggregationService.js +3 -0
  374. package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
  375. package/build/dist/Server/Services/OpenTelemetryIngestService.js +69 -9
  376. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  377. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +166 -0
  378. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -0
  379. package/build/dist/Server/Services/PodmanHostLabelRuleService.js +13 -0
  380. package/build/dist/Server/Services/PodmanHostLabelRuleService.js.map +1 -0
  381. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +186 -0
  382. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -0
  383. package/build/dist/Server/Services/PodmanHostOwnerRuleService.js +13 -0
  384. package/build/dist/Server/Services/PodmanHostOwnerRuleService.js.map +1 -0
  385. package/build/dist/Server/Services/PodmanHostOwnerTeamService.js +9 -0
  386. package/build/dist/Server/Services/PodmanHostOwnerTeamService.js.map +1 -0
  387. package/build/dist/Server/Services/PodmanHostOwnerUserService.js +9 -0
  388. package/build/dist/Server/Services/PodmanHostOwnerUserService.js.map +1 -0
  389. package/build/dist/Server/Services/PodmanHostService.js +319 -0
  390. package/build/dist/Server/Services/PodmanHostService.js.map +1 -0
  391. package/build/dist/Server/Services/PodmanResourceService.js +196 -0
  392. package/build/dist/Server/Services/PodmanResourceService.js.map +1 -0
  393. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +166 -0
  394. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -0
  395. package/build/dist/Server/Services/ProxmoxClusterLabelRuleService.js +13 -0
  396. package/build/dist/Server/Services/ProxmoxClusterLabelRuleService.js.map +1 -0
  397. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +186 -0
  398. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -0
  399. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleService.js +13 -0
  400. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleService.js.map +1 -0
  401. package/build/dist/Server/Services/ProxmoxClusterOwnerTeamService.js +9 -0
  402. package/build/dist/Server/Services/ProxmoxClusterOwnerTeamService.js.map +1 -0
  403. package/build/dist/Server/Services/ProxmoxClusterOwnerUserService.js +9 -0
  404. package/build/dist/Server/Services/ProxmoxClusterOwnerUserService.js.map +1 -0
  405. package/build/dist/Server/Services/ProxmoxClusterService.js +337 -0
  406. package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -0
  407. package/build/dist/Server/Services/ProxmoxResourceService.js +285 -0
  408. package/build/dist/Server/Services/ProxmoxResourceService.js.map +1 -0
  409. package/build/dist/Server/Services/RumApplicationService.js +10 -2
  410. package/build/dist/Server/Services/RumApplicationService.js.map +1 -1
  411. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +30 -4
  412. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
  413. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +62 -5
  414. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
  415. package/build/dist/Server/Services/ServerlessFunctionService.js +10 -2
  416. package/build/dist/Server/Services/ServerlessFunctionService.js.map +1 -1
  417. package/build/dist/Server/Services/TelemetryUsageBillingService.js +43 -3
  418. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  419. package/build/dist/Server/Services/TraceAggregationService.js +3 -0
  420. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  421. package/build/dist/Server/Types/AnalyticsDatabase/AggregateBy.js +8 -25
  422. package/build/dist/Server/Types/AnalyticsDatabase/AggregateBy.js.map +1 -1
  423. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +13 -0
  424. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
  425. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +44 -0
  426. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  427. package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js +118 -0
  428. package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js.map +1 -0
  429. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +422 -4
  430. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  431. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +137 -8
  432. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  433. package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js +32 -6
  434. package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js.map +1 -1
  435. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +6 -1
  436. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  437. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +39 -0
  438. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
  439. package/build/dist/Server/Utils/Profiling.js +24 -3
  440. package/build/dist/Server/Utils/Profiling.js.map +1 -1
  441. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +4 -0
  442. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
  443. package/build/dist/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.js +854 -0
  444. package/build/dist/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.js.map +1 -0
  445. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js +30 -0
  446. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js.map +1 -1
  447. package/build/dist/Server/Utils/Telemetry/Telemetry.js +6 -0
  448. package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
  449. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +80 -0
  450. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
  451. package/build/dist/Server/Utils/Telemetry.js +8 -10
  452. package/build/dist/Server/Utils/Telemetry.js.map +1 -1
  453. package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js +69 -0
  454. package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js.map +1 -0
  455. package/build/dist/Types/Dashboard/DashboardComponentType.js +11 -0
  456. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  457. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +4 -0
  458. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
  459. package/build/dist/Types/Dashboard/DashboardComponents/DashboardCephOsdListComponent.js +2 -0
  460. package/build/dist/Types/Dashboard/DashboardComponents/DashboardCephOsdListComponent.js.map +1 -0
  461. package/build/dist/Types/Dashboard/DashboardComponents/DashboardCephPoolListComponent.js +2 -0
  462. package/build/dist/Types/Dashboard/DashboardComponents/DashboardCephPoolListComponent.js.map +1 -0
  463. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmNodeListComponent.js +2 -0
  464. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmNodeListComponent.js.map +1 -0
  465. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmServiceListComponent.js +2 -0
  466. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmServiceListComponent.js.map +1 -0
  467. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanContainerListComponent.js +2 -0
  468. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanContainerListComponent.js.map +1 -0
  469. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanHostListComponent.js +2 -0
  470. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanHostListComponent.js.map +1 -0
  471. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanImageListComponent.js +2 -0
  472. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanImageListComponent.js.map +1 -0
  473. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanNetworkListComponent.js +2 -0
  474. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanNetworkListComponent.js.map +1 -0
  475. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanVolumeListComponent.js +2 -0
  476. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanVolumeListComponent.js.map +1 -0
  477. package/build/dist/Types/Dashboard/DashboardComponents/DashboardProxmoxGuestListComponent.js +2 -0
  478. package/build/dist/Types/Dashboard/DashboardComponents/DashboardProxmoxGuestListComponent.js.map +1 -0
  479. package/build/dist/Types/Dashboard/DashboardComponents/DashboardProxmoxNodeListComponent.js +2 -0
  480. package/build/dist/Types/Dashboard/DashboardComponents/DashboardProxmoxNodeListComponent.js.map +1 -0
  481. package/build/dist/Types/Dashboard/DashboardTemplates.js +562 -0
  482. package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
  483. package/build/dist/Types/DockerSwarm/DockerSwarmInventoryExtractor.js +359 -0
  484. package/build/dist/Types/DockerSwarm/DockerSwarmInventoryExtractor.js.map +1 -0
  485. package/build/dist/Types/Icon/IconProp.js +3 -0
  486. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  487. package/build/dist/Types/Monitor/CephAlertTemplates.js +1379 -0
  488. package/build/dist/Types/Monitor/CephAlertTemplates.js.map +1 -0
  489. package/build/dist/Types/Monitor/CephMetricCatalog.js +353 -0
  490. package/build/dist/Types/Monitor/CephMetricCatalog.js.map +1 -0
  491. package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js +358 -0
  492. package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js.map +1 -0
  493. package/build/dist/Types/Monitor/DockerSwarmMetricCatalog.js +103 -0
  494. package/build/dist/Types/Monitor/DockerSwarmMetricCatalog.js.map +1 -0
  495. package/build/dist/Types/Monitor/HostAlertTemplates.js +365 -0
  496. package/build/dist/Types/Monitor/HostAlertTemplates.js.map +1 -0
  497. package/build/dist/Types/Monitor/HostMetricCatalog.js +138 -0
  498. package/build/dist/Types/Monitor/HostMetricCatalog.js.map +1 -0
  499. package/build/dist/Types/Monitor/MonitorStep.js +115 -0
  500. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  501. package/build/dist/Types/Monitor/MonitorStepCephMonitor.js +34 -0
  502. package/build/dist/Types/Monitor/MonitorStepCephMonitor.js.map +1 -0
  503. package/build/dist/Types/Monitor/MonitorStepDockerSwarmMonitor.js +21 -0
  504. package/build/dist/Types/Monitor/MonitorStepDockerSwarmMonitor.js.map +1 -0
  505. package/build/dist/Types/Monitor/MonitorStepHostMonitor.js +20 -0
  506. package/build/dist/Types/Monitor/MonitorStepHostMonitor.js.map +1 -0
  507. package/build/dist/Types/Monitor/MonitorStepPodmanMonitor.js +21 -0
  508. package/build/dist/Types/Monitor/MonitorStepPodmanMonitor.js.map +1 -0
  509. package/build/dist/Types/Monitor/MonitorStepProxmoxMonitor.js +36 -0
  510. package/build/dist/Types/Monitor/MonitorStepProxmoxMonitor.js.map +1 -0
  511. package/build/dist/Types/Monitor/MonitorType.js +66 -1
  512. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  513. package/build/dist/Types/Monitor/PodmanAlertTemplates.js +410 -0
  514. package/build/dist/Types/Monitor/PodmanAlertTemplates.js.map +1 -0
  515. package/build/dist/Types/Monitor/PodmanMetricCatalog.js +192 -0
  516. package/build/dist/Types/Monitor/PodmanMetricCatalog.js.map +1 -0
  517. package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +743 -0
  518. package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js.map +1 -0
  519. package/build/dist/Types/Monitor/ProxmoxMetricCatalog.js +320 -0
  520. package/build/dist/Types/Monitor/ProxmoxMetricCatalog.js.map +1 -0
  521. package/build/dist/Types/Permission.js +824 -0
  522. package/build/dist/Types/Permission.js.map +1 -1
  523. package/build/dist/Types/Podman/PodmanInventoryExtractor.js +293 -0
  524. package/build/dist/Types/Podman/PodmanInventoryExtractor.js.map +1 -0
  525. package/build/dist/Types/Telemetry/EntityType.js +23 -0
  526. package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
  527. package/build/dist/Types/Telemetry/ServiceType.js +4 -0
  528. package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
  529. package/build/dist/UI/Components/Icon/Icon.js +49 -0
  530. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  531. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +30 -2
  532. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  533. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +22 -0
  534. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
  535. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +11 -1
  536. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
  537. package/build/dist/UI/Utils/Telemetry/Telemetry.js +11 -10
  538. package/build/dist/UI/Utils/Telemetry/Telemetry.js.map +1 -1
  539. package/build/dist/UI/Utils/TelemetryService.js +6 -2
  540. package/build/dist/UI/Utils/TelemetryService.js.map +1 -1
  541. package/build/dist/Utils/Dashboard/Components/DashboardCephOsdListComponent.js +50 -0
  542. package/build/dist/Utils/Dashboard/Components/DashboardCephOsdListComponent.js.map +1 -0
  543. package/build/dist/Utils/Dashboard/Components/DashboardCephPoolListComponent.js +27 -0
  544. package/build/dist/Utils/Dashboard/Components/DashboardCephPoolListComponent.js.map +1 -0
  545. package/build/dist/Utils/Dashboard/Components/DashboardCephResourceListShared.js +46 -0
  546. package/build/dist/Utils/Dashboard/Components/DashboardCephResourceListShared.js.map +1 -0
  547. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmNodeListComponent.js +55 -0
  548. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmNodeListComponent.js.map +1 -0
  549. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmResourceListShared.js +46 -0
  550. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmResourceListShared.js.map +1 -0
  551. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmServiceListComponent.js +55 -0
  552. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmServiceListComponent.js.map +1 -0
  553. package/build/dist/Utils/Dashboard/Components/DashboardPodmanContainerListComponent.js +77 -0
  554. package/build/dist/Utils/Dashboard/Components/DashboardPodmanContainerListComponent.js.map +1 -0
  555. package/build/dist/Utils/Dashboard/Components/DashboardPodmanHostListComponent.js +71 -0
  556. package/build/dist/Utils/Dashboard/Components/DashboardPodmanHostListComponent.js.map +1 -0
  557. package/build/dist/Utils/Dashboard/Components/DashboardPodmanImageListComponent.js +77 -0
  558. package/build/dist/Utils/Dashboard/Components/DashboardPodmanImageListComponent.js.map +1 -0
  559. package/build/dist/Utils/Dashboard/Components/DashboardPodmanNetworkListComponent.js +68 -0
  560. package/build/dist/Utils/Dashboard/Components/DashboardPodmanNetworkListComponent.js.map +1 -0
  561. package/build/dist/Utils/Dashboard/Components/DashboardPodmanVolumeListComponent.js +68 -0
  562. package/build/dist/Utils/Dashboard/Components/DashboardPodmanVolumeListComponent.js.map +1 -0
  563. package/build/dist/Utils/Dashboard/Components/DashboardProxmoxGuestListComponent.js +55 -0
  564. package/build/dist/Utils/Dashboard/Components/DashboardProxmoxGuestListComponent.js.map +1 -0
  565. package/build/dist/Utils/Dashboard/Components/DashboardProxmoxNodeListComponent.js +42 -0
  566. package/build/dist/Utils/Dashboard/Components/DashboardProxmoxNodeListComponent.js.map +1 -0
  567. package/build/dist/Utils/Dashboard/Components/DashboardProxmoxResourceListShared.js +46 -0
  568. package/build/dist/Utils/Dashboard/Components/DashboardProxmoxResourceListShared.js.map +1 -0
  569. package/build/dist/Utils/Dashboard/Components/Index.js +44 -0
  570. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  571. package/build/dist/Utils/Telemetry/EntityKey.js +41 -0
  572. package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
  573. package/build/dist/Utils/Telemetry/EntityRelationship.js +3 -0
  574. package/build/dist/Utils/Telemetry/EntityRelationship.js.map +1 -1
  575. package/build/dist/Utils/Telemetry/HeartbeatAvailability.js +174 -0
  576. package/build/dist/Utils/Telemetry/HeartbeatAvailability.js.map +1 -0
  577. package/package.json +29 -21
@@ -0,0 +1,404 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/ProxmoxResource";
3
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
4
+ import ObjectID from "../../Types/ObjectID";
5
+ import OneUptimeDate from "../../Types/Date";
6
+ import QueryHelper from "../Types/Database/QueryHelper";
7
+ import logger from "../Utils/Logger";
8
+
9
+ /*
10
+ * ------------------------------------------------------------------
11
+ * ProxmoxResourceService
12
+ *
13
+ * Writes and reads the Proxmox inventory table populated by the
14
+ * telemetry ingest path. Callers are either:
15
+ * - OtelMetricsIngestService (bulkUpsert + bulkUpdateLatestMetrics,
16
+ * from the pve_* snapshot scan in processMetricsAsync)
17
+ * - CleanupStaleResources worker (deleteStaleForCluster)
18
+ * - ProxmoxResourceAPI / the dashboard pages (reads via the
19
+ * inherited DatabaseService CRUD)
20
+ *
21
+ * Identity + status and the latest-metric mirror both arrive on the
22
+ * same metric scrape (unlike K8s, which needs a separate k8sobjects
23
+ * log stream for identity), so both writes happen in the same flush.
24
+ *
25
+ * ------------------------------------------------------------------
26
+ */
27
+
28
+ export interface ParsedProxmoxResource {
29
+ kind: string; // Node | Guest | Storage
30
+ externalId: string; // raw pve `id` label, e.g. node/pve1, qemu/100
31
+ name: string | null;
32
+ vmid: number | null;
33
+ guestType: string | null; // qemu | lxc
34
+ parentNodeName: string | null;
35
+ isUp: boolean | null;
36
+ haState: string | null;
37
+ onboot: boolean | null;
38
+ /*
39
+ * WI-24 backup coverage: true = covered by at least one backup job,
40
+ * false = a pve_not_backed_up_info series carried this guest's id,
41
+ * null = batch lacked the backup-info collector output (keeps the
42
+ * last-known value via COALESCE) or non-Guest kind.
43
+ */
44
+ isBackedUp: boolean | null;
45
+ uptimeSeconds: number | null;
46
+ lastSeenAt: Date;
47
+ }
48
+
49
+ export interface ProxmoxResourceLatestMetric {
50
+ kind: string;
51
+ externalId: string;
52
+ cpuPercent: number | null;
53
+ memoryBytes: number | null;
54
+ maxMemoryBytes: number | null;
55
+ memoryPercent: number | null;
56
+ diskBytes: number | null;
57
+ maxDiskBytes: number | null;
58
+ observedAt: Date;
59
+ }
60
+
61
+ export interface ProxmoxInventorySummary {
62
+ countsByKind: Record<string, number>;
63
+ nodeOnlineCount: number;
64
+ guestRunningCount: number;
65
+ }
66
+
67
+ const UPSERT_BATCH_SIZE: number = 500;
68
+ const STALE_DELETE_WARN_THRESHOLD: number = 100;
69
+
70
+ /*
71
+ * Column order used by bulkUpsert() and its generated parameter tuples.
72
+ * Keep this and the INSERT column list in perfect sync.
73
+ */
74
+ const UPSERT_COLUMNS: Array<string> = [
75
+ "projectId",
76
+ "proxmoxClusterId",
77
+ "kind",
78
+ "externalId",
79
+ "name",
80
+ "vmid",
81
+ "guestType",
82
+ "parentNodeName",
83
+ "isUp",
84
+ "haState",
85
+ "onboot",
86
+ "isBackedUp",
87
+ "uptimeSeconds",
88
+ "lastSeenAt",
89
+ "version",
90
+ ];
91
+
92
+ export class Service extends DatabaseService<Model> {
93
+ public constructor() {
94
+ super(Model);
95
+ }
96
+
97
+ /**
98
+ * Upsert a batch of parsed resources for a single (project, cluster)
99
+ * pair. Uses ON CONFLICT on the UNIQUE (projectId, proxmoxClusterId,
100
+ * kind, externalId) index with a dominance guard on lastSeenAt so
101
+ * out-of-order ingest never regresses a newer snapshot.
102
+ *
103
+ * Identity/status columns COALESCE against the existing row (unlike
104
+ * the K8s upsert, which overwrites): a pve-exporter batch is usually
105
+ * a complete scrape, but a batch that happens to lack an info series
106
+ * (e.g. only pve_up made it through a pipeline filter) must not blank
107
+ * name/vmid/haState that an earlier batch already filled.
108
+ */
109
+ @CaptureSpan()
110
+ public async bulkUpsert(data: {
111
+ projectId: ObjectID;
112
+ proxmoxClusterId: ObjectID;
113
+ resources: Array<ParsedProxmoxResource>;
114
+ }): Promise<void> {
115
+ if (data.resources.length === 0) {
116
+ return;
117
+ }
118
+
119
+ // Chunk to keep individual statement parameter counts reasonable.
120
+ for (let i: number = 0; i < data.resources.length; i += UPSERT_BATCH_SIZE) {
121
+ const chunk: Array<ParsedProxmoxResource> = data.resources.slice(
122
+ i,
123
+ i + UPSERT_BATCH_SIZE,
124
+ );
125
+
126
+ const valueFragments: Array<string> = [];
127
+ const params: Array<unknown> = [];
128
+ let paramIndex: number = 1;
129
+
130
+ for (const r of chunk) {
131
+ const placeholders: Array<string> = [];
132
+ for (let c: number = 0; c < UPSERT_COLUMNS.length; c++) {
133
+ placeholders.push(`$${paramIndex++}`);
134
+ }
135
+ valueFragments.push(`(${placeholders.join(", ")})`);
136
+
137
+ params.push(
138
+ data.projectId.toString(),
139
+ data.proxmoxClusterId.toString(),
140
+ r.kind,
141
+ r.externalId,
142
+ r.name,
143
+ r.vmid,
144
+ r.guestType,
145
+ r.parentNodeName,
146
+ r.isUp,
147
+ r.haState,
148
+ r.onboot,
149
+ r.isBackedUp,
150
+ r.uptimeSeconds !== null ? Math.trunc(r.uptimeSeconds) : null,
151
+ r.lastSeenAt,
152
+ 0, // version (BaseModel @VersionColumn)
153
+ );
154
+ }
155
+
156
+ const sql: string = `
157
+ INSERT INTO "ProxmoxResource" (
158
+ "projectId", "proxmoxClusterId", "kind", "externalId",
159
+ "name", "vmid", "guestType", "parentNodeName",
160
+ "isUp", "haState", "onboot", "isBackedUp", "uptimeSeconds",
161
+ "lastSeenAt", "version"
162
+ )
163
+ VALUES ${valueFragments.join(", ")}
164
+ ON CONFLICT ("projectId", "proxmoxClusterId", "kind", "externalId")
165
+ DO UPDATE SET
166
+ "name" = COALESCE(EXCLUDED."name", "ProxmoxResource"."name"),
167
+ "vmid" = COALESCE(EXCLUDED."vmid", "ProxmoxResource"."vmid"),
168
+ "guestType" = COALESCE(EXCLUDED."guestType", "ProxmoxResource"."guestType"),
169
+ "parentNodeName" = COALESCE(EXCLUDED."parentNodeName", "ProxmoxResource"."parentNodeName"),
170
+ "isUp" = COALESCE(EXCLUDED."isUp", "ProxmoxResource"."isUp"),
171
+ "haState" = COALESCE(EXCLUDED."haState", "ProxmoxResource"."haState"),
172
+ "onboot" = COALESCE(EXCLUDED."onboot", "ProxmoxResource"."onboot"),
173
+ "isBackedUp" = COALESCE(EXCLUDED."isBackedUp", "ProxmoxResource"."isBackedUp"),
174
+ "uptimeSeconds" = COALESCE(EXCLUDED."uptimeSeconds", "ProxmoxResource"."uptimeSeconds"),
175
+ "lastSeenAt" = EXCLUDED."lastSeenAt",
176
+ "updatedAt" = now()
177
+ WHERE EXCLUDED."lastSeenAt" >= "ProxmoxResource"."lastSeenAt"
178
+ `;
179
+
180
+ await this.getRepository().manager.query(sql, params);
181
+ }
182
+ }
183
+
184
+ /**
185
+ * Update the latest-metric mirror columns for a batch of resources.
186
+ * Plain UPDATE: in practice the row always exists because bulkUpsert
187
+ * runs in the same flush; if it somehow doesn't, the write is
188
+ * silently skipped and the next flush catches up.
189
+ *
190
+ * Guarded by metricsUpdatedAt so out-of-order points don't regress a
191
+ * newer observation. COALESCE keeps the existing value when a batch
192
+ * lacks a series — notably latestDiskBytes stays NULL (never 0) for
193
+ * qemu guests without the QEMU guest agent.
194
+ */
195
+ @CaptureSpan()
196
+ public async bulkUpdateLatestMetrics(data: {
197
+ projectId: ObjectID;
198
+ proxmoxClusterId: ObjectID;
199
+ metrics: Array<ProxmoxResourceLatestMetric>;
200
+ }): Promise<void> {
201
+ if (data.metrics.length === 0) {
202
+ return;
203
+ }
204
+
205
+ for (let i: number = 0; i < data.metrics.length; i += UPSERT_BATCH_SIZE) {
206
+ const chunk: Array<ProxmoxResourceLatestMetric> = data.metrics.slice(
207
+ i,
208
+ i + UPSERT_BATCH_SIZE,
209
+ );
210
+
211
+ const valueFragments: Array<string> = [];
212
+ const params: Array<unknown> = [
213
+ data.projectId.toString(),
214
+ data.proxmoxClusterId.toString(),
215
+ ];
216
+ let paramIndex: number = 3;
217
+
218
+ for (const m of chunk) {
219
+ valueFragments.push(
220
+ `($${paramIndex++}, $${paramIndex++}, $${paramIndex++}::numeric, $${paramIndex++}::bigint, $${paramIndex++}::bigint, $${paramIndex++}::numeric, $${paramIndex++}::bigint, $${paramIndex++}::bigint, $${paramIndex++}::timestamptz)`,
221
+ );
222
+ params.push(
223
+ m.kind,
224
+ m.externalId,
225
+ m.cpuPercent !== null && m.cpuPercent !== undefined
226
+ ? m.cpuPercent
227
+ : null,
228
+ m.memoryBytes !== null && m.memoryBytes !== undefined
229
+ ? Math.trunc(m.memoryBytes).toString()
230
+ : null,
231
+ m.maxMemoryBytes !== null && m.maxMemoryBytes !== undefined
232
+ ? Math.trunc(m.maxMemoryBytes).toString()
233
+ : null,
234
+ m.memoryPercent !== null && m.memoryPercent !== undefined
235
+ ? m.memoryPercent
236
+ : null,
237
+ m.diskBytes !== null && m.diskBytes !== undefined
238
+ ? Math.trunc(m.diskBytes).toString()
239
+ : null,
240
+ m.maxDiskBytes !== null && m.maxDiskBytes !== undefined
241
+ ? Math.trunc(m.maxDiskBytes).toString()
242
+ : null,
243
+ m.observedAt,
244
+ );
245
+ }
246
+
247
+ const sql: string = `
248
+ UPDATE "ProxmoxResource" AS p
249
+ SET
250
+ "latestCpuPercent" = COALESCE(v."cpu", p."latestCpuPercent"),
251
+ "latestMemoryBytes" = COALESCE(v."mem", p."latestMemoryBytes"),
252
+ "maxMemoryBytes" = COALESCE(v."maxMem", p."maxMemoryBytes"),
253
+ "latestMemoryPercent" = COALESCE(v."memPct", p."latestMemoryPercent"),
254
+ "latestDiskBytes" = COALESCE(v."disk", p."latestDiskBytes"),
255
+ "maxDiskBytes" = COALESCE(v."maxDisk", p."maxDiskBytes"),
256
+ "metricsUpdatedAt" = v."observedAt",
257
+ "updatedAt" = now()
258
+ FROM (VALUES ${valueFragments.join(", ")})
259
+ AS v("kind", "externalId", "cpu", "mem", "maxMem", "memPct", "disk", "maxDisk", "observedAt")
260
+ WHERE
261
+ p."projectId" = $1
262
+ AND p."proxmoxClusterId" = $2
263
+ AND p."kind" = v."kind"
264
+ AND p."externalId" = v."externalId"
265
+ AND (p."metricsUpdatedAt" IS NULL OR v."observedAt" >= p."metricsUpdatedAt")
266
+ `;
267
+
268
+ await this.getRepository().manager.query(sql, params);
269
+ }
270
+ }
271
+
272
+ /**
273
+ * Hard-delete all resources in a cluster whose last scrape is older
274
+ * than olderThan. Returns the number of deleted rows. Only called by
275
+ * the cleanup worker for clusters that are still connected — a
276
+ * disconnected cluster keeps its last-known inventory.
277
+ */
278
+ @CaptureSpan()
279
+ public async deleteStaleForCluster(data: {
280
+ proxmoxClusterId: ObjectID;
281
+ olderThan: Date;
282
+ }): Promise<number> {
283
+ const result: Array<{ affected?: number }> | { affected?: number } =
284
+ await this.getRepository().manager.query(
285
+ `DELETE FROM "ProxmoxResource" WHERE "proxmoxClusterId" = $1 AND "lastSeenAt" < $2`,
286
+ [data.proxmoxClusterId.toString(), data.olderThan],
287
+ );
288
+
289
+ // Postgres driver returns [rows, affected] for DELETE — normalize.
290
+ let affected: number = 0;
291
+ if (Array.isArray(result) && result.length >= 2) {
292
+ const second: unknown = (result as Array<unknown>)[1];
293
+ if (typeof second === "number") {
294
+ affected = second;
295
+ }
296
+ }
297
+
298
+ if (affected > STALE_DELETE_WARN_THRESHOLD) {
299
+ logger.warn(
300
+ `ProxmoxResource cleanup deleted ${affected} stale rows for cluster ${data.proxmoxClusterId.toString()} — larger than expected; investigate agent health.`,
301
+ );
302
+ }
303
+
304
+ return affected;
305
+ }
306
+
307
+ /**
308
+ * Compute the sidebar/overview summary in Postgres: counts per kind
309
+ * plus the online/running breakdowns, in a single round-trip.
310
+ */
311
+ @CaptureSpan()
312
+ public async getInventorySummary(data: {
313
+ projectId: ObjectID;
314
+ proxmoxClusterId: ObjectID;
315
+ }): Promise<ProxmoxInventorySummary> {
316
+ const rows: Array<{
317
+ kind: string;
318
+ count: string;
319
+ upCount: string;
320
+ }> = await this.getRepository().manager.query(
321
+ `SELECT "kind",
322
+ COUNT(*)::text AS count,
323
+ COUNT(*) FILTER (WHERE "isUp" IS TRUE)::text AS "upCount"
324
+ FROM "ProxmoxResource"
325
+ WHERE "projectId" = $1 AND "proxmoxClusterId" = $2 AND "deletedAt" IS NULL
326
+ GROUP BY "kind"`,
327
+ [data.projectId.toString(), data.proxmoxClusterId.toString()],
328
+ );
329
+
330
+ const countsByKind: Record<string, number> = {};
331
+ let nodeOnlineCount: number = 0;
332
+ let guestRunningCount: number = 0;
333
+ for (const row of rows) {
334
+ countsByKind[row.kind] = parseInt(row.count, 10) || 0;
335
+ if (row.kind === "Node") {
336
+ nodeOnlineCount = parseInt(row.upCount, 10) || 0;
337
+ }
338
+ if (row.kind === "Guest") {
339
+ guestRunningCount = parseInt(row.upCount, 10) || 0;
340
+ }
341
+ }
342
+
343
+ return {
344
+ countsByKind,
345
+ nodeOnlineCount,
346
+ guestRunningCount,
347
+ };
348
+ }
349
+
350
+ /**
351
+ * Host cross-link heuristic (WI-17): resolve the cluster a guest
352
+ * with this name belongs to. Case-insensitive — host.name casing
353
+ * (canonicalized at ingest) rarely matches the PVE guest name's
354
+ * casing exactly. Returns null when no guest matches.
355
+ */
356
+ @CaptureSpan()
357
+ public async findGuestClusterIdByName(data: {
358
+ projectId: ObjectID;
359
+ name: string;
360
+ }): Promise<ObjectID | null> {
361
+ const guest: Model | null = await this.findOneBy({
362
+ query: {
363
+ projectId: data.projectId,
364
+ kind: "Guest",
365
+ name: QueryHelper.findWithSameText(data.name),
366
+ },
367
+ select: {
368
+ _id: true,
369
+ proxmoxClusterId: true,
370
+ },
371
+ props: {
372
+ isRoot: true,
373
+ },
374
+ });
375
+
376
+ return guest?.proxmoxClusterId || null;
377
+ }
378
+
379
+ /**
380
+ * Helper for the cleanup worker: snapshot-interval aware cutoff.
381
+ * 3× the 5-minute scrape interval by default. Tune via
382
+ * PVE_INVENTORY_STALE_MINUTES (min 5).
383
+ */
384
+ public getStaleThresholdDate(nowOverride?: Date): Date {
385
+ const minutes: number = this.getStaleThresholdMinutes();
386
+ return OneUptimeDate.addRemoveMinutes(
387
+ nowOverride || OneUptimeDate.getCurrentDate(),
388
+ -minutes,
389
+ );
390
+ }
391
+
392
+ public getStaleThresholdMinutes(): number {
393
+ const raw: string | undefined = process.env["PVE_INVENTORY_STALE_MINUTES"];
394
+ if (raw) {
395
+ const parsed: number = parseInt(raw, 10);
396
+ if (!isNaN(parsed) && parsed >= 5) {
397
+ return parsed;
398
+ }
399
+ }
400
+ return 15;
401
+ }
402
+ }
403
+
404
+ export default new Service();
@@ -253,15 +253,23 @@ export class Service extends DatabaseService<Model> {
253
253
 
254
254
  @CaptureSpan()
255
255
  public async markDisconnectedApplications(): Promise<void> {
256
- const fiveMinutesAgo: Date = OneUptimeDate.addRemoveMinutes(
256
+ /*
257
+ * Threshold must stay well above the 5-minute OTel ingest
258
+ * maintenance fence (MAINTENANCE_FENCE_TTL_SECONDS in
259
+ * OtelIngestBaseService) — lastSeenAt is legitimately up to
260
+ * ~5 minutes stale during continuous telemetry, so a threshold
261
+ * equal to the fence TTL flaps healthy resources. 15 minutes
262
+ * gives 3x headroom.
263
+ */
264
+ const fifteenMinutesAgo: Date = OneUptimeDate.addRemoveMinutes(
257
265
  OneUptimeDate.getCurrentDate(),
258
- -5,
266
+ -15,
259
267
  );
260
268
 
261
269
  const connectedApps: Array<Model> = await this.findBy({
262
270
  query: {
263
271
  otelCollectorStatus: "connected",
264
- lastSeenAt: QueryHelper.lessThan(fiveMinutesAgo),
272
+ lastSeenAt: QueryHelper.lessThan(fifteenMinutesAgo),
265
273
  },
266
274
  select: {
267
275
  _id: true,
@@ -3,10 +3,12 @@ import Host from "../../Models/DatabaseModels/Host";
3
3
  import KubernetesCluster from "../../Models/DatabaseModels/KubernetesCluster";
4
4
  import Label from "../../Models/DatabaseModels/Label";
5
5
  import Monitor from "../../Models/DatabaseModels/Monitor";
6
+ import PodmanHost from "../../Models/DatabaseModels/PodmanHost";
6
7
  import ScheduledMaintenance from "../../Models/DatabaseModels/ScheduledMaintenance";
7
8
  import ScheduledMaintenanceLabelRule from "../../Models/DatabaseModels/ScheduledMaintenanceLabelRule";
8
9
  import Service from "../../Models/DatabaseModels/Service";
9
10
  import DockerHostService from "./DockerHostService";
11
+ import PodmanHostService from "./PodmanHostService";
10
12
  import HostService from "./HostService";
11
13
  import KubernetesClusterService from "./KubernetesClusterService";
12
14
  import LabelService from "./LabelService";
@@ -32,6 +34,7 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
32
34
  * - all labels of the event's hosts when `inheritLabelsFromHosts`
33
35
  * - all labels of the event's Kubernetes clusters when `inheritLabelsFromKubernetesClusters`
34
36
  * - all labels of the event's Docker hosts when `inheritLabelsFromDockerHosts`
37
+ * - all labels of the event's Podman hosts when `inheritLabelsFromPodmanHosts`
35
38
  * - all labels of the event's services when `inheritLabelsFromServices`
36
39
  * The union is deduped against labels already on the event before insert
37
40
  * to avoid PK conflicts on the ScheduledMaintenanceLabel join table.
@@ -67,6 +70,7 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
67
70
  inheritLabelsFromHosts: true,
68
71
  inheritLabelsFromKubernetesClusters: true,
69
72
  inheritLabelsFromDockerHosts: true,
73
+ inheritLabelsFromPodmanHosts: true,
70
74
  inheritLabelsFromServices: true,
71
75
  },
72
76
  limit: 100,
@@ -82,6 +86,7 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
82
86
  let inheritFromHosts: boolean = false;
83
87
  let inheritFromKubernetesClusters: boolean = false;
84
88
  let inheritFromDockerHosts: boolean = false;
89
+ let inheritFromPodmanHosts: boolean = false;
85
90
  let inheritFromServices: boolean = false;
86
91
  const matchedRules: Array<ScheduledMaintenanceLabelRule> = [];
87
92
 
@@ -111,6 +116,9 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
111
116
  if (rule.inheritLabelsFromDockerHosts) {
112
117
  inheritFromDockerHosts = true;
113
118
  }
119
+ if (rule.inheritLabelsFromPodmanHosts) {
120
+ inheritFromPodmanHosts = true;
121
+ }
114
122
  if (rule.inheritLabelsFromServices) {
115
123
  inheritFromServices = true;
116
124
  }
@@ -120,6 +128,7 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
120
128
  inheritFromHosts ||
121
129
  inheritFromKubernetesClusters ||
122
130
  inheritFromDockerHosts ||
131
+ inheritFromPodmanHosts ||
123
132
  inheritFromServices;
124
133
 
125
134
  let eventWithResources: ScheduledMaintenance | null = null;
@@ -130,6 +139,7 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
130
139
  hosts: { _id: true },
131
140
  kubernetesClusters: { _id: true },
132
141
  dockerHosts: { _id: true },
142
+ podmanHosts: { _id: true },
133
143
  services: { _id: true },
134
144
  },
135
145
  props: { isRoot: true },
@@ -213,6 +223,25 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
213
223
  }
214
224
  }
215
225
 
226
+ if (inheritFromPodmanHosts && eventWithResources?.podmanHosts?.length) {
227
+ for (const eventPodmanHost of eventWithResources.podmanHosts) {
228
+ if (!eventPodmanHost.id) {
229
+ continue;
230
+ }
231
+ const podmanHost: PodmanHost | null =
232
+ await PodmanHostService.findOneById({
233
+ id: eventPodmanHost.id,
234
+ select: { labels: { _id: true } },
235
+ props: { isRoot: true },
236
+ });
237
+ for (const label of podmanHost?.labels || []) {
238
+ if (label.id) {
239
+ labelIdsToAdd.add(label.id.toString());
240
+ }
241
+ }
242
+ }
243
+ }
244
+
216
245
  if (inheritFromServices && eventWithResources?.services?.length) {
217
246
  for (const eventService of eventWithResources.services) {
218
247
  if (!eventService.id) {
@@ -11,6 +11,9 @@ import Label from "../../Models/DatabaseModels/Label";
11
11
  import Monitor from "../../Models/DatabaseModels/Monitor";
12
12
  import MonitorOwnerTeam from "../../Models/DatabaseModels/MonitorOwnerTeam";
13
13
  import MonitorOwnerUser from "../../Models/DatabaseModels/MonitorOwnerUser";
14
+ import PodmanHost from "../../Models/DatabaseModels/PodmanHost";
15
+ import PodmanHostOwnerTeam from "../../Models/DatabaseModels/PodmanHostOwnerTeam";
16
+ import PodmanHostOwnerUser from "../../Models/DatabaseModels/PodmanHostOwnerUser";
14
17
  import ScheduledMaintenance from "../../Models/DatabaseModels/ScheduledMaintenance";
15
18
  import ScheduledMaintenanceOwnerRule from "../../Models/DatabaseModels/ScheduledMaintenanceOwnerRule";
16
19
  import Service from "../../Models/DatabaseModels/Service";
@@ -27,6 +30,8 @@ import KubernetesClusterOwnerUserService from "./KubernetesClusterOwnerUserServi
27
30
  import MonitorOwnerTeamService from "./MonitorOwnerTeamService";
28
31
  import MonitorOwnerUserService from "./MonitorOwnerUserService";
29
32
  import MonitorService from "./MonitorService";
33
+ import PodmanHostOwnerTeamService from "./PodmanHostOwnerTeamService";
34
+ import PodmanHostOwnerUserService from "./PodmanHostOwnerUserService";
30
35
  import ScheduledMaintenanceFeedService from "./ScheduledMaintenanceFeedService";
31
36
  import ScheduledMaintenanceOwnerRuleService from "./ScheduledMaintenanceOwnerRuleService";
32
37
  import ScheduledMaintenanceService from "./ScheduledMaintenanceService";
@@ -82,6 +87,7 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
82
87
  inheritOwnersFromHosts: true,
83
88
  inheritOwnersFromKubernetesClusters: true,
84
89
  inheritOwnersFromDockerHosts: true,
90
+ inheritOwnersFromPodmanHosts: true,
85
91
  inheritOwnersFromServices: true,
86
92
  },
87
93
  limit: 100,
@@ -108,6 +114,7 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
108
114
  let inheritFromHosts: boolean = false;
109
115
  let inheritFromKubernetesClusters: boolean = false;
110
116
  let inheritFromDockerHosts: boolean = false;
117
+ let inheritFromPodmanHosts: boolean = false;
111
118
  let inheritFromServices: boolean = false;
112
119
  const inheritNotifyMode: { value: boolean | null } = { value: null };
113
120
 
@@ -159,6 +166,12 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
159
166
  inheritNotifyMode.value =
160
167
  inheritNotifyMode.value === true ? true : notify;
161
168
  }
169
+ if (rule.inheritOwnersFromPodmanHosts) {
170
+ inheritFromPodmanHosts = true;
171
+ ruleAddedAny = true;
172
+ inheritNotifyMode.value =
173
+ inheritNotifyMode.value === true ? true : notify;
174
+ }
162
175
  if (rule.inheritOwnersFromServices) {
163
176
  inheritFromServices = true;
164
177
  ruleAddedAny = true;
@@ -178,6 +191,8 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
178
191
  const inheritedFromKubernetesClusterTeamIds: Set<string> = new Set();
179
192
  const inheritedFromDockerHostUserIds: Set<string> = new Set();
180
193
  const inheritedFromDockerHostTeamIds: Set<string> = new Set();
194
+ const inheritedFromPodmanHostUserIds: Set<string> = new Set();
195
+ const inheritedFromPodmanHostTeamIds: Set<string> = new Set();
181
196
  const inheritedFromServiceUserIds: Set<string> = new Set();
182
197
  const inheritedFromServiceTeamIds: Set<string> = new Set();
183
198
 
@@ -353,6 +368,47 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
353
368
  }
354
369
  }
355
370
 
371
+ if (inheritFromPodmanHosts && scheduledMaintenance.podmanHosts?.length) {
372
+ const podmanHostIds: Array<ObjectID> = scheduledMaintenance.podmanHosts
373
+ .map((p: PodmanHost) => {
374
+ return p.id;
375
+ })
376
+ .filter((id: ObjectID | null | undefined): id is ObjectID => {
377
+ return Boolean(id);
378
+ });
379
+ if (podmanHostIds.length > 0) {
380
+ const [podmanHostOwnerUsers, podmanHostOwnerTeams]: [
381
+ Array<PodmanHostOwnerUser>,
382
+ Array<PodmanHostOwnerTeam>,
383
+ ] = await Promise.all([
384
+ PodmanHostOwnerUserService.findBy({
385
+ query: { podmanHostId: QueryHelper.any(podmanHostIds) },
386
+ select: { userId: true },
387
+ props: { isRoot: true },
388
+ limit: LIMIT_MAX,
389
+ skip: 0,
390
+ }),
391
+ PodmanHostOwnerTeamService.findBy({
392
+ query: { podmanHostId: QueryHelper.any(podmanHostIds) },
393
+ select: { teamId: true },
394
+ props: { isRoot: true },
395
+ limit: LIMIT_MAX,
396
+ skip: 0,
397
+ }),
398
+ ]);
399
+ for (const ownerUser of podmanHostOwnerUsers) {
400
+ if (ownerUser.userId) {
401
+ inheritedFromPodmanHostUserIds.add(ownerUser.userId.toString());
402
+ }
403
+ }
404
+ for (const ownerTeam of podmanHostOwnerTeams) {
405
+ if (ownerTeam.teamId) {
406
+ inheritedFromPodmanHostTeamIds.add(ownerTeam.teamId.toString());
407
+ }
408
+ }
409
+ }
410
+ }
411
+
356
412
  if (inheritFromServices && scheduledMaintenance.services?.length) {
357
413
  const serviceIds: Array<ObjectID> = scheduledMaintenance.services
358
414
  .map((s: Service) => {
@@ -399,6 +455,7 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
399
455
  ...inheritedFromHostUserIds,
400
456
  ...inheritedFromKubernetesClusterUserIds,
401
457
  ...inheritedFromDockerHostUserIds,
458
+ ...inheritedFromPodmanHostUserIds,
402
459
  ...inheritedFromServiceUserIds,
403
460
  ]);
404
461
  const inheritedTeamIds: Set<string> = new Set([
@@ -406,6 +463,7 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
406
463
  ...inheritedFromHostTeamIds,
407
464
  ...inheritedFromKubernetesClusterTeamIds,
408
465
  ...inheritedFromDockerHostTeamIds,
466
+ ...inheritedFromPodmanHostTeamIds,
409
467
  ...inheritedFromServiceTeamIds,
410
468
  ]);
411
469
 
@@ -480,6 +538,10 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
480
538
  inheritedFromDockerHostUserIds.size +
481
539
  inheritedFromDockerHostTeamIds.size >
482
540
  0,
541
+ inheritedFromPodmanHosts:
542
+ inheritedFromPodmanHostUserIds.size +
543
+ inheritedFromPodmanHostTeamIds.size >
544
+ 0,
483
545
  inheritedFromServices:
484
546
  inheritedFromServiceUserIds.size + inheritedFromServiceTeamIds.size >
485
547
  0,
@@ -505,6 +567,7 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
505
567
  inheritedFromHosts: boolean;
506
568
  inheritedFromKubernetesClusters: boolean;
507
569
  inheritedFromDockerHosts: boolean;
570
+ inheritedFromPodmanHosts: boolean;
508
571
  inheritedFromServices: boolean;
509
572
  }): Promise<void> {
510
573
  const {
@@ -516,6 +579,7 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
516
579
  inheritedFromHosts,
517
580
  inheritedFromKubernetesClusters,
518
581
  inheritedFromDockerHosts,
582
+ inheritedFromPodmanHosts,
519
583
  inheritedFromServices,
520
584
  } = data;
521
585
  if (
@@ -600,6 +664,9 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
600
664
  if (inheritedFromDockerHosts) {
601
665
  inheritedSources.push("Docker hosts");
602
666
  }
667
+ if (inheritedFromPodmanHosts) {
668
+ inheritedSources.push("Podman hosts");
669
+ }
603
670
  if (inheritedFromServices) {
604
671
  inheritedSources.push("services");
605
672
  }