@oneuptime/common 11.0.1 → 11.0.2

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 (341) hide show
  1. package/Models/DatabaseModels/Alert.ts +110 -0
  2. package/Models/DatabaseModels/CephCluster.ts +964 -0
  3. package/Models/DatabaseModels/CephClusterLabelRule.ts +514 -0
  4. package/Models/DatabaseModels/CephClusterOwnerRule.ts +596 -0
  5. package/Models/DatabaseModels/CephClusterOwnerTeam.ts +487 -0
  6. package/Models/DatabaseModels/CephClusterOwnerUser.ts +486 -0
  7. package/Models/DatabaseModels/CephResource.ts +809 -0
  8. package/Models/DatabaseModels/Host.ts +64 -0
  9. package/Models/DatabaseModels/Incident.ts +110 -0
  10. package/Models/DatabaseModels/Index.ts +24 -0
  11. package/Models/DatabaseModels/ProxmoxCluster.ts +943 -0
  12. package/Models/DatabaseModels/ProxmoxClusterLabelRule.ts +514 -0
  13. package/Models/DatabaseModels/ProxmoxClusterOwnerRule.ts +596 -0
  14. package/Models/DatabaseModels/ProxmoxClusterOwnerTeam.ts +487 -0
  15. package/Models/DatabaseModels/ProxmoxClusterOwnerUser.ts +486 -0
  16. package/Models/DatabaseModels/ProxmoxResource.ts +726 -0
  17. package/Models/DatabaseModels/ScheduledMaintenance.ts +110 -0
  18. package/Server/API/BillingInvoiceAPI.ts +47 -7
  19. package/Server/API/CephResourceAPI.ts +134 -0
  20. package/Server/API/DashboardAPI.ts +46 -0
  21. package/Server/API/ProjectAPI.ts +15 -0
  22. package/Server/API/ProxmoxResourceAPI.ts +132 -0
  23. package/Server/API/ResellerPlanAPI.ts +17 -0
  24. package/Server/Infrastructure/GlobalCache.ts +8 -2
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/1781500000000-AddProxmoxAndCephClusterTables.ts +163 -0
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/1781600000000-AddProxmoxCephV2Columns.ts +211 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/1781600000001-AddProxmoxCephActivityAndRules.ts +590 -0
  28. package/Server/Infrastructure/Postgres/SchemaMigrations/1781700000000-AddProxmoxCephV3Columns.ts +64 -0
  29. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
  30. package/Server/Infrastructure/Redis.ts +40 -12
  31. package/Server/Services/AnalyticsDatabaseService.ts +1 -1
  32. package/Server/Services/BillingService.ts +109 -21
  33. package/Server/Services/CephClusterLabelRuleEngineService.ts +200 -0
  34. package/Server/Services/CephClusterLabelRuleService.ts +14 -0
  35. package/Server/Services/CephClusterOwnerRuleEngineService.ts +218 -0
  36. package/Server/Services/CephClusterOwnerRuleService.ts +14 -0
  37. package/Server/Services/CephClusterOwnerTeamService.ts +10 -0
  38. package/Server/Services/CephClusterOwnerUserService.ts +10 -0
  39. package/Server/Services/CephClusterService.ts +401 -0
  40. package/Server/Services/CephResourceService.ts +383 -0
  41. package/Server/Services/CloudResourceService.ts +11 -3
  42. package/Server/Services/DockerHostService.ts +11 -3
  43. package/Server/Services/ExceptionAggregationService.ts +2 -0
  44. package/Server/Services/HostService.ts +11 -3
  45. package/Server/Services/Index.ts +24 -0
  46. package/Server/Services/KubernetesClusterService.ts +11 -3
  47. package/Server/Services/LogAggregationService.ts +2 -0
  48. package/Server/Services/MetricAggregationService.ts +2 -0
  49. package/Server/Services/OpenTelemetryIngestService.ts +36 -0
  50. package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +204 -0
  51. package/Server/Services/ProxmoxClusterLabelRuleService.ts +14 -0
  52. package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +222 -0
  53. package/Server/Services/ProxmoxClusterOwnerRuleService.ts +14 -0
  54. package/Server/Services/ProxmoxClusterOwnerTeamService.ts +10 -0
  55. package/Server/Services/ProxmoxClusterOwnerUserService.ts +10 -0
  56. package/Server/Services/ProxmoxClusterService.ts +382 -0
  57. package/Server/Services/ProxmoxResourceService.ts +404 -0
  58. package/Server/Services/RumApplicationService.ts +11 -3
  59. package/Server/Services/ServerlessFunctionService.ts +11 -3
  60. package/Server/Services/TelemetryUsageBillingService.ts +41 -3
  61. package/Server/Services/TraceAggregationService.ts +2 -0
  62. package/Server/Types/AnalyticsDatabase/AggregateBy.ts +8 -23
  63. package/Server/Utils/Monitor/MonitorAlert.ts +45 -0
  64. package/Server/Utils/Monitor/MonitorClusterContext.ts +129 -0
  65. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +344 -4
  66. package/Server/Utils/Monitor/MonitorIncident.ts +130 -7
  67. package/Server/Utils/Monitor/MonitorMaintenanceSuppression.ts +39 -6
  68. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +3 -1
  69. package/Server/Utils/Monitor/SeriesResourceLabels.ts +33 -0
  70. package/Server/Utils/Profiling.ts +37 -2
  71. package/Server/Utils/Telemetry/EntityRegistry.ts +4 -0
  72. package/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.ts +1096 -0
  73. package/Server/Utils/Telemetry/TelemetryEntity.ts +85 -0
  74. package/Server/Utils/Telemetry.ts +8 -19
  75. package/Tests/Server/API/BillingInvoiceAPI.test.ts +194 -0
  76. package/Tests/Server/API/ProjectAPI.test.ts +91 -0
  77. package/Tests/Server/API/ResellerPlanAPI.test.ts +207 -0
  78. package/Tests/Server/Infrastructure/GlobalCache.test.ts +100 -0
  79. package/Tests/Server/Services/BillingService.test.ts +323 -0
  80. package/Tests/Server/Services/CephResourceService.test.ts +264 -0
  81. package/Tests/Server/Services/ProxmoxResourceService.test.ts +326 -0
  82. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +322 -0
  83. package/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.ts +13 -0
  84. package/Tests/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.test.ts +879 -0
  85. package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +196 -0
  86. package/Tests/Types/Monitor/CephAlertTemplates.test.ts +1231 -0
  87. package/Tests/Types/Monitor/ProxmoxAlertTemplates.test.ts +732 -0
  88. package/Tests/Utils/Telemetry/EntityRelationship.test.ts +49 -0
  89. package/Tests/Utils/Telemetry/HeartbeatAvailability.test.ts +423 -0
  90. package/Types/BaseDatabase/AggregationIntervalUtil.ts +74 -0
  91. package/Types/Dashboard/DashboardComponentType.ts +4 -0
  92. package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +2 -0
  93. package/Types/Dashboard/DashboardComponents/DashboardCephOsdListComponent.ts +15 -0
  94. package/Types/Dashboard/DashboardComponents/DashboardCephPoolListComponent.ts +14 -0
  95. package/Types/Dashboard/DashboardComponents/DashboardProxmoxGuestListComponent.ts +17 -0
  96. package/Types/Dashboard/DashboardComponents/DashboardProxmoxNodeListComponent.ts +16 -0
  97. package/Types/Dashboard/DashboardTemplates.ts +446 -0
  98. package/Types/Icon/IconProp.ts +2 -0
  99. package/Types/Monitor/CephAlertTemplates.ts +1647 -0
  100. package/Types/Monitor/CephMetricCatalog.ts +409 -0
  101. package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +44 -0
  102. package/Types/Monitor/MonitorStep.ts +64 -0
  103. package/Types/Monitor/MonitorStepCephMonitor.ts +57 -0
  104. package/Types/Monitor/MonitorStepProxmoxMonitor.ts +81 -0
  105. package/Types/Monitor/MonitorType.ts +29 -1
  106. package/Types/Monitor/ProxmoxAlertTemplates.ts +899 -0
  107. package/Types/Monitor/ProxmoxMetricCatalog.ts +382 -0
  108. package/Types/Permission.ts +464 -0
  109. package/Types/Telemetry/EntityType.ts +11 -0
  110. package/Types/Telemetry/ServiceType.ts +2 -0
  111. package/UI/Components/Icon/Icon.tsx +84 -0
  112. package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +9 -5
  113. package/UI/Utils/Telemetry/Telemetry.ts +16 -21
  114. package/UI/Utils/TelemetryService.ts +7 -3
  115. package/Utils/Dashboard/Components/DashboardCephOsdListComponent.ts +63 -0
  116. package/Utils/Dashboard/Components/DashboardCephPoolListComponent.ts +32 -0
  117. package/Utils/Dashboard/Components/DashboardCephResourceListShared.ts +61 -0
  118. package/Utils/Dashboard/Components/DashboardProxmoxGuestListComponent.ts +69 -0
  119. package/Utils/Dashboard/Components/DashboardProxmoxNodeListComponent.ts +55 -0
  120. package/Utils/Dashboard/Components/DashboardProxmoxResourceListShared.ts +61 -0
  121. package/Utils/Dashboard/Components/Index.ts +28 -0
  122. package/Utils/Telemetry/EntityKey.ts +35 -0
  123. package/Utils/Telemetry/EntityRelationship.ts +6 -0
  124. package/Utils/Telemetry/HeartbeatAvailability.ts +262 -0
  125. package/build/dist/Models/DatabaseModels/Alert.js +108 -0
  126. package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
  127. package/build/dist/Models/DatabaseModels/CephCluster.js +992 -0
  128. package/build/dist/Models/DatabaseModels/CephCluster.js.map +1 -0
  129. package/build/dist/Models/DatabaseModels/CephClusterLabelRule.js +522 -0
  130. package/build/dist/Models/DatabaseModels/CephClusterLabelRule.js.map +1 -0
  131. package/build/dist/Models/DatabaseModels/CephClusterOwnerRule.js +603 -0
  132. package/build/dist/Models/DatabaseModels/CephClusterOwnerRule.js.map +1 -0
  133. package/build/dist/Models/DatabaseModels/CephClusterOwnerTeam.js +503 -0
  134. package/build/dist/Models/DatabaseModels/CephClusterOwnerTeam.js.map +1 -0
  135. package/build/dist/Models/DatabaseModels/CephClusterOwnerUser.js +502 -0
  136. package/build/dist/Models/DatabaseModels/CephClusterOwnerUser.js.map +1 -0
  137. package/build/dist/Models/DatabaseModels/CephResource.js +846 -0
  138. package/build/dist/Models/DatabaseModels/CephResource.js.map +1 -0
  139. package/build/dist/Models/DatabaseModels/Host.js +63 -0
  140. package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
  141. package/build/dist/Models/DatabaseModels/Incident.js +108 -0
  142. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  143. package/build/dist/Models/DatabaseModels/Index.js +24 -0
  144. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  145. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js +967 -0
  146. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js.map +1 -0
  147. package/build/dist/Models/DatabaseModels/ProxmoxClusterLabelRule.js +522 -0
  148. package/build/dist/Models/DatabaseModels/ProxmoxClusterLabelRule.js.map +1 -0
  149. package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerRule.js +603 -0
  150. package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerRule.js.map +1 -0
  151. package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerTeam.js +503 -0
  152. package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerTeam.js.map +1 -0
  153. package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerUser.js +502 -0
  154. package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerUser.js.map +1 -0
  155. package/build/dist/Models/DatabaseModels/ProxmoxResource.js +761 -0
  156. package/build/dist/Models/DatabaseModels/ProxmoxResource.js.map +1 -0
  157. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +108 -0
  158. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  159. package/build/dist/Server/API/BillingInvoiceAPI.js +35 -5
  160. package/build/dist/Server/API/BillingInvoiceAPI.js.map +1 -1
  161. package/build/dist/Server/API/CephResourceAPI.js +98 -0
  162. package/build/dist/Server/API/CephResourceAPI.js.map +1 -0
  163. package/build/dist/Server/API/DashboardAPI.js +46 -0
  164. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  165. package/build/dist/Server/API/ProjectAPI.js +11 -0
  166. package/build/dist/Server/API/ProjectAPI.js.map +1 -1
  167. package/build/dist/Server/API/ProxmoxResourceAPI.js +95 -0
  168. package/build/dist/Server/API/ProxmoxResourceAPI.js.map +1 -0
  169. package/build/dist/Server/API/ResellerPlanAPI.js +17 -3
  170. package/build/dist/Server/API/ResellerPlanAPI.js.map +1 -1
  171. package/build/dist/Server/Infrastructure/GlobalCache.js +7 -2
  172. package/build/dist/Server/Infrastructure/GlobalCache.js.map +1 -1
  173. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781500000000-AddProxmoxAndCephClusterTables.js +76 -0
  174. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781500000000-AddProxmoxAndCephClusterTables.js.map +1 -0
  175. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781600000000-AddProxmoxCephV2Columns.js +108 -0
  176. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781600000000-AddProxmoxCephV2Columns.js.map +1 -0
  177. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781600000001-AddProxmoxCephActivityAndRules.js +253 -0
  178. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781600000001-AddProxmoxCephActivityAndRules.js.map +1 -0
  179. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781700000000-AddProxmoxCephV3Columns.js +43 -0
  180. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781700000000-AddProxmoxCephV3Columns.js.map +1 -0
  181. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
  182. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  183. package/build/dist/Server/Infrastructure/Redis.js +31 -8
  184. package/build/dist/Server/Infrastructure/Redis.js.map +1 -1
  185. package/build/dist/Server/Services/AnalyticsDatabaseService.js +1 -1
  186. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  187. package/build/dist/Server/Services/BillingService.js +85 -23
  188. package/build/dist/Server/Services/BillingService.js.map +1 -1
  189. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +166 -0
  190. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -0
  191. package/build/dist/Server/Services/CephClusterLabelRuleService.js +13 -0
  192. package/build/dist/Server/Services/CephClusterLabelRuleService.js.map +1 -0
  193. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +186 -0
  194. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -0
  195. package/build/dist/Server/Services/CephClusterOwnerRuleService.js +13 -0
  196. package/build/dist/Server/Services/CephClusterOwnerRuleService.js.map +1 -0
  197. package/build/dist/Server/Services/CephClusterOwnerTeamService.js +9 -0
  198. package/build/dist/Server/Services/CephClusterOwnerTeamService.js.map +1 -0
  199. package/build/dist/Server/Services/CephClusterOwnerUserService.js +9 -0
  200. package/build/dist/Server/Services/CephClusterOwnerUserService.js.map +1 -0
  201. package/build/dist/Server/Services/CephClusterService.js +353 -0
  202. package/build/dist/Server/Services/CephClusterService.js.map +1 -0
  203. package/build/dist/Server/Services/CephResourceService.js +257 -0
  204. package/build/dist/Server/Services/CephResourceService.js.map +1 -0
  205. package/build/dist/Server/Services/CloudResourceService.js +10 -2
  206. package/build/dist/Server/Services/CloudResourceService.js.map +1 -1
  207. package/build/dist/Server/Services/DockerHostService.js +10 -2
  208. package/build/dist/Server/Services/DockerHostService.js.map +1 -1
  209. package/build/dist/Server/Services/ExceptionAggregationService.js +2 -0
  210. package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
  211. package/build/dist/Server/Services/HostService.js +10 -2
  212. package/build/dist/Server/Services/HostService.js.map +1 -1
  213. package/build/dist/Server/Services/Index.js +24 -0
  214. package/build/dist/Server/Services/Index.js.map +1 -1
  215. package/build/dist/Server/Services/KubernetesClusterService.js +10 -2
  216. package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
  217. package/build/dist/Server/Services/LogAggregationService.js +2 -0
  218. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  219. package/build/dist/Server/Services/MetricAggregationService.js +2 -0
  220. package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
  221. package/build/dist/Server/Services/OpenTelemetryIngestService.js +37 -7
  222. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  223. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +166 -0
  224. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -0
  225. package/build/dist/Server/Services/ProxmoxClusterLabelRuleService.js +13 -0
  226. package/build/dist/Server/Services/ProxmoxClusterLabelRuleService.js.map +1 -0
  227. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +186 -0
  228. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -0
  229. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleService.js +13 -0
  230. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleService.js.map +1 -0
  231. package/build/dist/Server/Services/ProxmoxClusterOwnerTeamService.js +9 -0
  232. package/build/dist/Server/Services/ProxmoxClusterOwnerTeamService.js.map +1 -0
  233. package/build/dist/Server/Services/ProxmoxClusterOwnerUserService.js +9 -0
  234. package/build/dist/Server/Services/ProxmoxClusterOwnerUserService.js.map +1 -0
  235. package/build/dist/Server/Services/ProxmoxClusterService.js +337 -0
  236. package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -0
  237. package/build/dist/Server/Services/ProxmoxResourceService.js +285 -0
  238. package/build/dist/Server/Services/ProxmoxResourceService.js.map +1 -0
  239. package/build/dist/Server/Services/RumApplicationService.js +10 -2
  240. package/build/dist/Server/Services/RumApplicationService.js.map +1 -1
  241. package/build/dist/Server/Services/ServerlessFunctionService.js +10 -2
  242. package/build/dist/Server/Services/ServerlessFunctionService.js.map +1 -1
  243. package/build/dist/Server/Services/TelemetryUsageBillingService.js +30 -3
  244. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  245. package/build/dist/Server/Services/TraceAggregationService.js +2 -0
  246. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  247. package/build/dist/Server/Types/AnalyticsDatabase/AggregateBy.js +8 -25
  248. package/build/dist/Server/Types/AnalyticsDatabase/AggregateBy.js.map +1 -1
  249. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +36 -0
  250. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  251. package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js +90 -0
  252. package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js.map +1 -0
  253. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +228 -4
  254. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  255. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +103 -8
  256. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  257. package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js +23 -6
  258. package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js.map +1 -1
  259. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +3 -1
  260. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  261. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +23 -0
  262. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
  263. package/build/dist/Server/Utils/Profiling.js +24 -3
  264. package/build/dist/Server/Utils/Profiling.js.map +1 -1
  265. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +4 -0
  266. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
  267. package/build/dist/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.js +854 -0
  268. package/build/dist/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.js.map +1 -0
  269. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +62 -0
  270. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
  271. package/build/dist/Server/Utils/Telemetry.js +8 -10
  272. package/build/dist/Server/Utils/Telemetry.js.map +1 -1
  273. package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js +69 -0
  274. package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js.map +1 -0
  275. package/build/dist/Types/Dashboard/DashboardComponentType.js +4 -0
  276. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  277. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +2 -0
  278. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
  279. package/build/dist/Types/Dashboard/DashboardComponents/DashboardCephOsdListComponent.js +2 -0
  280. package/build/dist/Types/Dashboard/DashboardComponents/DashboardCephOsdListComponent.js.map +1 -0
  281. package/build/dist/Types/Dashboard/DashboardComponents/DashboardCephPoolListComponent.js +2 -0
  282. package/build/dist/Types/Dashboard/DashboardComponents/DashboardCephPoolListComponent.js.map +1 -0
  283. package/build/dist/Types/Dashboard/DashboardComponents/DashboardProxmoxGuestListComponent.js +2 -0
  284. package/build/dist/Types/Dashboard/DashboardComponents/DashboardProxmoxGuestListComponent.js.map +1 -0
  285. package/build/dist/Types/Dashboard/DashboardComponents/DashboardProxmoxNodeListComponent.js +2 -0
  286. package/build/dist/Types/Dashboard/DashboardComponents/DashboardProxmoxNodeListComponent.js.map +1 -0
  287. package/build/dist/Types/Dashboard/DashboardTemplates.js +394 -0
  288. package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
  289. package/build/dist/Types/Icon/IconProp.js +2 -0
  290. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  291. package/build/dist/Types/Monitor/CephAlertTemplates.js +1379 -0
  292. package/build/dist/Types/Monitor/CephAlertTemplates.js.map +1 -0
  293. package/build/dist/Types/Monitor/CephMetricCatalog.js +353 -0
  294. package/build/dist/Types/Monitor/CephMetricCatalog.js.map +1 -0
  295. package/build/dist/Types/Monitor/MonitorStep.js +46 -0
  296. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  297. package/build/dist/Types/Monitor/MonitorStepCephMonitor.js +34 -0
  298. package/build/dist/Types/Monitor/MonitorStepCephMonitor.js.map +1 -0
  299. package/build/dist/Types/Monitor/MonitorStepProxmoxMonitor.js +36 -0
  300. package/build/dist/Types/Monitor/MonitorStepProxmoxMonitor.js.map +1 -0
  301. package/build/dist/Types/Monitor/MonitorType.js +27 -1
  302. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  303. package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +743 -0
  304. package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js.map +1 -0
  305. package/build/dist/Types/Monitor/ProxmoxMetricCatalog.js +320 -0
  306. package/build/dist/Types/Monitor/ProxmoxMetricCatalog.js.map +1 -0
  307. package/build/dist/Types/Permission.js +408 -0
  308. package/build/dist/Types/Permission.js.map +1 -1
  309. package/build/dist/Types/Telemetry/EntityType.js +11 -0
  310. package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
  311. package/build/dist/Types/Telemetry/ServiceType.js +2 -0
  312. package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
  313. package/build/dist/UI/Components/Icon/Icon.js +33 -0
  314. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  315. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +5 -1
  316. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
  317. package/build/dist/UI/Utils/Telemetry/Telemetry.js +11 -10
  318. package/build/dist/UI/Utils/Telemetry/Telemetry.js.map +1 -1
  319. package/build/dist/UI/Utils/TelemetryService.js +5 -2
  320. package/build/dist/UI/Utils/TelemetryService.js.map +1 -1
  321. package/build/dist/Utils/Dashboard/Components/DashboardCephOsdListComponent.js +50 -0
  322. package/build/dist/Utils/Dashboard/Components/DashboardCephOsdListComponent.js.map +1 -0
  323. package/build/dist/Utils/Dashboard/Components/DashboardCephPoolListComponent.js +27 -0
  324. package/build/dist/Utils/Dashboard/Components/DashboardCephPoolListComponent.js.map +1 -0
  325. package/build/dist/Utils/Dashboard/Components/DashboardCephResourceListShared.js +46 -0
  326. package/build/dist/Utils/Dashboard/Components/DashboardCephResourceListShared.js.map +1 -0
  327. package/build/dist/Utils/Dashboard/Components/DashboardProxmoxGuestListComponent.js +55 -0
  328. package/build/dist/Utils/Dashboard/Components/DashboardProxmoxGuestListComponent.js.map +1 -0
  329. package/build/dist/Utils/Dashboard/Components/DashboardProxmoxNodeListComponent.js +42 -0
  330. package/build/dist/Utils/Dashboard/Components/DashboardProxmoxNodeListComponent.js.map +1 -0
  331. package/build/dist/Utils/Dashboard/Components/DashboardProxmoxResourceListShared.js +46 -0
  332. package/build/dist/Utils/Dashboard/Components/DashboardProxmoxResourceListShared.js.map +1 -0
  333. package/build/dist/Utils/Dashboard/Components/Index.js +16 -0
  334. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  335. package/build/dist/Utils/Telemetry/EntityKey.js +27 -0
  336. package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
  337. package/build/dist/Utils/Telemetry/EntityRelationship.js +3 -0
  338. package/build/dist/Utils/Telemetry/EntityRelationship.js.map +1 -1
  339. package/build/dist/Utils/Telemetry/HeartbeatAvailability.js +174 -0
  340. package/build/dist/Utils/Telemetry/HeartbeatAvailability.js.map +1 -0
  341. package/package.json +29 -21
