@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
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import AccessTokenService from "../Services/AccessTokenService";
|
|
2
|
+
import GlobalConfigService from "../Services/GlobalConfigService";
|
|
2
3
|
import ProjectService from "../Services/ProjectService";
|
|
3
4
|
import TeamMemberService from "../Services/TeamMemberService";
|
|
4
5
|
import UserService from "../Services/UserService";
|
|
5
|
-
import QueryHelper from "../Types/Database/QueryHelper";
|
|
6
6
|
import CookieUtil from "../Utils/Cookie";
|
|
7
7
|
import {
|
|
8
8
|
ExpressRequest,
|
|
@@ -16,7 +16,6 @@ import logger, { getLogAttributesFromRequest } from "../Utils/Logger";
|
|
|
16
16
|
import Response from "../Utils/Response";
|
|
17
17
|
import ProjectMiddleware from "./ProjectAuthorization";
|
|
18
18
|
import SpanUtil from "../Utils/Telemetry/SpanUtil";
|
|
19
|
-
import { LIMIT_PER_PROJECT } from "../../Types/Database/LimitMax";
|
|
20
19
|
import Dictionary from "../../Types/Dictionary";
|
|
21
20
|
import Exception from "../../Types/Exception/Exception";
|
|
22
21
|
import NotAuthenticatedException from "../../Types/Exception/NotAuthenticatedException";
|
|
@@ -35,7 +34,6 @@ import Permission, {
|
|
|
35
34
|
UserTenantAccessPermission,
|
|
36
35
|
} from "../../Types/Permission";
|
|
37
36
|
import UserType from "../../Types/UserType";
|
|
38
|
-
import Project from "../../Models/DatabaseModels/Project";
|
|
39
37
|
import UserPermissionUtil from "../Utils/UserPermission/UserPermission";
|
|
40
38
|
|
|
41
39
|
export default class UserMiddleware {
|
|
@@ -170,6 +168,7 @@ export default class UserMiddleware {
|
|
|
170
168
|
req: ExpressRequest,
|
|
171
169
|
projectId: ObjectID,
|
|
172
170
|
userId: ObjectID,
|
|
171
|
+
requiredSsoProviderId?: ObjectID | undefined,
|
|
173
172
|
): boolean {
|
|
174
173
|
const ssoTokens: Dictionary<string> = this.getSsoTokens(req);
|
|
175
174
|
|
|
@@ -181,6 +180,25 @@ export default class UserMiddleware {
|
|
|
181
180
|
decodedData.projectId?.toString() === projectId.toString() &&
|
|
182
181
|
decodedData.userId.toString() === userId.toString()
|
|
183
182
|
) {
|
|
183
|
+
/*
|
|
184
|
+
* Specific-IdP enforcement: when the project requires a specific SSO
|
|
185
|
+
* provider, the token must carry a matching `ssoProviderId`
|
|
186
|
+
* discriminator. Tokens issued before this field existed (no
|
|
187
|
+
* discriminator) do not satisfy a specific-provider requirement.
|
|
188
|
+
*/
|
|
189
|
+
if (requiredSsoProviderId) {
|
|
190
|
+
const tokenProviderId: string | undefined = decodedData.ssoProviderId
|
|
191
|
+
? decodedData.ssoProviderId.toString()
|
|
192
|
+
: undefined;
|
|
193
|
+
|
|
194
|
+
if (
|
|
195
|
+
!tokenProviderId ||
|
|
196
|
+
tokenProviderId !== requiredSsoProviderId.toString()
|
|
197
|
+
) {
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
184
202
|
return true;
|
|
185
203
|
}
|
|
186
204
|
}
|
|
@@ -493,12 +511,15 @@ export default class UserMiddleware {
|
|
|
493
511
|
}): Promise<UserTenantAccessPermission | null> {
|
|
494
512
|
const { req, tenantId, userId } = data;
|
|
495
513
|
|
|
514
|
+
const isMasterAdmin: boolean =
|
|
515
|
+
(req as OneUptimeRequest).userAuthorization?.isMasterAdmin === true;
|
|
516
|
+
|
|
496
517
|
/*
|
|
497
518
|
* Resolve the SSO requirement and the tenant permission in parallel.
|
|
498
519
|
* `getRequireSsoForLogin` is cached in-process for 60s, so this is
|
|
499
520
|
* usually free; the tenant permission lookup is the expensive call.
|
|
500
521
|
*/
|
|
501
|
-
const [
|
|
522
|
+
const [projectRequireSsoForLogin, tenantPermission]: [
|
|
502
523
|
boolean,
|
|
503
524
|
UserTenantAccessPermission | null,
|
|
504
525
|
] = await Promise.all([
|
|
@@ -515,11 +536,42 @@ export default class UserMiddleware {
|
|
|
515
536
|
AccessTokenService.getUserTenantAccessPermission(userId, tenantId),
|
|
516
537
|
]);
|
|
517
538
|
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
539
|
+
/*
|
|
540
|
+
* The instance-wide "Require SSO for Login" flag (GlobalConfig) forces SSO
|
|
541
|
+
* on every project. Master admins are exempt so a misconfigured global SSO
|
|
542
|
+
* can't lock them out — a project's own requireSsoForLogin still applies to
|
|
543
|
+
* them. Only checked when the project doesn't already enforce SSO.
|
|
544
|
+
*/
|
|
545
|
+
let requireSsoForLogin: boolean = projectRequireSsoForLogin;
|
|
546
|
+
if (!requireSsoForLogin && !isMasterAdmin) {
|
|
547
|
+
requireSsoForLogin =
|
|
548
|
+
await GlobalConfigService.getRequireSsoForLogin().catch(() => {
|
|
549
|
+
return false;
|
|
550
|
+
});
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
if (requireSsoForLogin) {
|
|
554
|
+
/*
|
|
555
|
+
* Only resolve the specific-provider requirement when SSO is enforced.
|
|
556
|
+
* The provider-id cache is already warm from getRequireSsoForLogin above.
|
|
557
|
+
*/
|
|
558
|
+
const requiredSsoProviderId: ObjectID | null =
|
|
559
|
+
await ProjectService.getRequireSsoWithSsoProviderId(tenantId).catch(
|
|
560
|
+
() => {
|
|
561
|
+
return null;
|
|
562
|
+
},
|
|
563
|
+
);
|
|
564
|
+
|
|
565
|
+
if (
|
|
566
|
+
!UserMiddleware.doesSsoTokenForProjectExist(
|
|
567
|
+
req,
|
|
568
|
+
tenantId,
|
|
569
|
+
userId,
|
|
570
|
+
requiredSsoProviderId ?? undefined,
|
|
571
|
+
)
|
|
572
|
+
) {
|
|
573
|
+
throw new SsoAuthorizationException();
|
|
574
|
+
}
|
|
523
575
|
}
|
|
524
576
|
|
|
525
577
|
return tenantPermission;
|
|
@@ -535,48 +587,67 @@ export default class UserMiddleware {
|
|
|
535
587
|
return null;
|
|
536
588
|
}
|
|
537
589
|
|
|
538
|
-
const
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
skip: 0,
|
|
551
|
-
props: {
|
|
552
|
-
isRoot: true,
|
|
553
|
-
},
|
|
554
|
-
});
|
|
590
|
+
const isMasterAdmin: boolean =
|
|
591
|
+
(req as OneUptimeRequest).userAuthorization?.isMasterAdmin === true;
|
|
592
|
+
|
|
593
|
+
/*
|
|
594
|
+
* Instance-wide "Require SSO for Login" forces SSO on every project. Master
|
|
595
|
+
* admins are exempt. Resolved once (cached) rather than per project.
|
|
596
|
+
*/
|
|
597
|
+
const globalRequireSsoForLogin: boolean = isMasterAdmin
|
|
598
|
+
? false
|
|
599
|
+
: await GlobalConfigService.getRequireSsoForLogin().catch(() => {
|
|
600
|
+
return false;
|
|
601
|
+
});
|
|
555
602
|
|
|
556
603
|
/*
|
|
557
|
-
* Resolve permissions for every project in parallel.
|
|
558
|
-
*
|
|
559
|
-
*
|
|
604
|
+
* Resolve permissions for every project in parallel. A project's own
|
|
605
|
+
* requireSsoForLogin is read through the cached getter; the global flag is
|
|
606
|
+
* OR'd in so enforcement matches the single-tenant path.
|
|
560
607
|
*/
|
|
561
608
|
const resolved: Array<{
|
|
562
609
|
projectId: ObjectID;
|
|
563
610
|
permission: UserTenantAccessPermission | null;
|
|
564
611
|
}> = await Promise.all(
|
|
565
612
|
projectIds.map(async (projectId: ObjectID) => {
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
613
|
+
const projectRequireSsoForLogin: boolean =
|
|
614
|
+
await ProjectService.getRequireSsoForLogin(projectId).catch(() => {
|
|
615
|
+
/*
|
|
616
|
+
* Unknown/inaccessible project: do not enforce SSO here. Actual
|
|
617
|
+
* access is still gated by AccessTokenService below.
|
|
618
|
+
*/
|
|
619
|
+
return false;
|
|
620
|
+
});
|
|
621
|
+
|
|
622
|
+
const requireSsoForLogin: boolean =
|
|
623
|
+
projectRequireSsoForLogin || globalRequireSsoForLogin;
|
|
624
|
+
|
|
625
|
+
if (requireSsoForLogin) {
|
|
626
|
+
const requiredSsoProviderId: ObjectID | null =
|
|
627
|
+
await ProjectService.getRequireSsoWithSsoProviderId(
|
|
628
|
+
projectId,
|
|
629
|
+
).catch(() => {
|
|
630
|
+
return null;
|
|
631
|
+
});
|
|
632
|
+
|
|
633
|
+
if (
|
|
634
|
+
!UserMiddleware.doesSsoTokenForProjectExist(
|
|
635
|
+
req,
|
|
636
|
+
projectId,
|
|
637
|
+
userId,
|
|
638
|
+
requiredSsoProviderId ?? undefined,
|
|
639
|
+
)
|
|
640
|
+
) {
|
|
641
|
+
return {
|
|
642
|
+
projectId,
|
|
643
|
+
permission:
|
|
644
|
+
UserPermissionUtil.getDefaultUserTenantAccessPermission(
|
|
645
|
+
projectId,
|
|
646
|
+
),
|
|
647
|
+
};
|
|
648
|
+
}
|
|
579
649
|
}
|
|
650
|
+
|
|
580
651
|
return {
|
|
581
652
|
projectId,
|
|
582
653
|
permission: await AccessTokenService.getUserTenantAccessPermission(
|
|
@@ -6,11 +6,13 @@ import Host from "../../Models/DatabaseModels/Host";
|
|
|
6
6
|
import KubernetesCluster from "../../Models/DatabaseModels/KubernetesCluster";
|
|
7
7
|
import Label from "../../Models/DatabaseModels/Label";
|
|
8
8
|
import Monitor from "../../Models/DatabaseModels/Monitor";
|
|
9
|
+
import PodmanHost from "../../Models/DatabaseModels/PodmanHost";
|
|
9
10
|
import Service from "../../Models/DatabaseModels/Service";
|
|
10
11
|
import AlertFeedService from "./AlertFeedService";
|
|
11
12
|
import AlertLabelRuleService from "./AlertLabelRuleService";
|
|
12
13
|
import AlertService from "./AlertService";
|
|
13
14
|
import DockerHostService from "./DockerHostService";
|
|
15
|
+
import PodmanHostService from "./PodmanHostService";
|
|
14
16
|
import HostService from "./HostService";
|
|
15
17
|
import KubernetesClusterService from "./KubernetesClusterService";
|
|
16
18
|
import LabelService from "./LabelService";
|
|
@@ -33,6 +35,7 @@ class AlertLabelRuleEngineServiceClass {
|
|
|
33
35
|
* - all labels of the alert's hosts when `inheritLabelsFromHosts`
|
|
34
36
|
* - all labels of the alert's Kubernetes clusters when `inheritLabelsFromKubernetesClusters`
|
|
35
37
|
* - all labels of the alert's Docker hosts when `inheritLabelsFromDockerHosts`
|
|
38
|
+
* - all labels of the alert's Podman hosts when `inheritLabelsFromPodmanHosts`
|
|
36
39
|
* - all labels of the alert's services when `inheritLabelsFromServices`
|
|
37
40
|
* The union is deduped against labels already on the alert before insert
|
|
38
41
|
* to avoid PK conflicts on the AlertLabel join table.
|
|
@@ -66,6 +69,7 @@ class AlertLabelRuleEngineServiceClass {
|
|
|
66
69
|
inheritLabelsFromHosts: true,
|
|
67
70
|
inheritLabelsFromKubernetesClusters: true,
|
|
68
71
|
inheritLabelsFromDockerHosts: true,
|
|
72
|
+
inheritLabelsFromPodmanHosts: true,
|
|
69
73
|
inheritLabelsFromServices: true,
|
|
70
74
|
},
|
|
71
75
|
limit: 100,
|
|
@@ -81,6 +85,7 @@ class AlertLabelRuleEngineServiceClass {
|
|
|
81
85
|
let inheritFromHosts: boolean = false;
|
|
82
86
|
let inheritFromKubernetesClusters: boolean = false;
|
|
83
87
|
let inheritFromDockerHosts: boolean = false;
|
|
88
|
+
let inheritFromPodmanHosts: boolean = false;
|
|
84
89
|
let inheritFromServices: boolean = false;
|
|
85
90
|
const matchedRules: Array<AlertLabelRule> = [];
|
|
86
91
|
|
|
@@ -107,6 +112,9 @@ class AlertLabelRuleEngineServiceClass {
|
|
|
107
112
|
if (rule.inheritLabelsFromDockerHosts) {
|
|
108
113
|
inheritFromDockerHosts = true;
|
|
109
114
|
}
|
|
115
|
+
if (rule.inheritLabelsFromPodmanHosts) {
|
|
116
|
+
inheritFromPodmanHosts = true;
|
|
117
|
+
}
|
|
110
118
|
if (rule.inheritLabelsFromServices) {
|
|
111
119
|
inheritFromServices = true;
|
|
112
120
|
}
|
|
@@ -116,6 +124,7 @@ class AlertLabelRuleEngineServiceClass {
|
|
|
116
124
|
inheritFromHosts ||
|
|
117
125
|
inheritFromKubernetesClusters ||
|
|
118
126
|
inheritFromDockerHosts ||
|
|
127
|
+
inheritFromPodmanHosts ||
|
|
119
128
|
inheritFromServices;
|
|
120
129
|
|
|
121
130
|
let alertWithResources: Alert | null = null;
|
|
@@ -126,6 +135,7 @@ class AlertLabelRuleEngineServiceClass {
|
|
|
126
135
|
hosts: { _id: true },
|
|
127
136
|
kubernetesClusters: { _id: true },
|
|
128
137
|
dockerHosts: { _id: true },
|
|
138
|
+
podmanHosts: { _id: true },
|
|
129
139
|
services: { _id: true },
|
|
130
140
|
},
|
|
131
141
|
props: { isRoot: true },
|
|
@@ -204,6 +214,25 @@ class AlertLabelRuleEngineServiceClass {
|
|
|
204
214
|
}
|
|
205
215
|
}
|
|
206
216
|
|
|
217
|
+
if (inheritFromPodmanHosts && alertWithResources?.podmanHosts?.length) {
|
|
218
|
+
for (const alertPodmanHost of alertWithResources.podmanHosts) {
|
|
219
|
+
if (!alertPodmanHost.id) {
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
const podmanHost: PodmanHost | null =
|
|
223
|
+
await PodmanHostService.findOneById({
|
|
224
|
+
id: alertPodmanHost.id,
|
|
225
|
+
select: { labels: { _id: true } },
|
|
226
|
+
props: { isRoot: true },
|
|
227
|
+
});
|
|
228
|
+
for (const label of podmanHost?.labels || []) {
|
|
229
|
+
if (label.id) {
|
|
230
|
+
labelIdsToAdd.add(label.id.toString());
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
207
236
|
if (inheritFromServices && alertWithResources?.services?.length) {
|
|
208
237
|
for (const alertService of alertWithResources.services) {
|
|
209
238
|
if (!alertService.id) {
|
|
@@ -14,6 +14,9 @@ import Label from "../../Models/DatabaseModels/Label";
|
|
|
14
14
|
import Monitor from "../../Models/DatabaseModels/Monitor";
|
|
15
15
|
import MonitorOwnerTeam from "../../Models/DatabaseModels/MonitorOwnerTeam";
|
|
16
16
|
import MonitorOwnerUser from "../../Models/DatabaseModels/MonitorOwnerUser";
|
|
17
|
+
import PodmanHost from "../../Models/DatabaseModels/PodmanHost";
|
|
18
|
+
import PodmanHostOwnerTeam from "../../Models/DatabaseModels/PodmanHostOwnerTeam";
|
|
19
|
+
import PodmanHostOwnerUser from "../../Models/DatabaseModels/PodmanHostOwnerUser";
|
|
17
20
|
import Service from "../../Models/DatabaseModels/Service";
|
|
18
21
|
import ServiceOwnerTeam from "../../Models/DatabaseModels/ServiceOwnerTeam";
|
|
19
22
|
import ServiceOwnerUser from "../../Models/DatabaseModels/ServiceOwnerUser";
|
|
@@ -31,6 +34,8 @@ import KubernetesClusterOwnerUserService from "./KubernetesClusterOwnerUserServi
|
|
|
31
34
|
import MonitorOwnerTeamService from "./MonitorOwnerTeamService";
|
|
32
35
|
import MonitorOwnerUserService from "./MonitorOwnerUserService";
|
|
33
36
|
import MonitorService from "./MonitorService";
|
|
37
|
+
import PodmanHostOwnerTeamService from "./PodmanHostOwnerTeamService";
|
|
38
|
+
import PodmanHostOwnerUserService from "./PodmanHostOwnerUserService";
|
|
34
39
|
import ServiceOwnerTeamService from "./ServiceOwnerTeamService";
|
|
35
40
|
import ServiceOwnerUserService from "./ServiceOwnerUserService";
|
|
36
41
|
import TeamService from "./TeamService";
|
|
@@ -79,6 +84,7 @@ class AlertOwnerRuleEngineServiceClass {
|
|
|
79
84
|
inheritOwnersFromHosts: true,
|
|
80
85
|
inheritOwnersFromKubernetesClusters: true,
|
|
81
86
|
inheritOwnersFromDockerHosts: true,
|
|
87
|
+
inheritOwnersFromPodmanHosts: true,
|
|
82
88
|
inheritOwnersFromServices: true,
|
|
83
89
|
},
|
|
84
90
|
limit: 100,
|
|
@@ -105,6 +111,7 @@ class AlertOwnerRuleEngineServiceClass {
|
|
|
105
111
|
let inheritFromHosts: boolean = false;
|
|
106
112
|
let inheritFromKubernetesClusters: boolean = false;
|
|
107
113
|
let inheritFromDockerHosts: boolean = false;
|
|
114
|
+
let inheritFromPodmanHosts: boolean = false;
|
|
108
115
|
let inheritFromServices: boolean = false;
|
|
109
116
|
const inheritNotifyMode: { value: boolean | null } = { value: null };
|
|
110
117
|
|
|
@@ -153,6 +160,12 @@ class AlertOwnerRuleEngineServiceClass {
|
|
|
153
160
|
inheritNotifyMode.value =
|
|
154
161
|
inheritNotifyMode.value === true ? true : notify;
|
|
155
162
|
}
|
|
163
|
+
if (rule.inheritOwnersFromPodmanHosts) {
|
|
164
|
+
inheritFromPodmanHosts = true;
|
|
165
|
+
ruleAddedAny = true;
|
|
166
|
+
inheritNotifyMode.value =
|
|
167
|
+
inheritNotifyMode.value === true ? true : notify;
|
|
168
|
+
}
|
|
156
169
|
if (rule.inheritOwnersFromServices) {
|
|
157
170
|
inheritFromServices = true;
|
|
158
171
|
ruleAddedAny = true;
|
|
@@ -172,6 +185,8 @@ class AlertOwnerRuleEngineServiceClass {
|
|
|
172
185
|
const inheritedFromKubernetesClusterTeamIds: Set<string> = new Set();
|
|
173
186
|
const inheritedFromDockerHostUserIds: Set<string> = new Set();
|
|
174
187
|
const inheritedFromDockerHostTeamIds: Set<string> = new Set();
|
|
188
|
+
const inheritedFromPodmanHostUserIds: Set<string> = new Set();
|
|
189
|
+
const inheritedFromPodmanHostTeamIds: Set<string> = new Set();
|
|
175
190
|
const inheritedFromServiceUserIds: Set<string> = new Set();
|
|
176
191
|
const inheritedFromServiceTeamIds: Set<string> = new Set();
|
|
177
192
|
|
|
@@ -334,6 +349,47 @@ class AlertOwnerRuleEngineServiceClass {
|
|
|
334
349
|
}
|
|
335
350
|
}
|
|
336
351
|
|
|
352
|
+
if (inheritFromPodmanHosts && alert.podmanHosts?.length) {
|
|
353
|
+
const podmanHostIds: Array<ObjectID> = alert.podmanHosts
|
|
354
|
+
.map((p: PodmanHost) => {
|
|
355
|
+
return p.id;
|
|
356
|
+
})
|
|
357
|
+
.filter((id: ObjectID | null | undefined): id is ObjectID => {
|
|
358
|
+
return Boolean(id);
|
|
359
|
+
});
|
|
360
|
+
if (podmanHostIds.length > 0) {
|
|
361
|
+
const [podmanHostOwnerUsers, podmanHostOwnerTeams]: [
|
|
362
|
+
Array<PodmanHostOwnerUser>,
|
|
363
|
+
Array<PodmanHostOwnerTeam>,
|
|
364
|
+
] = await Promise.all([
|
|
365
|
+
PodmanHostOwnerUserService.findBy({
|
|
366
|
+
query: { podmanHostId: QueryHelper.any(podmanHostIds) },
|
|
367
|
+
select: { userId: true },
|
|
368
|
+
props: { isRoot: true },
|
|
369
|
+
limit: LIMIT_MAX,
|
|
370
|
+
skip: 0,
|
|
371
|
+
}),
|
|
372
|
+
PodmanHostOwnerTeamService.findBy({
|
|
373
|
+
query: { podmanHostId: QueryHelper.any(podmanHostIds) },
|
|
374
|
+
select: { teamId: true },
|
|
375
|
+
props: { isRoot: true },
|
|
376
|
+
limit: LIMIT_MAX,
|
|
377
|
+
skip: 0,
|
|
378
|
+
}),
|
|
379
|
+
]);
|
|
380
|
+
for (const ownerUser of podmanHostOwnerUsers) {
|
|
381
|
+
if (ownerUser.userId) {
|
|
382
|
+
inheritedFromPodmanHostUserIds.add(ownerUser.userId.toString());
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
for (const ownerTeam of podmanHostOwnerTeams) {
|
|
386
|
+
if (ownerTeam.teamId) {
|
|
387
|
+
inheritedFromPodmanHostTeamIds.add(ownerTeam.teamId.toString());
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
|
|
337
393
|
if (inheritFromServices && alert.services?.length) {
|
|
338
394
|
const serviceIds: Array<ObjectID> = alert.services
|
|
339
395
|
.map((s: Service) => {
|
|
@@ -380,6 +436,7 @@ class AlertOwnerRuleEngineServiceClass {
|
|
|
380
436
|
...inheritedFromHostUserIds,
|
|
381
437
|
...inheritedFromKubernetesClusterUserIds,
|
|
382
438
|
...inheritedFromDockerHostUserIds,
|
|
439
|
+
...inheritedFromPodmanHostUserIds,
|
|
383
440
|
...inheritedFromServiceUserIds,
|
|
384
441
|
]);
|
|
385
442
|
const inheritedTeamIds: Set<string> = new Set([
|
|
@@ -387,6 +444,7 @@ class AlertOwnerRuleEngineServiceClass {
|
|
|
387
444
|
...inheritedFromHostTeamIds,
|
|
388
445
|
...inheritedFromKubernetesClusterTeamIds,
|
|
389
446
|
...inheritedFromDockerHostTeamIds,
|
|
447
|
+
...inheritedFromPodmanHostTeamIds,
|
|
390
448
|
...inheritedFromServiceTeamIds,
|
|
391
449
|
]);
|
|
392
450
|
|
|
@@ -458,6 +516,10 @@ class AlertOwnerRuleEngineServiceClass {
|
|
|
458
516
|
inheritedFromDockerHostUserIds.size +
|
|
459
517
|
inheritedFromDockerHostTeamIds.size >
|
|
460
518
|
0,
|
|
519
|
+
inheritedFromPodmanHosts:
|
|
520
|
+
inheritedFromPodmanHostUserIds.size +
|
|
521
|
+
inheritedFromPodmanHostTeamIds.size >
|
|
522
|
+
0,
|
|
461
523
|
inheritedFromServices:
|
|
462
524
|
inheritedFromServiceUserIds.size + inheritedFromServiceTeamIds.size >
|
|
463
525
|
0,
|
|
@@ -480,6 +542,7 @@ class AlertOwnerRuleEngineServiceClass {
|
|
|
480
542
|
inheritedFromHosts: boolean;
|
|
481
543
|
inheritedFromKubernetesClusters: boolean;
|
|
482
544
|
inheritedFromDockerHosts: boolean;
|
|
545
|
+
inheritedFromPodmanHosts: boolean;
|
|
483
546
|
inheritedFromServices: boolean;
|
|
484
547
|
}): Promise<void> {
|
|
485
548
|
const {
|
|
@@ -491,6 +554,7 @@ class AlertOwnerRuleEngineServiceClass {
|
|
|
491
554
|
inheritedFromHosts,
|
|
492
555
|
inheritedFromKubernetesClusters,
|
|
493
556
|
inheritedFromDockerHosts,
|
|
557
|
+
inheritedFromPodmanHosts,
|
|
494
558
|
inheritedFromServices,
|
|
495
559
|
} = data;
|
|
496
560
|
if (
|
|
@@ -575,6 +639,9 @@ class AlertOwnerRuleEngineServiceClass {
|
|
|
575
639
|
if (inheritedFromDockerHosts) {
|
|
576
640
|
inheritedSources.push("Docker hosts");
|
|
577
641
|
}
|
|
642
|
+
if (inheritedFromPodmanHosts) {
|
|
643
|
+
inheritedSources.push("Podman hosts");
|
|
644
|
+
}
|
|
578
645
|
if (inheritedFromServices) {
|
|
579
646
|
inheritedSources.push("services");
|
|
580
647
|
}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import Label from "../../Models/DatabaseModels/Label";
|
|
2
|
+
import DockerSwarmCluster from "../../Models/DatabaseModels/DockerSwarmCluster";
|
|
3
|
+
import DockerSwarmClusterLabelRule from "../../Models/DatabaseModels/DockerSwarmClusterLabelRule";
|
|
4
|
+
import DockerSwarmClusterLabelRuleService from "./DockerSwarmClusterLabelRuleService";
|
|
5
|
+
import DockerSwarmClusterService from "./DockerSwarmClusterService";
|
|
6
|
+
import ObjectID from "../../Types/ObjectID";
|
|
7
|
+
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
8
|
+
import logger, { LogAttributes } from "../Utils/Logger";
|
|
9
|
+
|
|
10
|
+
class DockerSwarmClusterLabelRuleEngineServiceClass {
|
|
11
|
+
/**
|
|
12
|
+
* Evaluates DockerSwarmClusterLabelRule rows for the given DockerSwarm cluster and attaches matched
|
|
13
|
+
* labels to it. The union is deduped against labels already on the DockerSwarm cluster
|
|
14
|
+
* before insert to avoid PK conflicts on the join table.
|
|
15
|
+
*/
|
|
16
|
+
@CaptureSpan()
|
|
17
|
+
public async applyRulesToDockerSwarmCluster(
|
|
18
|
+
dockerSwarmCluster: DockerSwarmCluster,
|
|
19
|
+
): Promise<void> {
|
|
20
|
+
if (!dockerSwarmCluster.id || !dockerSwarmCluster.projectId) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
try {
|
|
25
|
+
const rules: Array<DockerSwarmClusterLabelRule> =
|
|
26
|
+
await DockerSwarmClusterLabelRuleService.findBy({
|
|
27
|
+
query: {
|
|
28
|
+
projectId: dockerSwarmCluster.projectId,
|
|
29
|
+
isEnabled: true,
|
|
30
|
+
},
|
|
31
|
+
props: { isRoot: true },
|
|
32
|
+
select: {
|
|
33
|
+
_id: true,
|
|
34
|
+
name: true,
|
|
35
|
+
dockerSwarmClusterLabels: { _id: true },
|
|
36
|
+
dockerSwarmClusterNamePattern: true,
|
|
37
|
+
dockerSwarmClusterDescriptionPattern: true,
|
|
38
|
+
labelsToAdd: { _id: true },
|
|
39
|
+
},
|
|
40
|
+
limit: 100,
|
|
41
|
+
skip: 0,
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
if (rules.length === 0) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const dockerSwarmClusterWithDetails: DockerSwarmCluster | null =
|
|
49
|
+
await DockerSwarmClusterService.findOneById({
|
|
50
|
+
id: dockerSwarmCluster.id,
|
|
51
|
+
select: {
|
|
52
|
+
name: true,
|
|
53
|
+
description: true,
|
|
54
|
+
labels: { _id: true },
|
|
55
|
+
},
|
|
56
|
+
props: { isRoot: true },
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
if (!dockerSwarmClusterWithDetails) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const labelIdsToAdd: Set<string> = new Set();
|
|
64
|
+
|
|
65
|
+
for (const rule of rules) {
|
|
66
|
+
const matches: boolean = this.doesDockerSwarmClusterMatchRule(
|
|
67
|
+
dockerSwarmClusterWithDetails,
|
|
68
|
+
rule,
|
|
69
|
+
);
|
|
70
|
+
if (!matches) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
for (const label of rule.labelsToAdd || []) {
|
|
74
|
+
if (label.id) {
|
|
75
|
+
labelIdsToAdd.add(label.id.toString());
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (labelIdsToAdd.size === 0) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const existingLabelIds: Set<string> = new Set(
|
|
85
|
+
(dockerSwarmClusterWithDetails.labels || [])
|
|
86
|
+
.map((l: Label) => {
|
|
87
|
+
return l.id?.toString() || "";
|
|
88
|
+
})
|
|
89
|
+
.filter((id: string) => {
|
|
90
|
+
return id !== "";
|
|
91
|
+
}),
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
const newLabelIds: Array<string> = Array.from(labelIdsToAdd).filter(
|
|
95
|
+
(id: string) => {
|
|
96
|
+
return !existingLabelIds.has(id);
|
|
97
|
+
},
|
|
98
|
+
);
|
|
99
|
+
if (newLabelIds.length === 0) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
await DockerSwarmClusterService.getRepository()
|
|
104
|
+
.createQueryBuilder()
|
|
105
|
+
.relation(DockerSwarmCluster, "labels")
|
|
106
|
+
.of(dockerSwarmCluster.id.toString())
|
|
107
|
+
.add(newLabelIds);
|
|
108
|
+
|
|
109
|
+
/*
|
|
110
|
+
* Sync in-memory dockerSwarmCluster.labels so a downstream owner-rule engine in
|
|
111
|
+
* the same onCreateSuccess chain can match on rule-added labels.
|
|
112
|
+
*/
|
|
113
|
+
const mergedLabelIds: Set<string> = new Set([
|
|
114
|
+
...existingLabelIds,
|
|
115
|
+
...newLabelIds,
|
|
116
|
+
]);
|
|
117
|
+
dockerSwarmCluster.labels = Array.from(mergedLabelIds).map(
|
|
118
|
+
(id: string) => {
|
|
119
|
+
const label: Label = new Label();
|
|
120
|
+
label.id = new ObjectID(id);
|
|
121
|
+
return label;
|
|
122
|
+
},
|
|
123
|
+
);
|
|
124
|
+
|
|
125
|
+
logger.debug(
|
|
126
|
+
`DockerSwarmClusterLabelRuleEngine attached ${newLabelIds.length} labels to DockerSwarm cluster ${dockerSwarmCluster.id}`,
|
|
127
|
+
{ projectId: dockerSwarmCluster.projectId.toString() } as LogAttributes,
|
|
128
|
+
);
|
|
129
|
+
} catch (error) {
|
|
130
|
+
logger.error(`Error applying DockerSwarm cluster label rules: ${error}`, {
|
|
131
|
+
projectId: dockerSwarmCluster.projectId?.toString(),
|
|
132
|
+
dockerSwarmClusterId: dockerSwarmCluster.id?.toString(),
|
|
133
|
+
} as LogAttributes);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
private doesDockerSwarmClusterMatchRule(
|
|
138
|
+
dockerSwarmCluster: DockerSwarmCluster,
|
|
139
|
+
rule: DockerSwarmClusterLabelRule,
|
|
140
|
+
): boolean {
|
|
141
|
+
if (
|
|
142
|
+
rule.dockerSwarmClusterLabels &&
|
|
143
|
+
rule.dockerSwarmClusterLabels.length > 0
|
|
144
|
+
) {
|
|
145
|
+
if (
|
|
146
|
+
!dockerSwarmCluster.labels ||
|
|
147
|
+
dockerSwarmCluster.labels.length === 0
|
|
148
|
+
) {
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
const ruleLabelIds: Array<string> = rule.dockerSwarmClusterLabels.map(
|
|
152
|
+
(l: Label) => {
|
|
153
|
+
return l.id?.toString() || "";
|
|
154
|
+
},
|
|
155
|
+
);
|
|
156
|
+
const labelIds: Array<string> = dockerSwarmCluster.labels.map(
|
|
157
|
+
(l: Label) => {
|
|
158
|
+
return l.id?.toString() || "";
|
|
159
|
+
},
|
|
160
|
+
);
|
|
161
|
+
if (
|
|
162
|
+
!ruleLabelIds.some((id: string) => {
|
|
163
|
+
return labelIds.includes(id);
|
|
164
|
+
})
|
|
165
|
+
) {
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (
|
|
171
|
+
rule.dockerSwarmClusterNamePattern &&
|
|
172
|
+
(!dockerSwarmCluster.name ||
|
|
173
|
+
!this.testRegex(
|
|
174
|
+
rule.dockerSwarmClusterNamePattern,
|
|
175
|
+
dockerSwarmCluster.name,
|
|
176
|
+
rule,
|
|
177
|
+
))
|
|
178
|
+
) {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
if (
|
|
183
|
+
rule.dockerSwarmClusterDescriptionPattern &&
|
|
184
|
+
(!dockerSwarmCluster.description ||
|
|
185
|
+
!this.testRegex(
|
|
186
|
+
rule.dockerSwarmClusterDescriptionPattern,
|
|
187
|
+
dockerSwarmCluster.description,
|
|
188
|
+
rule,
|
|
189
|
+
))
|
|
190
|
+
) {
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
return true;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
private testRegex(
|
|
198
|
+
pattern: string,
|
|
199
|
+
value: string,
|
|
200
|
+
rule: DockerSwarmClusterLabelRule,
|
|
201
|
+
): boolean {
|
|
202
|
+
try {
|
|
203
|
+
const regex: RegExp = new RegExp(pattern, "i");
|
|
204
|
+
return regex.test(value);
|
|
205
|
+
} catch {
|
|
206
|
+
logger.warn(
|
|
207
|
+
`Invalid regex in DockerSwarm cluster label rule ${rule.id}: ${pattern}`,
|
|
208
|
+
);
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
export default new DockerSwarmClusterLabelRuleEngineServiceClass();
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import DatabaseService from "./DatabaseService";
|
|
2
|
+
import Model from "../../Models/DatabaseModels/DockerSwarmClusterLabelRule";
|
|
3
|
+
import { IsBillingEnabled } from "../EnvironmentConfig";
|
|
4
|
+
|
|
5
|
+
export class Service extends DatabaseService<Model> {
|
|
6
|
+
public constructor() {
|
|
7
|
+
super(Model);
|
|
8
|
+
if (IsBillingEnabled) {
|
|
9
|
+
this.hardDeleteItemsOlderThanInDays("createdAt", 3 * 365);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export default new Service();
|