@oneuptime/common 11.0.2 → 11.0.4
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/GlobalConfig.ts +19 -0
- package/Models/DatabaseModels/GlobalOidc.ts +351 -0
- package/Models/DatabaseModels/GlobalOidcProject.ts +265 -0
- package/Models/DatabaseModels/GlobalSso.ts +312 -0
- package/Models/DatabaseModels/GlobalSsoProject.ts +268 -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 +32 -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/Project.ts +31 -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/StatusPage.ts +82 -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/StatusPageAPI.ts +2 -0
- package/Server/API/TelemetryAPI.ts +8 -1
- package/Server/Infrastructure/Postgres/SchemaMigrations/1781750000000-MigrationName.ts +3199 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1782000000000-AddGlobalSsoAndOidc.ts +176 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1782100000000-AddStatusPageImageAltText.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1782200000000-AddRequireSsoForLoginToGlobalProviders.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1782300000000-MoveRequireSsoForLoginToGlobalConfig.ts +38 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1782310000000-MigrationName.ts +299 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1782400000000-RemoveIsTestedFromGlobalSsoAndOidc.ts +21 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +14 -0
- package/Server/Middleware/UserAuthorization.ts +113 -42
- 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/GlobalConfigService.ts +50 -0
- package/Server/Services/GlobalOidcProjectService.ts +85 -0
- package/Server/Services/GlobalOidcService.ts +10 -0
- package/Server/Services/GlobalSsoProjectService.ts +85 -0
- package/Server/Services/GlobalSsoService.ts +10 -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 +22 -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/ProjectService.ts +44 -1
- 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/Cookie.ts +39 -5
- package/Server/Utils/JsonWebToken.ts +7 -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/Server/Utils/ValidateGlobalProviderProjectTeams.ts +119 -0
- package/Tests/Server/Middleware/UserAuthorization.test.ts +51 -13
- package/Tests/Server/Middleware/UserAuthorizationSSOProvider.test.ts +163 -0
- package/Tests/Server/Utils/CookieSSOToken.test.ts +130 -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/JsonWebTokenData.ts +3 -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/SSO/SsoProviderType.ts +8 -0
- package/Types/Telemetry/EntityType.ts +12 -0
- package/Types/Telemetry/ServiceType.ts +2 -0
- package/UI/Components/Accordion/Accordion.tsx +5 -1
- package/UI/Components/CardSelect/CardSelect.tsx +6 -1
- package/UI/Components/CategoryCheckbox/Index.tsx +2 -1
- package/UI/Components/CodeEditor/CodeEditor.tsx +2 -0
- package/UI/Components/CollapsibleSection/CollapsibleSection.tsx +8 -1
- package/UI/Components/Dropdown/Dropdown.tsx +2 -0
- package/UI/Components/EntityDropdown/EntityDropdown.tsx +3 -0
- package/UI/Components/FilePicker/FilePicker.tsx +2 -0
- package/UI/Components/Forms/Fields/ColorPicker.tsx +2 -0
- package/UI/Components/Forms/Fields/FieldLabel.tsx +4 -0
- package/UI/Components/Forms/Fields/FormField.tsx +72 -15
- package/UI/Components/Forms/Fields/IconPicker.tsx +2 -0
- package/UI/Components/Forms/Validation.ts +107 -23
- package/UI/Components/Icon/Icon.tsx +57 -0
- package/UI/Components/Input/Input.tsx +4 -0
- package/UI/Components/Link/Link.tsx +23 -0
- package/UI/Components/LogsViewer/LogsViewer.tsx +44 -1
- package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +28 -0
- package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
- package/UI/Components/Markdown.tsx/MarkdownEditor.tsx +3 -0
- package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +63 -2
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +6 -0
- package/UI/Components/Radio/Radio.tsx +2 -0
- package/UI/Components/RadioButtons/GroupRadioButtons.tsx +6 -1
- package/UI/Components/Tabs/Tabs.tsx +63 -0
- package/UI/Components/TextArea/TextArea.tsx +2 -0
- package/UI/Components/TimePicker/TimePicker.tsx +2 -0
- package/UI/Components/Toggle/Toggle.tsx +2 -1
- package/UI/Components/Tooltip/Tooltip.tsx +6 -1
- 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/GlobalConfig.js +20 -0
- package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalOidc.js +379 -0
- package/build/dist/Models/DatabaseModels/GlobalOidc.js.map +1 -0
- package/build/dist/Models/DatabaseModels/GlobalOidcProject.js +276 -0
- package/build/dist/Models/DatabaseModels/GlobalOidcProject.js.map +1 -0
- package/build/dist/Models/DatabaseModels/GlobalSso.js +341 -0
- package/build/dist/Models/DatabaseModels/GlobalSso.js.map +1 -0
- package/build/dist/Models/DatabaseModels/GlobalSsoProject.js +279 -0
- package/build/dist/Models/DatabaseModels/GlobalSsoProject.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 +32 -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/Project.js +32 -0
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- 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/StatusPage.js +84 -0
- package/build/dist/Models/DatabaseModels/StatusPage.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/StatusPageAPI.js +2 -0
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- 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/1781750000000-MigrationName.js +1100 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781750000000-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782000000000-AddGlobalSsoAndOidc.js +73 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782000000000-AddGlobalSsoAndOidc.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782100000000-AddStatusPageImageAltText.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782100000000-AddStatusPageImageAltText.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782200000000-AddRequireSsoForLoginToGlobalProviders.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782200000000-AddRequireSsoForLoginToGlobalProviders.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782300000000-MoveRequireSsoForLoginToGlobalConfig.js +23 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782300000000-MoveRequireSsoForLoginToGlobalConfig.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782310000000-MigrationName.js +106 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782310000000-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782400000000-RemoveIsTestedFromGlobalSsoAndOidc.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782400000000-RemoveIsTestedFromGlobalSsoAndOidc.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/UserAuthorization.js +77 -34
- package/build/dist/Server/Middleware/UserAuthorization.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/GlobalConfigService.js +55 -0
- package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
- package/build/dist/Server/Services/GlobalOidcProjectService.js +80 -0
- package/build/dist/Server/Services/GlobalOidcProjectService.js.map +1 -0
- package/build/dist/Server/Services/GlobalOidcService.js +9 -0
- package/build/dist/Server/Services/GlobalOidcService.js.map +1 -0
- package/build/dist/Server/Services/GlobalSsoProjectService.js +80 -0
- package/build/dist/Server/Services/GlobalSsoProjectService.js.map +1 -0
- package/build/dist/Server/Services/GlobalSsoService.js +9 -0
- package/build/dist/Server/Services/GlobalSsoService.js.map +1 -0
- 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 +22 -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/ProjectService.js +36 -1
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- 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/Cookie.js +32 -3
- package/build/dist/Server/Utils/Cookie.js.map +1 -1
- package/build/dist/Server/Utils/JsonWebToken.js +6 -0
- package/build/dist/Server/Utils/JsonWebToken.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/Server/Utils/ValidateGlobalProviderProjectTeams.js +66 -0
- package/build/dist/Server/Utils/ValidateGlobalProviderProjectTeams.js.map +1 -0
- 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/SSO/SsoProviderType.js +9 -0
- package/build/dist/Types/SSO/SsoProviderType.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/Accordion/Accordion.js +5 -3
- package/build/dist/UI/Components/Accordion/Accordion.js.map +1 -1
- package/build/dist/UI/Components/CardSelect/CardSelect.js +1 -1
- package/build/dist/UI/Components/CardSelect/CardSelect.js.map +1 -1
- package/build/dist/UI/Components/CategoryCheckbox/Index.js +1 -1
- package/build/dist/UI/Components/CategoryCheckbox/Index.js.map +1 -1
- package/build/dist/UI/Components/CodeEditor/CodeEditor.js +1 -1
- package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
- package/build/dist/UI/Components/CollapsibleSection/CollapsibleSection.js +4 -2
- package/build/dist/UI/Components/CollapsibleSection/CollapsibleSection.js.map +1 -1
- package/build/dist/UI/Components/Dropdown/Dropdown.js +1 -1
- package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
- package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js +2 -2
- package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js.map +1 -1
- package/build/dist/UI/Components/FilePicker/FilePicker.js +1 -1
- package/build/dist/UI/Components/FilePicker/FilePicker.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/ColorPicker.js +1 -1
- package/build/dist/UI/Components/Forms/Fields/ColorPicker.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/FieldLabel.js +1 -1
- package/build/dist/UI/Components/Forms/Fields/FieldLabel.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js +58 -22
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/IconPicker.js +1 -1
- package/build/dist/UI/Components/Forms/Fields/IconPicker.js.map +1 -1
- package/build/dist/UI/Components/Forms/Validation.js +64 -15
- package/build/dist/UI/Components/Forms/Validation.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/Input/Input.js +1 -1
- package/build/dist/UI/Components/Input/Input.js.map +1 -1
- package/build/dist/UI/Components/Link/Link.js +22 -1
- package/build/dist/UI/Components/Link/Link.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/Markdown.tsx/MarkdownConverters.js +0 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js +2 -2
- package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +46 -2
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.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/Components/Radio/Radio.js +1 -1
- package/build/dist/UI/Components/Radio/Radio.js.map +1 -1
- package/build/dist/UI/Components/RadioButtons/GroupRadioButtons.js +1 -1
- package/build/dist/UI/Components/RadioButtons/GroupRadioButtons.js.map +1 -1
- package/build/dist/UI/Components/Tabs/Tabs.js +50 -1
- package/build/dist/UI/Components/Tabs/Tabs.js.map +1 -1
- package/build/dist/UI/Components/TextArea/TextArea.js +1 -1
- package/build/dist/UI/Components/TextArea/TextArea.js.map +1 -1
- package/build/dist/UI/Components/TimePicker/TimePicker.js +1 -1
- package/build/dist/UI/Components/TimePicker/TimePicker.js.map +1 -1
- package/build/dist/UI/Components/Toggle/Toggle.js +1 -1
- package/build/dist/UI/Components/Toggle/Toggle.js.map +1 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js +6 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.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
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import DatabaseService from "./DatabaseService";
|
|
2
|
+
import Model from "../../Models/DatabaseModels/PodmanResource";
|
|
3
|
+
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
4
|
+
import ObjectID from "../../Types/ObjectID";
|
|
5
|
+
import OneUptimeDate from "../../Types/Date";
|
|
6
|
+
import { JSONObject } from "../../Types/JSON";
|
|
7
|
+
import logger from "../Utils/Logger";
|
|
8
|
+
|
|
9
|
+
/*
|
|
10
|
+
* ------------------------------------------------------------------
|
|
11
|
+
* PodmanResourceService
|
|
12
|
+
*
|
|
13
|
+
* Writes and reads the Podman inventory table populated by the
|
|
14
|
+
* telemetry ingest path. Container rows are upserted from the
|
|
15
|
+
* docker_stats receiver metric stream — every container.* metric
|
|
16
|
+
* carries container.id / container.name / container.image.name
|
|
17
|
+
* resource attributes, which is enough to maintain a live inventory
|
|
18
|
+
* of running containers per host without any agent-side change.
|
|
19
|
+
*
|
|
20
|
+
* Image / Network / Volume kinds are reserved for a follow-up agent
|
|
21
|
+
* change that adds a snapshot poller; the schema is ready for them.
|
|
22
|
+
*
|
|
23
|
+
* Rows are hard-deleted once lastSeenAt falls behind the staleness
|
|
24
|
+
* threshold (default: 15 min) so containers that stopped emitting
|
|
25
|
+
* metrics fall off the list automatically.
|
|
26
|
+
* ------------------------------------------------------------------
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
export interface ParsedPodmanContainer {
|
|
30
|
+
containerName: string;
|
|
31
|
+
containerId: string | null;
|
|
32
|
+
imageName: string | null;
|
|
33
|
+
state: string;
|
|
34
|
+
cpuPercent: number | null;
|
|
35
|
+
memoryBytes: number | null;
|
|
36
|
+
observedAt: Date;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface ParsedPodmanResource {
|
|
40
|
+
kind: string;
|
|
41
|
+
name: string;
|
|
42
|
+
containerId: string | null;
|
|
43
|
+
imageName: string | null;
|
|
44
|
+
state: string | null;
|
|
45
|
+
labels: JSONObject | null;
|
|
46
|
+
resourceCreationTimestamp: Date | null;
|
|
47
|
+
lastSeenAt: Date;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface PodmanHostInventoryCounts {
|
|
51
|
+
containersRunning: number;
|
|
52
|
+
containersStopped: number;
|
|
53
|
+
containersPaused: number;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const UPSERT_BATCH_SIZE: number = 500;
|
|
57
|
+
const STALE_DELETE_WARN_THRESHOLD: number = 100;
|
|
58
|
+
|
|
59
|
+
export class Service extends DatabaseService<Model> {
|
|
60
|
+
public constructor() {
|
|
61
|
+
super(Model);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Upsert a batch of Container rows for a single (project, host)
|
|
66
|
+
* pair. Uses ON CONFLICT on the UNIQUE (projectId, podmanHostId,
|
|
67
|
+
* kind, name) index with a dominance guard on lastSeenAt so
|
|
68
|
+
* out-of-order ingest never regresses a newer observation.
|
|
69
|
+
*
|
|
70
|
+
* Containers are upserted from metric snapshots (no separate
|
|
71
|
+
* inventory snapshot path), so this also writes
|
|
72
|
+
* latestCpuPercent / latestMemoryBytes / metricsUpdatedAt in the
|
|
73
|
+
* same statement — saves a round trip vs. the K8s pattern of
|
|
74
|
+
* upsert-then-update.
|
|
75
|
+
*/
|
|
76
|
+
@CaptureSpan()
|
|
77
|
+
public async bulkUpsertContainers(data: {
|
|
78
|
+
projectId: ObjectID;
|
|
79
|
+
podmanHostId: ObjectID;
|
|
80
|
+
containers: Array<ParsedPodmanContainer>;
|
|
81
|
+
}): Promise<void> {
|
|
82
|
+
if (data.containers.length === 0) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
for (
|
|
87
|
+
let i: number = 0;
|
|
88
|
+
i < data.containers.length;
|
|
89
|
+
i += UPSERT_BATCH_SIZE
|
|
90
|
+
) {
|
|
91
|
+
const chunk: Array<ParsedPodmanContainer> = data.containers.slice(
|
|
92
|
+
i,
|
|
93
|
+
i + UPSERT_BATCH_SIZE,
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
const valueFragments: Array<string> = [];
|
|
97
|
+
const params: Array<unknown> = [];
|
|
98
|
+
let p: number = 1;
|
|
99
|
+
|
|
100
|
+
for (const c of chunk) {
|
|
101
|
+
valueFragments.push(
|
|
102
|
+
`($${p++}, $${p++}, $${p++}, $${p++}, $${p++}, $${p++}, $${p++}, $${p++}::numeric, $${p++}::bigint, $${p++}::timestamptz, $${p++}::timestamptz, $${p++})`,
|
|
103
|
+
);
|
|
104
|
+
params.push(
|
|
105
|
+
data.projectId.toString(),
|
|
106
|
+
data.podmanHostId.toString(),
|
|
107
|
+
"Container",
|
|
108
|
+
c.containerName,
|
|
109
|
+
c.containerId,
|
|
110
|
+
c.imageName,
|
|
111
|
+
c.state,
|
|
112
|
+
c.cpuPercent !== null && c.cpuPercent !== undefined
|
|
113
|
+
? c.cpuPercent
|
|
114
|
+
: null,
|
|
115
|
+
c.memoryBytes !== null && c.memoryBytes !== undefined
|
|
116
|
+
? Math.trunc(c.memoryBytes).toString()
|
|
117
|
+
: null,
|
|
118
|
+
c.observedAt,
|
|
119
|
+
c.observedAt,
|
|
120
|
+
0, // version (BaseModel @VersionColumn)
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const sql: string = `
|
|
125
|
+
INSERT INTO "PodmanResource" (
|
|
126
|
+
"projectId", "podmanHostId", "kind", "name",
|
|
127
|
+
"containerId", "imageName", "state",
|
|
128
|
+
"latestCpuPercent", "latestMemoryBytes",
|
|
129
|
+
"metricsUpdatedAt", "lastSeenAt", "version"
|
|
130
|
+
)
|
|
131
|
+
VALUES ${valueFragments.join(", ")}
|
|
132
|
+
ON CONFLICT ("projectId", "podmanHostId", "kind", "name")
|
|
133
|
+
DO UPDATE SET
|
|
134
|
+
"containerId" = COALESCE(EXCLUDED."containerId", "PodmanResource"."containerId"),
|
|
135
|
+
"imageName" = COALESCE(EXCLUDED."imageName", "PodmanResource"."imageName"),
|
|
136
|
+
"state" = EXCLUDED."state",
|
|
137
|
+
"latestCpuPercent" = COALESCE(EXCLUDED."latestCpuPercent", "PodmanResource"."latestCpuPercent"),
|
|
138
|
+
"latestMemoryBytes" = COALESCE(EXCLUDED."latestMemoryBytes", "PodmanResource"."latestMemoryBytes"),
|
|
139
|
+
"metricsUpdatedAt" = EXCLUDED."metricsUpdatedAt",
|
|
140
|
+
"lastSeenAt" = EXCLUDED."lastSeenAt",
|
|
141
|
+
"updatedAt" = now()
|
|
142
|
+
WHERE EXCLUDED."lastSeenAt" >= "PodmanResource"."lastSeenAt"
|
|
143
|
+
`;
|
|
144
|
+
|
|
145
|
+
await this.getRepository().manager.query(sql, params);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Upsert a batch of resources for any kind. Used by the snapshot
|
|
151
|
+
* ingest path (Container / Image / Network / Volume rows from the
|
|
152
|
+
* Podman agent's inventory poller). Container rows from this path
|
|
153
|
+
* carry full state (running / exited / paused / restarting / dead /
|
|
154
|
+
* created), unlike the metric-derived path which only sees running
|
|
155
|
+
* containers.
|
|
156
|
+
*/
|
|
157
|
+
@CaptureSpan()
|
|
158
|
+
public async bulkUpsert(data: {
|
|
159
|
+
projectId: ObjectID;
|
|
160
|
+
podmanHostId: ObjectID;
|
|
161
|
+
resources: Array<ParsedPodmanResource>;
|
|
162
|
+
}): Promise<void> {
|
|
163
|
+
if (data.resources.length === 0) {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
for (let i: number = 0; i < data.resources.length; i += UPSERT_BATCH_SIZE) {
|
|
168
|
+
const chunk: Array<ParsedPodmanResource> = data.resources.slice(
|
|
169
|
+
i,
|
|
170
|
+
i + UPSERT_BATCH_SIZE,
|
|
171
|
+
);
|
|
172
|
+
|
|
173
|
+
const valueFragments: Array<string> = [];
|
|
174
|
+
const params: Array<unknown> = [];
|
|
175
|
+
let p: number = 1;
|
|
176
|
+
|
|
177
|
+
for (const r of chunk) {
|
|
178
|
+
valueFragments.push(
|
|
179
|
+
`($${p++}, $${p++}, $${p++}, $${p++}, $${p++}, $${p++}, $${p++}, $${p++}, $${p++}::timestamptz, $${p++}::timestamptz, $${p++})`,
|
|
180
|
+
);
|
|
181
|
+
params.push(
|
|
182
|
+
data.projectId.toString(),
|
|
183
|
+
data.podmanHostId.toString(),
|
|
184
|
+
r.kind,
|
|
185
|
+
r.name,
|
|
186
|
+
r.containerId,
|
|
187
|
+
r.imageName,
|
|
188
|
+
r.state,
|
|
189
|
+
r.labels ? JSON.stringify(r.labels) : null,
|
|
190
|
+
r.resourceCreationTimestamp,
|
|
191
|
+
r.lastSeenAt,
|
|
192
|
+
0, // version
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
const sql: string = `
|
|
197
|
+
INSERT INTO "PodmanResource" (
|
|
198
|
+
"projectId", "podmanHostId", "kind", "name",
|
|
199
|
+
"containerId", "imageName", "state", "labels",
|
|
200
|
+
"resourceCreationTimestamp", "lastSeenAt", "version"
|
|
201
|
+
)
|
|
202
|
+
VALUES ${valueFragments.join(", ")}
|
|
203
|
+
ON CONFLICT ("projectId", "podmanHostId", "kind", "name")
|
|
204
|
+
DO UPDATE SET
|
|
205
|
+
"containerId" = COALESCE(EXCLUDED."containerId", "PodmanResource"."containerId"),
|
|
206
|
+
"imageName" = COALESCE(EXCLUDED."imageName", "PodmanResource"."imageName"),
|
|
207
|
+
"state" = COALESCE(EXCLUDED."state", "PodmanResource"."state"),
|
|
208
|
+
"labels" = COALESCE(EXCLUDED."labels", "PodmanResource"."labels"),
|
|
209
|
+
"resourceCreationTimestamp" = COALESCE(EXCLUDED."resourceCreationTimestamp", "PodmanResource"."resourceCreationTimestamp"),
|
|
210
|
+
"lastSeenAt" = EXCLUDED."lastSeenAt",
|
|
211
|
+
"updatedAt" = now()
|
|
212
|
+
WHERE EXCLUDED."lastSeenAt" >= "PodmanResource"."lastSeenAt"
|
|
213
|
+
`;
|
|
214
|
+
|
|
215
|
+
await this.getRepository().manager.query(sql, params);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Hard-delete all resources on a host whose last observation is
|
|
221
|
+
* older than olderThan. Returns the number of deleted rows.
|
|
222
|
+
*/
|
|
223
|
+
@CaptureSpan()
|
|
224
|
+
public async deleteStaleForHost(data: {
|
|
225
|
+
podmanHostId: ObjectID;
|
|
226
|
+
olderThan: Date;
|
|
227
|
+
}): Promise<number> {
|
|
228
|
+
const result: Array<{ affected?: number }> | { affected?: number } =
|
|
229
|
+
await this.getRepository().manager.query(
|
|
230
|
+
`DELETE FROM "PodmanResource" WHERE "podmanHostId" = $1 AND "lastSeenAt" < $2`,
|
|
231
|
+
[data.podmanHostId.toString(), data.olderThan],
|
|
232
|
+
);
|
|
233
|
+
|
|
234
|
+
let affected: number = 0;
|
|
235
|
+
if (Array.isArray(result) && result.length >= 2) {
|
|
236
|
+
const second: unknown = (result as Array<unknown>)[1];
|
|
237
|
+
if (typeof second === "number") {
|
|
238
|
+
affected = second;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
if (affected > STALE_DELETE_WARN_THRESHOLD) {
|
|
243
|
+
logger.warn(
|
|
244
|
+
`PodmanResource cleanup deleted ${affected} stale rows for host ${data.podmanHostId.toString()} — larger than expected; investigate agent health.`,
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
return affected;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* Compute container state breakdowns for a single host from the
|
|
253
|
+
* inventory table. Used by the cleanup worker to refresh the cached
|
|
254
|
+
* counts on PodmanHost so the Hosts page / dashboard widget shows
|
|
255
|
+
* accurate numbers without needing a SQL aggregation per render.
|
|
256
|
+
*/
|
|
257
|
+
@CaptureSpan()
|
|
258
|
+
public async getContainerCountsForHost(data: {
|
|
259
|
+
projectId: ObjectID;
|
|
260
|
+
podmanHostId: ObjectID;
|
|
261
|
+
}): Promise<PodmanHostInventoryCounts> {
|
|
262
|
+
const rows: Array<{
|
|
263
|
+
running: string;
|
|
264
|
+
stopped: string;
|
|
265
|
+
paused: string;
|
|
266
|
+
}> = await this.getRepository().manager.query(
|
|
267
|
+
`SELECT
|
|
268
|
+
COUNT(*) FILTER (WHERE LOWER("state") = 'running')::text AS "running",
|
|
269
|
+
COUNT(*) FILTER (WHERE LOWER("state") IN ('exited', 'dead', 'created'))::text AS "stopped",
|
|
270
|
+
COUNT(*) FILTER (WHERE LOWER("state") = 'paused')::text AS "paused"
|
|
271
|
+
FROM "PodmanResource"
|
|
272
|
+
WHERE "projectId" = $1
|
|
273
|
+
AND "podmanHostId" = $2
|
|
274
|
+
AND "kind" = 'Container'
|
|
275
|
+
AND "deletedAt" IS NULL`,
|
|
276
|
+
[data.projectId.toString(), data.podmanHostId.toString()],
|
|
277
|
+
);
|
|
278
|
+
|
|
279
|
+
const row:
|
|
280
|
+
| { running: string; stopped: string; paused: string }
|
|
281
|
+
| undefined = rows[0];
|
|
282
|
+
return {
|
|
283
|
+
containersRunning: row ? parseInt(row.running, 10) || 0 : 0,
|
|
284
|
+
containersStopped: row ? parseInt(row.stopped, 10) || 0 : 0,
|
|
285
|
+
containersPaused: row ? parseInt(row.paused, 10) || 0 : 0,
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
public getStaleThresholdDate(nowOverride?: Date): Date {
|
|
290
|
+
const minutes: number = this.getStaleThresholdMinutes();
|
|
291
|
+
return OneUptimeDate.addRemoveMinutes(
|
|
292
|
+
nowOverride || OneUptimeDate.getCurrentDate(),
|
|
293
|
+
-minutes,
|
|
294
|
+
);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
public getStaleThresholdMinutes(): number {
|
|
298
|
+
const raw: string | undefined =
|
|
299
|
+
process.env["PODMAN_INVENTORY_STALE_MINUTES"];
|
|
300
|
+
if (raw) {
|
|
301
|
+
const parsed: number = parseInt(raw, 10);
|
|
302
|
+
if (!isNaN(parsed) && parsed >= 5) {
|
|
303
|
+
return parsed;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
return 15;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
export default new Service();
|
|
@@ -103,6 +103,14 @@ export class ProjectService extends DatabaseService<Model> {
|
|
|
103
103
|
*/
|
|
104
104
|
private requireSsoForLoginCache: InMemoryTTLCache<boolean> =
|
|
105
105
|
new InMemoryTTLCache(10_000);
|
|
106
|
+
/*
|
|
107
|
+
* Caches the `requireSsoWithSsoProviderId` discriminator per project so the
|
|
108
|
+
* enforce-SSO middleware can require that the SSO token was issued by a
|
|
109
|
+
* specific provider. Stored as a string id (or null when unset). Populated
|
|
110
|
+
* alongside `getRequireSsoForLogin` so the common path stays a single query.
|
|
111
|
+
*/
|
|
112
|
+
private requireSsoWithSsoProviderIdCache: InMemoryTTLCache<string | null> =
|
|
113
|
+
new InMemoryTTLCache(10_000);
|
|
106
114
|
/*
|
|
107
115
|
* Caches the current billing plan per project. `getCurrentPlan` is hit
|
|
108
116
|
* by `CommonAPI.getDatabaseCommonInteractionProps` on every
|
|
@@ -351,6 +359,10 @@ export class ProjectService extends DatabaseService<Model> {
|
|
|
351
359
|
this.requireSsoForLoginCache.clear();
|
|
352
360
|
}
|
|
353
361
|
|
|
362
|
+
if (updateBy.data.requireSsoWithSsoProviderId !== undefined) {
|
|
363
|
+
this.requireSsoWithSsoProviderIdCache.clear();
|
|
364
|
+
}
|
|
365
|
+
|
|
354
366
|
if (IsBillingEnabled) {
|
|
355
367
|
if (
|
|
356
368
|
updateBy.data.businessDetails ||
|
|
@@ -1338,7 +1350,7 @@ export class ProjectService extends DatabaseService<Model> {
|
|
|
1338
1350
|
|
|
1339
1351
|
const project: Model | null = await this.findOneById({
|
|
1340
1352
|
id: projectId,
|
|
1341
|
-
select: { requireSsoForLogin: true },
|
|
1353
|
+
select: { requireSsoForLogin: true, requireSsoWithSsoProviderId: true },
|
|
1342
1354
|
props: { isRoot: true },
|
|
1343
1355
|
});
|
|
1344
1356
|
|
|
@@ -1349,9 +1361,40 @@ export class ProjectService extends DatabaseService<Model> {
|
|
|
1349
1361
|
|
|
1350
1362
|
const value: boolean = Boolean(project.requireSsoForLogin);
|
|
1351
1363
|
this.requireSsoForLoginCache.set(key, value, 60_000);
|
|
1364
|
+
this.requireSsoWithSsoProviderIdCache.set(
|
|
1365
|
+
key,
|
|
1366
|
+
project.requireSsoWithSsoProviderId
|
|
1367
|
+
? project.requireSsoWithSsoProviderId.toString()
|
|
1368
|
+
: null,
|
|
1369
|
+
60_000,
|
|
1370
|
+
);
|
|
1352
1371
|
return value;
|
|
1353
1372
|
}
|
|
1354
1373
|
|
|
1374
|
+
/**
|
|
1375
|
+
* Returns the specific SSO provider id a project requires for SSO-enforced
|
|
1376
|
+
* login, or null when any trusted provider is acceptable. Cached for 60s and
|
|
1377
|
+
* populated by `getRequireSsoForLogin`, so the enforce path stays one query.
|
|
1378
|
+
*/
|
|
1379
|
+
@CaptureSpan()
|
|
1380
|
+
public async getRequireSsoWithSsoProviderId(
|
|
1381
|
+
projectId: ObjectID,
|
|
1382
|
+
): Promise<ObjectID | null> {
|
|
1383
|
+
const key: string = projectId.toString();
|
|
1384
|
+
const cached: string | null | undefined =
|
|
1385
|
+
this.requireSsoWithSsoProviderIdCache.get(key);
|
|
1386
|
+
if (cached !== undefined) {
|
|
1387
|
+
return cached ? new ObjectID(cached) : null;
|
|
1388
|
+
}
|
|
1389
|
+
|
|
1390
|
+
// Populate both caches via the existing single-query path.
|
|
1391
|
+
await this.getRequireSsoForLogin(projectId);
|
|
1392
|
+
|
|
1393
|
+
const populated: string | null | undefined =
|
|
1394
|
+
this.requireSsoWithSsoProviderIdCache.get(key);
|
|
1395
|
+
return populated ? new ObjectID(populated) : null;
|
|
1396
|
+
}
|
|
1397
|
+
|
|
1355
1398
|
@CaptureSpan()
|
|
1356
1399
|
public async getOwners(projectId: ObjectID): Promise<Array<User>> {
|
|
1357
1400
|
if (!projectId) {
|
|
@@ -3,10 +3,12 @@ import Host from "../../Models/DatabaseModels/Host";
|
|
|
3
3
|
import KubernetesCluster from "../../Models/DatabaseModels/KubernetesCluster";
|
|
4
4
|
import Label from "../../Models/DatabaseModels/Label";
|
|
5
5
|
import Monitor from "../../Models/DatabaseModels/Monitor";
|
|
6
|
+
import PodmanHost from "../../Models/DatabaseModels/PodmanHost";
|
|
6
7
|
import ScheduledMaintenance from "../../Models/DatabaseModels/ScheduledMaintenance";
|
|
7
8
|
import ScheduledMaintenanceLabelRule from "../../Models/DatabaseModels/ScheduledMaintenanceLabelRule";
|
|
8
9
|
import Service from "../../Models/DatabaseModels/Service";
|
|
9
10
|
import DockerHostService from "./DockerHostService";
|
|
11
|
+
import PodmanHostService from "./PodmanHostService";
|
|
10
12
|
import HostService from "./HostService";
|
|
11
13
|
import KubernetesClusterService from "./KubernetesClusterService";
|
|
12
14
|
import LabelService from "./LabelService";
|
|
@@ -32,6 +34,7 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
|
|
|
32
34
|
* - all labels of the event's hosts when `inheritLabelsFromHosts`
|
|
33
35
|
* - all labels of the event's Kubernetes clusters when `inheritLabelsFromKubernetesClusters`
|
|
34
36
|
* - all labels of the event's Docker hosts when `inheritLabelsFromDockerHosts`
|
|
37
|
+
* - all labels of the event's Podman hosts when `inheritLabelsFromPodmanHosts`
|
|
35
38
|
* - all labels of the event's services when `inheritLabelsFromServices`
|
|
36
39
|
* The union is deduped against labels already on the event before insert
|
|
37
40
|
* to avoid PK conflicts on the ScheduledMaintenanceLabel join table.
|
|
@@ -67,6 +70,7 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
|
|
|
67
70
|
inheritLabelsFromHosts: true,
|
|
68
71
|
inheritLabelsFromKubernetesClusters: true,
|
|
69
72
|
inheritLabelsFromDockerHosts: true,
|
|
73
|
+
inheritLabelsFromPodmanHosts: true,
|
|
70
74
|
inheritLabelsFromServices: true,
|
|
71
75
|
},
|
|
72
76
|
limit: 100,
|
|
@@ -82,6 +86,7 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
|
|
|
82
86
|
let inheritFromHosts: boolean = false;
|
|
83
87
|
let inheritFromKubernetesClusters: boolean = false;
|
|
84
88
|
let inheritFromDockerHosts: boolean = false;
|
|
89
|
+
let inheritFromPodmanHosts: boolean = false;
|
|
85
90
|
let inheritFromServices: boolean = false;
|
|
86
91
|
const matchedRules: Array<ScheduledMaintenanceLabelRule> = [];
|
|
87
92
|
|
|
@@ -111,6 +116,9 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
|
|
|
111
116
|
if (rule.inheritLabelsFromDockerHosts) {
|
|
112
117
|
inheritFromDockerHosts = true;
|
|
113
118
|
}
|
|
119
|
+
if (rule.inheritLabelsFromPodmanHosts) {
|
|
120
|
+
inheritFromPodmanHosts = true;
|
|
121
|
+
}
|
|
114
122
|
if (rule.inheritLabelsFromServices) {
|
|
115
123
|
inheritFromServices = true;
|
|
116
124
|
}
|
|
@@ -120,6 +128,7 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
|
|
|
120
128
|
inheritFromHosts ||
|
|
121
129
|
inheritFromKubernetesClusters ||
|
|
122
130
|
inheritFromDockerHosts ||
|
|
131
|
+
inheritFromPodmanHosts ||
|
|
123
132
|
inheritFromServices;
|
|
124
133
|
|
|
125
134
|
let eventWithResources: ScheduledMaintenance | null = null;
|
|
@@ -130,6 +139,7 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
|
|
|
130
139
|
hosts: { _id: true },
|
|
131
140
|
kubernetesClusters: { _id: true },
|
|
132
141
|
dockerHosts: { _id: true },
|
|
142
|
+
podmanHosts: { _id: true },
|
|
133
143
|
services: { _id: true },
|
|
134
144
|
},
|
|
135
145
|
props: { isRoot: true },
|
|
@@ -213,6 +223,25 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
|
|
|
213
223
|
}
|
|
214
224
|
}
|
|
215
225
|
|
|
226
|
+
if (inheritFromPodmanHosts && eventWithResources?.podmanHosts?.length) {
|
|
227
|
+
for (const eventPodmanHost of eventWithResources.podmanHosts) {
|
|
228
|
+
if (!eventPodmanHost.id) {
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
const podmanHost: PodmanHost | null =
|
|
232
|
+
await PodmanHostService.findOneById({
|
|
233
|
+
id: eventPodmanHost.id,
|
|
234
|
+
select: { labels: { _id: true } },
|
|
235
|
+
props: { isRoot: true },
|
|
236
|
+
});
|
|
237
|
+
for (const label of podmanHost?.labels || []) {
|
|
238
|
+
if (label.id) {
|
|
239
|
+
labelIdsToAdd.add(label.id.toString());
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
216
245
|
if (inheritFromServices && eventWithResources?.services?.length) {
|
|
217
246
|
for (const eventService of eventWithResources.services) {
|
|
218
247
|
if (!eventService.id) {
|
|
@@ -11,6 +11,9 @@ import Label from "../../Models/DatabaseModels/Label";
|
|
|
11
11
|
import Monitor from "../../Models/DatabaseModels/Monitor";
|
|
12
12
|
import MonitorOwnerTeam from "../../Models/DatabaseModels/MonitorOwnerTeam";
|
|
13
13
|
import MonitorOwnerUser from "../../Models/DatabaseModels/MonitorOwnerUser";
|
|
14
|
+
import PodmanHost from "../../Models/DatabaseModels/PodmanHost";
|
|
15
|
+
import PodmanHostOwnerTeam from "../../Models/DatabaseModels/PodmanHostOwnerTeam";
|
|
16
|
+
import PodmanHostOwnerUser from "../../Models/DatabaseModels/PodmanHostOwnerUser";
|
|
14
17
|
import ScheduledMaintenance from "../../Models/DatabaseModels/ScheduledMaintenance";
|
|
15
18
|
import ScheduledMaintenanceOwnerRule from "../../Models/DatabaseModels/ScheduledMaintenanceOwnerRule";
|
|
16
19
|
import Service from "../../Models/DatabaseModels/Service";
|
|
@@ -27,6 +30,8 @@ import KubernetesClusterOwnerUserService from "./KubernetesClusterOwnerUserServi
|
|
|
27
30
|
import MonitorOwnerTeamService from "./MonitorOwnerTeamService";
|
|
28
31
|
import MonitorOwnerUserService from "./MonitorOwnerUserService";
|
|
29
32
|
import MonitorService from "./MonitorService";
|
|
33
|
+
import PodmanHostOwnerTeamService from "./PodmanHostOwnerTeamService";
|
|
34
|
+
import PodmanHostOwnerUserService from "./PodmanHostOwnerUserService";
|
|
30
35
|
import ScheduledMaintenanceFeedService from "./ScheduledMaintenanceFeedService";
|
|
31
36
|
import ScheduledMaintenanceOwnerRuleService from "./ScheduledMaintenanceOwnerRuleService";
|
|
32
37
|
import ScheduledMaintenanceService from "./ScheduledMaintenanceService";
|
|
@@ -82,6 +87,7 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
|
|
|
82
87
|
inheritOwnersFromHosts: true,
|
|
83
88
|
inheritOwnersFromKubernetesClusters: true,
|
|
84
89
|
inheritOwnersFromDockerHosts: true,
|
|
90
|
+
inheritOwnersFromPodmanHosts: true,
|
|
85
91
|
inheritOwnersFromServices: true,
|
|
86
92
|
},
|
|
87
93
|
limit: 100,
|
|
@@ -108,6 +114,7 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
|
|
|
108
114
|
let inheritFromHosts: boolean = false;
|
|
109
115
|
let inheritFromKubernetesClusters: boolean = false;
|
|
110
116
|
let inheritFromDockerHosts: boolean = false;
|
|
117
|
+
let inheritFromPodmanHosts: boolean = false;
|
|
111
118
|
let inheritFromServices: boolean = false;
|
|
112
119
|
const inheritNotifyMode: { value: boolean | null } = { value: null };
|
|
113
120
|
|
|
@@ -159,6 +166,12 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
|
|
|
159
166
|
inheritNotifyMode.value =
|
|
160
167
|
inheritNotifyMode.value === true ? true : notify;
|
|
161
168
|
}
|
|
169
|
+
if (rule.inheritOwnersFromPodmanHosts) {
|
|
170
|
+
inheritFromPodmanHosts = true;
|
|
171
|
+
ruleAddedAny = true;
|
|
172
|
+
inheritNotifyMode.value =
|
|
173
|
+
inheritNotifyMode.value === true ? true : notify;
|
|
174
|
+
}
|
|
162
175
|
if (rule.inheritOwnersFromServices) {
|
|
163
176
|
inheritFromServices = true;
|
|
164
177
|
ruleAddedAny = true;
|
|
@@ -178,6 +191,8 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
|
|
|
178
191
|
const inheritedFromKubernetesClusterTeamIds: Set<string> = new Set();
|
|
179
192
|
const inheritedFromDockerHostUserIds: Set<string> = new Set();
|
|
180
193
|
const inheritedFromDockerHostTeamIds: Set<string> = new Set();
|
|
194
|
+
const inheritedFromPodmanHostUserIds: Set<string> = new Set();
|
|
195
|
+
const inheritedFromPodmanHostTeamIds: Set<string> = new Set();
|
|
181
196
|
const inheritedFromServiceUserIds: Set<string> = new Set();
|
|
182
197
|
const inheritedFromServiceTeamIds: Set<string> = new Set();
|
|
183
198
|
|
|
@@ -353,6 +368,47 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
|
|
|
353
368
|
}
|
|
354
369
|
}
|
|
355
370
|
|
|
371
|
+
if (inheritFromPodmanHosts && scheduledMaintenance.podmanHosts?.length) {
|
|
372
|
+
const podmanHostIds: Array<ObjectID> = scheduledMaintenance.podmanHosts
|
|
373
|
+
.map((p: PodmanHost) => {
|
|
374
|
+
return p.id;
|
|
375
|
+
})
|
|
376
|
+
.filter((id: ObjectID | null | undefined): id is ObjectID => {
|
|
377
|
+
return Boolean(id);
|
|
378
|
+
});
|
|
379
|
+
if (podmanHostIds.length > 0) {
|
|
380
|
+
const [podmanHostOwnerUsers, podmanHostOwnerTeams]: [
|
|
381
|
+
Array<PodmanHostOwnerUser>,
|
|
382
|
+
Array<PodmanHostOwnerTeam>,
|
|
383
|
+
] = await Promise.all([
|
|
384
|
+
PodmanHostOwnerUserService.findBy({
|
|
385
|
+
query: { podmanHostId: QueryHelper.any(podmanHostIds) },
|
|
386
|
+
select: { userId: true },
|
|
387
|
+
props: { isRoot: true },
|
|
388
|
+
limit: LIMIT_MAX,
|
|
389
|
+
skip: 0,
|
|
390
|
+
}),
|
|
391
|
+
PodmanHostOwnerTeamService.findBy({
|
|
392
|
+
query: { podmanHostId: QueryHelper.any(podmanHostIds) },
|
|
393
|
+
select: { teamId: true },
|
|
394
|
+
props: { isRoot: true },
|
|
395
|
+
limit: LIMIT_MAX,
|
|
396
|
+
skip: 0,
|
|
397
|
+
}),
|
|
398
|
+
]);
|
|
399
|
+
for (const ownerUser of podmanHostOwnerUsers) {
|
|
400
|
+
if (ownerUser.userId) {
|
|
401
|
+
inheritedFromPodmanHostUserIds.add(ownerUser.userId.toString());
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
for (const ownerTeam of podmanHostOwnerTeams) {
|
|
405
|
+
if (ownerTeam.teamId) {
|
|
406
|
+
inheritedFromPodmanHostTeamIds.add(ownerTeam.teamId.toString());
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
|
|
356
412
|
if (inheritFromServices && scheduledMaintenance.services?.length) {
|
|
357
413
|
const serviceIds: Array<ObjectID> = scheduledMaintenance.services
|
|
358
414
|
.map((s: Service) => {
|
|
@@ -399,6 +455,7 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
|
|
|
399
455
|
...inheritedFromHostUserIds,
|
|
400
456
|
...inheritedFromKubernetesClusterUserIds,
|
|
401
457
|
...inheritedFromDockerHostUserIds,
|
|
458
|
+
...inheritedFromPodmanHostUserIds,
|
|
402
459
|
...inheritedFromServiceUserIds,
|
|
403
460
|
]);
|
|
404
461
|
const inheritedTeamIds: Set<string> = new Set([
|
|
@@ -406,6 +463,7 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
|
|
|
406
463
|
...inheritedFromHostTeamIds,
|
|
407
464
|
...inheritedFromKubernetesClusterTeamIds,
|
|
408
465
|
...inheritedFromDockerHostTeamIds,
|
|
466
|
+
...inheritedFromPodmanHostTeamIds,
|
|
409
467
|
...inheritedFromServiceTeamIds,
|
|
410
468
|
]);
|
|
411
469
|
|
|
@@ -480,6 +538,10 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
|
|
|
480
538
|
inheritedFromDockerHostUserIds.size +
|
|
481
539
|
inheritedFromDockerHostTeamIds.size >
|
|
482
540
|
0,
|
|
541
|
+
inheritedFromPodmanHosts:
|
|
542
|
+
inheritedFromPodmanHostUserIds.size +
|
|
543
|
+
inheritedFromPodmanHostTeamIds.size >
|
|
544
|
+
0,
|
|
483
545
|
inheritedFromServices:
|
|
484
546
|
inheritedFromServiceUserIds.size + inheritedFromServiceTeamIds.size >
|
|
485
547
|
0,
|
|
@@ -505,6 +567,7 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
|
|
|
505
567
|
inheritedFromHosts: boolean;
|
|
506
568
|
inheritedFromKubernetesClusters: boolean;
|
|
507
569
|
inheritedFromDockerHosts: boolean;
|
|
570
|
+
inheritedFromPodmanHosts: boolean;
|
|
508
571
|
inheritedFromServices: boolean;
|
|
509
572
|
}): Promise<void> {
|
|
510
573
|
const {
|
|
@@ -516,6 +579,7 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
|
|
|
516
579
|
inheritedFromHosts,
|
|
517
580
|
inheritedFromKubernetesClusters,
|
|
518
581
|
inheritedFromDockerHosts,
|
|
582
|
+
inheritedFromPodmanHosts,
|
|
519
583
|
inheritedFromServices,
|
|
520
584
|
} = data;
|
|
521
585
|
if (
|
|
@@ -600,6 +664,9 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
|
|
|
600
664
|
if (inheritedFromDockerHosts) {
|
|
601
665
|
inheritedSources.push("Docker hosts");
|
|
602
666
|
}
|
|
667
|
+
if (inheritedFromPodmanHosts) {
|
|
668
|
+
inheritedSources.push("Podman hosts");
|
|
669
|
+
}
|
|
603
670
|
if (inheritedFromServices) {
|
|
604
671
|
inheritedSources.push("services");
|
|
605
672
|
}
|
|
@@ -25,11 +25,13 @@ import logger from "../Utils/Logger";
|
|
|
25
25
|
import ServiceModel from "../../Models/DatabaseModels/Service";
|
|
26
26
|
import HostService from "./HostService";
|
|
27
27
|
import DockerHostService from "./DockerHostService";
|
|
28
|
+
import PodmanHostService from "./PodmanHostService";
|
|
28
29
|
import KubernetesClusterService from "./KubernetesClusterService";
|
|
29
30
|
import ProxmoxClusterService from "./ProxmoxClusterService";
|
|
30
31
|
import CephClusterService from "./CephClusterService";
|
|
31
32
|
import Host from "../../Models/DatabaseModels/Host";
|
|
32
33
|
import DockerHost from "../../Models/DatabaseModels/DockerHost";
|
|
34
|
+
import PodmanHost from "../../Models/DatabaseModels/PodmanHost";
|
|
33
35
|
import KubernetesCluster from "../../Models/DatabaseModels/KubernetesCluster";
|
|
34
36
|
import ProxmoxCluster from "../../Models/DatabaseModels/ProxmoxCluster";
|
|
35
37
|
import CephCluster from "../../Models/DatabaseModels/CephCluster";
|
|
@@ -410,6 +412,22 @@ export class Service extends DatabaseService<Model> {
|
|
|
410
412
|
}
|
|
411
413
|
}
|
|
412
414
|
|
|
415
|
+
const podmanHosts: Array<PodmanHost> = await PodmanHostService.findBy({
|
|
416
|
+
query: { projectId: projectId },
|
|
417
|
+
select: { _id: true, retainTelemetryDataForDays: true },
|
|
418
|
+
skip: 0,
|
|
419
|
+
limit: LIMIT_MAX,
|
|
420
|
+
props: { isRoot: true },
|
|
421
|
+
});
|
|
422
|
+
for (const podmanHost of podmanHosts) {
|
|
423
|
+
if (podmanHost.id && podmanHost.retainTelemetryDataForDays) {
|
|
424
|
+
retentionByServiceId.set(
|
|
425
|
+
podmanHost.id.toString(),
|
|
426
|
+
podmanHost.retainTelemetryDataForDays,
|
|
427
|
+
);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
|
|
413
431
|
const clusters: Array<KubernetesCluster> =
|
|
414
432
|
await KubernetesClusterService.findBy({
|
|
415
433
|
query: { projectId: projectId },
|
|
@@ -158,6 +158,7 @@ export class TraceAggregationService {
|
|
|
158
158
|
new Map([
|
|
159
159
|
["hostId", ServiceType.Host],
|
|
160
160
|
["dockerHostId", ServiceType.DockerHost],
|
|
161
|
+
["podmanHostId", ServiceType.PodmanHost],
|
|
161
162
|
["kubernetesClusterId", ServiceType.KubernetesCluster],
|
|
162
163
|
["proxmoxClusterId", ServiceType.ProxmoxCluster],
|
|
163
164
|
["cephClusterId", ServiceType.CephCluster],
|