@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,64 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ /*
4
+ * Proxmox + Ceph V3 (Internal/Roadmap/ProxmoxCephProductsV3.md):
5
+ *
6
+ * 1. WI-24 backup coverage — ProxmoxCluster.guestsWithoutBackupCount
7
+ * (written from pve_not_backed_up_total on the WI-3 extras path) and
8
+ * ProxmoxResource.isBackedUp (per-guest flag derived from
9
+ * pve_not_backed_up_info presence: an info series carrying the
10
+ * guest's id means NOT covered by any backup job). Both nullable —
11
+ * NULL means the exporter's cluster-level backup-info collector has
12
+ * not reported, which is distinct from "0 uncovered guests".
13
+ *
14
+ * 2. WI-28 hyperconverged cross-link — nullable
15
+ * ProxmoxCluster.cephClusterId FK (SET NULL on delete), manually
16
+ * linked via the cluster's Settings page. No auto-link heuristic:
17
+ * pve-exporter exposes no fsid, so there is no honest join signal
18
+ * (contrast WI-17's Host link, which had name equality). Mirrors
19
+ * Host.proxmoxClusterId: SET NULL, no index.
20
+ *
21
+ * Columns/FKs are derived from the model decorators in
22
+ * Common/Models/DatabaseModels/{ProxmoxCluster,ProxmoxResource}.ts.
23
+ */
24
+ export class AddProxmoxCephV3Columns1781700000000
25
+ implements MigrationInterface
26
+ {
27
+ public name = "AddProxmoxCephV3Columns1781700000000";
28
+
29
+ public async up(queryRunner: QueryRunner): Promise<void> {
30
+ // WI-24: backup coverage snapshot columns.
31
+ await queryRunner.query(
32
+ `ALTER TABLE "ProxmoxCluster" ADD "guestsWithoutBackupCount" integer`,
33
+ );
34
+ await queryRunner.query(
35
+ `ALTER TABLE "ProxmoxResource" ADD "isBackedUp" boolean`,
36
+ );
37
+
38
+ // WI-28: ProxmoxCluster -> CephCluster cross-link (manual only).
39
+ await queryRunner.query(
40
+ `ALTER TABLE "ProxmoxCluster" ADD "cephClusterId" uuid`,
41
+ );
42
+ await queryRunner.query(
43
+ `ALTER TABLE "ProxmoxCluster" ADD CONSTRAINT "FK_proxmox_cluster_cephClusterId" FOREIGN KEY ("cephClusterId") REFERENCES "CephCluster"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
44
+ );
45
+ }
46
+
47
+ public async down(queryRunner: QueryRunner): Promise<void> {
48
+ // WI-28: Ceph cross-link.
49
+ await queryRunner.query(
50
+ `ALTER TABLE "ProxmoxCluster" DROP CONSTRAINT "FK_proxmox_cluster_cephClusterId"`,
51
+ );
52
+ await queryRunner.query(
53
+ `ALTER TABLE "ProxmoxCluster" DROP COLUMN "cephClusterId"`,
54
+ );
55
+
56
+ // WI-24: backup coverage snapshot columns.
57
+ await queryRunner.query(
58
+ `ALTER TABLE "ProxmoxResource" DROP COLUMN "isBackedUp"`,
59
+ );
60
+ await queryRunner.query(
61
+ `ALTER TABLE "ProxmoxCluster" DROP COLUMN "guestsWithoutBackupCount"`,
62
+ );
63
+ }
64
+ }
@@ -385,6 +385,11 @@ import { AddTelemetryEntityRelationshipTable1781200000001 } from "./178120000000
385
385
  import { MigrationName1781250074195 } from "./1781250074195-MigrationName";
386
386
  import { AddTelemetryEntityLabels1781300000000 } from "./1781300000000-AddTelemetryEntityLabels";
387
387
  import { AddServiceTelemetrySdkLanguage1781400000000 } from "./1781400000000-AddServiceTelemetrySdkLanguage";
388
+ import { AddProxmoxAndCephClusterTables1781500000000 } from "./1781500000000-AddProxmoxAndCephClusterTables";
389
+ import { MigrationName1781587937032 } from "./1781587937032-MigrationName";
390
+ import { AddProxmoxCephV2Columns1781600000000 } from "./1781600000000-AddProxmoxCephV2Columns";
391
+ import { AddProxmoxCephActivityAndRules1781600000001 } from "./1781600000001-AddProxmoxCephActivityAndRules";
392
+ import { AddProxmoxCephV3Columns1781700000000 } from "./1781700000000-AddProxmoxCephV3Columns";
388
393
 
389
394
  export default [
390
395
  InitialMigration,
@@ -774,4 +779,9 @@ export default [
774
779
  AddTelemetryEntityLabels1781300000000,
775
780
  AddServiceTelemetrySdkLanguage1781400000000,
776
781
  MigrationName1781250074195,
782
+ AddProxmoxAndCephClusterTables1781500000000,
783
+ AddProxmoxCephV2Columns1781600000000,
784
+ AddProxmoxCephActivityAndRules1781600000001,
785
+ AddProxmoxCephV3Columns1781700000000,
786
+ MigrationName1781587937032,
777
787
  ];
@@ -100,22 +100,50 @@ export default abstract class Redis {
100
100
  const connectToDatabase: ConnectToDatabaseFunction = async (
101
101
  client: RedisClient,
102
102
  ): Promise<void> => {
103
- try {
104
- await client.connect();
105
- } catch (err) {
106
- if (retry < 3) {
107
- logger.debug(
108
- "Cannot connect to Redis. Retrying again in 5 seconds",
109
- );
110
- // sleep for 5 seconds.
103
+ // A previous attempt (or ioredis' background reconnect) already succeeded.
104
+ if (client.status === "ready") {
105
+ return;
106
+ }
111
107
 
112
- await Sleep.sleep(5000);
108
+ /*
109
+ * The client is created with lazyConnect, so it starts in the "wait" state
110
+ * and only opens when we call connect(). If the first attempt fails, ioredis
111
+ * begins auto-reconnecting in the background (status "connecting" /
112
+ * "reconnecting"), and calling connect() again in that state throws
113
+ * "Redis is already connecting/connected" — which previously propagated out
114
+ * of init() and crashlooped the process. So only issue connect() when the
115
+ * client is idle; when a (re)connect is already in flight, skip the call and
116
+ * wait for it to settle on the next iteration.
117
+ */
118
+ const isIdle: boolean =
119
+ client.status === "wait" ||
120
+ client.status === "end" ||
121
+ client.status === "close";
113
122
 
114
- retry++;
115
- return await connectToDatabase(client);
123
+ try {
124
+ if (isIdle) {
125
+ await client.connect();
126
+ return;
127
+ }
128
+ } catch (err) {
129
+ if (retry >= 3) {
130
+ throw err;
116
131
  }
117
- throw err;
118
132
  }
133
+
134
+ if (retry >= 3) {
135
+ throw new Error(
136
+ `Unable to connect to Redis at ${RedisHostname}:${RedisPort.toNumber()} (status: ${client.status})`,
137
+ );
138
+ }
139
+
140
+ logger.debug("Cannot connect to Redis. Retrying again in 5 seconds");
141
+ // sleep for 5 seconds.
142
+
143
+ await Sleep.sleep(5000);
144
+
145
+ retry++;
146
+ return await connectToDatabase(client);
119
147
  };
120
148
 
121
149
  await connectToDatabase(this.client);
@@ -6,11 +6,13 @@ import Host from "../../Models/DatabaseModels/Host";
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 AlertFeedService from "./AlertFeedService";
11
12
  import AlertLabelRuleService from "./AlertLabelRuleService";
12
13
  import AlertService from "./AlertService";
13
14
  import DockerHostService from "./DockerHostService";
15
+ import PodmanHostService from "./PodmanHostService";
14
16
  import HostService from "./HostService";
15
17
  import KubernetesClusterService from "./KubernetesClusterService";
16
18
  import LabelService from "./LabelService";
@@ -33,6 +35,7 @@ class AlertLabelRuleEngineServiceClass {
33
35
  * - all labels of the alert's hosts when `inheritLabelsFromHosts`
34
36
  * - all labels of the alert's Kubernetes clusters when `inheritLabelsFromKubernetesClusters`
35
37
  * - all labels of the alert's Docker hosts when `inheritLabelsFromDockerHosts`
38
+ * - all labels of the alert's Podman hosts when `inheritLabelsFromPodmanHosts`
36
39
  * - all labels of the alert's services when `inheritLabelsFromServices`
37
40
  * The union is deduped against labels already on the alert before insert
38
41
  * to avoid PK conflicts on the AlertLabel join table.
@@ -66,6 +69,7 @@ class AlertLabelRuleEngineServiceClass {
66
69
  inheritLabelsFromHosts: true,
67
70
  inheritLabelsFromKubernetesClusters: true,
68
71
  inheritLabelsFromDockerHosts: true,
72
+ inheritLabelsFromPodmanHosts: true,
69
73
  inheritLabelsFromServices: true,
70
74
  },
71
75
  limit: 100,
@@ -81,6 +85,7 @@ class AlertLabelRuleEngineServiceClass {
81
85
  let inheritFromHosts: boolean = false;
82
86
  let inheritFromKubernetesClusters: boolean = false;
83
87
  let inheritFromDockerHosts: boolean = false;
88
+ let inheritFromPodmanHosts: boolean = false;
84
89
  let inheritFromServices: boolean = false;
85
90
  const matchedRules: Array<AlertLabelRule> = [];
86
91
 
@@ -107,6 +112,9 @@ class AlertLabelRuleEngineServiceClass {
107
112
  if (rule.inheritLabelsFromDockerHosts) {
108
113
  inheritFromDockerHosts = true;
109
114
  }
115
+ if (rule.inheritLabelsFromPodmanHosts) {
116
+ inheritFromPodmanHosts = true;
117
+ }
110
118
  if (rule.inheritLabelsFromServices) {
111
119
  inheritFromServices = true;
112
120
  }
@@ -116,6 +124,7 @@ class AlertLabelRuleEngineServiceClass {
116
124
  inheritFromHosts ||
117
125
  inheritFromKubernetesClusters ||
118
126
  inheritFromDockerHosts ||
127
+ inheritFromPodmanHosts ||
119
128
  inheritFromServices;
120
129
 
121
130
  let alertWithResources: Alert | null = null;
@@ -126,6 +135,7 @@ class AlertLabelRuleEngineServiceClass {
126
135
  hosts: { _id: true },
127
136
  kubernetesClusters: { _id: true },
128
137
  dockerHosts: { _id: true },
138
+ podmanHosts: { _id: true },
129
139
  services: { _id: true },
130
140
  },
131
141
  props: { isRoot: true },
@@ -204,6 +214,25 @@ class AlertLabelRuleEngineServiceClass {
204
214
  }
205
215
  }
206
216
 
217
+ if (inheritFromPodmanHosts && alertWithResources?.podmanHosts?.length) {
218
+ for (const alertPodmanHost of alertWithResources.podmanHosts) {
219
+ if (!alertPodmanHost.id) {
220
+ continue;
221
+ }
222
+ const podmanHost: PodmanHost | null =
223
+ await PodmanHostService.findOneById({
224
+ id: alertPodmanHost.id,
225
+ select: { labels: { _id: true } },
226
+ props: { isRoot: true },
227
+ });
228
+ for (const label of podmanHost?.labels || []) {
229
+ if (label.id) {
230
+ labelIdsToAdd.add(label.id.toString());
231
+ }
232
+ }
233
+ }
234
+ }
235
+
207
236
  if (inheritFromServices && alertWithResources?.services?.length) {
208
237
  for (const alertService of alertWithResources.services) {
209
238
  if (!alertService.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";
@@ -79,6 +84,7 @@ class AlertOwnerRuleEngineServiceClass {
79
84
  inheritOwnersFromHosts: true,
80
85
  inheritOwnersFromKubernetesClusters: true,
81
86
  inheritOwnersFromDockerHosts: true,
87
+ inheritOwnersFromPodmanHosts: true,
82
88
  inheritOwnersFromServices: true,
83
89
  },
84
90
  limit: 100,
@@ -105,6 +111,7 @@ class AlertOwnerRuleEngineServiceClass {
105
111
  let inheritFromHosts: boolean = false;
106
112
  let inheritFromKubernetesClusters: boolean = false;
107
113
  let inheritFromDockerHosts: boolean = false;
114
+ let inheritFromPodmanHosts: boolean = false;
108
115
  let inheritFromServices: boolean = false;
109
116
  const inheritNotifyMode: { value: boolean | null } = { value: null };
110
117
 
@@ -153,6 +160,12 @@ class AlertOwnerRuleEngineServiceClass {
153
160
  inheritNotifyMode.value =
154
161
  inheritNotifyMode.value === true ? true : notify;
155
162
  }
163
+ if (rule.inheritOwnersFromPodmanHosts) {
164
+ inheritFromPodmanHosts = true;
165
+ ruleAddedAny = true;
166
+ inheritNotifyMode.value =
167
+ inheritNotifyMode.value === true ? true : notify;
168
+ }
156
169
  if (rule.inheritOwnersFromServices) {
157
170
  inheritFromServices = true;
158
171
  ruleAddedAny = true;
@@ -172,6 +185,8 @@ class AlertOwnerRuleEngineServiceClass {
172
185
  const inheritedFromKubernetesClusterTeamIds: Set<string> = new Set();
173
186
  const inheritedFromDockerHostUserIds: Set<string> = new Set();
174
187
  const inheritedFromDockerHostTeamIds: Set<string> = new Set();
188
+ const inheritedFromPodmanHostUserIds: Set<string> = new Set();
189
+ const inheritedFromPodmanHostTeamIds: Set<string> = new Set();
175
190
  const inheritedFromServiceUserIds: Set<string> = new Set();
176
191
  const inheritedFromServiceTeamIds: Set<string> = new Set();
177
192
 
@@ -334,6 +349,47 @@ class AlertOwnerRuleEngineServiceClass {
334
349
  }
335
350
  }
336
351
 
352
+ if (inheritFromPodmanHosts && alert.podmanHosts?.length) {
353
+ const podmanHostIds: Array<ObjectID> = alert.podmanHosts
354
+ .map((p: PodmanHost) => {
355
+ return p.id;
356
+ })
357
+ .filter((id: ObjectID | null | undefined): id is ObjectID => {
358
+ return Boolean(id);
359
+ });
360
+ if (podmanHostIds.length > 0) {
361
+ const [podmanHostOwnerUsers, podmanHostOwnerTeams]: [
362
+ Array<PodmanHostOwnerUser>,
363
+ Array<PodmanHostOwnerTeam>,
364
+ ] = await Promise.all([
365
+ PodmanHostOwnerUserService.findBy({
366
+ query: { podmanHostId: QueryHelper.any(podmanHostIds) },
367
+ select: { userId: true },
368
+ props: { isRoot: true },
369
+ limit: LIMIT_MAX,
370
+ skip: 0,
371
+ }),
372
+ PodmanHostOwnerTeamService.findBy({
373
+ query: { podmanHostId: QueryHelper.any(podmanHostIds) },
374
+ select: { teamId: true },
375
+ props: { isRoot: true },
376
+ limit: LIMIT_MAX,
377
+ skip: 0,
378
+ }),
379
+ ]);
380
+ for (const ownerUser of podmanHostOwnerUsers) {
381
+ if (ownerUser.userId) {
382
+ inheritedFromPodmanHostUserIds.add(ownerUser.userId.toString());
383
+ }
384
+ }
385
+ for (const ownerTeam of podmanHostOwnerTeams) {
386
+ if (ownerTeam.teamId) {
387
+ inheritedFromPodmanHostTeamIds.add(ownerTeam.teamId.toString());
388
+ }
389
+ }
390
+ }
391
+ }
392
+
337
393
  if (inheritFromServices && alert.services?.length) {
338
394
  const serviceIds: Array<ObjectID> = alert.services
339
395
  .map((s: Service) => {
@@ -380,6 +436,7 @@ class AlertOwnerRuleEngineServiceClass {
380
436
  ...inheritedFromHostUserIds,
381
437
  ...inheritedFromKubernetesClusterUserIds,
382
438
  ...inheritedFromDockerHostUserIds,
439
+ ...inheritedFromPodmanHostUserIds,
383
440
  ...inheritedFromServiceUserIds,
384
441
  ]);
385
442
  const inheritedTeamIds: Set<string> = new Set([
@@ -387,6 +444,7 @@ class AlertOwnerRuleEngineServiceClass {
387
444
  ...inheritedFromHostTeamIds,
388
445
  ...inheritedFromKubernetesClusterTeamIds,
389
446
  ...inheritedFromDockerHostTeamIds,
447
+ ...inheritedFromPodmanHostTeamIds,
390
448
  ...inheritedFromServiceTeamIds,
391
449
  ]);
392
450
 
@@ -458,6 +516,10 @@ class AlertOwnerRuleEngineServiceClass {
458
516
  inheritedFromDockerHostUserIds.size +
459
517
  inheritedFromDockerHostTeamIds.size >
460
518
  0,
519
+ inheritedFromPodmanHosts:
520
+ inheritedFromPodmanHostUserIds.size +
521
+ inheritedFromPodmanHostTeamIds.size >
522
+ 0,
461
523
  inheritedFromServices:
462
524
  inheritedFromServiceUserIds.size + inheritedFromServiceTeamIds.size >
463
525
  0,
@@ -480,6 +542,7 @@ class AlertOwnerRuleEngineServiceClass {
480
542
  inheritedFromHosts: boolean;
481
543
  inheritedFromKubernetesClusters: boolean;
482
544
  inheritedFromDockerHosts: boolean;
545
+ inheritedFromPodmanHosts: boolean;
483
546
  inheritedFromServices: boolean;
484
547
  }): Promise<void> {
485
548
  const {
@@ -491,6 +554,7 @@ class AlertOwnerRuleEngineServiceClass {
491
554
  inheritedFromHosts,
492
555
  inheritedFromKubernetesClusters,
493
556
  inheritedFromDockerHosts,
557
+ inheritedFromPodmanHosts,
494
558
  inheritedFromServices,
495
559
  } = data;
496
560
  if (
@@ -575,6 +639,9 @@ class AlertOwnerRuleEngineServiceClass {
575
639
  if (inheritedFromDockerHosts) {
576
640
  inheritedSources.push("Docker hosts");
577
641
  }
642
+ if (inheritedFromPodmanHosts) {
643
+ inheritedSources.push("Podman hosts");
644
+ }
578
645
  if (inheritedFromServices) {
579
646
  inheritedSources.push("services");
580
647
  }
@@ -285,7 +285,7 @@ export default class AnalyticsDatabaseService<
285
285
 
286
286
  const columnName: string = column.key;
287
287
 
288
- if (!this.doesColumnExistInDatabase(columnName)) {
288
+ if (!(await this.doesColumnExistInDatabase(columnName))) {
289
289
  return null;
290
290
  }
291
291
 
@@ -793,14 +793,35 @@ export class BillingService extends BaseService {
793
793
  const customer: Stripe.Response<Stripe.Customer | Stripe.DeletedCustomer> =
794
794
  await this.stripe.customers.retrieve(customerId);
795
795
 
796
- if (
796
+ const defaultPaymentMethod:
797
+ | string
798
+ | Stripe.PaymentMethod
799
+ | null
800
+ | undefined = (customer as Stripe.Customer).invoice_settings
801
+ ?.default_payment_method;
802
+
803
+ const defaultPaymentMethodId: string | undefined =
804
+ typeof defaultPaymentMethod === "string"
805
+ ? defaultPaymentMethod
806
+ : defaultPaymentMethod?.id;
807
+
808
+ if (defaultPaymentMethodId) {
809
+ for (const paymentMethod of paymentMethods) {
810
+ paymentMethod.isDefault = paymentMethod.id === defaultPaymentMethodId;
811
+ }
812
+
813
+ // default payment method first — it's charged first when paying invoices.
814
+ paymentMethods.sort((a: PaymentMethod, b: PaymentMethod) => {
815
+ return Number(b.isDefault) - Number(a.isDefault);
816
+ });
817
+ } else if (
797
818
  (customer as Stripe.Customer).invoice_settings &&
798
- !(customer as Stripe.Customer).invoice_settings?.default_payment_method
819
+ paymentMethods.length > 0 &&
820
+ paymentMethods[0]?.id
799
821
  ) {
800
822
  // set the first payment method as default.
801
- if (paymentMethods.length > 0 && paymentMethods[0]?.id) {
802
- await this.setDefaultPaymentMethod(customerId, paymentMethods[0]?.id);
803
- }
823
+ await this.setDefaultPaymentMethod(customerId, paymentMethods[0].id);
824
+ paymentMethods[0].isDefault = true;
804
825
  }
805
826
 
806
827
  return paymentMethods;
@@ -1237,6 +1258,41 @@ export class BillingService extends BaseService {
1237
1258
  return invoice;
1238
1259
  }
1239
1260
 
1261
+ /*
1262
+ * Returns true if the error is attributable to the payment method itself
1263
+ * (declined, expired, unusable), meaning paying with a different payment
1264
+ * method may succeed.
1265
+ *
1266
+ * Not retryable:
1267
+ * - invoice_payment_intent_requires_action (3DS/SCA): the payment method
1268
+ * works but needs customer authentication — throw so the interactive
1269
+ * flow (BillingInvoiceAPI) surfaces the authentication prompt for the
1270
+ * default method instead of silently charging a backup method.
1271
+ * - Invoice-state or connectivity errors: another payment method would
1272
+ * not help, and if the outcome of the attempt is unknown a retry could
1273
+ * double-charge the customer.
1274
+ *
1275
+ * Note: most bank debit (ACH/SEPA/BACS) failures are asynchronous — the
1276
+ * pay call succeeds and the failure arrives days later via webhook — so
1277
+ * failover only catches the synchronous ones (unverified/unusable
1278
+ * accounts).
1279
+ */
1280
+ private canRetryWithDifferentPaymentMethod(err: unknown): boolean {
1281
+ const stripeError: { type?: string; code?: string } = err as {
1282
+ type?: string;
1283
+ code?: string;
1284
+ };
1285
+
1286
+ if (stripeError?.type === "StripeCardError") {
1287
+ return true;
1288
+ }
1289
+
1290
+ return Boolean(
1291
+ stripeError?.code?.startsWith("payment_method_") ||
1292
+ stripeError?.code?.startsWith("bank_account_"),
1293
+ );
1294
+ }
1295
+
1240
1296
  @CaptureSpan()
1241
1297
  public async payInvoice(
1242
1298
  customerId: string,
@@ -1250,23 +1306,55 @@ export class BillingService extends BaseService {
1250
1306
  throw new BadDataException(Errors.BillingService.NO_PAYMENTS_METHODS);
1251
1307
  }
1252
1308
 
1253
- const invoice: Stripe.Invoice = await this.stripe.invoices.pay(invoiceId, {
1254
- payment_method: paymentMethods[0]?.id || "",
1255
- });
1309
+ /*
1310
+ * getPaymentMethods returns the default payment method first. If it is
1311
+ * declined, fall back to the customer's other payment methods before
1312
+ * giving up. Attempts are capped to bound decline traffic on unattended
1313
+ * retry paths (e.g. recharge-on-low-balance), which create a fresh
1314
+ * invoice and retry on every cycle.
1315
+ */
1316
+ const maxPaymentMethodsToTry: number = 3;
1317
+ let lastError: unknown = null;
1256
1318
 
1257
- return {
1258
- id: invoice.id!,
1259
- amount: invoice.amount_due,
1260
- currencyCode: invoice.currency,
1261
- subscriptionId: invoice.subscription?.toString() || undefined,
1262
- status: invoice.status?.toString() || "Unknown",
1263
- downloadableLink: invoice.invoice_pdf?.toString() || "",
1264
- customerId: invoice.customer?.toString() || "",
1265
- invoiceDate: invoice.created
1266
- ? new Date(invoice.created * 1000)
1267
- : OneUptimeDate.getCurrentDate(),
1268
- invoiceNumber: invoice.number || undefined,
1269
- };
1319
+ for (const paymentMethod of paymentMethods.slice(
1320
+ 0,
1321
+ maxPaymentMethodsToTry,
1322
+ )) {
1323
+ try {
1324
+ const invoice: Stripe.Invoice = await this.stripe.invoices.pay(
1325
+ invoiceId,
1326
+ {
1327
+ payment_method: paymentMethod.id,
1328
+ },
1329
+ );
1330
+
1331
+ return {
1332
+ id: invoice.id!,
1333
+ amount: invoice.amount_due,
1334
+ currencyCode: invoice.currency,
1335
+ subscriptionId: invoice.subscription?.toString() || undefined,
1336
+ status: invoice.status?.toString() || "Unknown",
1337
+ downloadableLink: invoice.invoice_pdf?.toString() || "",
1338
+ customerId: invoice.customer?.toString() || "",
1339
+ invoiceDate: invoice.created
1340
+ ? new Date(invoice.created * 1000)
1341
+ : OneUptimeDate.getCurrentDate(),
1342
+ invoiceNumber: invoice.number || undefined,
1343
+ };
1344
+ } catch (err) {
1345
+ logger.error(
1346
+ `Failed to pay invoice ${invoiceId} with payment method ${paymentMethod.type} ending in ${paymentMethod.last4Digits}: ${err}`,
1347
+ );
1348
+
1349
+ if (!this.canRetryWithDifferentPaymentMethod(err)) {
1350
+ throw err;
1351
+ }
1352
+
1353
+ lastError = err;
1354
+ }
1355
+ }
1356
+
1357
+ throw lastError;
1270
1358
  }
1271
1359
 
1272
1360
  public getMeteredPlanPriceId(productType: ProductType): string {