@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
@@ -35,6 +35,25 @@ import IncidentStateTimelineService from "./IncidentStateTimelineService";
35
35
  import LabelService from "./LabelService";
36
36
  import KubernetesClusterService from "./KubernetesClusterService";
37
37
  import DockerHostService from "./DockerHostService";
38
+ import PodmanHostService from "./PodmanHostService";
39
+ import ProxmoxClusterService from "./ProxmoxClusterService";
40
+ import DockerSwarmClusterService from "./DockerSwarmClusterService";
41
+ import CephClusterService from "./CephClusterService";
42
+ import ProxmoxResourceService from "./ProxmoxResourceService";
43
+ import DockerSwarmResourceService from "./DockerSwarmResourceService";
44
+ import CephResourceService from "./CephResourceService";
45
+ import ProxmoxClusterLabelRuleService from "./ProxmoxClusterLabelRuleService";
46
+ import DockerSwarmClusterLabelRuleService from "./DockerSwarmClusterLabelRuleService";
47
+ import ProxmoxClusterOwnerRuleService from "./ProxmoxClusterOwnerRuleService";
48
+ import DockerSwarmClusterOwnerRuleService from "./DockerSwarmClusterOwnerRuleService";
49
+ import ProxmoxClusterOwnerTeamService from "./ProxmoxClusterOwnerTeamService";
50
+ import DockerSwarmClusterOwnerTeamService from "./DockerSwarmClusterOwnerTeamService";
51
+ import ProxmoxClusterOwnerUserService from "./ProxmoxClusterOwnerUserService";
52
+ import DockerSwarmClusterOwnerUserService from "./DockerSwarmClusterOwnerUserService";
53
+ import CephClusterLabelRuleService from "./CephClusterLabelRuleService";
54
+ import CephClusterOwnerRuleService from "./CephClusterOwnerRuleService";
55
+ import CephClusterOwnerTeamService from "./CephClusterOwnerTeamService";
56
+ import CephClusterOwnerUserService from "./CephClusterOwnerUserService";
38
57
  import LlmProviderService from "./LlmProviderService";
39
58
  import AuditLogService from "./AuditLogService";
40
59
  import LogService from "./LogService";
