@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,381 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/DockerSwarmResource";
3
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
4
+ import ObjectID from "../../Types/ObjectID";
5
+ import OneUptimeDate from "../../Types/Date";
6
+ import { JSONObject } from "../../Types/JSON";
7
+ import logger from "../Utils/Logger";
8
+
9
+ /*
10
+ * ------------------------------------------------------------------
11
+ * DockerSwarmResourceService
12
+ *
13
+ * Writes and reads the Docker Swarm inventory table populated by the
14
+ * telemetry ingest path. Callers are either:
15
+ * - OtelLogsIngestService (bulkUpsert, from the inventory JSON-line
16
+ * snapshot scan — `docker node/service/task/stack/... ls` shipped
17
+ * by the agent's inventory poller)
18
+ * - OtelMetricsIngestService (bulkUpdateLatestMetrics, from the
19
+ * docker_stats receiver per-task CPU/memory mirror)
20
+ * - CleanupStaleResources worker (deleteStaleForCluster)
21
+ * - DockerSwarmResourceAPI / the dashboard pages (reads via the
22
+ * inherited DatabaseService CRUD)
23
+ *
24
+ * Identity/status arrives on the inventory snapshot stream; the
25
+ * latest-metric mirror arrives on the metrics stream, so the two
26
+ * writes happen on different flushes (unlike Proxmox, where both ride
27
+ * the same scrape). Both COALESCE against the existing row so a stream
28
+ * that lacks a field never blanks one another stream already filled.
29
+ *
30
+ * ------------------------------------------------------------------
31
+ */
32
+
33
+ export interface ParsedDockerSwarmResource {
34
+ kind: string; // Node | Service | Task | Stack | Network | Secret | Config | Volume
35
+ externalId: string; // node/<id>, service/<id>, task/<id>, stack/<name>, ...
36
+ name: string | null;
37
+ state: string | null;
38
+ role: string | null; // Node: manager | worker
39
+ serviceMode: string | null; // Service: replicated | global
40
+ desiredReplicas: number | null;
41
+ runningReplicas: number | null;
42
+ image: string | null;
43
+ stackName: string | null;
44
+ serviceName: string | null;
45
+ nodeHostname: string | null;
46
+ driver: string | null;
47
+ isReady: boolean | null;
48
+ attributes: JSONObject | null;
49
+ lastSeenAt: Date;
50
+ }
51
+
52
+ export interface DockerSwarmResourceLatestMetric {
53
+ kind: string;
54
+ externalId: string;
55
+ cpuPercent: number | null;
56
+ memoryBytes: number | null;
57
+ maxMemoryBytes: number | null;
58
+ memoryPercent: number | null;
59
+ observedAt: Date;
60
+ }
61
+
62
+ export interface DockerSwarmInventorySummary {
63
+ countsByKind: Record<string, number>;
64
+ nodeReadyCount: number;
65
+ taskRunningCount: number;
66
+ }
67
+
68
+ const UPSERT_BATCH_SIZE: number = 500;
69
+ const STALE_DELETE_WARN_THRESHOLD: number = 100;
70
+
71
+ /*
72
+ * Column order used by bulkUpsert() and its generated parameter tuples.
73
+ * Keep this and the INSERT column list in perfect sync. The `attributes`
74
+ * column is jsonb (ColumnType.JSON) — its placeholder is cast ::jsonb.
75
+ */
76
+ const UPSERT_COLUMNS: Array<string> = [
77
+ "projectId",
78
+ "dockerSwarmClusterId",
79
+ "kind",
80
+ "externalId",
81
+ "name",
82
+ "state",
83
+ "role",
84
+ "serviceMode",
85
+ "desiredReplicas",
86
+ "runningReplicas",
87
+ "image",
88
+ "stackName",
89
+ "serviceName",
90
+ "nodeHostname",
91
+ "driver",
92
+ "isReady",
93
+ "attributes",
94
+ "lastSeenAt",
95
+ "version",
96
+ ];
97
+
98
+ export class Service extends DatabaseService<Model> {
99
+ public constructor() {
100
+ super(Model);
101
+ }
102
+
103
+ /**
104
+ * Upsert a batch of parsed resources for a single (project, cluster)
105
+ * pair. Uses ON CONFLICT on the UNIQUE (projectId, dockerSwarmClusterId,
106
+ * kind, externalId) index with a dominance guard on lastSeenAt so
107
+ * out-of-order ingest never regresses a newer snapshot.
108
+ *
109
+ * Identity columns COALESCE against the existing row: a snapshot is
110
+ * usually complete, but a partial batch must not blank a field an
111
+ * earlier batch already filled.
112
+ */
113
+ @CaptureSpan()
114
+ public async bulkUpsert(data: {
115
+ projectId: ObjectID;
116
+ dockerSwarmClusterId: ObjectID;
117
+ resources: Array<ParsedDockerSwarmResource>;
118
+ }): Promise<void> {
119
+ if (data.resources.length === 0) {
120
+ return;
121
+ }
122
+
123
+ for (let i: number = 0; i < data.resources.length; i += UPSERT_BATCH_SIZE) {
124
+ const chunk: Array<ParsedDockerSwarmResource> = data.resources.slice(
125
+ i,
126
+ i + UPSERT_BATCH_SIZE,
127
+ );
128
+
129
+ const valueFragments: Array<string> = [];
130
+ const params: Array<unknown> = [];
131
+ let paramIndex: number = 1;
132
+
133
+ for (const r of chunk) {
134
+ const placeholders: Array<string> = [];
135
+ for (const col of UPSERT_COLUMNS) {
136
+ if (col === "attributes") {
137
+ placeholders.push(`$${paramIndex++}::jsonb`);
138
+ } else {
139
+ placeholders.push(`$${paramIndex++}`);
140
+ }
141
+ }
142
+ valueFragments.push(`(${placeholders.join(", ")})`);
143
+
144
+ params.push(
145
+ data.projectId.toString(),
146
+ data.dockerSwarmClusterId.toString(),
147
+ r.kind,
148
+ r.externalId,
149
+ r.name,
150
+ r.state,
151
+ r.role,
152
+ r.serviceMode,
153
+ r.desiredReplicas !== null ? Math.trunc(r.desiredReplicas) : null,
154
+ r.runningReplicas !== null ? Math.trunc(r.runningReplicas) : null,
155
+ r.image,
156
+ r.stackName,
157
+ r.serviceName,
158
+ r.nodeHostname,
159
+ r.driver,
160
+ r.isReady,
161
+ r.attributes ? JSON.stringify(r.attributes) : null,
162
+ r.lastSeenAt,
163
+ 0, // version (BaseModel @VersionColumn)
164
+ );
165
+ }
166
+
167
+ const sql: string = `
168
+ INSERT INTO "DockerSwarmResource" (
169
+ "projectId", "dockerSwarmClusterId", "kind", "externalId",
170
+ "name", "state", "role", "serviceMode",
171
+ "desiredReplicas", "runningReplicas", "image", "stackName",
172
+ "serviceName", "nodeHostname", "driver", "isReady",
173
+ "attributes", "lastSeenAt", "version"
174
+ )
175
+ VALUES ${valueFragments.join(", ")}
176
+ ON CONFLICT ("projectId", "dockerSwarmClusterId", "kind", "externalId")
177
+ DO UPDATE SET
178
+ "name" = COALESCE(EXCLUDED."name", "DockerSwarmResource"."name"),
179
+ "state" = COALESCE(EXCLUDED."state", "DockerSwarmResource"."state"),
180
+ "role" = COALESCE(EXCLUDED."role", "DockerSwarmResource"."role"),
181
+ "serviceMode" = COALESCE(EXCLUDED."serviceMode", "DockerSwarmResource"."serviceMode"),
182
+ "desiredReplicas" = COALESCE(EXCLUDED."desiredReplicas", "DockerSwarmResource"."desiredReplicas"),
183
+ "runningReplicas" = COALESCE(EXCLUDED."runningReplicas", "DockerSwarmResource"."runningReplicas"),
184
+ "image" = COALESCE(EXCLUDED."image", "DockerSwarmResource"."image"),
185
+ "stackName" = COALESCE(EXCLUDED."stackName", "DockerSwarmResource"."stackName"),
186
+ "serviceName" = COALESCE(EXCLUDED."serviceName", "DockerSwarmResource"."serviceName"),
187
+ "nodeHostname" = COALESCE(EXCLUDED."nodeHostname", "DockerSwarmResource"."nodeHostname"),
188
+ "driver" = COALESCE(EXCLUDED."driver", "DockerSwarmResource"."driver"),
189
+ "isReady" = COALESCE(EXCLUDED."isReady", "DockerSwarmResource"."isReady"),
190
+ "attributes" = COALESCE(EXCLUDED."attributes", "DockerSwarmResource"."attributes"),
191
+ "lastSeenAt" = EXCLUDED."lastSeenAt",
192
+ "updatedAt" = now()
193
+ WHERE EXCLUDED."lastSeenAt" >= "DockerSwarmResource"."lastSeenAt"
194
+ `;
195
+
196
+ await this.getRepository().manager.query(sql, params);
197
+ }
198
+ }
199
+
200
+ /**
201
+ * Update the latest-metric mirror columns for a batch of resources
202
+ * (Tasks and Services — the kinds that map to running containers).
203
+ * Plain UPDATE guarded by metricsUpdatedAt so out-of-order points
204
+ * don't regress a newer observation. COALESCE keeps the existing
205
+ * value when a batch lacks a series.
206
+ */
207
+ @CaptureSpan()
208
+ public async bulkUpdateLatestMetrics(data: {
209
+ projectId: ObjectID;
210
+ dockerSwarmClusterId: ObjectID;
211
+ metrics: Array<DockerSwarmResourceLatestMetric>;
212
+ }): Promise<void> {
213
+ if (data.metrics.length === 0) {
214
+ return;
215
+ }
216
+
217
+ for (let i: number = 0; i < data.metrics.length; i += UPSERT_BATCH_SIZE) {
218
+ const chunk: Array<DockerSwarmResourceLatestMetric> = data.metrics.slice(
219
+ i,
220
+ i + UPSERT_BATCH_SIZE,
221
+ );
222
+
223
+ const valueFragments: Array<string> = [];
224
+ const params: Array<unknown> = [
225
+ data.projectId.toString(),
226
+ data.dockerSwarmClusterId.toString(),
227
+ ];
228
+ let paramIndex: number = 3;
229
+
230
+ for (const m of chunk) {
231
+ valueFragments.push(
232
+ `($${paramIndex++}, $${paramIndex++}, $${paramIndex++}::numeric, $${paramIndex++}::bigint, $${paramIndex++}::bigint, $${paramIndex++}::numeric, $${paramIndex++}::timestamptz)`,
233
+ );
234
+ params.push(
235
+ m.kind,
236
+ m.externalId,
237
+ m.cpuPercent !== null && m.cpuPercent !== undefined
238
+ ? m.cpuPercent
239
+ : null,
240
+ m.memoryBytes !== null && m.memoryBytes !== undefined
241
+ ? Math.trunc(m.memoryBytes).toString()
242
+ : null,
243
+ m.maxMemoryBytes !== null && m.maxMemoryBytes !== undefined
244
+ ? Math.trunc(m.maxMemoryBytes).toString()
245
+ : null,
246
+ m.memoryPercent !== null && m.memoryPercent !== undefined
247
+ ? m.memoryPercent
248
+ : null,
249
+ m.observedAt,
250
+ );
251
+ }
252
+
253
+ const sql: string = `
254
+ UPDATE "DockerSwarmResource" AS p
255
+ SET
256
+ "latestCpuPercent" = COALESCE(v."cpu", p."latestCpuPercent"),
257
+ "latestMemoryBytes" = COALESCE(v."mem", p."latestMemoryBytes"),
258
+ "maxMemoryBytes" = COALESCE(v."maxMem", p."maxMemoryBytes"),
259
+ "latestMemoryPercent" = COALESCE(v."memPct", p."latestMemoryPercent"),
260
+ "metricsUpdatedAt" = v."observedAt",
261
+ "updatedAt" = now()
262
+ FROM (VALUES ${valueFragments.join(", ")})
263
+ AS v("kind", "externalId", "cpu", "mem", "maxMem", "memPct", "observedAt")
264
+ WHERE
265
+ p."projectId" = $1
266
+ AND p."dockerSwarmClusterId" = $2
267
+ AND p."kind" = v."kind"
268
+ AND p."externalId" = v."externalId"
269
+ AND (p."metricsUpdatedAt" IS NULL OR v."observedAt" >= p."metricsUpdatedAt")
270
+ `;
271
+
272
+ await this.getRepository().manager.query(sql, params);
273
+ }
274
+ }
275
+
276
+ /**
277
+ * Hard-delete all resources in a cluster whose last snapshot is older
278
+ * than olderThan. Returns the number of deleted rows. Only called by
279
+ * the cleanup worker for clusters that are still connected — a
280
+ * disconnected cluster keeps its last-known inventory.
281
+ */
282
+ @CaptureSpan()
283
+ public async deleteStaleForCluster(data: {
284
+ dockerSwarmClusterId: ObjectID;
285
+ olderThan: Date;
286
+ }): Promise<number> {
287
+ const result: Array<{ affected?: number }> | { affected?: number } =
288
+ await this.getRepository().manager.query(
289
+ `DELETE FROM "DockerSwarmResource" WHERE "dockerSwarmClusterId" = $1 AND "lastSeenAt" < $2`,
290
+ [data.dockerSwarmClusterId.toString(), data.olderThan],
291
+ );
292
+
293
+ // Postgres driver returns [rows, affected] for DELETE — normalize.
294
+ let affected: number = 0;
295
+ if (Array.isArray(result) && result.length >= 2) {
296
+ const second: unknown = (result as Array<unknown>)[1];
297
+ if (typeof second === "number") {
298
+ affected = second;
299
+ }
300
+ }
301
+
302
+ if (affected > STALE_DELETE_WARN_THRESHOLD) {
303
+ logger.warn(
304
+ `DockerSwarmResource cleanup deleted ${affected} stale rows for cluster ${data.dockerSwarmClusterId.toString()} — larger than expected; investigate agent health.`,
305
+ );
306
+ }
307
+
308
+ return affected;
309
+ }
310
+
311
+ /**
312
+ * Compute the sidebar/overview summary in Postgres: counts per kind
313
+ * plus the node-ready and task-running breakdowns, in a single
314
+ * round-trip.
315
+ */
316
+ @CaptureSpan()
317
+ public async getInventorySummary(data: {
318
+ projectId: ObjectID;
319
+ dockerSwarmClusterId: ObjectID;
320
+ }): Promise<DockerSwarmInventorySummary> {
321
+ const rows: Array<{
322
+ kind: string;
323
+ count: string;
324
+ readyCount: string;
325
+ }> = await this.getRepository().manager.query(
326
+ `SELECT "kind",
327
+ COUNT(*)::text AS count,
328
+ COUNT(*) FILTER (WHERE "isReady" IS TRUE)::text AS "readyCount"
329
+ FROM "DockerSwarmResource"
330
+ WHERE "projectId" = $1 AND "dockerSwarmClusterId" = $2 AND "deletedAt" IS NULL
331
+ GROUP BY "kind"`,
332
+ [data.projectId.toString(), data.dockerSwarmClusterId.toString()],
333
+ );
334
+
335
+ const countsByKind: Record<string, number> = {};
336
+ let nodeReadyCount: number = 0;
337
+ let taskRunningCount: number = 0;
338
+ for (const row of rows) {
339
+ countsByKind[row.kind] = parseInt(row.count, 10) || 0;
340
+ if (row.kind === "Node") {
341
+ nodeReadyCount = parseInt(row.readyCount, 10) || 0;
342
+ }
343
+ if (row.kind === "Task") {
344
+ taskRunningCount = parseInt(row.readyCount, 10) || 0;
345
+ }
346
+ }
347
+
348
+ return {
349
+ countsByKind,
350
+ nodeReadyCount,
351
+ taskRunningCount,
352
+ };
353
+ }
354
+
355
+ /**
356
+ * Helper for the cleanup worker: snapshot-interval aware cutoff.
357
+ * 3× the 5-minute snapshot interval by default. Tune via
358
+ * DOCKER_SWARM_INVENTORY_STALE_MINUTES (min 5).
359
+ */
360
+ public getStaleThresholdDate(nowOverride?: Date): Date {
361
+ const minutes: number = this.getStaleThresholdMinutes();
362
+ return OneUptimeDate.addRemoveMinutes(
363
+ nowOverride || OneUptimeDate.getCurrentDate(),
364
+ -minutes,
365
+ );
366
+ }
367
+
368
+ public getStaleThresholdMinutes(): number {
369
+ const raw: string | undefined =
370
+ process.env["DOCKER_SWARM_INVENTORY_STALE_MINUTES"];
371
+ if (raw) {
372
+ const parsed: number = parseInt(raw, 10);
373
+ if (!isNaN(parsed) && parsed >= 5) {
374
+ return parsed;
375
+ }
376
+ }
377
+ return 15;
378
+ }
379
+ }
380
+
381
+ export default new Service();
@@ -72,7 +72,10 @@ export class ExceptionAggregationService {
72
72
  new Map([
73
73
  ["hostId", ServiceType.Host],
74
74
  ["dockerHostId", ServiceType.DockerHost],
75
+ ["podmanHostId", ServiceType.PodmanHost],
75
76
  ["kubernetesClusterId", ServiceType.KubernetesCluster],
77
+ ["proxmoxClusterId", ServiceType.ProxmoxCluster],
78
+ ["cephClusterId", ServiceType.CephCluster],
76
79
  ["serverlessFunctionId", ServiceType.ServerlessFunction],
77
80
  ["cloudResourceId", ServiceType.CloudResource],
78
81
  ["rumApplicationId", ServiceType.RealUserMonitor],
@@ -441,15 +441,23 @@ export class Service extends DatabaseService<Model> {
441
441
 
442
442
  @CaptureSpan()
443
443
  public async markDisconnectedHosts(): Promise<void> {
444
- const fiveMinutesAgo: Date = OneUptimeDate.addRemoveMinutes(
444
+ /*
445
+ * Threshold must stay well above the 5-minute OTel ingest
446
+ * maintenance fence (MAINTENANCE_FENCE_TTL_SECONDS in
447
+ * OtelIngestBaseService) — lastSeenAt is legitimately up to
448
+ * ~5 minutes stale during continuous telemetry, so a threshold
449
+ * equal to the fence TTL flaps healthy resources. 15 minutes
450
+ * gives 3x headroom.
451
+ */
452
+ const fifteenMinutesAgo: Date = OneUptimeDate.addRemoveMinutes(
445
453
  OneUptimeDate.getCurrentDate(),
446
- -5,
454
+ -15,
447
455
  );
448
456
 
449
457
  const connectedHosts: Array<Model> = await this.findBy({
450
458
  query: {
451
459
  otelCollectorStatus: "connected",
452
- lastSeenAt: QueryHelper.lessThan(fiveMinutesAgo),
460
+ lastSeenAt: QueryHelper.lessThan(fifteenMinutesAgo),
453
461
  },
454
462
  select: {
455
463
  _id: true,
@@ -6,8 +6,10 @@ import IncidentSeverity from "../../Models/DatabaseModels/IncidentSeverity";
6
6
  import KubernetesCluster from "../../Models/DatabaseModels/KubernetesCluster";
7
7
  import Label from "../../Models/DatabaseModels/Label";
8
8
  import Monitor from "../../Models/DatabaseModels/Monitor";
9
+ import PodmanHost from "../../Models/DatabaseModels/PodmanHost";
9
10
  import Service from "../../Models/DatabaseModels/Service";
10
11
  import DockerHostService from "./DockerHostService";
12
+ import PodmanHostService from "./PodmanHostService";
11
13
  import HostService from "./HostService";
12
14
  import IncidentFeedService from "./IncidentFeedService";
13
15
  import IncidentLabelRuleService from "./IncidentLabelRuleService";
@@ -33,6 +35,7 @@ class IncidentLabelRuleEngineServiceClass {
33
35
  * - all labels of the incident's hosts when `inheritLabelsFromHosts`
34
36
  * - all labels of the incident's Kubernetes clusters when `inheritLabelsFromKubernetesClusters`
35
37
  * - all labels of the incident's Docker hosts when `inheritLabelsFromDockerHosts`
38
+ * - all labels of the incident's Podman hosts when `inheritLabelsFromPodmanHosts`
36
39
  * - all labels of the incident's services when `inheritLabelsFromServices`
37
40
  * The union is deduped against labels already on the incident before insert
38
41
  * to avoid PK conflicts on the IncidentLabel join table.
@@ -67,6 +70,7 @@ class IncidentLabelRuleEngineServiceClass {
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 IncidentLabelRuleEngineServiceClass {
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<IncidentLabelRule> = [];
87
92
 
@@ -111,6 +116,9 @@ class IncidentLabelRuleEngineServiceClass {
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
  }
@@ -193,6 +201,25 @@ class IncidentLabelRuleEngineServiceClass {
193
201
  }
194
202
  }
195
203
 
204
+ if (inheritFromPodmanHosts && incident.podmanHosts?.length) {
205
+ for (const incidentPodmanHost of incident.podmanHosts) {
206
+ if (!incidentPodmanHost.id) {
207
+ continue;
208
+ }
209
+ const podmanHost: PodmanHost | null =
210
+ await PodmanHostService.findOneById({
211
+ id: incidentPodmanHost.id,
212
+ select: { labels: { _id: true } },
213
+ props: { isRoot: true },
214
+ });
215
+ for (const label of podmanHost?.labels || []) {
216
+ if (label.id) {
217
+ labelIdsToAdd.add(label.id.toString());
218
+ }
219
+ }
220
+ }
221
+ }
222
+
196
223
  if (inheritFromServices && incident.services?.length) {
197
224
  for (const incidentService of incident.services) {
198
225
  if (!incidentService.id) {
@@ -14,6 +14,9 @@ import Label from "../../Models/DatabaseModels/Label";
14
14
  import Monitor from "../../Models/DatabaseModels/Monitor";
15
15
  import MonitorOwnerTeam from "../../Models/DatabaseModels/MonitorOwnerTeam";
16
16
  import MonitorOwnerUser from "../../Models/DatabaseModels/MonitorOwnerUser";
17
+ import PodmanHost from "../../Models/DatabaseModels/PodmanHost";
18
+ import PodmanHostOwnerTeam from "../../Models/DatabaseModels/PodmanHostOwnerTeam";
19
+ import PodmanHostOwnerUser from "../../Models/DatabaseModels/PodmanHostOwnerUser";
17
20
  import Service from "../../Models/DatabaseModels/Service";
18
21
  import ServiceOwnerTeam from "../../Models/DatabaseModels/ServiceOwnerTeam";
19
22
  import ServiceOwnerUser from "../../Models/DatabaseModels/ServiceOwnerUser";
@@ -31,6 +34,8 @@ import KubernetesClusterOwnerUserService from "./KubernetesClusterOwnerUserServi
31
34
  import MonitorOwnerTeamService from "./MonitorOwnerTeamService";
32
35
  import MonitorOwnerUserService from "./MonitorOwnerUserService";
33
36
  import MonitorService from "./MonitorService";
37
+ import PodmanHostOwnerTeamService from "./PodmanHostOwnerTeamService";
38
+ import PodmanHostOwnerUserService from "./PodmanHostOwnerUserService";
34
39
  import ServiceOwnerTeamService from "./ServiceOwnerTeamService";
35
40
  import ServiceOwnerUserService from "./ServiceOwnerUserService";
36
41
  import TeamService from "./TeamService";
@@ -81,6 +86,7 @@ class IncidentOwnerRuleEngineServiceClass {
81
86
  inheritOwnersFromHosts: true,
82
87
  inheritOwnersFromKubernetesClusters: true,
83
88
  inheritOwnersFromDockerHosts: true,
89
+ inheritOwnersFromPodmanHosts: true,
84
90
  inheritOwnersFromServices: true,
85
91
  },
86
92
  limit: 100,
@@ -107,6 +113,7 @@ class IncidentOwnerRuleEngineServiceClass {
107
113
  let inheritFromHosts: boolean = false;
108
114
  let inheritFromKubernetesClusters: boolean = false;
109
115
  let inheritFromDockerHosts: boolean = false;
116
+ let inheritFromPodmanHosts: boolean = false;
110
117
  let inheritFromServices: boolean = false;
111
118
  const inheritNotifyMode: { value: boolean | null } = { value: null };
112
119
 
@@ -158,6 +165,12 @@ class IncidentOwnerRuleEngineServiceClass {
158
165
  inheritNotifyMode.value =
159
166
  inheritNotifyMode.value === true ? true : notify;
160
167
  }
168
+ if (rule.inheritOwnersFromPodmanHosts) {
169
+ inheritFromPodmanHosts = true;
170
+ ruleAddedAny = true;
171
+ inheritNotifyMode.value =
172
+ inheritNotifyMode.value === true ? true : notify;
173
+ }
161
174
  if (rule.inheritOwnersFromServices) {
162
175
  inheritFromServices = true;
163
176
  ruleAddedAny = true;
@@ -177,6 +190,8 @@ class IncidentOwnerRuleEngineServiceClass {
177
190
  const inheritedFromKubernetesClusterTeamIds: Set<string> = new Set();
178
191
  const inheritedFromDockerHostUserIds: Set<string> = new Set();
179
192
  const inheritedFromDockerHostTeamIds: Set<string> = new Set();
193
+ const inheritedFromPodmanHostUserIds: Set<string> = new Set();
194
+ const inheritedFromPodmanHostTeamIds: Set<string> = new Set();
180
195
  const inheritedFromServiceUserIds: Set<string> = new Set();
181
196
  const inheritedFromServiceTeamIds: Set<string> = new Set();
182
197
 
@@ -351,6 +366,47 @@ class IncidentOwnerRuleEngineServiceClass {
351
366
  }
352
367
  }
353
368
 
369
+ if (inheritFromPodmanHosts && incident.podmanHosts?.length) {
370
+ const podmanHostIds: Array<ObjectID> = incident.podmanHosts
371
+ .map((p: PodmanHost) => {
372
+ return p.id;
373
+ })
374
+ .filter((id: ObjectID | null | undefined): id is ObjectID => {
375
+ return Boolean(id);
376
+ });
377
+ if (podmanHostIds.length > 0) {
378
+ const [podmanHostOwnerUsers, podmanHostOwnerTeams]: [
379
+ Array<PodmanHostOwnerUser>,
380
+ Array<PodmanHostOwnerTeam>,
381
+ ] = await Promise.all([
382
+ PodmanHostOwnerUserService.findBy({
383
+ query: { podmanHostId: QueryHelper.any(podmanHostIds) },
384
+ select: { userId: true },
385
+ props: { isRoot: true },
386
+ limit: LIMIT_MAX,
387
+ skip: 0,
388
+ }),
389
+ PodmanHostOwnerTeamService.findBy({
390
+ query: { podmanHostId: QueryHelper.any(podmanHostIds) },
391
+ select: { teamId: true },
392
+ props: { isRoot: true },
393
+ limit: LIMIT_MAX,
394
+ skip: 0,
395
+ }),
396
+ ]);
397
+ for (const ownerUser of podmanHostOwnerUsers) {
398
+ if (ownerUser.userId) {
399
+ inheritedFromPodmanHostUserIds.add(ownerUser.userId.toString());
400
+ }
401
+ }
402
+ for (const ownerTeam of podmanHostOwnerTeams) {
403
+ if (ownerTeam.teamId) {
404
+ inheritedFromPodmanHostTeamIds.add(ownerTeam.teamId.toString());
405
+ }
406
+ }
407
+ }
408
+ }
409
+
354
410
  if (inheritFromServices && incident.services?.length) {
355
411
  const serviceIds: Array<ObjectID> = incident.services
356
412
  .map((s: Service) => {
@@ -397,6 +453,7 @@ class IncidentOwnerRuleEngineServiceClass {
397
453
  ...inheritedFromHostUserIds,
398
454
  ...inheritedFromKubernetesClusterUserIds,
399
455
  ...inheritedFromDockerHostUserIds,
456
+ ...inheritedFromPodmanHostUserIds,
400
457
  ...inheritedFromServiceUserIds,
401
458
  ]);
402
459
  const inheritedTeamIds: Set<string> = new Set([
@@ -404,6 +461,7 @@ class IncidentOwnerRuleEngineServiceClass {
404
461
  ...inheritedFromHostTeamIds,
405
462
  ...inheritedFromKubernetesClusterTeamIds,
406
463
  ...inheritedFromDockerHostTeamIds,
464
+ ...inheritedFromPodmanHostTeamIds,
407
465
  ...inheritedFromServiceTeamIds,
408
466
  ]);
409
467
 
@@ -476,6 +534,10 @@ class IncidentOwnerRuleEngineServiceClass {
476
534
  inheritedFromDockerHostUserIds.size +
477
535
  inheritedFromDockerHostTeamIds.size >
478
536
  0,
537
+ inheritedFromPodmanHosts:
538
+ inheritedFromPodmanHostUserIds.size +
539
+ inheritedFromPodmanHostTeamIds.size >
540
+ 0,
479
541
  inheritedFromServices:
480
542
  inheritedFromServiceUserIds.size + inheritedFromServiceTeamIds.size >
481
543
  0,
@@ -498,6 +560,7 @@ class IncidentOwnerRuleEngineServiceClass {
498
560
  inheritedFromHosts: boolean;
499
561
  inheritedFromKubernetesClusters: boolean;
500
562
  inheritedFromDockerHosts: boolean;
563
+ inheritedFromPodmanHosts: boolean;
501
564
  inheritedFromServices: boolean;
502
565
  }): Promise<void> {
503
566
  const {
@@ -509,6 +572,7 @@ class IncidentOwnerRuleEngineServiceClass {
509
572
  inheritedFromHosts,
510
573
  inheritedFromKubernetesClusters,
511
574
  inheritedFromDockerHosts,
575
+ inheritedFromPodmanHosts,
512
576
  inheritedFromServices,
513
577
  } = data;
514
578
  if (
@@ -593,6 +657,9 @@ class IncidentOwnerRuleEngineServiceClass {
593
657
  if (inheritedFromDockerHosts) {
594
658
  inheritedSources.push("Docker hosts");
595
659
  }
660
+ if (inheritedFromPodmanHosts) {
661
+ inheritedSources.push("Podman hosts");
662
+ }
596
663
  if (inheritedFromServices) {
597
664
  inheritedSources.push("services");
598
665
  }
@@ -29,6 +29,7 @@ import { applyIncidentSelfPrivacyFilter } from "../Utils/Incident/IncidentPrivac
29
29
  import UserNotificationEventType from "../../Types/UserNotification/UserNotificationEventType";
30
30
  import StatusPageSubscriberNotificationStatus from "../../Types/StatusPage/StatusPageSubscriberNotificationStatus";
31
31
  import DockerHost from "../../Models/DatabaseModels/DockerHost";
32
+ import PodmanHost from "../../Models/DatabaseModels/PodmanHost";
32
33
  import Host from "../../Models/DatabaseModels/Host";
33
34
  import KubernetesCluster from "../../Models/DatabaseModels/KubernetesCluster";
34
35
  import ServiceModel from "../../Models/DatabaseModels/Service";
@@ -571,6 +572,7 @@ export class Service extends DatabaseService<Model> {
571
572
  hosts: { _id: true },
572
573
  kubernetesClusters: { _id: true },
573
574
  dockerHosts: { _id: true },
575
+ podmanHosts: { _id: true },
574
576
  services: { _id: true },
575
577
  onCallDutyPolicies: { _id: true },
576
578
  labels: { _id: true },
@@ -689,6 +691,15 @@ export class Service extends DatabaseService<Model> {
689
691
  createBy.data.dockerHosts = stubs;
690
692
  }
691
693
  }
694
+ if (createBy.data.podmanHosts === undefined) {
695
+ const stubs: Array<PodmanHost> | undefined = stubBy(
696
+ PodmanHost,
697
+ incidentTemplate.podmanHosts,
698
+ );
699
+ if (stubs && stubs.length > 0) {
700
+ createBy.data.podmanHosts = stubs;
701
+ }
702
+ }
692
703
  if (createBy.data.services === undefined) {
693
704
  const stubs: Array<ServiceModel> | undefined = stubBy(
694
705
  ServiceModel,