@oneuptime/common 11.0.2 → 11.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (344) hide show
  1. package/Models/DatabaseModels/Alert.ts +166 -0
  2. package/Models/DatabaseModels/AlertLabelRule.ts +38 -0
  3. package/Models/DatabaseModels/AlertOwnerRule.ts +38 -0
  4. package/Models/DatabaseModels/DockerSwarmCluster.ts +989 -0
  5. package/Models/DatabaseModels/DockerSwarmClusterLabelRule.ts +514 -0
  6. package/Models/DatabaseModels/DockerSwarmClusterOwnerRule.ts +596 -0
  7. package/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.ts +487 -0
  8. package/Models/DatabaseModels/DockerSwarmClusterOwnerUser.ts +486 -0
  9. package/Models/DatabaseModels/DockerSwarmResource.ts +750 -0
  10. package/Models/DatabaseModels/Incident.ts +166 -0
  11. package/Models/DatabaseModels/IncidentLabelRule.ts +38 -0
  12. package/Models/DatabaseModels/IncidentOwnerRule.ts +38 -0
  13. package/Models/DatabaseModels/IncidentTemplate.ts +56 -0
  14. package/Models/DatabaseModels/Index.ts +24 -0
  15. package/Models/DatabaseModels/PodmanHost.ts +859 -0
  16. package/Models/DatabaseModels/PodmanHostLabelRule.ts +514 -0
  17. package/Models/DatabaseModels/PodmanHostOwnerRule.ts +596 -0
  18. package/Models/DatabaseModels/PodmanHostOwnerTeam.ts +487 -0
  19. package/Models/DatabaseModels/PodmanHostOwnerUser.ts +486 -0
  20. package/Models/DatabaseModels/PodmanResource.ts +498 -0
  21. package/Models/DatabaseModels/ScheduledMaintenance.ts +110 -0
  22. package/Models/DatabaseModels/ScheduledMaintenanceLabelRule.ts +38 -0
  23. package/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.ts +38 -0
  24. package/Models/DatabaseModels/ScheduledMaintenanceTemplate.ts +56 -0
  25. package/Models/DatabaseModels/TelemetryException.ts +2 -0
  26. package/Server/API/DashboardAPI.ts +89 -0
  27. package/Server/API/DockerSwarmResourceAPI.ts +137 -0
  28. package/Server/API/TelemetryAPI.ts +8 -1
  29. package/Server/Infrastructure/Postgres/SchemaMigrations/1781587937032-MigrationName.ts +3199 -0
  30. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
  31. package/Server/Services/AlertLabelRuleEngineService.ts +29 -0
  32. package/Server/Services/AlertOwnerRuleEngineService.ts +67 -0
  33. package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +214 -0
  34. package/Server/Services/DockerSwarmClusterLabelRuleService.ts +14 -0
  35. package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +232 -0
  36. package/Server/Services/DockerSwarmClusterOwnerRuleService.ts +14 -0
  37. package/Server/Services/DockerSwarmClusterOwnerTeamService.ts +10 -0
  38. package/Server/Services/DockerSwarmClusterOwnerUserService.ts +10 -0
  39. package/Server/Services/DockerSwarmClusterService.ts +404 -0
  40. package/Server/Services/DockerSwarmResourceService.ts +381 -0
  41. package/Server/Services/ExceptionAggregationService.ts +1 -0
  42. package/Server/Services/IncidentLabelRuleEngineService.ts +27 -0
  43. package/Server/Services/IncidentOwnerRuleEngineService.ts +67 -0
  44. package/Server/Services/IncidentService.ts +11 -0
  45. package/Server/Services/Index.ts +14 -0
  46. package/Server/Services/LogAggregationService.ts +1 -0
  47. package/Server/Services/MetricAggregationService.ts +1 -0
  48. package/Server/Services/OpenTelemetryIngestService.ts +37 -0
  49. package/Server/Services/PodmanHostLabelRuleEngineService.ts +198 -0
  50. package/Server/Services/PodmanHostLabelRuleService.ts +14 -0
  51. package/Server/Services/PodmanHostOwnerRuleEngineService.ts +216 -0
  52. package/Server/Services/PodmanHostOwnerRuleService.ts +14 -0
  53. package/Server/Services/PodmanHostOwnerTeamService.ts +10 -0
  54. package/Server/Services/PodmanHostOwnerUserService.ts +10 -0
  55. package/Server/Services/PodmanHostService.ts +368 -0
  56. package/Server/Services/PodmanResourceService.ts +310 -0
  57. package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +29 -0
  58. package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +67 -0
  59. package/Server/Services/TelemetryUsageBillingService.ts +18 -0
  60. package/Server/Services/TraceAggregationService.ts +1 -0
  61. package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +13 -0
  62. package/Server/Utils/Monitor/MonitorAlert.ts +10 -0
  63. package/Server/Utils/Monitor/MonitorClusterContext.ts +35 -6
  64. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +306 -0
  65. package/Server/Utils/Monitor/MonitorIncident.ts +45 -0
  66. package/Server/Utils/Monitor/MonitorMaintenanceSuppression.ts +17 -0
  67. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +3 -0
  68. package/Server/Utils/Monitor/SeriesResourceLabels.ts +26 -0
  69. package/Server/Utils/Telemetry/ResourceFacetResolver.ts +49 -0
  70. package/Server/Utils/Telemetry/Telemetry.ts +10 -0
  71. package/Server/Utils/Telemetry/TelemetryEntity.ts +22 -0
  72. package/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.ts +1 -0
  73. package/Tests/Types/DockerSwarm/DockerSwarmInventoryExtractor.test.ts +667 -0
  74. package/Tests/Types/Monitor/DockerSwarmAlertTemplates.test.ts +528 -0
  75. package/Types/Dashboard/DashboardComponentType.ts +7 -0
  76. package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +2 -0
  77. package/Types/Dashboard/DashboardComponents/DashboardDockerSwarmNodeListComponent.ts +17 -0
  78. package/Types/Dashboard/DashboardComponents/DashboardDockerSwarmServiceListComponent.ts +17 -0
  79. package/Types/Dashboard/DashboardComponents/DashboardPodmanContainerListComponent.ts +16 -0
  80. package/Types/Dashboard/DashboardComponents/DashboardPodmanHostListComponent.ts +15 -0
  81. package/Types/Dashboard/DashboardComponents/DashboardPodmanImageListComponent.ts +16 -0
  82. package/Types/Dashboard/DashboardComponents/DashboardPodmanNetworkListComponent.ts +15 -0
  83. package/Types/Dashboard/DashboardComponents/DashboardPodmanVolumeListComponent.ts +15 -0
  84. package/Types/Dashboard/DashboardTemplates.ts +194 -0
  85. package/Types/DockerSwarm/DockerSwarmInventoryExtractor.ts +452 -0
  86. package/Types/Icon/IconProp.ts +1 -0
  87. package/Types/Monitor/DockerSwarmAlertTemplates.ts +461 -0
  88. package/Types/Monitor/DockerSwarmMetricCatalog.ts +139 -0
  89. package/Types/Monitor/HostAlertTemplates.ts +455 -0
  90. package/Types/Monitor/HostMetricCatalog.ts +177 -0
  91. package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +21 -0
  92. package/Types/Monitor/MonitorStep.ts +99 -0
  93. package/Types/Monitor/MonitorStepDockerSwarmMonitor.ts +74 -0
  94. package/Types/Monitor/MonitorStepHostMonitor.ts +30 -0
  95. package/Types/Monitor/MonitorStepPodmanMonitor.ts +38 -0
  96. package/Types/Monitor/MonitorType.ts +42 -0
  97. package/Types/Monitor/PodmanAlertTemplates.ts +507 -0
  98. package/Types/Monitor/PodmanMetricCatalog.ts +226 -0
  99. package/Types/Permission.ts +465 -4
  100. package/Types/Podman/PodmanInventoryExtractor.ts +343 -0
  101. package/Types/Telemetry/EntityType.ts +12 -0
  102. package/Types/Telemetry/ServiceType.ts +2 -0
  103. package/UI/Components/Icon/Icon.tsx +57 -0
  104. package/UI/Components/LogsViewer/LogsViewer.tsx +44 -1
  105. package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +28 -0
  106. package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +6 -0
  107. package/UI/Utils/TelemetryService.ts +1 -0
  108. package/Utils/Dashboard/Components/DashboardDockerSwarmNodeListComponent.ts +70 -0
  109. package/Utils/Dashboard/Components/DashboardDockerSwarmResourceListShared.ts +61 -0
  110. package/Utils/Dashboard/Components/DashboardDockerSwarmServiceListComponent.ts +71 -0
  111. package/Utils/Dashboard/Components/DashboardPodmanContainerListComponent.ts +100 -0
  112. package/Utils/Dashboard/Components/DashboardPodmanHostListComponent.ts +88 -0
  113. package/Utils/Dashboard/Components/DashboardPodmanImageListComponent.ts +97 -0
  114. package/Utils/Dashboard/Components/DashboardPodmanNetworkListComponent.ts +87 -0
  115. package/Utils/Dashboard/Components/DashboardPodmanVolumeListComponent.ts +87 -0
  116. package/Utils/Dashboard/Components/Index.ts +51 -0
  117. package/Utils/Telemetry/EntityKey.ts +18 -0
  118. package/build/dist/Models/DatabaseModels/Alert.js +162 -0
  119. package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
  120. package/build/dist/Models/DatabaseModels/AlertLabelRule.js +39 -0
  121. package/build/dist/Models/DatabaseModels/AlertLabelRule.js.map +1 -1
  122. package/build/dist/Models/DatabaseModels/AlertOwnerRule.js +39 -0
  123. package/build/dist/Models/DatabaseModels/AlertOwnerRule.js.map +1 -1
  124. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js +1018 -0
  125. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js.map +1 -0
  126. package/build/dist/Models/DatabaseModels/DockerSwarmClusterLabelRule.js +522 -0
  127. package/build/dist/Models/DatabaseModels/DockerSwarmClusterLabelRule.js.map +1 -0
  128. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerRule.js +603 -0
  129. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerRule.js.map +1 -0
  130. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.js +503 -0
  131. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.js.map +1 -0
  132. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerUser.js +502 -0
  133. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerUser.js.map +1 -0
  134. package/build/dist/Models/DatabaseModels/DockerSwarmResource.js +787 -0
  135. package/build/dist/Models/DatabaseModels/DockerSwarmResource.js.map +1 -0
  136. package/build/dist/Models/DatabaseModels/Incident.js +162 -0
  137. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  138. package/build/dist/Models/DatabaseModels/IncidentLabelRule.js +39 -0
  139. package/build/dist/Models/DatabaseModels/IncidentLabelRule.js.map +1 -1
  140. package/build/dist/Models/DatabaseModels/IncidentOwnerRule.js +39 -0
  141. package/build/dist/Models/DatabaseModels/IncidentOwnerRule.js.map +1 -1
  142. package/build/dist/Models/DatabaseModels/IncidentTemplate.js +54 -0
  143. package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
  144. package/build/dist/Models/DatabaseModels/Index.js +24 -0
  145. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  146. package/build/dist/Models/DatabaseModels/PodmanHost.js +885 -0
  147. package/build/dist/Models/DatabaseModels/PodmanHost.js.map +1 -0
  148. package/build/dist/Models/DatabaseModels/PodmanHostLabelRule.js +522 -0
  149. package/build/dist/Models/DatabaseModels/PodmanHostLabelRule.js.map +1 -0
  150. package/build/dist/Models/DatabaseModels/PodmanHostOwnerRule.js +603 -0
  151. package/build/dist/Models/DatabaseModels/PodmanHostOwnerRule.js.map +1 -0
  152. package/build/dist/Models/DatabaseModels/PodmanHostOwnerTeam.js +503 -0
  153. package/build/dist/Models/DatabaseModels/PodmanHostOwnerTeam.js.map +1 -0
  154. package/build/dist/Models/DatabaseModels/PodmanHostOwnerUser.js +502 -0
  155. package/build/dist/Models/DatabaseModels/PodmanHostOwnerUser.js.map +1 -0
  156. package/build/dist/Models/DatabaseModels/PodmanResource.js +526 -0
  157. package/build/dist/Models/DatabaseModels/PodmanResource.js.map +1 -0
  158. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +108 -0
  159. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  160. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceLabelRule.js +39 -0
  161. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceLabelRule.js.map +1 -1
  162. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.js +39 -0
  163. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.js.map +1 -1
  164. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js +54 -0
  165. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js.map +1 -1
  166. package/build/dist/Models/DatabaseModels/TelemetryException.js +2 -0
  167. package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
  168. package/build/dist/Server/API/DashboardAPI.js +89 -0
  169. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  170. package/build/dist/Server/API/DockerSwarmResourceAPI.js +100 -0
  171. package/build/dist/Server/API/DockerSwarmResourceAPI.js.map +1 -0
  172. package/build/dist/Server/API/TelemetryAPI.js +8 -1
  173. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  174. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781587937032-MigrationName.js +1100 -0
  175. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781587937032-MigrationName.js.map +1 -0
  176. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
  177. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  178. package/build/dist/Server/Services/AlertLabelRuleEngineService.js +30 -4
  179. package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
  180. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +62 -5
  181. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
  182. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +168 -0
  183. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -0
  184. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleService.js +13 -0
  185. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleService.js.map +1 -0
  186. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +188 -0
  187. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -0
  188. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleService.js +13 -0
  189. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleService.js.map +1 -0
  190. package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js +9 -0
  191. package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js.map +1 -0
  192. package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js +9 -0
  193. package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js.map +1 -0
  194. package/build/dist/Server/Services/DockerSwarmClusterService.js +353 -0
  195. package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -0
  196. package/build/dist/Server/Services/DockerSwarmResourceService.js +258 -0
  197. package/build/dist/Server/Services/DockerSwarmResourceService.js.map +1 -0
  198. package/build/dist/Server/Services/ExceptionAggregationService.js +1 -0
  199. package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
  200. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +28 -4
  201. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
  202. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +62 -5
  203. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
  204. package/build/dist/Server/Services/IncidentService.js +8 -0
  205. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  206. package/build/dist/Server/Services/Index.js +14 -0
  207. package/build/dist/Server/Services/Index.js.map +1 -1
  208. package/build/dist/Server/Services/LogAggregationService.js +1 -0
  209. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  210. package/build/dist/Server/Services/MetricAggregationService.js +1 -0
  211. package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
  212. package/build/dist/Server/Services/OpenTelemetryIngestService.js +43 -13
  213. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  214. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +166 -0
  215. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -0
  216. package/build/dist/Server/Services/PodmanHostLabelRuleService.js +13 -0
  217. package/build/dist/Server/Services/PodmanHostLabelRuleService.js.map +1 -0
  218. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +186 -0
  219. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -0
  220. package/build/dist/Server/Services/PodmanHostOwnerRuleService.js +13 -0
  221. package/build/dist/Server/Services/PodmanHostOwnerRuleService.js.map +1 -0
  222. package/build/dist/Server/Services/PodmanHostOwnerTeamService.js +9 -0
  223. package/build/dist/Server/Services/PodmanHostOwnerTeamService.js.map +1 -0
  224. package/build/dist/Server/Services/PodmanHostOwnerUserService.js +9 -0
  225. package/build/dist/Server/Services/PodmanHostOwnerUserService.js.map +1 -0
  226. package/build/dist/Server/Services/PodmanHostService.js +319 -0
  227. package/build/dist/Server/Services/PodmanHostService.js.map +1 -0
  228. package/build/dist/Server/Services/PodmanResourceService.js +196 -0
  229. package/build/dist/Server/Services/PodmanResourceService.js.map +1 -0
  230. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +30 -4
  231. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
  232. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +62 -5
  233. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
  234. package/build/dist/Server/Services/TelemetryUsageBillingService.js +13 -0
  235. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  236. package/build/dist/Server/Services/TraceAggregationService.js +1 -0
  237. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  238. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +13 -0
  239. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
  240. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +8 -0
  241. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  242. package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js +35 -7
  243. package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js.map +1 -1
  244. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +194 -0
  245. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  246. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +35 -1
  247. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  248. package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js +9 -0
  249. package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js.map +1 -1
  250. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +3 -0
  251. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  252. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +16 -0
  253. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
  254. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js +30 -0
  255. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js.map +1 -1
  256. package/build/dist/Server/Utils/Telemetry/Telemetry.js +6 -0
  257. package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
  258. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +18 -0
  259. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
  260. package/build/dist/Types/Dashboard/DashboardComponentType.js +7 -0
  261. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  262. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +2 -0
  263. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
  264. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmNodeListComponent.js +2 -0
  265. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmNodeListComponent.js.map +1 -0
  266. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmServiceListComponent.js +2 -0
  267. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmServiceListComponent.js.map +1 -0
  268. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanContainerListComponent.js +2 -0
  269. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanContainerListComponent.js.map +1 -0
  270. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanHostListComponent.js +2 -0
  271. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanHostListComponent.js.map +1 -0
  272. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanImageListComponent.js +2 -0
  273. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanImageListComponent.js.map +1 -0
  274. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanNetworkListComponent.js +2 -0
  275. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanNetworkListComponent.js.map +1 -0
  276. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanVolumeListComponent.js +2 -0
  277. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanVolumeListComponent.js.map +1 -0
  278. package/build/dist/Types/Dashboard/DashboardTemplates.js +168 -0
  279. package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
  280. package/build/dist/Types/DockerSwarm/DockerSwarmInventoryExtractor.js +359 -0
  281. package/build/dist/Types/DockerSwarm/DockerSwarmInventoryExtractor.js.map +1 -0
  282. package/build/dist/Types/Icon/IconProp.js +1 -0
  283. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  284. package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js +358 -0
  285. package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js.map +1 -0
  286. package/build/dist/Types/Monitor/DockerSwarmMetricCatalog.js +103 -0
  287. package/build/dist/Types/Monitor/DockerSwarmMetricCatalog.js.map +1 -0
  288. package/build/dist/Types/Monitor/HostAlertTemplates.js +365 -0
  289. package/build/dist/Types/Monitor/HostAlertTemplates.js.map +1 -0
  290. package/build/dist/Types/Monitor/HostMetricCatalog.js +138 -0
  291. package/build/dist/Types/Monitor/HostMetricCatalog.js.map +1 -0
  292. package/build/dist/Types/Monitor/MonitorStep.js +69 -0
  293. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  294. package/build/dist/Types/Monitor/MonitorStepDockerSwarmMonitor.js +21 -0
  295. package/build/dist/Types/Monitor/MonitorStepDockerSwarmMonitor.js.map +1 -0
  296. package/build/dist/Types/Monitor/MonitorStepHostMonitor.js +20 -0
  297. package/build/dist/Types/Monitor/MonitorStepHostMonitor.js.map +1 -0
  298. package/build/dist/Types/Monitor/MonitorStepPodmanMonitor.js +21 -0
  299. package/build/dist/Types/Monitor/MonitorStepPodmanMonitor.js.map +1 -0
  300. package/build/dist/Types/Monitor/MonitorType.js +39 -0
  301. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  302. package/build/dist/Types/Monitor/PodmanAlertTemplates.js +410 -0
  303. package/build/dist/Types/Monitor/PodmanAlertTemplates.js.map +1 -0
  304. package/build/dist/Types/Monitor/PodmanMetricCatalog.js +192 -0
  305. package/build/dist/Types/Monitor/PodmanMetricCatalog.js.map +1 -0
  306. package/build/dist/Types/Permission.js +420 -4
  307. package/build/dist/Types/Permission.js.map +1 -1
  308. package/build/dist/Types/Podman/PodmanInventoryExtractor.js +293 -0
  309. package/build/dist/Types/Podman/PodmanInventoryExtractor.js.map +1 -0
  310. package/build/dist/Types/Telemetry/EntityType.js +12 -0
  311. package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
  312. package/build/dist/Types/Telemetry/ServiceType.js +2 -0
  313. package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
  314. package/build/dist/UI/Components/Icon/Icon.js +16 -0
  315. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  316. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +30 -2
  317. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  318. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +22 -0
  319. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
  320. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +6 -0
  321. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
  322. package/build/dist/UI/Utils/TelemetryService.js +1 -0
  323. package/build/dist/UI/Utils/TelemetryService.js.map +1 -1
  324. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmNodeListComponent.js +55 -0
  325. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmNodeListComponent.js.map +1 -0
  326. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmResourceListShared.js +46 -0
  327. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmResourceListShared.js.map +1 -0
  328. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmServiceListComponent.js +55 -0
  329. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmServiceListComponent.js.map +1 -0
  330. package/build/dist/Utils/Dashboard/Components/DashboardPodmanContainerListComponent.js +77 -0
  331. package/build/dist/Utils/Dashboard/Components/DashboardPodmanContainerListComponent.js.map +1 -0
  332. package/build/dist/Utils/Dashboard/Components/DashboardPodmanHostListComponent.js +71 -0
  333. package/build/dist/Utils/Dashboard/Components/DashboardPodmanHostListComponent.js.map +1 -0
  334. package/build/dist/Utils/Dashboard/Components/DashboardPodmanImageListComponent.js +77 -0
  335. package/build/dist/Utils/Dashboard/Components/DashboardPodmanImageListComponent.js.map +1 -0
  336. package/build/dist/Utils/Dashboard/Components/DashboardPodmanNetworkListComponent.js +68 -0
  337. package/build/dist/Utils/Dashboard/Components/DashboardPodmanNetworkListComponent.js.map +1 -0
  338. package/build/dist/Utils/Dashboard/Components/DashboardPodmanVolumeListComponent.js +68 -0
  339. package/build/dist/Utils/Dashboard/Components/DashboardPodmanVolumeListComponent.js.map +1 -0
  340. package/build/dist/Utils/Dashboard/Components/Index.js +28 -0
  341. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  342. package/build/dist/Utils/Telemetry/EntityKey.js +14 -0
  343. package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
  344. package/package.json +1 -1