@@ -270,6 +289,25 @@ const services: Array<BaseService> = [
270
289
  LabelService,
271
290
  KubernetesClusterService,
272
291
  DockerHostService,
292
+ PodmanHostService,
293
+ ProxmoxClusterService,
294
+ DockerSwarmClusterService,
295
+ CephClusterService,
296
+ ProxmoxResourceService,
297
+ DockerSwarmResourceService,
298
+ CephResourceService,
299
+ ProxmoxClusterLabelRuleService,
300
+ DockerSwarmClusterLabelRuleService,
301
+ ProxmoxClusterOwnerRuleService,
302
+ DockerSwarmClusterOwnerRuleService,
303
+ ProxmoxClusterOwnerTeamService,
304
+ DockerSwarmClusterOwnerTeamService,
305
+ ProxmoxClusterOwnerUserService,
306
+ DockerSwarmClusterOwnerUserService,
307
+ CephClusterLabelRuleService,
308
+ CephClusterOwnerRuleService,
309
+ CephClusterOwnerTeamService,
310
+ CephClusterOwnerUserService,
273
311
  LlmProviderService,
274
312
 
275
313
  MailService,
@@ -269,15 +269,23 @@ export class Service extends DatabaseService<Model> {
269
269
 
270
270
  @CaptureSpan()
271
271
  public async markDisconnectedClusters(): Promise<void> {
272
- const fiveMinutesAgo: Date = OneUptimeDate.addRemoveMinutes(
272
+ /*
273
+ * Threshold must stay well above the 5-minute OTel ingest
274
+ * maintenance fence (MAINTENANCE_FENCE_TTL_SECONDS in
275
+ * OtelIngestBaseService) — lastSeenAt is legitimately up to
276
+ * ~5 minutes stale during continuous telemetry, so a threshold
277
+ * equal to the fence TTL flaps healthy resources. 15 minutes
278
+ * gives 3x headroom.
279
+ */
280
+ const fifteenMinutesAgo: Date = OneUptimeDate.addRemoveMinutes(
273
281
  OneUptimeDate.getCurrentDate(),
274
- -5,
282
+ -15,
275
283
  );
276
284
 
277
285
  const connectedClusters: Array<Model> = await this.findBy({
278
286
  query: {
279
287
  otelCollectorStatus: "connected",
280
- lastSeenAt: QueryHelper.lessThan(fiveMinutesAgo),
288
+ lastSeenAt: QueryHelper.lessThan(fifteenMinutesAgo),
281
289
  },
282
290
  select: {
283
291
  _id: true,
@@ -109,7 +109,10 @@ export class LogAggregationService {
109
109
  new Map([
110
110
  ["hostId", ServiceType.Host],
111
111
  ["dockerHostId", ServiceType.DockerHost],
112
+ ["podmanHostId", ServiceType.PodmanHost],
112
113
  ["kubernetesClusterId", ServiceType.KubernetesCluster],
114
+ ["proxmoxClusterId", ServiceType.ProxmoxCluster],
115
+ ["cephClusterId", ServiceType.CephCluster],
113
116
  ["serverlessFunctionId", ServiceType.ServerlessFunction],
114
117
  ["cloudResourceId", ServiceType.CloudResource],
115
118
  ["rumApplicationId", ServiceType.RealUserMonitor],
@@ -48,7 +48,10 @@ export class MetricAggregationService {
48
48
  new Map([
49
49
  ["hostId", ServiceType.Host],
50
50
  ["dockerHostId", ServiceType.DockerHost],
51
+ ["podmanHostId", ServiceType.PodmanHost],
51
52
  ["kubernetesClusterId", ServiceType.KubernetesCluster],
53
+ ["proxmoxClusterId", ServiceType.ProxmoxCluster],
54
+ ["cephClusterId", ServiceType.CephCluster],
52
55
  ["serverlessFunctionId", ServiceType.ServerlessFunction],
53
56
  ["cloudResourceId", ServiceType.CloudResource],
54
57
  ["rumApplicationId", ServiceType.RealUserMonitor],
@@ -20,13 +20,21 @@ import TelemetryRetentionConfig from "../../Types/Telemetry/TelemetryRetentionCo
20
20
  import ServiceType from "../../Types/Telemetry/ServiceType";
21
21
  import Host from "../../Models/DatabaseModels/Host";
22
22
  import DockerHost from "../../Models/DatabaseModels/DockerHost";
23
+ import PodmanHost from "../../Models/DatabaseModels/PodmanHost";
23
24
  import KubernetesCluster from "../../Models/DatabaseModels/KubernetesCluster";
25
+ import ProxmoxCluster from "../../Models/DatabaseModels/ProxmoxCluster";
26
+ import CephCluster from "../../Models/DatabaseModels/CephCluster";
27
+ import DockerSwarmCluster from "../../Models/DatabaseModels/DockerSwarmCluster";
24
28
  import ServerlessFunction from "../../Models/DatabaseModels/ServerlessFunction";
25
29
  import CloudResource from "../../Models/DatabaseModels/CloudResource";
26
30
  import RumApplication from "../../Models/DatabaseModels/RumApplication";
27
31
  import HostService from "./HostService";
28
32
  import DockerHostService from "./DockerHostService";
33
+ import PodmanHostService from "./PodmanHostService";
29
34
  import KubernetesClusterService from "./KubernetesClusterService";
35
+ import ProxmoxClusterService from "./ProxmoxClusterService";
36
+ import CephClusterService from "./CephClusterService";
37
+ import DockerSwarmClusterService from "./DockerSwarmClusterService";
30
38
  import ServerlessFunctionService from "./ServerlessFunctionService";
31
39
  import CloudResourceService from "./CloudResourceService";
32
40
  import RumApplicationService from "./RumApplicationService";
@@ -671,6 +679,23 @@ export default class OTelIngestService {
671
679
  dockerHost?.telemetryRetentionConfig ?? null,
672
680
  };
673
681
  }
682
+ if (primaryEntityType === ServiceType.PodmanHost) {
683
+ const podmanHost: PodmanHost | null =
684
+ await PodmanHostService.findOneById({
685
+ id: resourceId,
686
+ select: {
687
+ retainTelemetryDataForDays: true,
688
+ telemetryRetentionConfig: true,
689
+ },
690
+ props: { isRoot: true },
691
+ });
692
+ return {
693
+ retainTelemetryDataForDays:
694
+ podmanHost?.retainTelemetryDataForDays ?? null,
695
+ telemetryRetentionConfig:
696
+ podmanHost?.telemetryRetentionConfig ?? null,
697
+ };
698
+ }
674
699
  if (primaryEntityType === ServiceType.KubernetesCluster) {
675
700
  const cluster: KubernetesCluster | null =
676
701
  await KubernetesClusterService.findOneById({
@@ -687,6 +712,54 @@ export default class OTelIngestService {
687
712
  telemetryRetentionConfig: cluster?.telemetryRetentionConfig ?? null,
688
713
  };
689
714
  }
715
+ if (primaryEntityType === ServiceType.ProxmoxCluster) {
716
+ const cluster: ProxmoxCluster | null =
717
+ await ProxmoxClusterService.findOneById({
718
+ id: resourceId,
719
+ select: {
720
+ retainTelemetryDataForDays: true,
721
+ telemetryRetentionConfig: true,
722
+ },
723
+ props: { isRoot: true },
724
+ });
725
+ return {
726
+ retainTelemetryDataForDays:
727
+ cluster?.retainTelemetryDataForDays ?? null,
728
+ telemetryRetentionConfig: cluster?.telemetryRetentionConfig ?? null,
729
+ };
730
+ }
731
+ if (primaryEntityType === ServiceType.CephCluster) {
732
+ const cluster: CephCluster | null =
733
+ await CephClusterService.findOneById({
734
+ id: resourceId,
735
+ select: {
736
+ retainTelemetryDataForDays: true,
737
+ telemetryRetentionConfig: true,
738
+ },
739
+ props: { isRoot: true },
740
+ });
741
+ return {
742
+ retainTelemetryDataForDays:
743
+ cluster?.retainTelemetryDataForDays ?? null,
744
+ telemetryRetentionConfig: cluster?.telemetryRetentionConfig ?? null,
745
+ };
746
+ }
747
+ if (primaryEntityType === ServiceType.DockerSwarmCluster) {
748
+ const cluster: DockerSwarmCluster | null =
749
+ await DockerSwarmClusterService.findOneById({
750
+ id: resourceId,
751
+ select: {
752
+ retainTelemetryDataForDays: true,
753
+ telemetryRetentionConfig: true,
754
+ },
755
+ props: { isRoot: true },
756
+ });
757
+ return {
758
+ retainTelemetryDataForDays:
759
+ cluster?.retainTelemetryDataForDays ?? null,
760
+ telemetryRetentionConfig: cluster?.telemetryRetentionConfig ?? null,
761
+ };
762
+ }
690
763
  if (primaryEntityType === ServiceType.ServerlessFunction) {
691
764
  const serverlessFunction: ServerlessFunction | null =
692
765
  await ServerlessFunctionService.findOneById({
@@ -0,0 +1,198 @@
1
+ import Label from "../../Models/DatabaseModels/Label";
2
+ import PodmanHost from "../../Models/DatabaseModels/PodmanHost";
3
+ import PodmanHostLabelRule from "../../Models/DatabaseModels/PodmanHostLabelRule";
4
+ import PodmanHostLabelRuleService from "./PodmanHostLabelRuleService";
5
+ import PodmanHostService from "./PodmanHostService";
6
+ import ObjectID from "../../Types/ObjectID";
7
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
8
+ import logger, { LogAttributes } from "../Utils/Logger";
9
+
10
+ class PodmanHostLabelRuleEngineServiceClass {
11
+ /**
12
+ * Evaluates PodmanHostLabelRule rows for the given Podman host and attaches matched
13
+ * labels to it. The union is deduped against labels already on the Podman host
14
+ * before insert to avoid PK conflicts on the join table.
15
+ */
16
+ @CaptureSpan()
17
+ public async applyRulesToPodmanHost(podmanHost: PodmanHost): Promise<void> {
18
+ if (!podmanHost.id || !podmanHost.projectId) {
19
+ return;
20
+ }
21
+
22
+ try {
23
+ const rules: Array<PodmanHostLabelRule> =
24
+ await PodmanHostLabelRuleService.findBy({
25
+ query: {
26
+ projectId: podmanHost.projectId,
27
+ isEnabled: true,
28
+ },
29
+ props: { isRoot: true },
30
+ select: {
31
+ _id: true,
32
+ name: true,
33
+ podmanHostLabels: { _id: true },
34
+ podmanHostNamePattern: true,
35
+ podmanHostDescriptionPattern: true,
36
+ labelsToAdd: { _id: true },
37
+ },
38
+ limit: 100,
39
+ skip: 0,
40
+ });
41
+
42
+ if (rules.length === 0) {
43
+ return;
44
+ }
45
+
46
+ const podmanHostWithDetails: PodmanHost | null =
47
+ await PodmanHostService.findOneById({
48
+ id: podmanHost.id,
49
+ select: {
50
+ name: true,
51
+ description: true,
52
+ labels: { _id: true },
53
+ },
54
+ props: { isRoot: true },
55
+ });
56
+
57
+ if (!podmanHostWithDetails) {
58
+ return;
59
+ }
60
+
61
+ const labelIdsToAdd: Set<string> = new Set();
62
+
63
+ for (const rule of rules) {
64
+ const matches: boolean = this.doesPodmanHostMatchRule(
65
+ podmanHostWithDetails,
66
+ rule,
67
+ );
68
+ if (!matches) {
69
+ continue;
70
+ }
71
+ for (const label of rule.labelsToAdd || []) {
72
+ if (label.id) {
73
+ labelIdsToAdd.add(label.id.toString());
74
+ }
75
+ }
76
+ }
77
+
78
+ if (labelIdsToAdd.size === 0) {
79
+ return;
80
+ }
81
+
82
+ const existingLabelIds: Set<string> = new Set(
83
+ (podmanHostWithDetails.labels || [])
84
+ .map((l: Label) => {
85
+ return l.id?.toString() || "";
86
+ })
87
+ .filter((id: string) => {
88
+ return id !== "";
89
+ }),
90
+ );
91
+
92
+ const newLabelIds: Array<string> = Array.from(labelIdsToAdd).filter(
93
+ (id: string) => {
94
+ return !existingLabelIds.has(id);
95
+ },
96
+ );
97
+ if (newLabelIds.length === 0) {
98
+ return;
99
+ }
100
+
101
+ await PodmanHostService.getRepository()
102
+ .createQueryBuilder()
103
+ .relation(PodmanHost, "labels")
104
+ .of(podmanHost.id.toString())
105
+ .add(newLabelIds);
106
+
107
+ /*
108
+ * Sync in-memory podmanHost.labels so a downstream owner-rule engine in
109
+ * the same onCreateSuccess chain can match on rule-added labels.
110
+ */
111
+ const mergedLabelIds: Set<string> = new Set([
112
+ ...existingLabelIds,
113
+ ...newLabelIds,
114
+ ]);
115
+ podmanHost.labels = Array.from(mergedLabelIds).map((id: string) => {
116
+ const label: Label = new Label();
117
+ label.id = new ObjectID(id);
118
+ return label;
119
+ });
120
+
121
+ logger.debug(
122
+ `PodmanHostLabelRuleEngine attached ${newLabelIds.length} labels to Podman host ${podmanHost.id}`,
123
+ { projectId: podmanHost.projectId.toString() } as LogAttributes,
124
+ );
125
+ } catch (error) {
126
+ logger.error(`Error applying Podman host label rules: ${error}`, {
127
+ projectId: podmanHost.projectId?.toString(),
128
+ podmanHostId: podmanHost.id?.toString(),
129
+ } as LogAttributes);
130
+ }
131
+ }
132
+
133
+ private doesPodmanHostMatchRule(
134
+ podmanHost: PodmanHost,
135
+ rule: PodmanHostLabelRule,
136
+ ): boolean {
137
+ if (rule.podmanHostLabels && rule.podmanHostLabels.length > 0) {
138
+ if (!podmanHost.labels || podmanHost.labels.length === 0) {
139
+ return false;
140
+ }
141
+ const ruleLabelIds: Array<string> = rule.podmanHostLabels.map(
142
+ (l: Label) => {
143
+ return l.id?.toString() || "";
144
+ },
145
+ );
146
+ const labelIds: Array<string> = podmanHost.labels.map((l: Label) => {
147
+ return l.id?.toString() || "";
148
+ });
149
+ if (
150
+ !ruleLabelIds.some((id: string) => {
151
+ return labelIds.includes(id);
152
+ })
153
+ ) {
154
+ return false;
155
+ }
156
+ }
157
+
158
+ if (
159
+ rule.podmanHostNamePattern &&
160
+ (!podmanHost.name ||
161
+ !this.testRegex(rule.podmanHostNamePattern, podmanHost.name, rule))
162
+ ) {
163
+ return false;
164
+ }
165
+
166
+ if (
167
+ rule.podmanHostDescriptionPattern &&
168
+ (!podmanHost.description ||
169
+ !this.testRegex(
170
+ rule.podmanHostDescriptionPattern,
171
+ podmanHost.description,
172
+ rule,
173
+ ))
174
+ ) {
175
+ return false;
176
+ }
177
+
178
+ return true;
179
+ }
180
+
181
+ private testRegex(
182
+ pattern: string,
183
+ value: string,
184
+ rule: PodmanHostLabelRule,
185
+ ): boolean {
186
+ try {
187
+ const regex: RegExp = new RegExp(pattern, "i");
188
+ return regex.test(value);
189
+ } catch {
190
+ logger.warn(
191
+ `Invalid regex in Podman host label rule ${rule.id}: ${pattern}`,
192
+ );
193
+ return false;
194
+ }
195
+ }
196
+ }
197
+
198
+ export default new PodmanHostLabelRuleEngineServiceClass();
@@ -0,0 +1,14 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/PodmanHostLabelRule";
3
+ import { IsBillingEnabled } from "../EnvironmentConfig";
4
+
5
+ export class Service extends DatabaseService<Model> {
6
+ public constructor() {
7
+ super(Model);
8
+ if (IsBillingEnabled) {
9
+ this.hardDeleteItemsOlderThanInDays("createdAt", 3 * 365);
10
+ }
11
+ }
12
+ }
13
+
14
+ export default new Service();
@@ -0,0 +1,216 @@
1
+ import Label from "../../Models/DatabaseModels/Label";
2
+ import PodmanHost from "../../Models/DatabaseModels/PodmanHost";
3
+ import PodmanHostOwnerRule from "../../Models/DatabaseModels/PodmanHostOwnerRule";
4
+ import PodmanHostOwnerUser from "../../Models/DatabaseModels/PodmanHostOwnerUser";
5
+ import PodmanHostOwnerTeam from "../../Models/DatabaseModels/PodmanHostOwnerTeam";
6
+ import PodmanHostOwnerRuleService from "./PodmanHostOwnerRuleService";
7
+ import PodmanHostOwnerUserService from "./PodmanHostOwnerUserService";
8
+ import PodmanHostOwnerTeamService from "./PodmanHostOwnerTeamService";
9
+ import PodmanHostService from "./PodmanHostService";
10
+ import ObjectID from "../../Types/ObjectID";
11
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
12
+ import logger, { LogAttributes } from "../Utils/Logger";
13
+
14
+ class PodmanHostOwnerRuleEngineServiceClass {
15
+ /**
16
+ * Evaluates PodmanHostOwnerRule rows for the given Podman host and adds matched
17
+ * owner users / teams via PodmanHostOwnerUserService / PodmanHostOwnerTeamService. Rules
18
+ * with notifyOwners set notify the added owners; rules with notifyOwners off
19
+ * add silently.
20
+ */
21
+ @CaptureSpan()
22
+ public async applyRulesToPodmanHost(podmanHost: PodmanHost): Promise<void> {
23
+ if (!podmanHost.id || !podmanHost.projectId) {
24
+ return;
25
+ }
26
+
27
+ try {
28
+ const rules: Array<PodmanHostOwnerRule> =
29
+ await PodmanHostOwnerRuleService.findBy({
30
+ query: {
31
+ projectId: podmanHost.projectId,
32
+ isEnabled: true,
33
+ },
34
+ props: { isRoot: true },
35
+ select: {
36
+ _id: true,
37
+ name: true,
38
+ notifyOwners: true,
39
+ podmanHostLabels: { _id: true },
40
+ podmanHostNamePattern: true,
41
+ podmanHostDescriptionPattern: true,
42
+ ownerUsers: { _id: true },
43
+ ownerTeams: { _id: true },
44
+ },
45
+ limit: 100,
46
+ skip: 0,
47
+ });
48
+
49
+ if (rules.length === 0) {
50
+ return;
51
+ }
52
+
53
+ const podmanHostWithDetails: PodmanHost | null =
54
+ await PodmanHostService.findOneById({
55
+ id: podmanHost.id,
56
+ select: {
57
+ name: true,
58
+ description: true,
59
+ labels: { _id: true },
60
+ },
61
+ props: { isRoot: true },
62
+ });
63
+
64
+ if (!podmanHostWithDetails) {
65
+ return;
66
+ }
67
+
68
+ const usersByNotify: Map<boolean, Set<string>> = new Map([
69
+ [true, new Set()],
70
+ [false, new Set()],
71
+ ]);
72
+ const teamsByNotify: Map<boolean, Set<string>> = new Map([
73
+ [true, new Set()],
74
+ [false, new Set()],
75
+ ]);
76
+
77
+ const matchedRules: Array<PodmanHostOwnerRule> = [];
78
+
79
+ for (const rule of rules) {
80
+ const matches: boolean = this.doesPodmanHostMatchRule(
81
+ podmanHostWithDetails,
82
+ rule,
83
+ );
84
+ if (!matches) {
85
+ continue;
86
+ }
87
+ let ruleAddedAny: boolean = false;
88
+ const notify: boolean = rule.notifyOwners !== false;
89
+ for (const user of rule.ownerUsers || []) {
90
+ if (user.id) {
91
+ usersByNotify.get(notify)!.add(user.id.toString());
92
+ ruleAddedAny = true;
93
+ }
94
+ }
95
+ for (const team of rule.ownerTeams || []) {
96
+ if (team.id) {
97
+ teamsByNotify.get(notify)!.add(team.id.toString());
98
+ ruleAddedAny = true;
99
+ }
100
+ }
101
+ if (ruleAddedAny) {
102
+ matchedRules.push(rule);
103
+ }
104
+ }
105
+
106
+ if (matchedRules.length === 0) {
107
+ return;
108
+ }
109
+
110
+ for (const notify of [true, false]) {
111
+ const userIds: Set<string> = usersByNotify.get(notify)!;
112
+ const teamIds: Set<string> = teamsByNotify.get(notify)!;
113
+
114
+ for (const userId of userIds) {
115
+ const owner: PodmanHostOwnerUser = new PodmanHostOwnerUser();
116
+ owner.podmanHostId = podmanHost.id;
117
+ owner.projectId = podmanHost.projectId;
118
+ owner.userId = new ObjectID(userId);
119
+ owner.isOwnerNotified = !notify;
120
+ await PodmanHostOwnerUserService.create({
121
+ data: owner,
122
+ props: { isRoot: true },
123
+ });
124
+ }
125
+
126
+ for (const teamId of teamIds) {
127
+ const owner: PodmanHostOwnerTeam = new PodmanHostOwnerTeam();
128
+ owner.podmanHostId = podmanHost.id;
129
+ owner.projectId = podmanHost.projectId;
130
+ owner.teamId = new ObjectID(teamId);
131
+ owner.isOwnerNotified = !notify;
132
+ await PodmanHostOwnerTeamService.create({
133
+ data: owner,
134
+ props: { isRoot: true },
135
+ });
136
+ }
137
+ }
138
+
139
+ logger.debug(
140
+ `PodmanHostOwnerRuleEngine added owners to Podman host ${podmanHost.id}`,
141
+ { projectId: podmanHost.projectId.toString() } as LogAttributes,
142
+ );
143
+ } catch (error) {
144
+ logger.error(`Error applying Podman host owner rules: ${error}`, {
145
+ projectId: podmanHost.projectId?.toString(),
146
+ podmanHostId: podmanHost.id?.toString(),
147
+ } as LogAttributes);
148
+ }
149
+ }
150
+
151
+ private doesPodmanHostMatchRule(
152
+ podmanHost: PodmanHost,
153
+ rule: PodmanHostOwnerRule,
154
+ ): boolean {
155
+ if (rule.podmanHostLabels && rule.podmanHostLabels.length > 0) {
156
+ if (!podmanHost.labels || podmanHost.labels.length === 0) {
157
+ return false;
158
+ }
159
+ const ruleLabelIds: Array<string> = rule.podmanHostLabels.map(
160
+ (l: Label) => {
161
+ return l.id?.toString() || "";
162
+ },
163
+ );
164
+ const labelIds: Array<string> = podmanHost.labels.map((l: Label) => {
165
+ return l.id?.toString() || "";
166
+ });
167
+ if (
168
+ !ruleLabelIds.some((id: string) => {
169
+ return labelIds.includes(id);
170
+ })
171
+ ) {
172
+ return false;
173
+ }
174
+ }
175
+
176
+ if (
177
+ rule.podmanHostNamePattern &&
178
+ (!podmanHost.name ||
179
+ !this.testRegex(rule.podmanHostNamePattern, podmanHost.name, rule))
180
+ ) {
181
+ return false;
182
+ }
183
+
184
+ if (
185
+ rule.podmanHostDescriptionPattern &&
186
+ (!podmanHost.description ||
187
+ !this.testRegex(
188
+ rule.podmanHostDescriptionPattern,
189
+ podmanHost.description,
190
+ rule,
191
+ ))
192
+ ) {
193
+ return false;
194
+ }
195
+
196
+ return true;
197
+ }
198
+
199
+ private testRegex(
200
+ pattern: string,
201
+ value: string,
202
+ rule: PodmanHostOwnerRule,
203
+ ): boolean {
204
+ try {
205
+ const regex: RegExp = new RegExp(pattern, "i");
206
+ return regex.test(value);
207
+ } catch {
208
+ logger.warn(
209
+ `Invalid regex in Podman host owner rule ${rule.id}: ${pattern}`,
210
+ );
211
+ return false;
212
+ }
213
+ }
214
+ }
215
+
216
+ export default new PodmanHostOwnerRuleEngineServiceClass();
@@ -0,0 +1,14 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/PodmanHostOwnerRule";
3
+ import { IsBillingEnabled } from "../EnvironmentConfig";
4
+
5
+ export class Service extends DatabaseService<Model> {
6
+ public constructor() {
7
+ super(Model);
8
+ if (IsBillingEnabled) {
9
+ this.hardDeleteItemsOlderThanInDays("createdAt", 3 * 365);
10
+ }
11
+ }
12
+ }
13
+
14
+ export default new Service();
@@ -0,0 +1,10 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/PodmanHostOwnerTeam";
3
+
4
+ export class Service extends DatabaseService<Model> {
5
+ public constructor() {
6
+ super(Model);
7
+ }
8
+ }
9
+
10
+ export default new Service();
@@ -0,0 +1,10 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/PodmanHostOwnerUser";
3
+
4
+ export class Service extends DatabaseService<Model> {
5
+ public constructor() {
6
+ super(Model);
7
+ }
8
+ }
9
+
10
+ export default new Service();