@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.
- package/Models/DatabaseModels/Alert.ts +166 -0
- package/Models/DatabaseModels/AlertLabelRule.ts +38 -0
- package/Models/DatabaseModels/AlertOwnerRule.ts +38 -0
- package/Models/DatabaseModels/DockerSwarmCluster.ts +989 -0
- package/Models/DatabaseModels/DockerSwarmClusterLabelRule.ts +514 -0
- package/Models/DatabaseModels/DockerSwarmClusterOwnerRule.ts +596 -0
- package/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.ts +487 -0
- package/Models/DatabaseModels/DockerSwarmClusterOwnerUser.ts +486 -0
- package/Models/DatabaseModels/DockerSwarmResource.ts +750 -0
- package/Models/DatabaseModels/Incident.ts +166 -0
- package/Models/DatabaseModels/IncidentLabelRule.ts +38 -0
- package/Models/DatabaseModels/IncidentOwnerRule.ts +38 -0
- package/Models/DatabaseModels/IncidentTemplate.ts +56 -0
- package/Models/DatabaseModels/Index.ts +24 -0
- package/Models/DatabaseModels/PodmanHost.ts +859 -0
- package/Models/DatabaseModels/PodmanHostLabelRule.ts +514 -0
- package/Models/DatabaseModels/PodmanHostOwnerRule.ts +596 -0
- package/Models/DatabaseModels/PodmanHostOwnerTeam.ts +487 -0
- package/Models/DatabaseModels/PodmanHostOwnerUser.ts +486 -0
- package/Models/DatabaseModels/PodmanResource.ts +498 -0
- package/Models/DatabaseModels/ScheduledMaintenance.ts +110 -0
- package/Models/DatabaseModels/ScheduledMaintenanceLabelRule.ts +38 -0
- package/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.ts +38 -0
- package/Models/DatabaseModels/ScheduledMaintenanceTemplate.ts +56 -0
- package/Models/DatabaseModels/TelemetryException.ts +2 -0
- package/Server/API/DashboardAPI.ts +89 -0
- package/Server/API/DockerSwarmResourceAPI.ts +137 -0
- package/Server/API/TelemetryAPI.ts +8 -1
- package/Server/Infrastructure/Postgres/SchemaMigrations/1781587937032-MigrationName.ts +3199 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
- package/Server/Services/AlertLabelRuleEngineService.ts +29 -0
- package/Server/Services/AlertOwnerRuleEngineService.ts +67 -0
- package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +214 -0
- package/Server/Services/DockerSwarmClusterLabelRuleService.ts +14 -0
- package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +232 -0
- package/Server/Services/DockerSwarmClusterOwnerRuleService.ts +14 -0
- package/Server/Services/DockerSwarmClusterOwnerTeamService.ts +10 -0
- package/Server/Services/DockerSwarmClusterOwnerUserService.ts +10 -0
- package/Server/Services/DockerSwarmClusterService.ts +404 -0
- package/Server/Services/DockerSwarmResourceService.ts +381 -0
- package/Server/Services/ExceptionAggregationService.ts +1 -0
- package/Server/Services/IncidentLabelRuleEngineService.ts +27 -0
- package/Server/Services/IncidentOwnerRuleEngineService.ts +67 -0
- package/Server/Services/IncidentService.ts +11 -0
- package/Server/Services/Index.ts +14 -0
- package/Server/Services/LogAggregationService.ts +1 -0
- package/Server/Services/MetricAggregationService.ts +1 -0
- package/Server/Services/OpenTelemetryIngestService.ts +37 -0
- package/Server/Services/PodmanHostLabelRuleEngineService.ts +198 -0
- package/Server/Services/PodmanHostLabelRuleService.ts +14 -0
- package/Server/Services/PodmanHostOwnerRuleEngineService.ts +216 -0
- package/Server/Services/PodmanHostOwnerRuleService.ts +14 -0
- package/Server/Services/PodmanHostOwnerTeamService.ts +10 -0
- package/Server/Services/PodmanHostOwnerUserService.ts +10 -0
- package/Server/Services/PodmanHostService.ts +368 -0
- package/Server/Services/PodmanResourceService.ts +310 -0
- package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +29 -0
- package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +67 -0
- package/Server/Services/TelemetryUsageBillingService.ts +18 -0
- package/Server/Services/TraceAggregationService.ts +1 -0
- package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +13 -0
- package/Server/Utils/Monitor/MonitorAlert.ts +10 -0
- package/Server/Utils/Monitor/MonitorClusterContext.ts +35 -6
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +306 -0
- package/Server/Utils/Monitor/MonitorIncident.ts +45 -0
- package/Server/Utils/Monitor/MonitorMaintenanceSuppression.ts +17 -0
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +3 -0
- package/Server/Utils/Monitor/SeriesResourceLabels.ts +26 -0
- package/Server/Utils/Telemetry/ResourceFacetResolver.ts +49 -0
- package/Server/Utils/Telemetry/Telemetry.ts +10 -0
- package/Server/Utils/Telemetry/TelemetryEntity.ts +22 -0
- package/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.ts +1 -0
- package/Tests/Types/DockerSwarm/DockerSwarmInventoryExtractor.test.ts +667 -0
- package/Tests/Types/Monitor/DockerSwarmAlertTemplates.test.ts +528 -0
- package/Types/Dashboard/DashboardComponentType.ts +7 -0
- package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +2 -0
- package/Types/Dashboard/DashboardComponents/DashboardDockerSwarmNodeListComponent.ts +17 -0
- package/Types/Dashboard/DashboardComponents/DashboardDockerSwarmServiceListComponent.ts +17 -0
- package/Types/Dashboard/DashboardComponents/DashboardPodmanContainerListComponent.ts +16 -0
- package/Types/Dashboard/DashboardComponents/DashboardPodmanHostListComponent.ts +15 -0
- package/Types/Dashboard/DashboardComponents/DashboardPodmanImageListComponent.ts +16 -0
- package/Types/Dashboard/DashboardComponents/DashboardPodmanNetworkListComponent.ts +15 -0
- package/Types/Dashboard/DashboardComponents/DashboardPodmanVolumeListComponent.ts +15 -0
- package/Types/Dashboard/DashboardTemplates.ts +194 -0
- package/Types/DockerSwarm/DockerSwarmInventoryExtractor.ts +452 -0
- package/Types/Icon/IconProp.ts +1 -0
- package/Types/Monitor/DockerSwarmAlertTemplates.ts +461 -0
- package/Types/Monitor/DockerSwarmMetricCatalog.ts +139 -0
- package/Types/Monitor/HostAlertTemplates.ts +455 -0
- package/Types/Monitor/HostMetricCatalog.ts +177 -0
- package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +21 -0
- package/Types/Monitor/MonitorStep.ts +99 -0
- package/Types/Monitor/MonitorStepDockerSwarmMonitor.ts +74 -0
- package/Types/Monitor/MonitorStepHostMonitor.ts +30 -0
- package/Types/Monitor/MonitorStepPodmanMonitor.ts +38 -0
- package/Types/Monitor/MonitorType.ts +42 -0
- package/Types/Monitor/PodmanAlertTemplates.ts +507 -0
- package/Types/Monitor/PodmanMetricCatalog.ts +226 -0
- package/Types/Permission.ts +465 -4
- package/Types/Podman/PodmanInventoryExtractor.ts +343 -0
- package/Types/Telemetry/EntityType.ts +12 -0
- package/Types/Telemetry/ServiceType.ts +2 -0
- package/UI/Components/Icon/Icon.tsx +57 -0
- package/UI/Components/LogsViewer/LogsViewer.tsx +44 -1
- package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +28 -0
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +6 -0
- package/UI/Utils/TelemetryService.ts +1 -0
- package/Utils/Dashboard/Components/DashboardDockerSwarmNodeListComponent.ts +70 -0
- package/Utils/Dashboard/Components/DashboardDockerSwarmResourceListShared.ts +61 -0
- package/Utils/Dashboard/Components/DashboardDockerSwarmServiceListComponent.ts +71 -0
- package/Utils/Dashboard/Components/DashboardPodmanContainerListComponent.ts +100 -0
- package/Utils/Dashboard/Components/DashboardPodmanHostListComponent.ts +88 -0
- package/Utils/Dashboard/Components/DashboardPodmanImageListComponent.ts +97 -0
- package/Utils/Dashboard/Components/DashboardPodmanNetworkListComponent.ts +87 -0
- package/Utils/Dashboard/Components/DashboardPodmanVolumeListComponent.ts +87 -0
- package/Utils/Dashboard/Components/Index.ts +51 -0
- package/Utils/Telemetry/EntityKey.ts +18 -0
- package/build/dist/Models/DatabaseModels/Alert.js +162 -0
- package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertLabelRule.js +39 -0
- package/build/dist/Models/DatabaseModels/AlertLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertOwnerRule.js +39 -0
- package/build/dist/Models/DatabaseModels/AlertOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js +1018 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js.map +1 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterLabelRule.js +522 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterLabelRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerRule.js +603 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.js +503 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.js.map +1 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerUser.js +502 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerUser.js.map +1 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmResource.js +787 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmResource.js.map +1 -0
- package/build/dist/Models/DatabaseModels/Incident.js +162 -0
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentLabelRule.js +39 -0
- package/build/dist/Models/DatabaseModels/IncidentLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentOwnerRule.js +39 -0
- package/build/dist/Models/DatabaseModels/IncidentOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js +54 -0
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +24 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/PodmanHost.js +885 -0
- package/build/dist/Models/DatabaseModels/PodmanHost.js.map +1 -0
- package/build/dist/Models/DatabaseModels/PodmanHostLabelRule.js +522 -0
- package/build/dist/Models/DatabaseModels/PodmanHostLabelRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerRule.js +603 -0
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerTeam.js +503 -0
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerTeam.js.map +1 -0
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerUser.js +502 -0
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerUser.js.map +1 -0
- package/build/dist/Models/DatabaseModels/PodmanResource.js +526 -0
- package/build/dist/Models/DatabaseModels/PodmanResource.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +108 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceLabelRule.js +39 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.js +39 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js +54 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TelemetryException.js +2 -0
- package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +89 -0
- package/build/dist/Server/API/DashboardAPI.js.map +1 -1
- package/build/dist/Server/API/DockerSwarmResourceAPI.js +100 -0
- package/build/dist/Server/API/DockerSwarmResourceAPI.js.map +1 -0
- package/build/dist/Server/API/TelemetryAPI.js +8 -1
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781587937032-MigrationName.js +1100 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781587937032-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js +30 -4
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +62 -5
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +168 -0
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleService.js +13 -0
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleService.js.map +1 -0
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +188 -0
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleService.js +13 -0
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleService.js.map +1 -0
- package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js +9 -0
- package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js.map +1 -0
- package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js +9 -0
- package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js.map +1 -0
- package/build/dist/Server/Services/DockerSwarmClusterService.js +353 -0
- package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -0
- package/build/dist/Server/Services/DockerSwarmResourceService.js +258 -0
- package/build/dist/Server/Services/DockerSwarmResourceService.js.map +1 -0
- package/build/dist/Server/Services/ExceptionAggregationService.js +1 -0
- package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +28 -4
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +62 -5
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +8 -0
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +14 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/LogAggregationService.js +1 -0
- package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MetricAggregationService.js +1 -0
- package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
- package/build/dist/Server/Services/OpenTelemetryIngestService.js +43 -13
- package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +166 -0
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/PodmanHostLabelRuleService.js +13 -0
- package/build/dist/Server/Services/PodmanHostLabelRuleService.js.map +1 -0
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +186 -0
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/PodmanHostOwnerRuleService.js +13 -0
- package/build/dist/Server/Services/PodmanHostOwnerRuleService.js.map +1 -0
- package/build/dist/Server/Services/PodmanHostOwnerTeamService.js +9 -0
- package/build/dist/Server/Services/PodmanHostOwnerTeamService.js.map +1 -0
- package/build/dist/Server/Services/PodmanHostOwnerUserService.js +9 -0
- package/build/dist/Server/Services/PodmanHostOwnerUserService.js.map +1 -0
- package/build/dist/Server/Services/PodmanHostService.js +319 -0
- package/build/dist/Server/Services/PodmanHostService.js.map +1 -0
- package/build/dist/Server/Services/PodmanResourceService.js +196 -0
- package/build/dist/Server/Services/PodmanResourceService.js.map +1 -0
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +30 -4
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +62 -5
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryUsageBillingService.js +13 -0
- package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
- package/build/dist/Server/Services/TraceAggregationService.js +1 -0
- package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +13 -0
- package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +8 -0
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js +35 -7
- package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +194 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +35 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js +9 -0
- package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +3 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +16 -0
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js +30 -0
- package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/Telemetry.js +6 -0
- package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +18 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponentType.js +7 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmNodeListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmNodeListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmServiceListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmServiceListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanContainerListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanContainerListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanHostListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanHostListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanImageListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanImageListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanNetworkListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanNetworkListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanVolumeListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanVolumeListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardTemplates.js +168 -0
- package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
- package/build/dist/Types/DockerSwarm/DockerSwarmInventoryExtractor.js +359 -0
- package/build/dist/Types/DockerSwarm/DockerSwarmInventoryExtractor.js.map +1 -0
- package/build/dist/Types/Icon/IconProp.js +1 -0
- package/build/dist/Types/Icon/IconProp.js.map +1 -1
- package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js +358 -0
- package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js.map +1 -0
- package/build/dist/Types/Monitor/DockerSwarmMetricCatalog.js +103 -0
- package/build/dist/Types/Monitor/DockerSwarmMetricCatalog.js.map +1 -0
- package/build/dist/Types/Monitor/HostAlertTemplates.js +365 -0
- package/build/dist/Types/Monitor/HostAlertTemplates.js.map +1 -0
- package/build/dist/Types/Monitor/HostMetricCatalog.js +138 -0
- package/build/dist/Types/Monitor/HostMetricCatalog.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorStep.js +69 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepDockerSwarmMonitor.js +21 -0
- package/build/dist/Types/Monitor/MonitorStepDockerSwarmMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorStepHostMonitor.js +20 -0
- package/build/dist/Types/Monitor/MonitorStepHostMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorStepPodmanMonitor.js +21 -0
- package/build/dist/Types/Monitor/MonitorStepPodmanMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorType.js +39 -0
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/PodmanAlertTemplates.js +410 -0
- package/build/dist/Types/Monitor/PodmanAlertTemplates.js.map +1 -0
- package/build/dist/Types/Monitor/PodmanMetricCatalog.js +192 -0
- package/build/dist/Types/Monitor/PodmanMetricCatalog.js.map +1 -0
- package/build/dist/Types/Permission.js +420 -4
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Podman/PodmanInventoryExtractor.js +293 -0
- package/build/dist/Types/Podman/PodmanInventoryExtractor.js.map +1 -0
- package/build/dist/Types/Telemetry/EntityType.js +12 -0
- package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
- package/build/dist/Types/Telemetry/ServiceType.js +2 -0
- package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +16 -0
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js +30 -2
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +22 -0
- package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +6 -0
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
- package/build/dist/UI/Utils/TelemetryService.js +1 -0
- package/build/dist/UI/Utils/TelemetryService.js.map +1 -1
- package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmNodeListComponent.js +55 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmNodeListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmResourceListShared.js +46 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmResourceListShared.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmServiceListComponent.js +55 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmServiceListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardPodmanContainerListComponent.js +77 -0
- package/build/dist/Utils/Dashboard/Components/DashboardPodmanContainerListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardPodmanHostListComponent.js +71 -0
- package/build/dist/Utils/Dashboard/Components/DashboardPodmanHostListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardPodmanImageListComponent.js +77 -0
- package/build/dist/Utils/Dashboard/Components/DashboardPodmanImageListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardPodmanNetworkListComponent.js +68 -0
- package/build/dist/Utils/Dashboard/Components/DashboardPodmanNetworkListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardPodmanVolumeListComponent.js +68 -0
- package/build/dist/Utils/Dashboard/Components/DashboardPodmanVolumeListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/Index.js +28 -0
- package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
- package/build/dist/Utils/Telemetry/EntityKey.js +14 -0
- package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
- package/package.json +1 -1
|
@@ -109,6 +109,7 @@ export class LogAggregationService {
|
|
|
109
109
|
new Map([
|
|
110
110
|
["hostId", ServiceType.Host],
|
|
111
111
|
["dockerHostId", ServiceType.DockerHost],
|
|
112
|
+
["podmanHostId", ServiceType.PodmanHost],
|
|
112
113
|
["kubernetesClusterId", ServiceType.KubernetesCluster],
|
|
113
114
|
["proxmoxClusterId", ServiceType.ProxmoxCluster],
|
|
114
115
|
["cephClusterId", ServiceType.CephCluster],
|
|
@@ -48,6 +48,7 @@ export class MetricAggregationService {
|
|
|
48
48
|
new Map([
|
|
49
49
|
["hostId", ServiceType.Host],
|
|
50
50
|
["dockerHostId", ServiceType.DockerHost],
|
|
51
|
+
["podmanHostId", ServiceType.PodmanHost],
|
|
51
52
|
["kubernetesClusterId", ServiceType.KubernetesCluster],
|
|
52
53
|
["proxmoxClusterId", ServiceType.ProxmoxCluster],
|
|
53
54
|
["cephClusterId", ServiceType.CephCluster],
|
|
@@ -20,17 +20,21 @@ import TelemetryRetentionConfig from "../../Types/Telemetry/TelemetryRetentionCo
|
|
|
20
20
|
import ServiceType from "../../Types/Telemetry/ServiceType";
|
|
21
21
|
import Host from "../../Models/DatabaseModels/Host";
|
|
22
22
|
import DockerHost from "../../Models/DatabaseModels/DockerHost";
|
|
23
|
+
import PodmanHost from "../../Models/DatabaseModels/PodmanHost";
|
|
23
24
|
import KubernetesCluster from "../../Models/DatabaseModels/KubernetesCluster";
|
|
24
25
|
import ProxmoxCluster from "../../Models/DatabaseModels/ProxmoxCluster";
|
|
25
26
|
import CephCluster from "../../Models/DatabaseModels/CephCluster";
|
|
27
|
+
import DockerSwarmCluster from "../../Models/DatabaseModels/DockerSwarmCluster";
|
|
26
28
|
import ServerlessFunction from "../../Models/DatabaseModels/ServerlessFunction";
|
|
27
29
|
import CloudResource from "../../Models/DatabaseModels/CloudResource";
|
|
28
30
|
import RumApplication from "../../Models/DatabaseModels/RumApplication";
|
|
29
31
|
import HostService from "./HostService";
|
|
30
32
|
import DockerHostService from "./DockerHostService";
|
|
33
|
+
import PodmanHostService from "./PodmanHostService";
|
|
31
34
|
import KubernetesClusterService from "./KubernetesClusterService";
|
|
32
35
|
import ProxmoxClusterService from "./ProxmoxClusterService";
|
|
33
36
|
import CephClusterService from "./CephClusterService";
|
|
37
|
+
import DockerSwarmClusterService from "./DockerSwarmClusterService";
|
|
34
38
|
import ServerlessFunctionService from "./ServerlessFunctionService";
|
|
35
39
|
import CloudResourceService from "./CloudResourceService";
|
|
36
40
|
import RumApplicationService from "./RumApplicationService";
|
|
@@ -675,6 +679,23 @@ export default class OTelIngestService {
|
|
|
675
679
|
dockerHost?.telemetryRetentionConfig ?? null,
|
|
676
680
|
};
|
|
677
681
|
}
|
|
682
|
+
if (primaryEntityType === ServiceType.PodmanHost) {
|
|
683
|
+
const podmanHost: PodmanHost | null =
|
|
684
|
+
await PodmanHostService.findOneById({
|
|
685
|
+
id: resourceId,
|
|
686
|
+
select: {
|
|
687
|
+
retainTelemetryDataForDays: true,
|
|
688
|
+
telemetryRetentionConfig: true,
|
|
689
|
+
},
|
|
690
|
+
props: { isRoot: true },
|
|
691
|
+
});
|
|
692
|
+
return {
|
|
693
|
+
retainTelemetryDataForDays:
|
|
694
|
+
podmanHost?.retainTelemetryDataForDays ?? null,
|
|
695
|
+
telemetryRetentionConfig:
|
|
696
|
+
podmanHost?.telemetryRetentionConfig ?? null,
|
|
697
|
+
};
|
|
698
|
+
}
|
|
678
699
|
if (primaryEntityType === ServiceType.KubernetesCluster) {
|
|
679
700
|
const cluster: KubernetesCluster | null =
|
|
680
701
|
await KubernetesClusterService.findOneById({
|
|
@@ -723,6 +744,22 @@ export default class OTelIngestService {
|
|
|
723
744
|
telemetryRetentionConfig: cluster?.telemetryRetentionConfig ?? null,
|
|
724
745
|
};
|
|
725
746
|
}
|
|
747
|
+
if (primaryEntityType === ServiceType.DockerSwarmCluster) {
|
|
748
|
+
const cluster: DockerSwarmCluster | null =
|
|
749
|
+
await DockerSwarmClusterService.findOneById({
|
|
750
|
+
id: resourceId,
|
|
751
|
+
select: {
|
|
752
|
+
retainTelemetryDataForDays: true,
|
|
753
|
+
telemetryRetentionConfig: true,
|
|
754
|
+
},
|
|
755
|
+
props: { isRoot: true },
|
|
756
|
+
});
|
|
757
|
+
return {
|
|
758
|
+
retainTelemetryDataForDays:
|
|
759
|
+
cluster?.retainTelemetryDataForDays ?? null,
|
|
760
|
+
telemetryRetentionConfig: cluster?.telemetryRetentionConfig ?? null,
|
|
761
|
+
};
|
|
762
|
+
}
|
|
726
763
|
if (primaryEntityType === ServiceType.ServerlessFunction) {
|
|
727
764
|
const serverlessFunction: ServerlessFunction | null =
|
|
728
765
|
await ServerlessFunctionService.findOneById({
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import Label from "../../Models/DatabaseModels/Label";
|
|
2
|
+
import PodmanHost from "../../Models/DatabaseModels/PodmanHost";
|
|
3
|
+
import PodmanHostLabelRule from "../../Models/DatabaseModels/PodmanHostLabelRule";
|
|
4
|
+
import PodmanHostLabelRuleService from "./PodmanHostLabelRuleService";
|
|
5
|
+
import PodmanHostService from "./PodmanHostService";
|
|
6
|
+
import ObjectID from "../../Types/ObjectID";
|
|
7
|
+
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
8
|
+
import logger, { LogAttributes } from "../Utils/Logger";
|
|
9
|
+
|
|
10
|
+
class PodmanHostLabelRuleEngineServiceClass {
|
|
11
|
+
/**
|
|
12
|
+
* Evaluates PodmanHostLabelRule rows for the given Podman host and attaches matched
|
|
13
|
+
* labels to it. The union is deduped against labels already on the Podman host
|
|
14
|
+
* before insert to avoid PK conflicts on the join table.
|
|
15
|
+
*/
|
|
16
|
+
@CaptureSpan()
|
|
17
|
+
public async applyRulesToPodmanHost(podmanHost: PodmanHost): Promise<void> {
|
|
18
|
+
if (!podmanHost.id || !podmanHost.projectId) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
try {
|
|
23
|
+
const rules: Array<PodmanHostLabelRule> =
|
|
24
|
+
await PodmanHostLabelRuleService.findBy({
|
|
25
|
+
query: {
|
|
26
|
+
projectId: podmanHost.projectId,
|
|
27
|
+
isEnabled: true,
|
|
28
|
+
},
|
|
29
|
+
props: { isRoot: true },
|
|
30
|
+
select: {
|
|
31
|
+
_id: true,
|
|
32
|
+
name: true,
|
|
33
|
+
podmanHostLabels: { _id: true },
|
|
34
|
+
podmanHostNamePattern: true,
|
|
35
|
+
podmanHostDescriptionPattern: true,
|
|
36
|
+
labelsToAdd: { _id: true },
|
|
37
|
+
},
|
|
38
|
+
limit: 100,
|
|
39
|
+
skip: 0,
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
if (rules.length === 0) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const podmanHostWithDetails: PodmanHost | null =
|
|
47
|
+
await PodmanHostService.findOneById({
|
|
48
|
+
id: podmanHost.id,
|
|
49
|
+
select: {
|
|
50
|
+
name: true,
|
|
51
|
+
description: true,
|
|
52
|
+
labels: { _id: true },
|
|
53
|
+
},
|
|
54
|
+
props: { isRoot: true },
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
if (!podmanHostWithDetails) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const labelIdsToAdd: Set<string> = new Set();
|
|
62
|
+
|
|
63
|
+
for (const rule of rules) {
|
|
64
|
+
const matches: boolean = this.doesPodmanHostMatchRule(
|
|
65
|
+
podmanHostWithDetails,
|
|
66
|
+
rule,
|
|
67
|
+
);
|
|
68
|
+
if (!matches) {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
for (const label of rule.labelsToAdd || []) {
|
|
72
|
+
if (label.id) {
|
|
73
|
+
labelIdsToAdd.add(label.id.toString());
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if (labelIdsToAdd.size === 0) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const existingLabelIds: Set<string> = new Set(
|
|
83
|
+
(podmanHostWithDetails.labels || [])
|
|
84
|
+
.map((l: Label) => {
|
|
85
|
+
return l.id?.toString() || "";
|
|
86
|
+
})
|
|
87
|
+
.filter((id: string) => {
|
|
88
|
+
return id !== "";
|
|
89
|
+
}),
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
const newLabelIds: Array<string> = Array.from(labelIdsToAdd).filter(
|
|
93
|
+
(id: string) => {
|
|
94
|
+
return !existingLabelIds.has(id);
|
|
95
|
+
},
|
|
96
|
+
);
|
|
97
|
+
if (newLabelIds.length === 0) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
await PodmanHostService.getRepository()
|
|
102
|
+
.createQueryBuilder()
|
|
103
|
+
.relation(PodmanHost, "labels")
|
|
104
|
+
.of(podmanHost.id.toString())
|
|
105
|
+
.add(newLabelIds);
|
|
106
|
+
|
|
107
|
+
/*
|
|
108
|
+
* Sync in-memory podmanHost.labels so a downstream owner-rule engine in
|
|
109
|
+
* the same onCreateSuccess chain can match on rule-added labels.
|
|
110
|
+
*/
|
|
111
|
+
const mergedLabelIds: Set<string> = new Set([
|
|
112
|
+
...existingLabelIds,
|
|
113
|
+
...newLabelIds,
|
|
114
|
+
]);
|
|
115
|
+
podmanHost.labels = Array.from(mergedLabelIds).map((id: string) => {
|
|
116
|
+
const label: Label = new Label();
|
|
117
|
+
label.id = new ObjectID(id);
|
|
118
|
+
return label;
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
logger.debug(
|
|
122
|
+
`PodmanHostLabelRuleEngine attached ${newLabelIds.length} labels to Podman host ${podmanHost.id}`,
|
|
123
|
+
{ projectId: podmanHost.projectId.toString() } as LogAttributes,
|
|
124
|
+
);
|
|
125
|
+
} catch (error) {
|
|
126
|
+
logger.error(`Error applying Podman host label rules: ${error}`, {
|
|
127
|
+
projectId: podmanHost.projectId?.toString(),
|
|
128
|
+
podmanHostId: podmanHost.id?.toString(),
|
|
129
|
+
} as LogAttributes);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
private doesPodmanHostMatchRule(
|
|
134
|
+
podmanHost: PodmanHost,
|
|
135
|
+
rule: PodmanHostLabelRule,
|
|
136
|
+
): boolean {
|
|
137
|
+
if (rule.podmanHostLabels && rule.podmanHostLabels.length > 0) {
|
|
138
|
+
if (!podmanHost.labels || podmanHost.labels.length === 0) {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
const ruleLabelIds: Array<string> = rule.podmanHostLabels.map(
|
|
142
|
+
(l: Label) => {
|
|
143
|
+
return l.id?.toString() || "";
|
|
144
|
+
},
|
|
145
|
+
);
|
|
146
|
+
const labelIds: Array<string> = podmanHost.labels.map((l: Label) => {
|
|
147
|
+
return l.id?.toString() || "";
|
|
148
|
+
});
|
|
149
|
+
if (
|
|
150
|
+
!ruleLabelIds.some((id: string) => {
|
|
151
|
+
return labelIds.includes(id);
|
|
152
|
+
})
|
|
153
|
+
) {
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (
|
|
159
|
+
rule.podmanHostNamePattern &&
|
|
160
|
+
(!podmanHost.name ||
|
|
161
|
+
!this.testRegex(rule.podmanHostNamePattern, podmanHost.name, rule))
|
|
162
|
+
) {
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
if (
|
|
167
|
+
rule.podmanHostDescriptionPattern &&
|
|
168
|
+
(!podmanHost.description ||
|
|
169
|
+
!this.testRegex(
|
|
170
|
+
rule.podmanHostDescriptionPattern,
|
|
171
|
+
podmanHost.description,
|
|
172
|
+
rule,
|
|
173
|
+
))
|
|
174
|
+
) {
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
private testRegex(
|
|
182
|
+
pattern: string,
|
|
183
|
+
value: string,
|
|
184
|
+
rule: PodmanHostLabelRule,
|
|
185
|
+
): boolean {
|
|
186
|
+
try {
|
|
187
|
+
const regex: RegExp = new RegExp(pattern, "i");
|
|
188
|
+
return regex.test(value);
|
|
189
|
+
} catch {
|
|
190
|
+
logger.warn(
|
|
191
|
+
`Invalid regex in Podman host label rule ${rule.id}: ${pattern}`,
|
|
192
|
+
);
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
export default new PodmanHostLabelRuleEngineServiceClass();
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import DatabaseService from "./DatabaseService";
|
|
2
|
+
import Model from "../../Models/DatabaseModels/PodmanHostLabelRule";
|
|
3
|
+
import { IsBillingEnabled } from "../EnvironmentConfig";
|
|
4
|
+
|
|
5
|
+
export class Service extends DatabaseService<Model> {
|
|
6
|
+
public constructor() {
|
|
7
|
+
super(Model);
|
|
8
|
+
if (IsBillingEnabled) {
|
|
9
|
+
this.hardDeleteItemsOlderThanInDays("createdAt", 3 * 365);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export default new Service();
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import Label from "../../Models/DatabaseModels/Label";
|
|
2
|
+
import PodmanHost from "../../Models/DatabaseModels/PodmanHost";
|
|
3
|
+
import PodmanHostOwnerRule from "../../Models/DatabaseModels/PodmanHostOwnerRule";
|
|
4
|
+
import PodmanHostOwnerUser from "../../Models/DatabaseModels/PodmanHostOwnerUser";
|
|
5
|
+
import PodmanHostOwnerTeam from "../../Models/DatabaseModels/PodmanHostOwnerTeam";
|
|
6
|
+
import PodmanHostOwnerRuleService from "./PodmanHostOwnerRuleService";
|
|
7
|
+
import PodmanHostOwnerUserService from "./PodmanHostOwnerUserService";
|
|
8
|
+
import PodmanHostOwnerTeamService from "./PodmanHostOwnerTeamService";
|
|
9
|
+
import PodmanHostService from "./PodmanHostService";
|
|
10
|
+
import ObjectID from "../../Types/ObjectID";
|
|
11
|
+
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
12
|
+
import logger, { LogAttributes } from "../Utils/Logger";
|
|
13
|
+
|
|
14
|
+
class PodmanHostOwnerRuleEngineServiceClass {
|
|
15
|
+
/**
|
|
16
|
+
* Evaluates PodmanHostOwnerRule rows for the given Podman host and adds matched
|
|
17
|
+
* owner users / teams via PodmanHostOwnerUserService / PodmanHostOwnerTeamService. Rules
|
|
18
|
+
* with notifyOwners set notify the added owners; rules with notifyOwners off
|
|
19
|
+
* add silently.
|
|
20
|
+
*/
|
|
21
|
+
@CaptureSpan()
|
|
22
|
+
public async applyRulesToPodmanHost(podmanHost: PodmanHost): Promise<void> {
|
|
23
|
+
if (!podmanHost.id || !podmanHost.projectId) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
try {
|
|
28
|
+
const rules: Array<PodmanHostOwnerRule> =
|
|
29
|
+
await PodmanHostOwnerRuleService.findBy({
|
|
30
|
+
query: {
|
|
31
|
+
projectId: podmanHost.projectId,
|
|
32
|
+
isEnabled: true,
|
|
33
|
+
},
|
|
34
|
+
props: { isRoot: true },
|
|
35
|
+
select: {
|
|
36
|
+
_id: true,
|
|
37
|
+
name: true,
|
|
38
|
+
notifyOwners: true,
|
|
39
|
+
podmanHostLabels: { _id: true },
|
|
40
|
+
podmanHostNamePattern: true,
|
|
41
|
+
podmanHostDescriptionPattern: true,
|
|
42
|
+
ownerUsers: { _id: true },
|
|
43
|
+
ownerTeams: { _id: true },
|
|
44
|
+
},
|
|
45
|
+
limit: 100,
|
|
46
|
+
skip: 0,
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
if (rules.length === 0) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const podmanHostWithDetails: PodmanHost | null =
|
|
54
|
+
await PodmanHostService.findOneById({
|
|
55
|
+
id: podmanHost.id,
|
|
56
|
+
select: {
|
|
57
|
+
name: true,
|
|
58
|
+
description: true,
|
|
59
|
+
labels: { _id: true },
|
|
60
|
+
},
|
|
61
|
+
props: { isRoot: true },
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
if (!podmanHostWithDetails) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const usersByNotify: Map<boolean, Set<string>> = new Map([
|
|
69
|
+
[true, new Set()],
|
|
70
|
+
[false, new Set()],
|
|
71
|
+
]);
|
|
72
|
+
const teamsByNotify: Map<boolean, Set<string>> = new Map([
|
|
73
|
+
[true, new Set()],
|
|
74
|
+
[false, new Set()],
|
|
75
|
+
]);
|
|
76
|
+
|
|
77
|
+
const matchedRules: Array<PodmanHostOwnerRule> = [];
|
|
78
|
+
|
|
79
|
+
for (const rule of rules) {
|
|
80
|
+
const matches: boolean = this.doesPodmanHostMatchRule(
|
|
81
|
+
podmanHostWithDetails,
|
|
82
|
+
rule,
|
|
83
|
+
);
|
|
84
|
+
if (!matches) {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
let ruleAddedAny: boolean = false;
|
|
88
|
+
const notify: boolean = rule.notifyOwners !== false;
|
|
89
|
+
for (const user of rule.ownerUsers || []) {
|
|
90
|
+
if (user.id) {
|
|
91
|
+
usersByNotify.get(notify)!.add(user.id.toString());
|
|
92
|
+
ruleAddedAny = true;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
for (const team of rule.ownerTeams || []) {
|
|
96
|
+
if (team.id) {
|
|
97
|
+
teamsByNotify.get(notify)!.add(team.id.toString());
|
|
98
|
+
ruleAddedAny = true;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (ruleAddedAny) {
|
|
102
|
+
matchedRules.push(rule);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (matchedRules.length === 0) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
for (const notify of [true, false]) {
|
|
111
|
+
const userIds: Set<string> = usersByNotify.get(notify)!;
|
|
112
|
+
const teamIds: Set<string> = teamsByNotify.get(notify)!;
|
|
113
|
+
|
|
114
|
+
for (const userId of userIds) {
|
|
115
|
+
const owner: PodmanHostOwnerUser = new PodmanHostOwnerUser();
|
|
116
|
+
owner.podmanHostId = podmanHost.id;
|
|
117
|
+
owner.projectId = podmanHost.projectId;
|
|
118
|
+
owner.userId = new ObjectID(userId);
|
|
119
|
+
owner.isOwnerNotified = !notify;
|
|
120
|
+
await PodmanHostOwnerUserService.create({
|
|
121
|
+
data: owner,
|
|
122
|
+
props: { isRoot: true },
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
for (const teamId of teamIds) {
|
|
127
|
+
const owner: PodmanHostOwnerTeam = new PodmanHostOwnerTeam();
|
|
128
|
+
owner.podmanHostId = podmanHost.id;
|
|
129
|
+
owner.projectId = podmanHost.projectId;
|
|
130
|
+
owner.teamId = new ObjectID(teamId);
|
|
131
|
+
owner.isOwnerNotified = !notify;
|
|
132
|
+
await PodmanHostOwnerTeamService.create({
|
|
133
|
+
data: owner,
|
|
134
|
+
props: { isRoot: true },
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
logger.debug(
|
|
140
|
+
`PodmanHostOwnerRuleEngine added owners to Podman host ${podmanHost.id}`,
|
|
141
|
+
{ projectId: podmanHost.projectId.toString() } as LogAttributes,
|
|
142
|
+
);
|
|
143
|
+
} catch (error) {
|
|
144
|
+
logger.error(`Error applying Podman host owner rules: ${error}`, {
|
|
145
|
+
projectId: podmanHost.projectId?.toString(),
|
|
146
|
+
podmanHostId: podmanHost.id?.toString(),
|
|
147
|
+
} as LogAttributes);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
private doesPodmanHostMatchRule(
|
|
152
|
+
podmanHost: PodmanHost,
|
|
153
|
+
rule: PodmanHostOwnerRule,
|
|
154
|
+
): boolean {
|
|
155
|
+
if (rule.podmanHostLabels && rule.podmanHostLabels.length > 0) {
|
|
156
|
+
if (!podmanHost.labels || podmanHost.labels.length === 0) {
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
const ruleLabelIds: Array<string> = rule.podmanHostLabels.map(
|
|
160
|
+
(l: Label) => {
|
|
161
|
+
return l.id?.toString() || "";
|
|
162
|
+
},
|
|
163
|
+
);
|
|
164
|
+
const labelIds: Array<string> = podmanHost.labels.map((l: Label) => {
|
|
165
|
+
return l.id?.toString() || "";
|
|
166
|
+
});
|
|
167
|
+
if (
|
|
168
|
+
!ruleLabelIds.some((id: string) => {
|
|
169
|
+
return labelIds.includes(id);
|
|
170
|
+
})
|
|
171
|
+
) {
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
if (
|
|
177
|
+
rule.podmanHostNamePattern &&
|
|
178
|
+
(!podmanHost.name ||
|
|
179
|
+
!this.testRegex(rule.podmanHostNamePattern, podmanHost.name, rule))
|
|
180
|
+
) {
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
if (
|
|
185
|
+
rule.podmanHostDescriptionPattern &&
|
|
186
|
+
(!podmanHost.description ||
|
|
187
|
+
!this.testRegex(
|
|
188
|
+
rule.podmanHostDescriptionPattern,
|
|
189
|
+
podmanHost.description,
|
|
190
|
+
rule,
|
|
191
|
+
))
|
|
192
|
+
) {
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
private testRegex(
|
|
200
|
+
pattern: string,
|
|
201
|
+
value: string,
|
|
202
|
+
rule: PodmanHostOwnerRule,
|
|
203
|
+
): boolean {
|
|
204
|
+
try {
|
|
205
|
+
const regex: RegExp = new RegExp(pattern, "i");
|
|
206
|
+
return regex.test(value);
|
|
207
|
+
} catch {
|
|
208
|
+
logger.warn(
|
|
209
|
+
`Invalid regex in Podman host owner rule ${rule.id}: ${pattern}`,
|
|
210
|
+
);
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
export default new PodmanHostOwnerRuleEngineServiceClass();
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import DatabaseService from "./DatabaseService";
|
|
2
|
+
import Model from "../../Models/DatabaseModels/PodmanHostOwnerRule";
|
|
3
|
+
import { IsBillingEnabled } from "../EnvironmentConfig";
|
|
4
|
+
|
|
5
|
+
export class Service extends DatabaseService<Model> {
|
|
6
|
+
public constructor() {
|
|
7
|
+
super(Model);
|
|
8
|
+
if (IsBillingEnabled) {
|
|
9
|
+
this.hardDeleteItemsOlderThanInDays("createdAt", 3 * 365);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export default new Service();
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import DatabaseService from "./DatabaseService";
|
|
2
|
+
import Model from "../../Models/DatabaseModels/PodmanHostOwnerTeam";
|
|
3
|
+
|
|
4
|
+
export class Service extends DatabaseService<Model> {
|
|
5
|
+
public constructor() {
|
|
6
|
+
super(Model);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export default new Service();
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import DatabaseService from "./DatabaseService";
|
|
2
|
+
import Model from "../../Models/DatabaseModels/PodmanHostOwnerUser";
|
|
3
|
+
|
|
4
|
+
export class Service extends DatabaseService<Model> {
|
|
5
|
+
public constructor() {
|
|
6
|
+
super(Model);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export default new Service();
|