@@ -386,6 +386,7 @@ import { MigrationName1781250074195 } from "./1781250074195-MigrationName";
386
386
  import { AddTelemetryEntityLabels1781300000000 } from "./1781300000000-AddTelemetryEntityLabels";
387
387
  import { AddServiceTelemetrySdkLanguage1781400000000 } from "./1781400000000-AddServiceTelemetrySdkLanguage";
388
388
  import { AddProxmoxAndCephClusterTables1781500000000 } from "./1781500000000-AddProxmoxAndCephClusterTables";
389
+ import { MigrationName1781587937032 } from "./1781587937032-MigrationName";
389
390
  import { AddProxmoxCephV2Columns1781600000000 } from "./1781600000000-AddProxmoxCephV2Columns";
390
391
  import { AddProxmoxCephActivityAndRules1781600000001 } from "./1781600000001-AddProxmoxCephActivityAndRules";
391
392
  import { AddProxmoxCephV3Columns1781700000000 } from "./1781700000000-AddProxmoxCephV3Columns";
@@ -782,4 +783,5 @@ export default [
782
783
  AddProxmoxCephV2Columns1781600000000,
783
784
  AddProxmoxCephActivityAndRules1781600000001,
784
785
  AddProxmoxCephV3Columns1781700000000,
786
+ MigrationName1781587937032,
785
787
  ];
