@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,761 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import ProxmoxCluster from "./ProxmoxCluster";
11
+ import Project from "./Project";
12
+ import User from "./User";
13
+ import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
14
+ import Route from "../../Types/API/Route";
15
+ import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
16
+ import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
17
+ import ColumnLength from "../../Types/Database/ColumnLength";
18
+ import ColumnType from "../../Types/Database/ColumnType";
19
+ import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
20
+ import TableColumn from "../../Types/Database/TableColumn";
21
+ import TableColumnType from "../../Types/Database/TableColumnType";
22
+ import TableMetadata from "../../Types/Database/TableMetadata";
23
+ import TenantColumn from "../../Types/Database/TenantColumn";
24
+ import IconProp from "../../Types/Icon/IconProp";
25
+ import ObjectID from "../../Types/ObjectID";
26
+ import Permission from "../../Types/Permission";
27
+ import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
28
+ /*
29
+ * ------------------------------------------------------------------
30
+ * ProxmoxResource
31
+ * ------------------------------------------------------------------
32
+ *
33
+ * Inventory snapshot of a single Proxmox VE object (Node, Guest or
34
+ * Storage) in a single cluster. Populated by the OTel metrics ingest
35
+ * path from the pve-exporter scrape stream — identity and status
36
+ * already arrive in every metric batch, so no separate object stream
37
+ * (à la k8sobjects) is needed.
38
+ *
39
+ * `externalId` is the pve-exporter `id` datapoint label verbatim
40
+ * (`node/pve1`, `qemu/100`, `lxc/101`, `storage/local`) — immutable
41
+ * and collision-free within a cluster.
42
+ *
43
+ * Latest-metric delta vs KubernetesResource: pve_cpu_usage_ratio is
44
+ * already a true 0..1 ratio, so latestCpuPercent is just ratio * 100 —
45
+ * no allocatable-denominator cache is needed (unlike K8s
46
+ * cpuCoresToPercent).
47
+ *
48
+ * The list/detail pages read this table instead of groupBy-ing over
49
+ * 24h of ClickHouse metric data. Rows are upserted per scrape and
50
+ * hard-deleted once lastSeenAt falls behind "now - 15min" for clusters
51
+ * that remain connected.
52
+ *
53
+ * Writes go through ProxmoxResourceService under isRoot; users never
54
+ * create/update/delete rows directly.
55
+ *
56
+ * ------------------------------------------------------------------
57
+ */
58
+ const READ_PERMISSIONS = [
59
+ Permission.ProjectOwner,
60
+ Permission.ProjectAdmin,
61
+ Permission.ProjectMember,
62
+ Permission.Viewer,
63
+ Permission.SettingsAdmin,
64
+ Permission.SettingsMember,
65
+ Permission.SettingsViewer,
66
+ Permission.ReadProxmoxCluster,
67
+ ];
68
+ let ProxmoxResource = class ProxmoxResource extends BaseModel {
69
+ constructor() {
70
+ super(...arguments);
71
+ this.project = undefined;
72
+ this.projectId = undefined;
73
+ this.proxmoxCluster = undefined;
74
+ this.proxmoxClusterId = undefined;
75
+ this.kind = undefined;
76
+ this.externalId = undefined;
77
+ this.name = undefined;
78
+ this.vmid = undefined;
79
+ this.guestType = undefined;
80
+ this.parentNodeName = undefined;
81
+ this.isUp = undefined;
82
+ this.haState = undefined;
83
+ this.onboot = undefined;
84
+ this.isBackedUp = undefined;
85
+ this.uptimeSeconds = undefined;
86
+ this.latestCpuPercent = undefined;
87
+ this.latestMemoryBytes = undefined;
88
+ this.maxMemoryBytes = undefined;
89
+ this.latestMemoryPercent = undefined;
90
+ this.latestDiskBytes = undefined;
91
+ this.maxDiskBytes = undefined;
92
+ this.metricsUpdatedAt = undefined;
93
+ this.lastSeenAt = undefined;
94
+ this.createdByUser = undefined;
95
+ this.createdByUserId = undefined;
96
+ this.deletedByUser = undefined;
97
+ this.deletedByUserId = undefined;
98
+ }
99
+ };
100
+ __decorate([
101
+ ColumnAccessControl({
102
+ create: [],
103
+ read: READ_PERMISSIONS,
104
+ update: [],
105
+ }),
106
+ TableColumn({
107
+ manyToOneRelationColumn: "projectId",
108
+ type: TableColumnType.Entity,
109
+ modelType: Project,
110
+ title: "Project",
111
+ description: "Relation to Project this resource belongs to.",
112
+ }),
113
+ ManyToOne(() => {
114
+ return Project;
115
+ }, {
116
+ eager: false,
117
+ nullable: true,
118
+ onDelete: "CASCADE",
119
+ orphanedRowAction: "nullify",
120
+ }),
121
+ JoinColumn({ name: "projectId" }),
122
+ __metadata("design:type", Project)
123
+ ], ProxmoxResource.prototype, "project", void 0);
124
+ __decorate([
125
+ ColumnAccessControl({
126
+ create: [],
127
+ read: READ_PERMISSIONS,
128
+ update: [],
129
+ }),
130
+ Index(),
131
+ TableColumn({
132
+ type: TableColumnType.ObjectID,
133
+ required: true,
134
+ canReadOnRelationQuery: true,
135
+ title: "Project ID",
136
+ description: "ID of the Project this resource belongs to.",
137
+ }),
138
+ Column({
139
+ type: ColumnType.ObjectID,
140
+ nullable: false,
141
+ transformer: ObjectID.getDatabaseTransformer(),
142
+ }),
143
+ __metadata("design:type", ObjectID)
144
+ ], ProxmoxResource.prototype, "projectId", void 0);
145
+ __decorate([
146
+ ColumnAccessControl({
147
+ create: [],
148
+ read: READ_PERMISSIONS,
149
+ update: [],
150
+ }),
151
+ TableColumn({
152
+ manyToOneRelationColumn: "proxmoxClusterId",
153
+ type: TableColumnType.Entity,
154
+ modelType: ProxmoxCluster,
155
+ title: "Proxmox Cluster",
156
+ description: "Cluster this resource lives in.",
157
+ }),
158
+ ManyToOne(() => {
159
+ return ProxmoxCluster;
160
+ }, {
161
+ eager: false,
162
+ nullable: true,
163
+ onDelete: "CASCADE",
164
+ orphanedRowAction: "nullify",
165
+ }),
166
+ JoinColumn({ name: "proxmoxClusterId" }),
167
+ __metadata("design:type", ProxmoxCluster)
168
+ ], ProxmoxResource.prototype, "proxmoxCluster", void 0);
169
+ __decorate([
170
+ ColumnAccessControl({
171
+ create: [],
172
+ read: READ_PERMISSIONS,
173
+ update: [],
174
+ }),
175
+ Index(),
176
+ TableColumn({
177
+ type: TableColumnType.ObjectID,
178
+ required: true,
179
+ canReadOnRelationQuery: true,
180
+ title: "Proxmox Cluster ID",
181
+ description: "ID of the Proxmox Cluster this resource lives in.",
182
+ }),
183
+ Column({
184
+ type: ColumnType.ObjectID,
185
+ nullable: false,
186
+ transformer: ObjectID.getDatabaseTransformer(),
187
+ }),
188
+ __metadata("design:type", ObjectID)
189
+ ], ProxmoxResource.prototype, "proxmoxClusterId", void 0);
190
+ __decorate([
191
+ ColumnAccessControl({
192
+ create: [],
193
+ read: READ_PERMISSIONS,
194
+ update: [],
195
+ }),
196
+ TableColumn({
197
+ required: true,
198
+ type: TableColumnType.ShortText,
199
+ canReadOnRelationQuery: true,
200
+ title: "Kind",
201
+ description: "Proxmox resource kind in singular PascalCase: Node, Guest or Storage.",
202
+ }),
203
+ Column({
204
+ nullable: false,
205
+ type: ColumnType.ShortText,
206
+ length: ColumnLength.ShortText,
207
+ }),
208
+ __metadata("design:type", String)
209
+ ], ProxmoxResource.prototype, "kind", void 0);
210
+ __decorate([
211
+ ColumnAccessControl({
212
+ create: [],
213
+ read: READ_PERMISSIONS,
214
+ update: [],
215
+ }),
216
+ TableColumn({
217
+ required: true,
218
+ type: TableColumnType.ShortText,
219
+ canReadOnRelationQuery: true,
220
+ title: "External ID",
221
+ description: "The pve-exporter `id` datapoint label verbatim (e.g. node/pve1, qemu/100, lxc/101, storage/local). Immutable and collision-free within a cluster; also the detail-route param.",
222
+ }),
223
+ Column({
224
+ nullable: false,
225
+ type: ColumnType.ShortText,
226
+ length: ColumnLength.ShortText,
227
+ }),
228
+ __metadata("design:type", String)
229
+ ], ProxmoxResource.prototype, "externalId", void 0);
230
+ __decorate([
231
+ ColumnAccessControl({
232
+ create: [],
233
+ read: READ_PERMISSIONS,
234
+ update: [],
235
+ }),
236
+ TableColumn({
237
+ required: false,
238
+ type: TableColumnType.ShortText,
239
+ canReadOnRelationQuery: true,
240
+ title: "Name",
241
+ description: "Human-friendly name from the pve_node_info / pve_guest_info `name` label or the pve_storage_info `storage` label. Null until the matching info series is scraped.",
242
+ }),
243
+ Column({
244
+ nullable: true,
245
+ type: ColumnType.ShortText,
246
+ length: ColumnLength.ShortText,
247
+ }),
248
+ __metadata("design:type", String)
249
+ ], ProxmoxResource.prototype, "name", void 0);
250
+ __decorate([
251
+ ColumnAccessControl({
252
+ create: [],
253
+ read: READ_PERMISSIONS,
254
+ update: [],
255
+ }),
256
+ TableColumn({
257
+ required: false,
258
+ type: TableColumnType.Number,
259
+ canReadOnRelationQuery: true,
260
+ title: "VMID",
261
+ description: "Proxmox VMID for Guest kinds (the numeric part of qemu/100). Null for Node and Storage kinds.",
262
+ }),
263
+ Column({
264
+ nullable: true,
265
+ type: ColumnType.Number,
266
+ }),
267
+ __metadata("design:type", Number)
268
+ ], ProxmoxResource.prototype, "vmid", void 0);
269
+ __decorate([
270
+ ColumnAccessControl({
271
+ create: [],
272
+ read: READ_PERMISSIONS,
273
+ update: [],
274
+ }),
275
+ TableColumn({
276
+ required: false,
277
+ type: TableColumnType.ShortText,
278
+ canReadOnRelationQuery: true,
279
+ title: "Guest Type",
280
+ description: "Guest virtualization type: qemu or lxc. Null for non-Guest kinds.",
281
+ }),
282
+ Column({
283
+ nullable: true,
284
+ type: ColumnType.ShortText,
285
+ length: ColumnLength.ShortText,
286
+ }),
287
+ __metadata("design:type", String)
288
+ ], ProxmoxResource.prototype, "guestType", void 0);
289
+ __decorate([
290
+ ColumnAccessControl({
291
+ create: [],
292
+ read: READ_PERMISSIONS,
293
+ update: [],
294
+ }),
295
+ TableColumn({
296
+ required: false,
297
+ type: TableColumnType.ShortText,
298
+ canReadOnRelationQuery: true,
299
+ title: "Parent Node Name",
300
+ description: "The `node` label — the cluster node this guest or storage belongs to. Null for Node kinds.",
301
+ }),
302
+ Column({
303
+ nullable: true,
304
+ type: ColumnType.ShortText,
305
+ length: ColumnLength.ShortText,
306
+ }),
307
+ __metadata("design:type", String)
308
+ ], ProxmoxResource.prototype, "parentNodeName", void 0);
309
+ __decorate([
310
+ ColumnAccessControl({
311
+ create: [],
312
+ read: READ_PERMISSIONS,
313
+ update: [],
314
+ }),
315
+ TableColumn({
316
+ required: false,
317
+ type: TableColumnType.Boolean,
318
+ canReadOnRelationQuery: true,
319
+ title: "Is Up",
320
+ description: "True when the latest pve_up value for this resource is 1 (node online / guest running / storage available).",
321
+ }),
322
+ Column({
323
+ nullable: true,
324
+ type: ColumnType.Boolean,
325
+ }),
326
+ __metadata("design:type", Boolean)
327
+ ], ProxmoxResource.prototype, "isUp", void 0);
328
+ __decorate([
329
+ ColumnAccessControl({
330
+ create: [],
331
+ read: READ_PERMISSIONS,
332
+ update: [],
333
+ }),
334
+ TableColumn({
335
+ required: false,
336
+ type: TableColumnType.ShortText,
337
+ canReadOnRelationQuery: true,
338
+ title: "HA State",
339
+ description: "Current HA state — the `state` label of the pve_ha_state enum-series whose value is 1 (e.g. started, stopped, error, fence). Null when the resource is not HA-managed.",
340
+ }),
341
+ Column({
342
+ nullable: true,
343
+ type: ColumnType.ShortText,
344
+ length: ColumnLength.ShortText,
345
+ }),
346
+ __metadata("design:type", String)
347
+ ], ProxmoxResource.prototype, "haState", void 0);
348
+ __decorate([
349
+ ColumnAccessControl({
350
+ create: [],
351
+ read: READ_PERMISSIONS,
352
+ update: [],
353
+ }),
354
+ TableColumn({
355
+ required: false,
356
+ type: TableColumnType.Boolean,
357
+ canReadOnRelationQuery: true,
358
+ title: "On Boot",
359
+ description: "True when pve_onboot_status == 1 (guest configured to start on node boot). Null for non-Guest kinds.",
360
+ }),
361
+ Column({
362
+ nullable: true,
363
+ type: ColumnType.Boolean,
364
+ }),
365
+ __metadata("design:type", Boolean)
366
+ ], ProxmoxResource.prototype, "onboot", void 0);
367
+ __decorate([
368
+ ColumnAccessControl({
369
+ create: [],
370
+ read: READ_PERMISSIONS,
371
+ update: [],
372
+ }),
373
+ TableColumn({
374
+ required: false,
375
+ type: TableColumnType.Boolean,
376
+ canReadOnRelationQuery: true,
377
+ title: "Backed Up",
378
+ description: "True when this guest is covered by at least one backup job. Derived from the cluster-level backup-info collector: a pve_not_backed_up_info series carrying this guest's id means NOT covered. NULL for non-Guest kinds and until the collector reports. Coverage by a job is NOT the same as recent/successful backups.",
379
+ }),
380
+ Column({
381
+ nullable: true,
382
+ type: ColumnType.Boolean,
383
+ }),
384
+ __metadata("design:type", Boolean)
385
+ ], ProxmoxResource.prototype, "isBackedUp", void 0);
386
+ __decorate([
387
+ ColumnAccessControl({
388
+ create: [],
389
+ read: READ_PERMISSIONS,
390
+ update: [],
391
+ }),
392
+ TableColumn({
393
+ required: false,
394
+ type: TableColumnType.Number,
395
+ canReadOnRelationQuery: true,
396
+ title: "Uptime Seconds",
397
+ description: "Latest pve_uptime_seconds value for this node or guest. Null for Storage kinds.",
398
+ }),
399
+ Column({
400
+ nullable: true,
401
+ type: ColumnType.Number,
402
+ }),
403
+ __metadata("design:type", Number)
404
+ ], ProxmoxResource.prototype, "uptimeSeconds", void 0);
405
+ __decorate([
406
+ ColumnAccessControl({
407
+ create: [],
408
+ read: READ_PERMISSIONS,
409
+ update: [],
410
+ }),
411
+ TableColumn({
412
+ required: false,
413
+ type: TableColumnType.Number,
414
+ canReadOnRelationQuery: true,
415
+ title: "Latest CPU Percent",
416
+ description: "Most recent CPU utilization percent (pve_cpu_usage_ratio * 100 — already a true ratio; no allocatable-denominator cache needed, unlike K8s). Stored as decimal so sub-percent precision survives the round trip. Null until the first metric arrives.",
417
+ }),
418
+ Column({
419
+ nullable: true,
420
+ type: ColumnType.Decimal,
421
+ transformer: {
422
+ to: (value) => {
423
+ if (value === null || value === undefined) {
424
+ return null;
425
+ }
426
+ return value;
427
+ },
428
+ from: (value) => {
429
+ if (value === null || value === undefined) {
430
+ return null;
431
+ }
432
+ if (typeof value === "number") {
433
+ return value;
434
+ }
435
+ const parsed = parseFloat(value);
436
+ return isNaN(parsed) ? null : parsed;
437
+ },
438
+ },
439
+ }),
440
+ __metadata("design:type", Number)
441
+ ], ProxmoxResource.prototype, "latestCpuPercent", void 0);
442
+ __decorate([
443
+ ColumnAccessControl({
444
+ create: [],
445
+ read: READ_PERMISSIONS,
446
+ update: [],
447
+ }),
448
+ TableColumn({
449
+ required: false,
450
+ type: TableColumnType.BigPositiveNumber,
451
+ canReadOnRelationQuery: true,
452
+ title: "Latest Memory Bytes",
453
+ description: "Most recent memory usage (pve_memory_usage_bytes). Stored as bigint so values past 2 GiB don't overflow.",
454
+ }),
455
+ Column({
456
+ nullable: true,
457
+ type: ColumnType.BigPositiveNumber,
458
+ transformer: {
459
+ to: (value) => {
460
+ if (value === null || value === undefined) {
461
+ return null;
462
+ }
463
+ return Math.trunc(value).toString();
464
+ },
465
+ from: (value) => {
466
+ if (value === null || value === undefined) {
467
+ return null;
468
+ }
469
+ const parsed = parseInt(value, 10);
470
+ return isNaN(parsed) ? null : parsed;
471
+ },
472
+ },
473
+ }),
474
+ __metadata("design:type", Number)
475
+ ], ProxmoxResource.prototype, "latestMemoryBytes", void 0);
476
+ __decorate([
477
+ ColumnAccessControl({
478
+ create: [],
479
+ read: READ_PERMISSIONS,
480
+ update: [],
481
+ }),
482
+ TableColumn({
483
+ required: false,
484
+ type: TableColumnType.BigPositiveNumber,
485
+ canReadOnRelationQuery: true,
486
+ title: "Max Memory Bytes",
487
+ description: "Total memory available to this node or guest (pve_memory_size_bytes). The denominator for the memory usage bar.",
488
+ }),
489
+ Column({
490
+ nullable: true,
491
+ type: ColumnType.BigPositiveNumber,
492
+ transformer: {
493
+ to: (value) => {
494
+ if (value === null || value === undefined) {
495
+ return null;
496
+ }
497
+ return Math.trunc(value).toString();
498
+ },
499
+ from: (value) => {
500
+ if (value === null || value === undefined) {
501
+ return null;
502
+ }
503
+ const parsed = parseInt(value, 10);
504
+ return isNaN(parsed) ? null : parsed;
505
+ },
506
+ },
507
+ }),
508
+ __metadata("design:type", Number)
509
+ ], ProxmoxResource.prototype, "maxMemoryBytes", void 0);
510
+ __decorate([
511
+ ColumnAccessControl({
512
+ create: [],
513
+ read: READ_PERMISSIONS,
514
+ update: [],
515
+ }),
516
+ TableColumn({
517
+ required: false,
518
+ type: TableColumnType.Number,
519
+ canReadOnRelationQuery: true,
520
+ title: "Latest Memory Percent",
521
+ description: "Most recent memory usage as a percent of maxMemoryBytes. Stored as decimal — mirrors latestCpuPercent — so list views can sort/filter without dividing bigints client-side.",
522
+ }),
523
+ Column({
524
+ nullable: true,
525
+ type: ColumnType.Decimal,
526
+ transformer: {
527
+ to: (value) => {
528
+ if (value === null || value === undefined) {
529
+ return null;
530
+ }
531
+ return value;
532
+ },
533
+ from: (value) => {
534
+ if (value === null || value === undefined) {
535
+ return null;
536
+ }
537
+ if (typeof value === "number") {
538
+ return value;
539
+ }
540
+ const parsed = parseFloat(value);
541
+ return isNaN(parsed) ? null : parsed;
542
+ },
543
+ },
544
+ }),
545
+ __metadata("design:type", Number)
546
+ ], ProxmoxResource.prototype, "latestMemoryPercent", void 0);
547
+ __decorate([
548
+ ColumnAccessControl({
549
+ create: [],
550
+ read: READ_PERMISSIONS,
551
+ update: [],
552
+ }),
553
+ TableColumn({
554
+ required: false,
555
+ type: TableColumnType.BigPositiveNumber,
556
+ canReadOnRelationQuery: true,
557
+ title: "Latest Disk Bytes",
558
+ description: "Most recent disk usage (pve_disk_usage_bytes). NULL for qemu guests without the QEMU guest agent — render N/A, never 0.",
559
+ }),
560
+ Column({
561
+ nullable: true,
562
+ type: ColumnType.BigPositiveNumber,
563
+ transformer: {
564
+ to: (value) => {
565
+ if (value === null || value === undefined) {
566
+ return null;
567
+ }
568
+ return Math.trunc(value).toString();
569
+ },
570
+ from: (value) => {
571
+ if (value === null || value === undefined) {
572
+ return null;
573
+ }
574
+ const parsed = parseInt(value, 10);
575
+ return isNaN(parsed) ? null : parsed;
576
+ },
577
+ },
578
+ }),
579
+ __metadata("design:type", Number)
580
+ ], ProxmoxResource.prototype, "latestDiskBytes", void 0);
581
+ __decorate([
582
+ ColumnAccessControl({
583
+ create: [],
584
+ read: READ_PERMISSIONS,
585
+ update: [],
586
+ }),
587
+ TableColumn({
588
+ required: false,
589
+ type: TableColumnType.BigPositiveNumber,
590
+ canReadOnRelationQuery: true,
591
+ title: "Max Disk Bytes",
592
+ description: "Total disk size (pve_disk_size_bytes). The denominator for the disk/storage usage bar. NULL for qemu guests without the QEMU guest agent.",
593
+ }),
594
+ Column({
595
+ nullable: true,
596
+ type: ColumnType.BigPositiveNumber,
597
+ transformer: {
598
+ to: (value) => {
599
+ if (value === null || value === undefined) {
600
+ return null;
601
+ }
602
+ return Math.trunc(value).toString();
603
+ },
604
+ from: (value) => {
605
+ if (value === null || value === undefined) {
606
+ return null;
607
+ }
608
+ const parsed = parseInt(value, 10);
609
+ return isNaN(parsed) ? null : parsed;
610
+ },
611
+ },
612
+ }),
613
+ __metadata("design:type", Number)
614
+ ], ProxmoxResource.prototype, "maxDiskBytes", void 0);
615
+ __decorate([
616
+ ColumnAccessControl({
617
+ create: [],
618
+ read: READ_PERMISSIONS,
619
+ update: [],
620
+ }),
621
+ TableColumn({
622
+ required: false,
623
+ type: TableColumnType.Date,
624
+ canReadOnRelationQuery: true,
625
+ title: "Metrics Updated At",
626
+ description: "Observed timestamp of the latest metric point. Acts as the monotonic guard for metric updates and the cutoff for staleness rendering.",
627
+ }),
628
+ Column({
629
+ nullable: true,
630
+ type: ColumnType.Date,
631
+ }),
632
+ __metadata("design:type", Date)
633
+ ], ProxmoxResource.prototype, "metricsUpdatedAt", void 0);
634
+ __decorate([
635
+ ColumnAccessControl({
636
+ create: [],
637
+ read: READ_PERMISSIONS,
638
+ update: [],
639
+ }),
640
+ TableColumn({
641
+ required: true,
642
+ type: TableColumnType.Date,
643
+ canReadOnRelationQuery: true,
644
+ title: "Last Seen At",
645
+ description: "Agent-observed timestamp of the most recent scrape containing this resource. Also acts as the monotonic guard for upserts.",
646
+ }),
647
+ Column({
648
+ nullable: false,
649
+ type: ColumnType.Date,
650
+ }),
651
+ __metadata("design:type", Date)
652
+ ], ProxmoxResource.prototype, "lastSeenAt", void 0);
653
+ __decorate([
654
+ ColumnAccessControl({
655
+ create: [],
656
+ read: READ_PERMISSIONS,
657
+ update: [],
658
+ }),
659
+ TableColumn({
660
+ manyToOneRelationColumn: "createdByUserId",
661
+ type: TableColumnType.Entity,
662
+ modelType: User,
663
+ title: "Created By User",
664
+ description: "Not user-facing; ingest writes as isRoot so this stays null in practice.",
665
+ }),
666
+ ManyToOne(() => {
667
+ return User;
668
+ }, {
669
+ eager: false,
670
+ nullable: true,
671
+ onDelete: "SET NULL",
672
+ orphanedRowAction: "nullify",
673
+ }),
674
+ JoinColumn({ name: "createdByUserId" }),
675
+ __metadata("design:type", User)
676
+ ], ProxmoxResource.prototype, "createdByUser", void 0);
677
+ __decorate([
678
+ ColumnAccessControl({
679
+ create: [],
680
+ read: READ_PERMISSIONS,
681
+ update: [],
682
+ }),
683
+ TableColumn({
684
+ type: TableColumnType.ObjectID,
685
+ title: "Created By User ID",
686
+ description: "ID of the user who created this row.",
687
+ }),
688
+ Column({
689
+ type: ColumnType.ObjectID,
690
+ nullable: true,
691
+ transformer: ObjectID.getDatabaseTransformer(),
692
+ }),
693
+ __metadata("design:type", ObjectID)
694
+ ], ProxmoxResource.prototype, "createdByUserId", void 0);
695
+ __decorate([
696
+ ColumnAccessControl({
697
+ create: [],
698
+ read: READ_PERMISSIONS,
699
+ update: [],
700
+ }),
701
+ TableColumn({
702
+ manyToOneRelationColumn: "deletedByUserId",
703
+ type: TableColumnType.Entity,
704
+ modelType: User,
705
+ title: "Deleted By User",
706
+ description: "Relation to the user who deleted this row.",
707
+ }),
708
+ ManyToOne(() => {
709
+ return User;
710
+ }, {
711
+ eager: false,
712
+ nullable: true,
713
+ onDelete: "SET NULL",
714
+ orphanedRowAction: "nullify",
715
+ }),
716
+ JoinColumn({ name: "deletedByUserId" }),
717
+ __metadata("design:type", User)
718
+ ], ProxmoxResource.prototype, "deletedByUser", void 0);
719
+ __decorate([
720
+ ColumnAccessControl({
721
+ create: [],
722
+ read: READ_PERMISSIONS,
723
+ update: [],
724
+ }),
725
+ TableColumn({
726
+ type: TableColumnType.ObjectID,
727
+ title: "Deleted By User ID",
728
+ description: "ID of the user who deleted this row.",
729
+ }),
730
+ Column({
731
+ type: ColumnType.ObjectID,
732
+ nullable: true,
733
+ transformer: ObjectID.getDatabaseTransformer(),
734
+ }),
735
+ __metadata("design:type", ObjectID)
736
+ ], ProxmoxResource.prototype, "deletedByUserId", void 0);
737
+ ProxmoxResource = __decorate([
738
+ TenantColumn("projectId"),
739
+ TableAccessControl({
740
+ create: [],
741
+ read: READ_PERMISSIONS,
742
+ update: [],
743
+ delete: [],
744
+ }),
745
+ CrudApiEndpoint(new Route("/proxmox-resource")),
746
+ TableMetadata({
747
+ tableName: "ProxmoxResource",
748
+ singularName: "Proxmox Resource",
749
+ pluralName: "Proxmox Resources",
750
+ icon: IconProp.Cube,
751
+ tableDescription: "Snapshot of a Proxmox VE object (node, guest or storage) as last reported by the Proxmox agent. Populated by the telemetry ingest pipeline; not user-editable.",
752
+ }),
753
+ Index(["projectId", "proxmoxClusterId", "kind", "externalId"], {
754
+ unique: true,
755
+ }),
756
+ Entity({
757
+ name: "ProxmoxResource",
758
+ })
759
+ ], ProxmoxResource);
760
+ export default ProxmoxResource;
761
+ //# sourceMappingURL=ProxmoxResource.js.map