@@ -0,0 +1,204 @@
1
+ import Label from "../../Models/DatabaseModels/Label";
2
+ import ProxmoxCluster from "../../Models/DatabaseModels/ProxmoxCluster";
3
+ import ProxmoxClusterLabelRule from "../../Models/DatabaseModels/ProxmoxClusterLabelRule";
4
+ import ProxmoxClusterLabelRuleService from "./ProxmoxClusterLabelRuleService";
5
+ import ProxmoxClusterService from "./ProxmoxClusterService";
6
+ import ObjectID from "../../Types/ObjectID";
7
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
8
+ import logger, { LogAttributes } from "../Utils/Logger";
9
+
10
+ class ProxmoxClusterLabelRuleEngineServiceClass {
11
+ /**
12
+ * Evaluates ProxmoxClusterLabelRule rows for the given Proxmox cluster and attaches matched
13
+ * labels to it. The union is deduped against labels already on the Proxmox cluster
14
+ * before insert to avoid PK conflicts on the join table.
15
+ */
16
+ @CaptureSpan()
17
+ public async applyRulesToProxmoxCluster(
18
+ proxmoxCluster: ProxmoxCluster,
19
+ ): Promise<void> {
20
+ if (!proxmoxCluster.id || !proxmoxCluster.projectId) {
21
+ return;
22
+ }
23
+
24
+ try {
25
+ const rules: Array<ProxmoxClusterLabelRule> =
26
+ await ProxmoxClusterLabelRuleService.findBy({
27
+ query: {
28
+ projectId: proxmoxCluster.projectId,
29
+ isEnabled: true,
30
+ },
31
+ props: { isRoot: true },
32
+ select: {
33
+ _id: true,
34
+ name: true,
35
+ proxmoxClusterLabels: { _id: true },
36
+ proxmoxClusterNamePattern: true,
37
+ proxmoxClusterDescriptionPattern: true,
38
+ labelsToAdd: { _id: true },
39
+ },
40
+ limit: 100,
41
+ skip: 0,
42
+ });
43
+
44
+ if (rules.length === 0) {
45
+ return;
46
+ }
47
+
48
+ const proxmoxClusterWithDetails: ProxmoxCluster | null =
49
+ await ProxmoxClusterService.findOneById({
50
+ id: proxmoxCluster.id,
51
+ select: {
52
+ name: true,
53
+ description: true,
54
+ labels: { _id: true },
55
+ },
56
+ props: { isRoot: true },
57
+ });
58
+
59
+ if (!proxmoxClusterWithDetails) {
60
+ return;
61
+ }
62
+
63
+ const labelIdsToAdd: Set<string> = new Set();
64
+
65
+ for (const rule of rules) {
66
+ const matches: boolean = this.doesProxmoxClusterMatchRule(
67
+ proxmoxClusterWithDetails,
68
+ rule,
69
+ );
70
+ if (!matches) {
71
+ continue;
72
+ }
73
+ for (const label of rule.labelsToAdd || []) {
74
+ if (label.id) {
75
+ labelIdsToAdd.add(label.id.toString());
76
+ }
77
+ }
78
+ }
79
+
80
+ if (labelIdsToAdd.size === 0) {
81
+ return;
82
+ }
83
+
84
+ const existingLabelIds: Set<string> = new Set(
85
+ (proxmoxClusterWithDetails.labels || [])
86
+ .map((l: Label) => {
87
+ return l.id?.toString() || "";
88
+ })
89
+ .filter((id: string) => {
90
+ return id !== "";
91
+ }),
92
+ );
93
+
94
+ const newLabelIds: Array<string> = Array.from(labelIdsToAdd).filter(
95
+ (id: string) => {
96
+ return !existingLabelIds.has(id);
97
+ },
98
+ );
99
+ if (newLabelIds.length === 0) {
100
+ return;
101
+ }
102
+
103
+ await ProxmoxClusterService.getRepository()
104
+ .createQueryBuilder()
105
+ .relation(ProxmoxCluster, "labels")
106
+ .of(proxmoxCluster.id.toString())
107
+ .add(newLabelIds);
108
+
109
+ /*
110
+ * Sync in-memory proxmoxCluster.labels so a downstream owner-rule engine in
111
+ * the same onCreateSuccess chain can match on rule-added labels.
112
+ */
113
+ const mergedLabelIds: Set<string> = new Set([
114
+ ...existingLabelIds,
115
+ ...newLabelIds,
116
+ ]);
117
+ proxmoxCluster.labels = Array.from(mergedLabelIds).map((id: string) => {
118
+ const label: Label = new Label();
119
+ label.id = new ObjectID(id);
120
+ return label;
121
+ });
122
+
123
+ logger.debug(
124
+ `ProxmoxClusterLabelRuleEngine attached ${newLabelIds.length} labels to Proxmox cluster ${proxmoxCluster.id}`,
125
+ { projectId: proxmoxCluster.projectId.toString() } as LogAttributes,
126
+ );
127
+ } catch (error) {
128
+ logger.error(`Error applying Proxmox cluster label rules: ${error}`, {
129
+ projectId: proxmoxCluster.projectId?.toString(),
130
+ proxmoxClusterId: proxmoxCluster.id?.toString(),
131
+ } as LogAttributes);
132
+ }
133
+ }
134
+
135
+ private doesProxmoxClusterMatchRule(
136
+ proxmoxCluster: ProxmoxCluster,
137
+ rule: ProxmoxClusterLabelRule,
138
+ ): boolean {
139
+ if (rule.proxmoxClusterLabels && rule.proxmoxClusterLabels.length > 0) {
140
+ if (!proxmoxCluster.labels || proxmoxCluster.labels.length === 0) {
141
+ return false;
142
+ }
143
+ const ruleLabelIds: Array<string> = rule.proxmoxClusterLabels.map(
144
+ (l: Label) => {
145
+ return l.id?.toString() || "";
146
+ },
147
+ );
148
+ const labelIds: Array<string> = proxmoxCluster.labels.map((l: Label) => {
149
+ return l.id?.toString() || "";
150
+ });
151
+ if (
152
+ !ruleLabelIds.some((id: string) => {
153
+ return labelIds.includes(id);
154
+ })
155
+ ) {
156
+ return false;
157
+ }
158
+ }
159
+
160
+ if (
161
+ rule.proxmoxClusterNamePattern &&
162
+ (!proxmoxCluster.name ||
163
+ !this.testRegex(
164
+ rule.proxmoxClusterNamePattern,
165
+ proxmoxCluster.name,
166
+ rule,
167
+ ))
168
+ ) {
169
+ return false;
170
+ }
171
+
172
+ if (
173
+ rule.proxmoxClusterDescriptionPattern &&
174
+ (!proxmoxCluster.description ||
175
+ !this.testRegex(
176
+ rule.proxmoxClusterDescriptionPattern,
177
+ proxmoxCluster.description,
178
+ rule,
179
+ ))
180
+ ) {
181
+ return false;
182
+ }
183
+
184
+ return true;
185
+ }
186
+
187
+ private testRegex(
188
+ pattern: string,
189
+ value: string,
190
+ rule: ProxmoxClusterLabelRule,
191
+ ): boolean {
192
+ try {
193
+ const regex: RegExp = new RegExp(pattern, "i");
194
+ return regex.test(value);
195
+ } catch {
196
+ logger.warn(
197
+ `Invalid regex in Proxmox cluster label rule ${rule.id}: ${pattern}`,
198
+ );
199
+ return false;
200
+ }
201
+ }
202
+ }
203
+
204
+ export default new ProxmoxClusterLabelRuleEngineServiceClass();
@@ -0,0 +1,14 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/ProxmoxClusterLabelRule";
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,222 @@
1
+ import Label from "../../Models/DatabaseModels/Label";
2
+ import ProxmoxCluster from "../../Models/DatabaseModels/ProxmoxCluster";
3
+ import ProxmoxClusterOwnerRule from "../../Models/DatabaseModels/ProxmoxClusterOwnerRule";
4
+ import ProxmoxClusterOwnerUser from "../../Models/DatabaseModels/ProxmoxClusterOwnerUser";
5
+ import ProxmoxClusterOwnerTeam from "../../Models/DatabaseModels/ProxmoxClusterOwnerTeam";
6
+ import ProxmoxClusterOwnerRuleService from "./ProxmoxClusterOwnerRuleService";
7
+ import ProxmoxClusterOwnerUserService from "./ProxmoxClusterOwnerUserService";
8
+ import ProxmoxClusterOwnerTeamService from "./ProxmoxClusterOwnerTeamService";
9
+ import ProxmoxClusterService from "./ProxmoxClusterService";
10
+ import ObjectID from "../../Types/ObjectID";
11
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
12
+ import logger, { LogAttributes } from "../Utils/Logger";
13
+
14
+ class ProxmoxClusterOwnerRuleEngineServiceClass {
15
+ /**
16
+ * Evaluates ProxmoxClusterOwnerRule rows for the given Proxmox cluster and adds matched
17
+ * owner users / teams via ProxmoxClusterOwnerUserService / ProxmoxClusterOwnerTeamService. Rules
18
+ * with notifyOwners set notify the added owners; rules with notifyOwners off
19
+ * add silently.
20
+ */
21
+ @CaptureSpan()
22
+ public async applyRulesToProxmoxCluster(
23
+ proxmoxCluster: ProxmoxCluster,
24
+ ): Promise<void> {
25
+ if (!proxmoxCluster.id || !proxmoxCluster.projectId) {
26
+ return;
27
+ }
28
+
29
+ try {
30
+ const rules: Array<ProxmoxClusterOwnerRule> =
31
+ await ProxmoxClusterOwnerRuleService.findBy({
32
+ query: {
33
+ projectId: proxmoxCluster.projectId,
34
+ isEnabled: true,
35
+ },
36
+ props: { isRoot: true },
37
+ select: {
38
+ _id: true,
39
+ name: true,
40
+ notifyOwners: true,
41
+ proxmoxClusterLabels: { _id: true },
42
+ proxmoxClusterNamePattern: true,
43
+ proxmoxClusterDescriptionPattern: true,
44
+ ownerUsers: { _id: true },
45
+ ownerTeams: { _id: true },
46
+ },
47
+ limit: 100,
48
+ skip: 0,
49
+ });
50
+
51
+ if (rules.length === 0) {
52
+ return;
53
+ }
54
+
55
+ const proxmoxClusterWithDetails: ProxmoxCluster | null =
56
+ await ProxmoxClusterService.findOneById({
57
+ id: proxmoxCluster.id,
58
+ select: {
59
+ name: true,
60
+ description: true,
61
+ labels: { _id: true },
62
+ },
63
+ props: { isRoot: true },
64
+ });
65
+
66
+ if (!proxmoxClusterWithDetails) {
67
+ return;
68
+ }
69
+
70
+ const usersByNotify: Map<boolean, Set<string>> = new Map([
71
+ [true, new Set()],
72
+ [false, new Set()],
73
+ ]);
74
+ const teamsByNotify: Map<boolean, Set<string>> = new Map([
75
+ [true, new Set()],
76
+ [false, new Set()],
77
+ ]);
78
+
79
+ const matchedRules: Array<ProxmoxClusterOwnerRule> = [];
80
+
81
+ for (const rule of rules) {
82
+ const matches: boolean = this.doesProxmoxClusterMatchRule(
83
+ proxmoxClusterWithDetails,
84
+ rule,
85
+ );
86
+ if (!matches) {
87
+ continue;
88
+ }
89
+ let ruleAddedAny: boolean = false;
90
+ const notify: boolean = rule.notifyOwners !== false;
91
+ for (const user of rule.ownerUsers || []) {
92
+ if (user.id) {
93
+ usersByNotify.get(notify)!.add(user.id.toString());
94
+ ruleAddedAny = true;
95
+ }
96
+ }
97
+ for (const team of rule.ownerTeams || []) {
98
+ if (team.id) {
99
+ teamsByNotify.get(notify)!.add(team.id.toString());
100
+ ruleAddedAny = true;
101
+ }
102
+ }
103
+ if (ruleAddedAny) {
104
+ matchedRules.push(rule);
105
+ }
106
+ }
107
+
108
+ if (matchedRules.length === 0) {
109
+ return;
110
+ }
111
+
112
+ for (const notify of [true, false]) {
113
+ const userIds: Set<string> = usersByNotify.get(notify)!;
114
+ const teamIds: Set<string> = teamsByNotify.get(notify)!;
115
+
116
+ for (const userId of userIds) {
117
+ const owner: ProxmoxClusterOwnerUser = new ProxmoxClusterOwnerUser();
118
+ owner.proxmoxClusterId = proxmoxCluster.id;
119
+ owner.projectId = proxmoxCluster.projectId;
120
+ owner.userId = new ObjectID(userId);
121
+ owner.isOwnerNotified = !notify;
122
+ await ProxmoxClusterOwnerUserService.create({
123
+ data: owner,
124
+ props: { isRoot: true },
125
+ });
126
+ }
127
+
128
+ for (const teamId of teamIds) {
129
+ const owner: ProxmoxClusterOwnerTeam = new ProxmoxClusterOwnerTeam();
130
+ owner.proxmoxClusterId = proxmoxCluster.id;
131
+ owner.projectId = proxmoxCluster.projectId;
132
+ owner.teamId = new ObjectID(teamId);
133
+ owner.isOwnerNotified = !notify;
134
+ await ProxmoxClusterOwnerTeamService.create({
135
+ data: owner,
136
+ props: { isRoot: true },
137
+ });
138
+ }
139
+ }
140
+
141
+ logger.debug(
142
+ `ProxmoxClusterOwnerRuleEngine added owners to Proxmox cluster ${proxmoxCluster.id}`,
143
+ { projectId: proxmoxCluster.projectId.toString() } as LogAttributes,
144
+ );
145
+ } catch (error) {
146
+ logger.error(`Error applying Proxmox cluster owner rules: ${error}`, {
147
+ projectId: proxmoxCluster.projectId?.toString(),
148
+ proxmoxClusterId: proxmoxCluster.id?.toString(),
149
+ } as LogAttributes);
150
+ }
151
+ }
152
+
153
+ private doesProxmoxClusterMatchRule(
154
+ proxmoxCluster: ProxmoxCluster,
155
+ rule: ProxmoxClusterOwnerRule,
156
+ ): boolean {
157
+ if (rule.proxmoxClusterLabels && rule.proxmoxClusterLabels.length > 0) {
158
+ if (!proxmoxCluster.labels || proxmoxCluster.labels.length === 0) {
159
+ return false;
160
+ }
161
+ const ruleLabelIds: Array<string> = rule.proxmoxClusterLabels.map(
162
+ (l: Label) => {
163
+ return l.id?.toString() || "";
164
+ },
165
+ );
166
+ const labelIds: Array<string> = proxmoxCluster.labels.map((l: Label) => {
167
+ return l.id?.toString() || "";
168
+ });
169
+ if (
170
+ !ruleLabelIds.some((id: string) => {
171
+ return labelIds.includes(id);
172
+ })
173
+ ) {
174
+ return false;
175
+ }
176
+ }
177
+
178
+ if (
179
+ rule.proxmoxClusterNamePattern &&
180
+ (!proxmoxCluster.name ||
181
+ !this.testRegex(
182
+ rule.proxmoxClusterNamePattern,
183
+ proxmoxCluster.name,
184
+ rule,
185
+ ))
186
+ ) {
187
+ return false;
188
+ }
189
+
190
+ if (
191
+ rule.proxmoxClusterDescriptionPattern &&
192
+ (!proxmoxCluster.description ||
193
+ !this.testRegex(
194
+ rule.proxmoxClusterDescriptionPattern,
195
+ proxmoxCluster.description,
196
+ rule,
197
+ ))
198
+ ) {
199
+ return false;
200
+ }
201
+
202
+ return true;
203
+ }
204
+
205
+ private testRegex(
206
+ pattern: string,
207
+ value: string,
208
+ rule: ProxmoxClusterOwnerRule,
209
+ ): boolean {
210
+ try {
211
+ const regex: RegExp = new RegExp(pattern, "i");
212
+ return regex.test(value);
213
+ } catch {
214
+ logger.warn(
215
+ `Invalid regex in Proxmox cluster owner rule ${rule.id}: ${pattern}`,
216
+ );
217
+ return false;
218
+ }
219
+ }
220
+ }
221
+
222
+ export default new ProxmoxClusterOwnerRuleEngineServiceClass();
@@ -0,0 +1,14 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/ProxmoxClusterOwnerRule";
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/ProxmoxClusterOwnerTeam";
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/ProxmoxClusterOwnerUser";
3
+
4
+ export class Service extends DatabaseService<Model> {
5
+ public constructor() {
6
+ super(Model);
7
+ }
8
+ }
9
+
10
+ export default new Service();