@@ -6,11 +6,13 @@ import Host from "../../Models/DatabaseModels/Host";
6
6
  import KubernetesCluster from "../../Models/DatabaseModels/KubernetesCluster";
7
7
  import Label from "../../Models/DatabaseModels/Label";
8
8
  import Monitor from "../../Models/DatabaseModels/Monitor";
9
+ import PodmanHost from "../../Models/DatabaseModels/PodmanHost";
9
10
  import Service from "../../Models/DatabaseModels/Service";
10
11
  import AlertFeedService from "./AlertFeedService";
11
12
  import AlertLabelRuleService from "./AlertLabelRuleService";
12
13
  import AlertService from "./AlertService";
13
14
  import DockerHostService from "./DockerHostService";
15
+ import PodmanHostService from "./PodmanHostService";
14
16
  import HostService from "./HostService";
15
17
  import KubernetesClusterService from "./KubernetesClusterService";
16
18
  import LabelService from "./LabelService";
@@ -33,6 +35,7 @@ class AlertLabelRuleEngineServiceClass {
33
35
  * - all labels of the alert's hosts when `inheritLabelsFromHosts`
34
36
  * - all labels of the alert's Kubernetes clusters when `inheritLabelsFromKubernetesClusters`
35
37
  * - all labels of the alert's Docker hosts when `inheritLabelsFromDockerHosts`
38
+ * - all labels of the alert's Podman hosts when `inheritLabelsFromPodmanHosts`
36
39
  * - all labels of the alert's services when `inheritLabelsFromServices`
37
40
  * The union is deduped against labels already on the alert before insert
38
41
  * to avoid PK conflicts on the AlertLabel join table.
@@ -66,6 +69,7 @@ class AlertLabelRuleEngineServiceClass {
66
69
  inheritLabelsFromHosts: true,
67
70
  inheritLabelsFromKubernetesClusters: true,
68
71
  inheritLabelsFromDockerHosts: true,
72
+ inheritLabelsFromPodmanHosts: true,
69
73
  inheritLabelsFromServices: true,
70
74
  },
71
75
  limit: 100,
@@ -81,6 +85,7 @@ class AlertLabelRuleEngineServiceClass {
81
85
  let inheritFromHosts: boolean = false;
82
86
  let inheritFromKubernetesClusters: boolean = false;
83
87
  let inheritFromDockerHosts: boolean = false;
88
+ let inheritFromPodmanHosts: boolean = false;
84
89
  let inheritFromServices: boolean = false;
85
90
  const matchedRules: Array<AlertLabelRule> = [];
86
91
 
@@ -107,6 +112,9 @@ class AlertLabelRuleEngineServiceClass {
107
112
  if (rule.inheritLabelsFromDockerHosts) {
108
113
  inheritFromDockerHosts = true;
109
114
  }
115
+ if (rule.inheritLabelsFromPodmanHosts) {
116
+ inheritFromPodmanHosts = true;
117
+ }
110
118
  if (rule.inheritLabelsFromServices) {
111
119
  inheritFromServices = true;
112
120
  }
@@ -116,6 +124,7 @@ class AlertLabelRuleEngineServiceClass {
116
124
  inheritFromHosts ||
117
125
  inheritFromKubernetesClusters ||
118
126
  inheritFromDockerHosts ||
127
+ inheritFromPodmanHosts ||
119
128
  inheritFromServices;
120
129
 
121
130
  let alertWithResources: Alert | null = null;
@@ -126,6 +135,7 @@ class AlertLabelRuleEngineServiceClass {
126
135
  hosts: { _id: true },
127
136
  kubernetesClusters: { _id: true },
128
137
  dockerHosts: { _id: true },
138
+ podmanHosts: { _id: true },
129
139
  services: { _id: true },
130
140
  },
131
141
  props: { isRoot: true },
@@ -204,6 +214,25 @@ class AlertLabelRuleEngineServiceClass {
204
214
  }
205
215
  }
206
216
 
217
+ if (inheritFromPodmanHosts && alertWithResources?.podmanHosts?.length) {
218
+ for (const alertPodmanHost of alertWithResources.podmanHosts) {
219
+ if (!alertPodmanHost.id) {
220
+ continue;
221
+ }
222
+ const podmanHost: PodmanHost | null =
223
+ await PodmanHostService.findOneById({
224
+ id: alertPodmanHost.id,
225
+ select: { labels: { _id: true } },
226
+ props: { isRoot: true },
227
+ });
228
+ for (const label of podmanHost?.labels || []) {
229
+ if (label.id) {
230
+ labelIdsToAdd.add(label.id.toString());
231
+ }
232
+ }
233
+ }
234
+ }
235
+
207
236
  if (inheritFromServices && alertWithResources?.services?.length) {
208
237
  for (const alertService of alertWithResources.services) {
209
238
  if (!alertService.id) {
@@ -14,6 +14,9 @@ import Label from "../../Models/DatabaseModels/Label";
14
14
  import Monitor from "../../Models/DatabaseModels/Monitor";
15
15
  import MonitorOwnerTeam from "../../Models/DatabaseModels/MonitorOwnerTeam";
16
16
  import MonitorOwnerUser from "../../Models/DatabaseModels/MonitorOwnerUser";
17
+ import PodmanHost from "../../Models/DatabaseModels/PodmanHost";
18
+ import PodmanHostOwnerTeam from "../../Models/DatabaseModels/PodmanHostOwnerTeam";
19
+ import PodmanHostOwnerUser from "../../Models/DatabaseModels/PodmanHostOwnerUser";
17
20
  import Service from "../../Models/DatabaseModels/Service";
18
21
  import ServiceOwnerTeam from "../../Models/DatabaseModels/ServiceOwnerTeam";
19
22
  import ServiceOwnerUser from "../../Models/DatabaseModels/ServiceOwnerUser";
@@ -31,6 +34,8 @@ import KubernetesClusterOwnerUserService from "./KubernetesClusterOwnerUserServi
31
34
  import MonitorOwnerTeamService from "./MonitorOwnerTeamService";
32
35
  import MonitorOwnerUserService from "./MonitorOwnerUserService";
33
36
  import MonitorService from "./MonitorService";
37
+ import PodmanHostOwnerTeamService from "./PodmanHostOwnerTeamService";
38
+ import PodmanHostOwnerUserService from "./PodmanHostOwnerUserService";
34
39
  import ServiceOwnerTeamService from "./ServiceOwnerTeamService";
35
40
  import ServiceOwnerUserService from "./ServiceOwnerUserService";
36
41
  import TeamService from "./TeamService";
@@ -79,6 +84,7 @@ class AlertOwnerRuleEngineServiceClass {
79
84
  inheritOwnersFromHosts: true,
80
85
  inheritOwnersFromKubernetesClusters: true,
81
86
  inheritOwnersFromDockerHosts: true,
87
+ inheritOwnersFromPodmanHosts: true,
82
88
  inheritOwnersFromServices: true,
83
89
  },
84
90
  limit: 100,
@@ -105,6 +111,7 @@ class AlertOwnerRuleEngineServiceClass {
105
111
  let inheritFromHosts: boolean = false;
106
112
  let inheritFromKubernetesClusters: boolean = false;
107
113
  let inheritFromDockerHosts: boolean = false;
114
+ let inheritFromPodmanHosts: boolean = false;
108
115
  let inheritFromServices: boolean = false;
109
116
  const inheritNotifyMode: { value: boolean | null } = { value: null };
110
117
 
@@ -153,6 +160,12 @@ class AlertOwnerRuleEngineServiceClass {
153
160
  inheritNotifyMode.value =
154
161
  inheritNotifyMode.value === true ? true : notify;
155
162
  }
163
+ if (rule.inheritOwnersFromPodmanHosts) {
164
+ inheritFromPodmanHosts = true;
165
+ ruleAddedAny = true;
166
+ inheritNotifyMode.value =
167
+ inheritNotifyMode.value === true ? true : notify;
168
+ }
156
169
  if (rule.inheritOwnersFromServices) {
157
170
  inheritFromServices = true;
158
171
  ruleAddedAny = true;
@@ -172,6 +185,8 @@ class AlertOwnerRuleEngineServiceClass {
172
185
  const inheritedFromKubernetesClusterTeamIds: Set<string> = new Set();
173
186
  const inheritedFromDockerHostUserIds: Set<string> = new Set();
174
187
  const inheritedFromDockerHostTeamIds: Set<string> = new Set();
188
+ const inheritedFromPodmanHostUserIds: Set<string> = new Set();
189
+ const inheritedFromPodmanHostTeamIds: Set<string> = new Set();
175
190
  const inheritedFromServiceUserIds: Set<string> = new Set();
176
191
  const inheritedFromServiceTeamIds: Set<string> = new Set();
177
192
 
@@ -334,6 +349,47 @@ class AlertOwnerRuleEngineServiceClass {
334
349
  }
335
350
  }
336
351
 
352
+ if (inheritFromPodmanHosts && alert.podmanHosts?.length) {
353
+ const podmanHostIds: Array<ObjectID> = alert.podmanHosts
354
+ .map((p: PodmanHost) => {
355
+ return p.id;
356
+ })
357
+ .filter((id: ObjectID | null | undefined): id is ObjectID => {
358
+ return Boolean(id);
359
+ });
360
+ if (podmanHostIds.length > 0) {
361
+ const [podmanHostOwnerUsers, podmanHostOwnerTeams]: [
362
+ Array<PodmanHostOwnerUser>,
363
+ Array<PodmanHostOwnerTeam>,
364
+ ] = await Promise.all([
365
+ PodmanHostOwnerUserService.findBy({
366
+ query: { podmanHostId: QueryHelper.any(podmanHostIds) },
367
+ select: { userId: true },
368
+ props: { isRoot: true },
369
+ limit: LIMIT_MAX,
370
+ skip: 0,
371
+ }),
372
+ PodmanHostOwnerTeamService.findBy({
373
+ query: { podmanHostId: QueryHelper.any(podmanHostIds) },
374
+ select: { teamId: true },
375
+ props: { isRoot: true },
376
+ limit: LIMIT_MAX,
377
+ skip: 0,
378
+ }),
379
+ ]);
380
+ for (const ownerUser of podmanHostOwnerUsers) {
381
+ if (ownerUser.userId) {
382
+ inheritedFromPodmanHostUserIds.add(ownerUser.userId.toString());
383
+ }
384
+ }
385
+ for (const ownerTeam of podmanHostOwnerTeams) {
386
+ if (ownerTeam.teamId) {
387
+ inheritedFromPodmanHostTeamIds.add(ownerTeam.teamId.toString());
388
+ }
389
+ }
390
+ }
391
+ }
392
+
337
393
  if (inheritFromServices && alert.services?.length) {
338
394
  const serviceIds: Array<ObjectID> = alert.services
339
395
  .map((s: Service) => {
@@ -380,6 +436,7 @@ class AlertOwnerRuleEngineServiceClass {
380
436
  ...inheritedFromHostUserIds,
381
437
  ...inheritedFromKubernetesClusterUserIds,
382
438
  ...inheritedFromDockerHostUserIds,
439
+ ...inheritedFromPodmanHostUserIds,
383
440
  ...inheritedFromServiceUserIds,
384
441
  ]);
385
442
  const inheritedTeamIds: Set<string> = new Set([
@@ -387,6 +444,7 @@ class AlertOwnerRuleEngineServiceClass {
387
444
  ...inheritedFromHostTeamIds,
388
445
  ...inheritedFromKubernetesClusterTeamIds,
389
446
  ...inheritedFromDockerHostTeamIds,
447
+ ...inheritedFromPodmanHostTeamIds,
390
448
  ...inheritedFromServiceTeamIds,
391
449
  ]);
392
450
 
@@ -458,6 +516,10 @@ class AlertOwnerRuleEngineServiceClass {
458
516
  inheritedFromDockerHostUserIds.size +
459
517
  inheritedFromDockerHostTeamIds.size >
460
518
  0,
519
+ inheritedFromPodmanHosts:
520
+ inheritedFromPodmanHostUserIds.size +
521
+ inheritedFromPodmanHostTeamIds.size >
522
+ 0,
461
523
  inheritedFromServices:
462
524
  inheritedFromServiceUserIds.size + inheritedFromServiceTeamIds.size >
463
525
  0,
@@ -480,6 +542,7 @@ class AlertOwnerRuleEngineServiceClass {
480
542
  inheritedFromHosts: boolean;
481
543
  inheritedFromKubernetesClusters: boolean;
482
544
  inheritedFromDockerHosts: boolean;
545
+ inheritedFromPodmanHosts: boolean;
483
546
  inheritedFromServices: boolean;
484
547
  }): Promise<void> {
485
548
  const {
@@ -491,6 +554,7 @@ class AlertOwnerRuleEngineServiceClass {
491
554
  inheritedFromHosts,
492
555
  inheritedFromKubernetesClusters,
493
556
  inheritedFromDockerHosts,
557
+ inheritedFromPodmanHosts,
494
558
  inheritedFromServices,
495
559
  } = data;
496
560
  if (
@@ -575,6 +639,9 @@ class AlertOwnerRuleEngineServiceClass {
575
639
  if (inheritedFromDockerHosts) {
576
640
  inheritedSources.push("Docker hosts");
577
641
  }
642
+ if (inheritedFromPodmanHosts) {
643
+ inheritedSources.push("Podman hosts");
644
+ }
578
645
  if (inheritedFromServices) {
579
646
  inheritedSources.push("services");
580
647
  }
@@ -0,0 +1,214 @@
1
+ import Label from "../../Models/DatabaseModels/Label";
2
+ import DockerSwarmCluster from "../../Models/DatabaseModels/DockerSwarmCluster";
3
+ import DockerSwarmClusterLabelRule from "../../Models/DatabaseModels/DockerSwarmClusterLabelRule";
4
+ import DockerSwarmClusterLabelRuleService from "./DockerSwarmClusterLabelRuleService";
5
+ import DockerSwarmClusterService from "./DockerSwarmClusterService";
6
+ import ObjectID from "../../Types/ObjectID";
7
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
8
+ import logger, { LogAttributes } from "../Utils/Logger";
9
+
10
+ class DockerSwarmClusterLabelRuleEngineServiceClass {
11
+ /**
12
+ * Evaluates DockerSwarmClusterLabelRule rows for the given DockerSwarm cluster and attaches matched
13
+ * labels to it. The union is deduped against labels already on the DockerSwarm cluster
14
+ * before insert to avoid PK conflicts on the join table.
15
+ */
16
+ @CaptureSpan()
17
+ public async applyRulesToDockerSwarmCluster(
18
+ dockerSwarmCluster: DockerSwarmCluster,
19
+ ): Promise<void> {
20
+ if (!dockerSwarmCluster.id || !dockerSwarmCluster.projectId) {
21
+ return;
22
+ }
23
+
24
+ try {
25
+ const rules: Array<DockerSwarmClusterLabelRule> =
26
+ await DockerSwarmClusterLabelRuleService.findBy({
27
+ query: {
28
+ projectId: dockerSwarmCluster.projectId,
29
+ isEnabled: true,
30
+ },
31
+ props: { isRoot: true },
32
+ select: {
33
+ _id: true,
34
+ name: true,
35
+ dockerSwarmClusterLabels: { _id: true },
36
+ dockerSwarmClusterNamePattern: true,
37
+ dockerSwarmClusterDescriptionPattern: true,
38
+ labelsToAdd: { _id: true },
39
+ },
40
+ limit: 100,
41
+ skip: 0,
42
+ });
43
+
44
+ if (rules.length === 0) {
45
+ return;
46
+ }
47
+
48
+ const dockerSwarmClusterWithDetails: DockerSwarmCluster | null =
49
+ await DockerSwarmClusterService.findOneById({
50
+ id: dockerSwarmCluster.id,
51
+ select: {
52
+ name: true,
53
+ description: true,
54
+ labels: { _id: true },
55
+ },
56
+ props: { isRoot: true },
57
+ });
58
+
59
+ if (!dockerSwarmClusterWithDetails) {
60
+ return;
61
+ }
62
+
63
+ const labelIdsToAdd: Set<string> = new Set();
64
+
65
+ for (const rule of rules) {
66
+ const matches: boolean = this.doesDockerSwarmClusterMatchRule(
67
+ dockerSwarmClusterWithDetails,
68
+ rule,
69
+ );
70
+ if (!matches) {
71
+ continue;
72
+ }
73
+ for (const label of rule.labelsToAdd || []) {
74
+ if (label.id) {
75
+ labelIdsToAdd.add(label.id.toString());
76
+ }
77
+ }
78
+ }
79
+
80
+ if (labelIdsToAdd.size === 0) {
81
+ return;
82
+ }
83
+
84
+ const existingLabelIds: Set<string> = new Set(
85
+ (dockerSwarmClusterWithDetails.labels || [])
86
+ .map((l: Label) => {
87
+ return l.id?.toString() || "";
88
+ })
89
+ .filter((id: string) => {
90
+ return id !== "";
91
+ }),
92
+ );
93
+
94
+ const newLabelIds: Array<string> = Array.from(labelIdsToAdd).filter(
95
+ (id: string) => {
96
+ return !existingLabelIds.has(id);
97
+ },
98
+ );
99
+ if (newLabelIds.length === 0) {
100
+ return;
101
+ }
102
+
103
+ await DockerSwarmClusterService.getRepository()
104
+ .createQueryBuilder()
105
+ .relation(DockerSwarmCluster, "labels")
106
+ .of(dockerSwarmCluster.id.toString())
107
+ .add(newLabelIds);
108
+
109
+ /*
110
+ * Sync in-memory dockerSwarmCluster.labels so a downstream owner-rule engine in
111
+ * the same onCreateSuccess chain can match on rule-added labels.
112
+ */
113
+ const mergedLabelIds: Set<string> = new Set([
114
+ ...existingLabelIds,
115
+ ...newLabelIds,
116
+ ]);
117
+ dockerSwarmCluster.labels = Array.from(mergedLabelIds).map(
118
+ (id: string) => {
119
+ const label: Label = new Label();
120
+ label.id = new ObjectID(id);
121
+ return label;
122
+ },
123
+ );
124
+
125
+ logger.debug(
126
+ `DockerSwarmClusterLabelRuleEngine attached ${newLabelIds.length} labels to DockerSwarm cluster ${dockerSwarmCluster.id}`,
127
+ { projectId: dockerSwarmCluster.projectId.toString() } as LogAttributes,
128
+ );
129
+ } catch (error) {
130
+ logger.error(`Error applying DockerSwarm cluster label rules: ${error}`, {
131
+ projectId: dockerSwarmCluster.projectId?.toString(),
132
+ dockerSwarmClusterId: dockerSwarmCluster.id?.toString(),
133
+ } as LogAttributes);
134
+ }
135
+ }
136
+
137
+ private doesDockerSwarmClusterMatchRule(
138
+ dockerSwarmCluster: DockerSwarmCluster,
139
+ rule: DockerSwarmClusterLabelRule,
140
+ ): boolean {
141
+ if (
142
+ rule.dockerSwarmClusterLabels &&
143
+ rule.dockerSwarmClusterLabels.length > 0
144
+ ) {
145
+ if (
146
+ !dockerSwarmCluster.labels ||
147
+ dockerSwarmCluster.labels.length === 0
148
+ ) {
149
+ return false;
150
+ }
151
+ const ruleLabelIds: Array<string> = rule.dockerSwarmClusterLabels.map(
152
+ (l: Label) => {
153
+ return l.id?.toString() || "";
154
+ },
155
+ );
156
+ const labelIds: Array<string> = dockerSwarmCluster.labels.map(
157
+ (l: Label) => {
158
+ return l.id?.toString() || "";
159
+ },
160
+ );
161
+ if (
162
+ !ruleLabelIds.some((id: string) => {
163
+ return labelIds.includes(id);
164
+ })
165
+ ) {
166
+ return false;
167
+ }
168
+ }
169
+
170
+ if (
171
+ rule.dockerSwarmClusterNamePattern &&
172
+ (!dockerSwarmCluster.name ||
173
+ !this.testRegex(
174
+ rule.dockerSwarmClusterNamePattern,
175
+ dockerSwarmCluster.name,
176
+ rule,
177
+ ))
178
+ ) {
179
+ return false;
180
+ }
181
+
182
+ if (
183
+ rule.dockerSwarmClusterDescriptionPattern &&
184
+ (!dockerSwarmCluster.description ||
185
+ !this.testRegex(
186
+ rule.dockerSwarmClusterDescriptionPattern,
187
+ dockerSwarmCluster.description,
188
+ rule,
189
+ ))
190
+ ) {
191
+ return false;
192
+ }
193
+
194
+ return true;
195
+ }
196
+
197
+ private testRegex(
198
+ pattern: string,
199
+ value: string,
200
+ rule: DockerSwarmClusterLabelRule,
201
+ ): boolean {
202
+ try {
203
+ const regex: RegExp = new RegExp(pattern, "i");
204
+ return regex.test(value);
205
+ } catch {
206
+ logger.warn(
207
+ `Invalid regex in DockerSwarm cluster label rule ${rule.id}: ${pattern}`,
208
+ );
209
+ return false;
210
+ }
211
+ }
212
+ }
213
+
214
+ export default new DockerSwarmClusterLabelRuleEngineServiceClass();
@@ -0,0 +1,14 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/DockerSwarmClusterLabelRule";
3
+ import { IsBillingEnabled } from "../EnvironmentConfig";
4
+
5
+ export class Service extends DatabaseService<Model> {
6
+ public constructor() {
7
+ super(Model);
8
+ if (IsBillingEnabled) {
9
+ this.hardDeleteItemsOlderThanInDays("createdAt", 3 * 365);
10
+ }
11
+ }
12
+ }
13
+
14
+ export default new Service();