@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
@@ -8,14 +8,16 @@ import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
8
8
  import { registerInstrumentations } from "@opentelemetry/instrumentation";
9
9
  import { FetchInstrumentation } from "@opentelemetry/instrumentation-fetch";
10
10
  import { XMLHttpRequestInstrumentation } from "@opentelemetry/instrumentation-xml-http-request";
11
- import { Resource } from "@opentelemetry/resources";
11
+ import { resourceFromAttributes } from "@opentelemetry/resources";
12
12
  import {
13
13
  BatchSpanProcessor,
14
14
  TracerConfig,
15
15
  WebTracerProvider,
16
16
  } from "@opentelemetry/sdk-trace-web";
17
- import type { SpanExporter } from "@opentelemetry/sdk-trace-base";
18
- import type { SpanExporter as WebSpanExporter } from "@opentelemetry/sdk-trace-web/node_modules/@opentelemetry/sdk-trace-base/build/src/export/SpanExporter";
17
+ import type {
18
+ SpanExporter,
19
+ SpanProcessor,
20
+ } from "@opentelemetry/sdk-trace-base";
19
21
  import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions";
20
22
  import URL from "../../../Types/API/URL";
21
23
 
@@ -87,14 +89,6 @@ export default class Telemetry {
87
89
  Object.keys(OpenTelemetryExporterOtlpHeaders).length > 0;
88
90
 
89
91
  if (OpenTelemetryExporterOtlpEndpoint && hasHeaders) {
90
- const providerConfig: TracerConfig = {
91
- resource: new Resource({
92
- [ATTR_SERVICE_NAME]: data.serviceName,
93
- }),
94
- };
95
-
96
- const provider: WebTracerProvider = new WebTracerProvider(providerConfig);
97
-
98
92
  const traceExporter: SpanExporter = new OTLPTraceExporter({
99
93
  url: URL.fromString(
100
94
  OpenTelemetryExporterOtlpEndpoint?.toString() + "/v1/traces",
@@ -102,17 +96,18 @@ export default class Telemetry {
102
96
  headers: OpenTelemetryExporterOtlpHeaders,
103
97
  }) as unknown as SpanExporter;
104
98
 
105
- const webTraceExporter: WebSpanExporter =
106
- traceExporter as unknown as WebSpanExporter;
107
-
108
- provider.addSpanProcessor(new BatchSpanProcessor(webTraceExporter));
99
+ const providerConfig: TracerConfig = {
100
+ resource: resourceFromAttributes({
101
+ [ATTR_SERVICE_NAME]: data.serviceName,
102
+ }),
103
+ // Stamp global RUM attributes (userId, projectId, ...) onto every span.
104
+ spanProcessors: [
105
+ new BatchSpanProcessor(traceExporter),
106
+ new GlobalAttributeSpanProcessor() as unknown as SpanProcessor,
107
+ ],
108
+ };
109
109
 
110
- // Stamp global RUM attributes (userId, projectId, ...) onto every span.
111
- provider.addSpanProcessor(
112
- new GlobalAttributeSpanProcessor() as unknown as Parameters<
113
- WebTracerProvider["addSpanProcessor"]
114
- >[0],
115
- );
110
+ const provider: WebTracerProvider = new WebTracerProvider(providerConfig);
116
111
 
117
112
  provider.register({
118
113
  contextManager: new ZoneContextManager(),
@@ -23,7 +23,8 @@ export const UNKNOWN_SERVICE_NAME: string = "Unknown Service";
23
23
  * primaryEntityType) to something renderable. Either a Service (a real
24
24
  * OpenTelemetry service, or the synthetic "Unknown Service" for the
25
25
  * unattributed bucket) — or a plain `label` for infrastructure resource
26
- * types (Host / DockerHost / KubernetesCluster) that have no Service row.
26
+ * types (Host / DockerHost / KubernetesCluster / ProxmoxCluster /
27
+ * CephCluster) that have no Service row.
27
28
  */
28
29
  export interface ResolvedTelemetryResource {
29
30
  service?: Service;
@@ -66,8 +67,9 @@ export default class TelemetryServiceUtil {
66
67
  * old server-side `service` ORM relation on TelemetryException: a real
67
68
  * Service resolves from the loaded list, the unattributed bucket resolves
68
69
  * to the synthetic "Unknown Service", and Host / DockerHost /
69
- * KubernetesCluster resolve to a type label (no Service row exists for
70
- * them). Mirrors how the ClickHouse analytics rows are resolved.
70
+ * KubernetesCluster / ProxmoxCluster / CephCluster resolve to a type
71
+ * label (no Service row exists for them). Mirrors how the ClickHouse
72
+ * analytics rows are resolved.
71
73
  */
72
74
  public static resolveTelemetryResource(data: {
73
75
  primaryEntityId: ObjectID | string | null | undefined;
@@ -101,6 +103,8 @@ export default class TelemetryServiceUtil {
101
103
  [ServiceType.Host]: "Host telemetry",
102
104
  [ServiceType.DockerHost]: "Docker host telemetry",
103
105
  [ServiceType.KubernetesCluster]: "Kubernetes telemetry",
106
+ [ServiceType.ProxmoxCluster]: "Proxmox Cluster",
107
+ [ServiceType.CephCluster]: "Ceph Cluster",
104
108
  };
105
109
  const label: string | undefined = data.primaryEntityType
106
110
  ? typeLabels[data.primaryEntityType.toString()]
@@ -0,0 +1,63 @@
1
+ import DashboardCephOsdListComponent from "../../../Types/Dashboard/DashboardComponents/DashboardCephOsdListComponent";
2
+ import { ObjectType } from "../../../Types/JSON";
3
+ import ObjectID from "../../../Types/ObjectID";
4
+ import DashboardBaseComponentUtil from "./DashboardBaseComponent";
5
+ import {
6
+ ComponentArgument,
7
+ ComponentInputType,
8
+ } from "../../../Types/Dashboard/DashboardComponents/ComponentArgument";
9
+ import DashboardComponentType from "../../../Types/Dashboard/DashboardComponentType";
10
+ import {
11
+ CephFiltersSection,
12
+ getCephCommonArguments,
13
+ } from "./DashboardCephResourceListShared";
14
+
15
+ export default class DashboardCephOsdListComponentUtil extends DashboardBaseComponentUtil {
16
+ public static override getDefaultComponent(): DashboardCephOsdListComponent {
17
+ return {
18
+ _type: ObjectType.DashboardComponent,
19
+ componentType: DashboardComponentType.CephOsdList,
20
+ widthInDashboardUnits: 6,
21
+ heightInDashboardUnits: 4,
22
+ topInDashboardUnits: 0,
23
+ leftInDashboardUnits: 0,
24
+ componentId: ObjectID.generate(),
25
+ minHeightInDashboardUnits: 3,
26
+ minWidthInDashboardUnits: 6,
27
+ arguments: {
28
+ maxRows: 25,
29
+ /*
30
+ * The classic "OSD wall" — a honeycomb where each cell is an
31
+ * OSD colored by up/in state — is the view operators expect
32
+ * for this widget, so honeycomb is the default. The list view
33
+ * stays one dropdown away.
34
+ */
35
+ viewMode: "honeycomb",
36
+ },
37
+ };
38
+ }
39
+
40
+ public static override getComponentConfigArguments(): Array<
41
+ ComponentArgument<DashboardCephOsdListComponent>
42
+ > {
43
+ const args: Array<ComponentArgument<DashboardCephOsdListComponent>> =
44
+ getCephCommonArguments<DashboardCephOsdListComponent>();
45
+
46
+ args.push({
47
+ name: "State",
48
+ description: "Quick filter by OSD up/in state",
49
+ required: false,
50
+ type: ComponentInputType.Dropdown,
51
+ id: "stateFilter",
52
+ section: CephFiltersSection,
53
+ dropdownOptions: [
54
+ { label: "All", value: "" },
55
+ { label: "Up only", value: "up" },
56
+ { label: "Down only", value: "down" },
57
+ { label: "Out only", value: "out" },
58
+ ],
59
+ });
60
+
61
+ return args;
62
+ }
63
+ }
@@ -0,0 +1,32 @@
1
+ import DashboardCephPoolListComponent from "../../../Types/Dashboard/DashboardComponents/DashboardCephPoolListComponent";
2
+ import { ObjectType } from "../../../Types/JSON";
3
+ import ObjectID from "../../../Types/ObjectID";
4
+ import DashboardBaseComponentUtil from "./DashboardBaseComponent";
5
+ import { ComponentArgument } from "../../../Types/Dashboard/DashboardComponents/ComponentArgument";
6
+ import DashboardComponentType from "../../../Types/Dashboard/DashboardComponentType";
7
+ import { getCephCommonArguments } from "./DashboardCephResourceListShared";
8
+
9
+ export default class DashboardCephPoolListComponentUtil extends DashboardBaseComponentUtil {
10
+ public static override getDefaultComponent(): DashboardCephPoolListComponent {
11
+ return {
12
+ _type: ObjectType.DashboardComponent,
13
+ componentType: DashboardComponentType.CephPoolList,
14
+ widthInDashboardUnits: 6,
15
+ heightInDashboardUnits: 4,
16
+ topInDashboardUnits: 0,
17
+ leftInDashboardUnits: 0,
18
+ componentId: ObjectID.generate(),
19
+ minHeightInDashboardUnits: 3,
20
+ minWidthInDashboardUnits: 6,
21
+ arguments: {
22
+ maxRows: 25,
23
+ },
24
+ };
25
+ }
26
+
27
+ public static override getComponentConfigArguments(): Array<
28
+ ComponentArgument<DashboardCephPoolListComponent>
29
+ > {
30
+ return getCephCommonArguments<DashboardCephPoolListComponent>();
31
+ }
32
+ }
@@ -0,0 +1,61 @@
1
+ import {
2
+ ComponentArgument,
3
+ ComponentArgumentSection,
4
+ ComponentInputType,
5
+ EntityFilterModelType,
6
+ } from "../../../Types/Dashboard/DashboardComponents/ComponentArgument";
7
+ import DashboardBaseComponent from "../../../Types/Dashboard/DashboardComponents/DashboardBaseComponent";
8
+ import { getViewModeArgument } from "./DashboardListSharedArgs";
9
+
10
+ export const CephDisplaySection: ComponentArgumentSection = {
11
+ name: "Display Options",
12
+ description: "Configure the widget title and row limit",
13
+ order: 1,
14
+ };
15
+
16
+ export const CephFiltersSection: ComponentArgumentSection = {
17
+ name: "Filters",
18
+ description: "Narrow down which resources are shown",
19
+ order: 2,
20
+ defaultCollapsed: true,
21
+ };
22
+
23
+ export function getCephCommonArguments<
24
+ T extends DashboardBaseComponent,
25
+ >(): Array<ComponentArgument<T>> {
26
+ const args: Array<ComponentArgument<T>> = [];
27
+
28
+ args.push({
29
+ name: "Title",
30
+ description: "Header shown above the list",
31
+ required: false,
32
+ type: ComponentInputType.Text,
33
+ id: "title" as keyof T["arguments"],
34
+ section: CephDisplaySection,
35
+ });
36
+
37
+ args.push({
38
+ name: "Max Rows",
39
+ description: "Maximum number of rows to show",
40
+ required: false,
41
+ type: ComponentInputType.Number,
42
+ id: "maxRows" as keyof T["arguments"],
43
+ placeholder: "25",
44
+ section: CephDisplaySection,
45
+ });
46
+
47
+ args.push(getViewModeArgument<T>(CephDisplaySection));
48
+
49
+ args.push({
50
+ name: "Clusters",
51
+ description: "Show only resources from the selected Ceph clusters",
52
+ required: false,
53
+ type: ComponentInputType.EntityMultiSelectDropdown,
54
+ id: "cephClusterIds" as keyof T["arguments"],
55
+ placeholder: "All clusters",
56
+ section: CephFiltersSection,
57
+ entityFilterModelType: EntityFilterModelType.CephCluster,
58
+ });
59
+
60
+ return args;
61
+ }
@@ -0,0 +1,69 @@
1
+ import DashboardProxmoxGuestListComponent from "../../../Types/Dashboard/DashboardComponents/DashboardProxmoxGuestListComponent";
2
+ import { ObjectType } from "../../../Types/JSON";
3
+ import ObjectID from "../../../Types/ObjectID";
4
+ import DashboardBaseComponentUtil from "./DashboardBaseComponent";
5
+ import {
6
+ ComponentArgument,
7
+ ComponentInputType,
8
+ } from "../../../Types/Dashboard/DashboardComponents/ComponentArgument";
9
+ import DashboardComponentType from "../../../Types/Dashboard/DashboardComponentType";
10
+ import {
11
+ ProxmoxFiltersSection,
12
+ getProxmoxCommonArguments,
13
+ } from "./DashboardProxmoxResourceListShared";
14
+
15
+ export default class DashboardProxmoxGuestListComponentUtil extends DashboardBaseComponentUtil {
16
+ public static override getDefaultComponent(): DashboardProxmoxGuestListComponent {
17
+ return {
18
+ _type: ObjectType.DashboardComponent,
19
+ componentType: DashboardComponentType.ProxmoxGuestList,
20
+ widthInDashboardUnits: 6,
21
+ heightInDashboardUnits: 4,
22
+ topInDashboardUnits: 0,
23
+ leftInDashboardUnits: 0,
24
+ componentId: ObjectID.generate(),
25
+ minHeightInDashboardUnits: 3,
26
+ minWidthInDashboardUnits: 6,
27
+ arguments: {
28
+ maxRows: 25,
29
+ },
30
+ };
31
+ }
32
+
33
+ public static override getComponentConfigArguments(): Array<
34
+ ComponentArgument<DashboardProxmoxGuestListComponent>
35
+ > {
36
+ const args: Array<ComponentArgument<DashboardProxmoxGuestListComponent>> =
37
+ getProxmoxCommonArguments<DashboardProxmoxGuestListComponent>();
38
+
39
+ args.push({
40
+ name: "Guest Type",
41
+ description: "Show only QEMU VMs or only LXC containers",
42
+ required: false,
43
+ type: ComponentInputType.Dropdown,
44
+ id: "guestTypeFilter",
45
+ section: ProxmoxFiltersSection,
46
+ dropdownOptions: [
47
+ { label: "All", value: "" },
48
+ { label: "QEMU VMs only", value: "qemu" },
49
+ { label: "LXC containers only", value: "lxc" },
50
+ ],
51
+ });
52
+
53
+ args.push({
54
+ name: "Status",
55
+ description: "Quick filter by guest run state",
56
+ required: false,
57
+ type: ComponentInputType.Dropdown,
58
+ id: "statusFilter",
59
+ section: ProxmoxFiltersSection,
60
+ dropdownOptions: [
61
+ { label: "All", value: "" },
62
+ { label: "Running only", value: "running" },
63
+ { label: "Stopped only", value: "stopped" },
64
+ ],
65
+ });
66
+
67
+ return args;
68
+ }
69
+ }
@@ -0,0 +1,55 @@
1
+ import DashboardProxmoxNodeListComponent from "../../../Types/Dashboard/DashboardComponents/DashboardProxmoxNodeListComponent";
2
+ import { ObjectType } from "../../../Types/JSON";
3
+ import ObjectID from "../../../Types/ObjectID";
4
+ import DashboardBaseComponentUtil from "./DashboardBaseComponent";
5
+ import {
6
+ ComponentArgument,
7
+ ComponentInputType,
8
+ } from "../../../Types/Dashboard/DashboardComponents/ComponentArgument";
9
+ import DashboardComponentType from "../../../Types/Dashboard/DashboardComponentType";
10
+ import {
11
+ ProxmoxFiltersSection,
12
+ getProxmoxCommonArguments,
13
+ } from "./DashboardProxmoxResourceListShared";
14
+
15
+ export default class DashboardProxmoxNodeListComponentUtil extends DashboardBaseComponentUtil {
16
+ public static override getDefaultComponent(): DashboardProxmoxNodeListComponent {
17
+ return {
18
+ _type: ObjectType.DashboardComponent,
19
+ componentType: DashboardComponentType.ProxmoxNodeList,
20
+ widthInDashboardUnits: 6,
21
+ heightInDashboardUnits: 4,
22
+ topInDashboardUnits: 0,
23
+ leftInDashboardUnits: 0,
24
+ componentId: ObjectID.generate(),
25
+ minHeightInDashboardUnits: 3,
26
+ minWidthInDashboardUnits: 6,
27
+ arguments: {
28
+ maxRows: 25,
29
+ },
30
+ };
31
+ }
32
+
33
+ public static override getComponentConfigArguments(): Array<
34
+ ComponentArgument<DashboardProxmoxNodeListComponent>
35
+ > {
36
+ const args: Array<ComponentArgument<DashboardProxmoxNodeListComponent>> =
37
+ getProxmoxCommonArguments<DashboardProxmoxNodeListComponent>();
38
+
39
+ args.push({
40
+ name: "Status",
41
+ description: "Quick filter by node availability",
42
+ required: false,
43
+ type: ComponentInputType.Dropdown,
44
+ id: "statusFilter",
45
+ section: ProxmoxFiltersSection,
46
+ dropdownOptions: [
47
+ { label: "All", value: "" },
48
+ { label: "Online only", value: "online" },
49
+ { label: "Offline only", value: "offline" },
50
+ ],
51
+ });
52
+
53
+ return args;
54
+ }
55
+ }
@@ -0,0 +1,61 @@
1
+ import {
2
+ ComponentArgument,
3
+ ComponentArgumentSection,
4
+ ComponentInputType,
5
+ EntityFilterModelType,
6
+ } from "../../../Types/Dashboard/DashboardComponents/ComponentArgument";
7
+ import DashboardBaseComponent from "../../../Types/Dashboard/DashboardComponents/DashboardBaseComponent";
8
+ import { getViewModeArgument } from "./DashboardListSharedArgs";
9
+
10
+ export const ProxmoxDisplaySection: ComponentArgumentSection = {
11
+ name: "Display Options",
12
+ description: "Configure the widget title and row limit",
13
+ order: 1,
14
+ };
15
+
16
+ export const ProxmoxFiltersSection: ComponentArgumentSection = {
17
+ name: "Filters",
18
+ description: "Narrow down which resources are shown",
19
+ order: 2,
20
+ defaultCollapsed: true,
21
+ };
22
+
23
+ export function getProxmoxCommonArguments<
24
+ T extends DashboardBaseComponent,
25
+ >(): Array<ComponentArgument<T>> {
26
+ const args: Array<ComponentArgument<T>> = [];
27
+
28
+ args.push({
29
+ name: "Title",
30
+ description: "Header shown above the list",
31
+ required: false,
32
+ type: ComponentInputType.Text,
33
+ id: "title" as keyof T["arguments"],
34
+ section: ProxmoxDisplaySection,
35
+ });
36
+
37
+ args.push({
38
+ name: "Max Rows",
39
+ description: "Maximum number of rows to show",
40
+ required: false,
41
+ type: ComponentInputType.Number,
42
+ id: "maxRows" as keyof T["arguments"],
43
+ placeholder: "25",
44
+ section: ProxmoxDisplaySection,
45
+ });
46
+
47
+ args.push(getViewModeArgument<T>(ProxmoxDisplaySection));
48
+
49
+ args.push({
50
+ name: "Clusters",
51
+ description: "Show only resources from the selected Proxmox clusters",
52
+ required: false,
53
+ type: ComponentInputType.EntityMultiSelectDropdown,
54
+ id: "proxmoxClusterIds" as keyof T["arguments"],
55
+ placeholder: "All clusters",
56
+ section: ProxmoxFiltersSection,
57
+ entityFilterModelType: EntityFilterModelType.ProxmoxCluster,
58
+ });
59
+
60
+ return args;
61
+ }
@@ -3,6 +3,8 @@ import DashboardBaseComponent from "../../../Types/Dashboard/DashboardComponents
3
3
  import DashboardComponentType from "../../../Types/Dashboard/DashboardComponentType";
4
4
  import BadDataException from "../../../Types/Exception/BadDataException";
5
5
  import DashboardAlertListComponentUtil from "./DashboardAlertListComponent";
6
+ import DashboardCephOsdListComponentUtil from "./DashboardCephOsdListComponent";
7
+ import DashboardCephPoolListComponentUtil from "./DashboardCephPoolListComponent";
6
8
  import DashboardChartComponentUtil from "./DashboardChartComponent";
7
9
  import DashboardDockerContainerListComponentUtil from "./DashboardDockerContainerListComponent";
8
10
  import DashboardDockerHostListComponentUtil from "./DashboardDockerHostListComponent";
@@ -22,6 +24,8 @@ import DashboardKubernetesPodListComponentUtil from "./DashboardKubernetesPodLis
22
24
  import DashboardKubernetesStatefulSetListComponentUtil from "./DashboardKubernetesStatefulSetListComponent";
23
25
  import DashboardLogStreamComponentUtil from "./DashboardLogStreamComponent";
24
26
  import DashboardMonitorListComponentUtil from "./DashboardMonitorListComponent";
27
+ import DashboardProxmoxGuestListComponentUtil from "./DashboardProxmoxGuestListComponent";
28
+ import DashboardProxmoxNodeListComponentUtil from "./DashboardProxmoxNodeListComponent";
25
29
  import DashboardTableComponentUtil from "./DashboardTableComponent";
26
30
  import DashboardTextComponentUtil from "./DashboardTextComponent";
27
31
  import DashboardTraceChartComponentUtil from "./DashboardTraceChartComponent";
@@ -193,6 +197,30 @@ export default class DashboardComponentsUtil {
193
197
  >;
194
198
  }
195
199
 
200
+ if (dashboardComponentType === DashboardComponentType.ProxmoxNodeList) {
201
+ return DashboardProxmoxNodeListComponentUtil.getComponentConfigArguments() as Array<
202
+ ComponentArgument<DashboardBaseComponent>
203
+ >;
204
+ }
205
+
206
+ if (dashboardComponentType === DashboardComponentType.ProxmoxGuestList) {
207
+ return DashboardProxmoxGuestListComponentUtil.getComponentConfigArguments() as Array<
208
+ ComponentArgument<DashboardBaseComponent>
209
+ >;
210
+ }
211
+
212
+ if (dashboardComponentType === DashboardComponentType.CephOsdList) {
213
+ return DashboardCephOsdListComponentUtil.getComponentConfigArguments() as Array<
214
+ ComponentArgument<DashboardBaseComponent>
215
+ >;
216
+ }
217
+
218
+ if (dashboardComponentType === DashboardComponentType.CephPoolList) {
219
+ return DashboardCephPoolListComponentUtil.getComponentConfigArguments() as Array<
220
+ ComponentArgument<DashboardBaseComponent>
221
+ >;
222
+ }
223
+
196
224
  throw new BadDataException(
197
225
  `Unknown dashboard component type: ${dashboardComponentType}`,
198
226
  );
@@ -149,3 +149,38 @@ export function keyForKubernetesCluster(
149
149
  identifyingAttributes: { "k8s.cluster.name": clusterIdentifier },
150
150
  });
151
151
  }
152
+
153
+ /**
154
+ * `proxmox.cluster.name` is the cluster identity (matches the ProxmoxCluster
155
+ * row's `name`, the project-unique join key written by
156
+ * `findOrCreateByName`; the ingest resolver is name-only — see
157
+ * `TelemetryEntity.proxmoxClusterIdentity`). Pass `ProxmoxCluster.name`.
158
+ */
159
+ export function keyForProxmoxCluster(
160
+ projectId: string,
161
+ clusterName: string,
162
+ ): string {
163
+ return computeEntityKey({
164
+ projectId,
165
+ entityType: EntityType.ProxmoxCluster,
166
+ identifyingAttributes: { "proxmox.cluster.name": clusterName },
167
+ });
168
+ }
169
+
170
+ /**
171
+ * `ceph.cluster.name` is the cluster identity (matches the CephCluster
172
+ * row's `name`, the project-unique join key written by
173
+ * `findOrCreateByName`; the ingest resolver is name-only —
174
+ * `ceph.cluster.fsid` is descriptive, never identity). Pass
175
+ * `CephCluster.name`.
176
+ */
177
+ export function keyForCephCluster(
178
+ projectId: string,
179
+ clusterName: string,
180
+ ): string {
181
+ return computeEntityKey({
182
+ projectId,
183
+ entityType: EntityType.CephCluster,
184
+ identifyingAttributes: { "ceph.cluster.name": clusterName },
185
+ });
186
+ }
@@ -57,6 +57,12 @@ const RULES: Record<string, EntityRelationshipType> = {
57
57
  EntityRelationshipType.MemberOf,
58
58
  [`${EntityType.KubernetesDeployment}|${EntityType.KubernetesCluster}`]:
59
59
  EntityRelationshipType.MemberOf,
60
+ [`${EntityType.ProxmoxNode}|${EntityType.ProxmoxCluster}`]:
61
+ EntityRelationshipType.MemberOf,
62
+ [`${EntityType.ProxmoxGuest}|${EntityType.ProxmoxNode}`]:
63
+ EntityRelationshipType.RunsOn,
64
+ [`${EntityType.ProxmoxGuest}|${EntityType.ProxmoxCluster}`]:
65
+ EntityRelationshipType.MemberOf,
60
66
  };
61
67
 
62
68
  /** The relationship `fromType` → `toType` implies, or null if none. */