@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,4 +1,5 @@
|
|
|
1
1
|
import CephCluster from "../../../Models/DatabaseModels/CephCluster";
|
|
2
|
+
import DockerSwarmCluster from "../../../Models/DatabaseModels/DockerSwarmCluster";
|
|
2
3
|
import DockerHost from "../../../Models/DatabaseModels/DockerHost";
|
|
3
4
|
import Host from "../../../Models/DatabaseModels/Host";
|
|
4
5
|
import Incident from "../../../Models/DatabaseModels/Incident";
|
|
@@ -9,6 +10,7 @@ import KubernetesCluster from "../../../Models/DatabaseModels/KubernetesCluster"
|
|
|
9
10
|
import Label from "../../../Models/DatabaseModels/Label";
|
|
10
11
|
import Monitor from "../../../Models/DatabaseModels/Monitor";
|
|
11
12
|
import OnCallDutyPolicy from "../../../Models/DatabaseModels/OnCallDutyPolicy";
|
|
13
|
+
import PodmanHost from "../../../Models/DatabaseModels/PodmanHost";
|
|
12
14
|
import ProxmoxCluster from "../../../Models/DatabaseModels/ProxmoxCluster";
|
|
13
15
|
import Service from "../../../Models/DatabaseModels/Service";
|
|
14
16
|
import Includes from "../../../Types/BaseDatabase/Includes";
|
|
@@ -27,6 +29,7 @@ import DockerHostService from "../../Services/DockerHostService";
|
|
|
27
29
|
import HostService from "../../Services/HostService";
|
|
28
30
|
import IncidentService from "../../Services/IncidentService";
|
|
29
31
|
import KubernetesClusterService from "../../Services/KubernetesClusterService";
|
|
32
|
+
import PodmanHostService from "../../Services/PodmanHostService";
|
|
30
33
|
import ProxmoxClusterService from "../../Services/ProxmoxClusterService";
|
|
31
34
|
import ServiceService from "../../Services/ServiceService";
|
|
32
35
|
import IncidentSeverityService from "../../Services/IncidentSeverityService";
|
|
@@ -577,6 +580,7 @@ export default class MonitorIncident {
|
|
|
577
580
|
const [
|
|
578
581
|
resolvedHosts,
|
|
579
582
|
resolvedDockerHosts,
|
|
583
|
+
resolvedPodmanHosts,
|
|
580
584
|
resolvedClusters,
|
|
581
585
|
resolvedServices,
|
|
582
586
|
resolvedProxmoxClusters,
|
|
@@ -596,6 +600,13 @@ export default class MonitorIncident {
|
|
|
596
600
|
projectId: input.projectId,
|
|
597
601
|
findBy: DockerHostService.findBy.bind(DockerHostService),
|
|
598
602
|
}),
|
|
603
|
+
this.resolveResourceIds({
|
|
604
|
+
ids: refs.podmanHostIds,
|
|
605
|
+
names: refs.podmanHostNames,
|
|
606
|
+
nameColumn: "hostIdentifier",
|
|
607
|
+
projectId: input.projectId,
|
|
608
|
+
findBy: PodmanHostService.findBy.bind(PodmanHostService),
|
|
609
|
+
}),
|
|
599
610
|
this.resolveResourceIds({
|
|
600
611
|
ids: refs.kubernetesClusterIds,
|
|
601
612
|
names: refs.kubernetesClusterNames,
|
|
@@ -642,6 +653,15 @@ export default class MonitorIncident {
|
|
|
642
653
|
},
|
|
643
654
|
);
|
|
644
655
|
}
|
|
656
|
+
if (resolvedPodmanHosts.length > 0) {
|
|
657
|
+
input.incident.podmanHosts = resolvedPodmanHosts.map(
|
|
658
|
+
(id: string): PodmanHost => {
|
|
659
|
+
const podmanHost: PodmanHost = new PodmanHost();
|
|
660
|
+
podmanHost._id = id;
|
|
661
|
+
return podmanHost;
|
|
662
|
+
},
|
|
663
|
+
);
|
|
664
|
+
}
|
|
645
665
|
if (resolvedClusters.length > 0) {
|
|
646
666
|
input.incident.kubernetesClusters = resolvedClusters.map(
|
|
647
667
|
(id: string): KubernetesCluster => {
|
|
@@ -735,6 +755,31 @@ export default class MonitorIncident {
|
|
|
735
755
|
|
|
736
756
|
input.incident.cephClusters = merged;
|
|
737
757
|
}
|
|
758
|
+
|
|
759
|
+
if (input.clusterContext.dockerSwarmClusterIds.length > 0) {
|
|
760
|
+
const existingIds: Set<string> = new Set<string>(
|
|
761
|
+
(input.incident.dockerSwarmClusters || []).map(
|
|
762
|
+
(cluster: DockerSwarmCluster) => {
|
|
763
|
+
return String(cluster._id);
|
|
764
|
+
},
|
|
765
|
+
),
|
|
766
|
+
);
|
|
767
|
+
|
|
768
|
+
const merged: Array<DockerSwarmCluster> = [
|
|
769
|
+
...(input.incident.dockerSwarmClusters || []),
|
|
770
|
+
];
|
|
771
|
+
|
|
772
|
+
for (const id of input.clusterContext.dockerSwarmClusterIds) {
|
|
773
|
+
if (existingIds.has(id)) {
|
|
774
|
+
continue;
|
|
775
|
+
}
|
|
776
|
+
const cluster: DockerSwarmCluster = new DockerSwarmCluster();
|
|
777
|
+
cluster._id = id;
|
|
778
|
+
merged.push(cluster);
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
input.incident.dockerSwarmClusters = merged;
|
|
782
|
+
}
|
|
738
783
|
}
|
|
739
784
|
|
|
740
785
|
/*
|
|
@@ -23,6 +23,7 @@ export interface ResourceKeySet {
|
|
|
23
23
|
export interface MaintainedResourceKeys {
|
|
24
24
|
hosts: ResourceKeySet;
|
|
25
25
|
dockerHosts: ResourceKeySet;
|
|
26
|
+
podmanHosts: ResourceKeySet;
|
|
26
27
|
kubernetesClusters: ResourceKeySet;
|
|
27
28
|
/*
|
|
28
29
|
* Proxmox/Ceph clusters have no `oneuptime.*.id` label stamp, so only
|
|
@@ -112,6 +113,11 @@ export default class MonitorMaintenanceSuppression {
|
|
|
112
113
|
refs.dockerHostNames,
|
|
113
114
|
input.maintained.dockerHosts.names,
|
|
114
115
|
) ||
|
|
116
|
+
this.intersects(refs.podmanHostIds, input.maintained.podmanHosts.ids) ||
|
|
117
|
+
this.intersects(
|
|
118
|
+
refs.podmanHostNames,
|
|
119
|
+
input.maintained.podmanHosts.names,
|
|
120
|
+
) ||
|
|
115
121
|
this.intersects(
|
|
116
122
|
refs.kubernetesClusterIds,
|
|
117
123
|
input.maintained.kubernetesClusters.ids,
|
|
@@ -156,6 +162,8 @@ export default class MonitorMaintenanceSuppression {
|
|
|
156
162
|
maintained.hosts.names.size > 0 ||
|
|
157
163
|
maintained.dockerHosts.ids.size > 0 ||
|
|
158
164
|
maintained.dockerHosts.names.size > 0 ||
|
|
165
|
+
maintained.podmanHosts.ids.size > 0 ||
|
|
166
|
+
maintained.podmanHosts.names.size > 0 ||
|
|
159
167
|
maintained.kubernetesClusters.ids.size > 0 ||
|
|
160
168
|
maintained.kubernetesClusters.names.size > 0 ||
|
|
161
169
|
maintained.proxmoxClusters.ids.size > 0 ||
|
|
@@ -181,6 +189,7 @@ export default class MonitorMaintenanceSuppression {
|
|
|
181
189
|
const maintained: MaintainedResourceKeys = {
|
|
182
190
|
hosts: { ids: new Set<string>(), names: new Set<string>() },
|
|
183
191
|
dockerHosts: { ids: new Set<string>(), names: new Set<string>() },
|
|
192
|
+
podmanHosts: { ids: new Set<string>(), names: new Set<string>() },
|
|
184
193
|
kubernetesClusters: { ids: new Set<string>(), names: new Set<string>() },
|
|
185
194
|
proxmoxClusters: { ids: new Set<string>(), names: new Set<string>() },
|
|
186
195
|
cephClusters: { ids: new Set<string>(), names: new Set<string>() },
|
|
@@ -199,6 +208,7 @@ export default class MonitorMaintenanceSuppression {
|
|
|
199
208
|
_id: true,
|
|
200
209
|
hosts: { _id: true, hostIdentifier: true },
|
|
201
210
|
dockerHosts: { _id: true, hostIdentifier: true },
|
|
211
|
+
podmanHosts: { _id: true, hostIdentifier: true },
|
|
202
212
|
kubernetesClusters: { _id: true, clusterIdentifier: true },
|
|
203
213
|
proxmoxClusters: { _id: true, name: true },
|
|
204
214
|
cephClusters: { _id: true, name: true },
|
|
@@ -222,6 +232,13 @@ export default class MonitorMaintenanceSuppression {
|
|
|
222
232
|
dockerHost.hostIdentifier,
|
|
223
233
|
);
|
|
224
234
|
}
|
|
235
|
+
for (const podmanHost of event.podmanHosts || []) {
|
|
236
|
+
this.addKey(
|
|
237
|
+
maintained.podmanHosts,
|
|
238
|
+
podmanHost._id,
|
|
239
|
+
podmanHost.hostIdentifier,
|
|
240
|
+
);
|
|
241
|
+
}
|
|
225
242
|
for (const cluster of event.kubernetesClusters || []) {
|
|
226
243
|
this.addKey(
|
|
227
244
|
maintained.kubernetesClusters,
|
|
@@ -361,6 +361,9 @@ export default class MonitorTemplateUtil {
|
|
|
361
361
|
data.monitorType === MonitorType.Metrics ||
|
|
362
362
|
data.monitorType === MonitorType.Kubernetes ||
|
|
363
363
|
data.monitorType === MonitorType.Docker ||
|
|
364
|
+
data.monitorType === MonitorType.Host ||
|
|
365
|
+
data.monitorType === MonitorType.Podman ||
|
|
366
|
+
data.monitorType === MonitorType.DockerSwarm ||
|
|
364
367
|
data.monitorType === MonitorType.Proxmox ||
|
|
365
368
|
data.monitorType === MonitorType.Ceph
|
|
366
369
|
) {
|
|
@@ -48,6 +48,22 @@ export const DockerHostNameLabelKeys: ReadonlyArray<string> = [
|
|
|
48
48
|
"oneuptime.docker.host.name",
|
|
49
49
|
];
|
|
50
50
|
|
|
51
|
+
/*
|
|
52
|
+
* For Podman hosts we deliberately ignore raw `host.name` /
|
|
53
|
+
* `oneuptime.host.name`: those are the Host's territory. The ingest
|
|
54
|
+
* pipeline stamps `oneuptime.podman.host.*` independently when the
|
|
55
|
+
* source is a podman host, so only those keys identify a PodmanHost.
|
|
56
|
+
*/
|
|
57
|
+
export const PodmanHostIdLabelKeys: ReadonlyArray<string> = [
|
|
58
|
+
"resource.oneuptime.podman.host.id",
|
|
59
|
+
"oneuptime.podman.host.id",
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
export const PodmanHostNameLabelKeys: ReadonlyArray<string> = [
|
|
63
|
+
"resource.oneuptime.podman.host.name",
|
|
64
|
+
"oneuptime.podman.host.name",
|
|
65
|
+
];
|
|
66
|
+
|
|
51
67
|
export const KubernetesClusterIdLabelKeys: ReadonlyArray<string> = [
|
|
52
68
|
"resource.oneuptime.kubernetes.cluster.id",
|
|
53
69
|
"oneuptime.kubernetes.cluster.id",
|
|
@@ -112,6 +128,8 @@ export interface SeriesResourceRefs {
|
|
|
112
128
|
hostNames: Array<string>;
|
|
113
129
|
dockerHostIds: Array<string>;
|
|
114
130
|
dockerHostNames: Array<string>;
|
|
131
|
+
podmanHostIds: Array<string>;
|
|
132
|
+
podmanHostNames: Array<string>;
|
|
115
133
|
kubernetesClusterIds: Array<string>;
|
|
116
134
|
kubernetesClusterNames: Array<string>;
|
|
117
135
|
proxmoxClusterNames: Array<string>;
|
|
@@ -166,6 +184,14 @@ export default class SeriesResourceLabels {
|
|
|
166
184
|
seriesLabels,
|
|
167
185
|
DockerHostNameLabelKeys,
|
|
168
186
|
),
|
|
187
|
+
podmanHostIds: this.collectLabelValues(
|
|
188
|
+
seriesLabels,
|
|
189
|
+
PodmanHostIdLabelKeys,
|
|
190
|
+
),
|
|
191
|
+
podmanHostNames: this.collectLabelValues(
|
|
192
|
+
seriesLabels,
|
|
193
|
+
PodmanHostNameLabelKeys,
|
|
194
|
+
),
|
|
169
195
|
kubernetesClusterIds: this.collectLabelValues(
|
|
170
196
|
seriesLabels,
|
|
171
197
|
KubernetesClusterIdLabelKeys,
|
|
@@ -5,6 +5,7 @@ import MultiSearch from "../../../Types/BaseDatabase/MultiSearch";
|
|
|
5
5
|
import ServiceModel from "../../../Models/DatabaseModels/Service";
|
|
6
6
|
import HostModel from "../../../Models/DatabaseModels/Host";
|
|
7
7
|
import DockerHostModel from "../../../Models/DatabaseModels/DockerHost";
|
|
8
|
+
import PodmanHostModel from "../../../Models/DatabaseModels/PodmanHost";
|
|
8
9
|
import KubernetesClusterModel from "../../../Models/DatabaseModels/KubernetesCluster";
|
|
9
10
|
import ServerlessFunctionModel from "../../../Models/DatabaseModels/ServerlessFunction";
|
|
10
11
|
import CloudResourceModel from "../../../Models/DatabaseModels/CloudResource";
|
|
@@ -12,6 +13,7 @@ import RumApplicationModel from "../../../Models/DatabaseModels/RumApplication";
|
|
|
12
13
|
import ServiceService from "../../Services/ServiceService";
|
|
13
14
|
import HostService from "../../Services/HostService";
|
|
14
15
|
import DockerHostService from "../../Services/DockerHostService";
|
|
16
|
+
import PodmanHostService from "../../Services/PodmanHostService";
|
|
15
17
|
import KubernetesClusterService from "../../Services/KubernetesClusterService";
|
|
16
18
|
import ServerlessFunctionService from "../../Services/ServerlessFunctionService";
|
|
17
19
|
import CloudResourceService from "../../Services/CloudResourceService";
|
|
@@ -34,6 +36,7 @@ export const RESOURCE_FACET_KEYS: ReadonlySet<string> = new Set([
|
|
|
34
36
|
"serviceId",
|
|
35
37
|
"hostId",
|
|
36
38
|
"dockerHostId",
|
|
39
|
+
"podmanHostId",
|
|
37
40
|
"kubernetesClusterId",
|
|
38
41
|
"serverlessFunctionId",
|
|
39
42
|
"cloudResourceId",
|
|
@@ -118,6 +121,13 @@ export default class ResourceFacetResolver {
|
|
|
118
121
|
searchText,
|
|
119
122
|
limit,
|
|
120
123
|
);
|
|
124
|
+
case "podmanHostId":
|
|
125
|
+
return ResourceFacetResolver.queryPodmanHosts(
|
|
126
|
+
projectId,
|
|
127
|
+
spec.counts,
|
|
128
|
+
searchText,
|
|
129
|
+
limit,
|
|
130
|
+
);
|
|
121
131
|
case "kubernetesClusterId":
|
|
122
132
|
return ResourceFacetResolver.queryKubernetesClusters(
|
|
123
133
|
projectId,
|
|
@@ -260,6 +270,45 @@ export default class ResourceFacetResolver {
|
|
|
260
270
|
);
|
|
261
271
|
}
|
|
262
272
|
|
|
273
|
+
private static async queryPodmanHosts(
|
|
274
|
+
projectId: ObjectID,
|
|
275
|
+
counts: Map<string, number>,
|
|
276
|
+
searchText: string | undefined,
|
|
277
|
+
limit: number,
|
|
278
|
+
): Promise<Array<ResolvedFacetValue>> {
|
|
279
|
+
const query: Record<string, unknown> = { projectId };
|
|
280
|
+
if (searchText) {
|
|
281
|
+
query["name"] = new MultiSearch({
|
|
282
|
+
fields: ["name", "hostIdentifier"],
|
|
283
|
+
value: searchText,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
const podmanHosts: Array<PodmanHostModel> = await PodmanHostService.findBy({
|
|
288
|
+
query: query as any,
|
|
289
|
+
select: {
|
|
290
|
+
_id: true,
|
|
291
|
+
name: true,
|
|
292
|
+
hostIdentifier: true,
|
|
293
|
+
},
|
|
294
|
+
limit: new PositiveNumber(limit),
|
|
295
|
+
skip: new PositiveNumber(0),
|
|
296
|
+
props: { isRoot: true },
|
|
297
|
+
});
|
|
298
|
+
|
|
299
|
+
return ResourceFacetResolver.mergeCounts(
|
|
300
|
+
podmanHosts.map(
|
|
301
|
+
(p: PodmanHostModel): { id: string; displayName: string } => {
|
|
302
|
+
return {
|
|
303
|
+
id: p._id ? p._id.toString() : "",
|
|
304
|
+
displayName: p.name || p.hostIdentifier || "Unknown",
|
|
305
|
+
};
|
|
306
|
+
},
|
|
307
|
+
),
|
|
308
|
+
counts,
|
|
309
|
+
);
|
|
310
|
+
}
|
|
311
|
+
|
|
263
312
|
private static async queryKubernetesClusters(
|
|
264
313
|
projectId: ObjectID,
|
|
265
314
|
counts: Map<string, number>,
|
|
@@ -163,6 +163,16 @@ export default class TelemetryUtil {
|
|
|
163
163
|
};
|
|
164
164
|
}
|
|
165
165
|
|
|
166
|
+
public static getAttributesForPodmanHostIdAndHostName(data: {
|
|
167
|
+
podmanHostId: ObjectID;
|
|
168
|
+
hostName: string;
|
|
169
|
+
}): Dictionary<AttributeType> {
|
|
170
|
+
return {
|
|
171
|
+
"oneuptime.podman.host.id": data.podmanHostId.toString(),
|
|
172
|
+
"oneuptime.podman.host.name": data.hostName,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
|
|
166
176
|
public static getAttributesForKubernetesClusterIdAndName(data: {
|
|
167
177
|
kubernetesClusterId: ObjectID;
|
|
168
178
|
clusterName: string;
|
|
@@ -597,6 +597,28 @@ export default class TelemetryEntity {
|
|
|
597
597
|
: null;
|
|
598
598
|
},
|
|
599
599
|
|
|
600
|
+
/*
|
|
601
|
+
* docker.swarm.cluster — docker.swarm.cluster.name only, mirroring the
|
|
602
|
+
* proxmox/ceph cluster identity: the typed Postgres row
|
|
603
|
+
* (DockerSwarmCluster) and the read side
|
|
604
|
+
* (`EntityKey.keyForDockerSwarmCluster`) are name-based, and the agent
|
|
605
|
+
* stamps `docker.swarm.cluster.name` on every signal. Node/Service/Task
|
|
606
|
+
* identity is NOT derived from resource attributes (inventory arrives as
|
|
607
|
+
* separate JSON-line log records), so only the cluster entity flows here.
|
|
608
|
+
*/
|
|
609
|
+
(attrs: EntityAttributes) => {
|
|
610
|
+
const name: string | null = TelemetryEntity.str(
|
|
611
|
+
attrs,
|
|
612
|
+
"docker.swarm.cluster.name",
|
|
613
|
+
);
|
|
614
|
+
return name
|
|
615
|
+
? {
|
|
616
|
+
entityType: EntityType.DockerSwarmCluster,
|
|
617
|
+
id: { "docker.swarm.cluster.name": name },
|
|
618
|
+
}
|
|
619
|
+
: null;
|
|
620
|
+
},
|
|
621
|
+
|
|
600
622
|
/*
|
|
601
623
|
* container — container.id. High-churn: flows as a membership key but
|
|
602
624
|
* is membership-only by default (not promoted to a registry row
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { LIMIT_PER_PROJECT } from "../../Types/Database/LimitMax";
|
|
2
|
+
import BadDataException from "../../Types/Exception/BadDataException";
|
|
3
|
+
import ObjectID from "../../Types/ObjectID";
|
|
4
|
+
import Project from "../../Models/DatabaseModels/Project";
|
|
5
|
+
import Team from "../../Models/DatabaseModels/Team";
|
|
6
|
+
import QueryHelper from "../Types/Database/QueryHelper";
|
|
7
|
+
import TeamService from "../Services/TeamService";
|
|
8
|
+
|
|
9
|
+
/*
|
|
10
|
+
* The Admin Dashboard attach form submits the chosen project via the `project`
|
|
11
|
+
* relation, not the `projectId` FK: the entity dropdown sets the related
|
|
12
|
+
* Project (as a model with only `_id`), so `createBy.data.projectId` is
|
|
13
|
+
* undefined at create-hook time. Resolve the FK from either shape so the hook
|
|
14
|
+
* can populate the NOT NULL `projectId` column and validate teams against it.
|
|
15
|
+
*/
|
|
16
|
+
export const resolveAttachmentProjectId: (data: {
|
|
17
|
+
projectId?: ObjectID | undefined;
|
|
18
|
+
project?: Project | undefined;
|
|
19
|
+
}) => ObjectID | undefined = (data: {
|
|
20
|
+
projectId?: ObjectID | undefined;
|
|
21
|
+
project?: Project | undefined;
|
|
22
|
+
}): ObjectID | undefined => {
|
|
23
|
+
if (data.projectId) {
|
|
24
|
+
return data.projectId;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const project: (Project & { _id?: string }) | undefined = data.project as
|
|
28
|
+
| (Project & { _id?: string })
|
|
29
|
+
| undefined;
|
|
30
|
+
|
|
31
|
+
if (!project) {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const idString: string | undefined =
|
|
36
|
+
project._id?.toString() || (project.id ? project.id.toString() : undefined);
|
|
37
|
+
|
|
38
|
+
return idString ? new ObjectID(idString) : undefined;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/*
|
|
42
|
+
* Guards a Global SSO / Global OIDC project-attachment: every default team
|
|
43
|
+
* selected for the attachment MUST belong to the same project the attachment
|
|
44
|
+
* targets.
|
|
45
|
+
*
|
|
46
|
+
* Without this guard, an admin (or a direct API call) could attach a team that
|
|
47
|
+
* lives in project B to an attachment that targets project A. The SSO/OIDC
|
|
48
|
+
* login fan-out (see App/FeatureSet/Identity/API/GlobalSSO.ts) provisions a
|
|
49
|
+
* TeamMember with `projectId = attachment.projectId` but `teamId = team.id`,
|
|
50
|
+
* and because that path runs with `ignoreHooks: true` no service-level
|
|
51
|
+
* validation would catch the mismatch — producing a corrupt, cross-project
|
|
52
|
+
* membership row. This is the server-side backstop for the project-scoped team
|
|
53
|
+
* picker in the Admin Dashboard.
|
|
54
|
+
*/
|
|
55
|
+
type ValidateGlobalProviderProjectTeamsFunction = (data: {
|
|
56
|
+
teams: Array<Team> | undefined;
|
|
57
|
+
projectId: ObjectID | undefined;
|
|
58
|
+
}) => Promise<void>;
|
|
59
|
+
|
|
60
|
+
const validateGlobalProviderProjectTeams: ValidateGlobalProviderProjectTeamsFunction =
|
|
61
|
+
async (data: {
|
|
62
|
+
teams: Array<Team> | undefined;
|
|
63
|
+
projectId: ObjectID | undefined;
|
|
64
|
+
}): Promise<void> => {
|
|
65
|
+
const teams: Array<Team> | undefined = data.teams;
|
|
66
|
+
|
|
67
|
+
if (!teams || teams.length === 0) {
|
|
68
|
+
// No default teams selected: nothing to validate.
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (!data.projectId) {
|
|
73
|
+
throw new BadDataException(
|
|
74
|
+
"A project must be selected before choosing default teams.",
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const projectId: string = data.projectId.toString();
|
|
79
|
+
|
|
80
|
+
const teamIds: Array<string> = teams
|
|
81
|
+
.map((team: Team) => {
|
|
82
|
+
return (
|
|
83
|
+
team.id?.toString() ||
|
|
84
|
+
(team as { _id?: string })._id?.toString() ||
|
|
85
|
+
undefined
|
|
86
|
+
);
|
|
87
|
+
})
|
|
88
|
+
.filter((id: string | undefined): id is string => {
|
|
89
|
+
return Boolean(id);
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
if (teamIds.length === 0) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const foundTeams: Array<Team> = await TeamService.findBy({
|
|
97
|
+
query: { _id: QueryHelper.any(teamIds) },
|
|
98
|
+
select: { _id: true, projectId: true },
|
|
99
|
+
limit: LIMIT_PER_PROJECT,
|
|
100
|
+
skip: 0,
|
|
101
|
+
props: { isRoot: true },
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
if (foundTeams.length !== teamIds.length) {
|
|
105
|
+
throw new BadDataException(
|
|
106
|
+
"One or more selected teams could not be found.",
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
for (const team of foundTeams) {
|
|
111
|
+
if (team.projectId?.toString() !== projectId) {
|
|
112
|
+
throw new BadDataException(
|
|
113
|
+
"All selected teams must belong to the project this provider is attached to.",
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
export default validateGlobalProviderProjectTeams;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import ProjectMiddleware from "../../../Server/Middleware/ProjectAuthorization";
|
|
2
2
|
import UserMiddleware from "../../../Server/Middleware/UserAuthorization";
|
|
3
3
|
import AccessTokenService from "../../../Server/Services/AccessTokenService";
|
|
4
|
+
import GlobalConfigService from "../../../Server/Services/GlobalConfigService";
|
|
4
5
|
import ProjectService from "../../../Server/Services/ProjectService";
|
|
5
6
|
import TeamMemberService from "../../../Server/Services/TeamMemberService";
|
|
6
7
|
import UserService from "../../../Server/Services/UserService";
|
|
@@ -26,7 +27,6 @@ import {
|
|
|
26
27
|
UserGlobalAccessPermission,
|
|
27
28
|
UserTenantAccessPermission,
|
|
28
29
|
} from "../../../Types/Permission";
|
|
29
|
-
import Project from "../../../Models/DatabaseModels/Project";
|
|
30
30
|
import {
|
|
31
31
|
describe,
|
|
32
32
|
expect,
|
|
@@ -44,6 +44,7 @@ jest.mock("../../../Server/Middleware/ProjectAuthorization");
|
|
|
44
44
|
jest.mock("../../../Server/Utils/JsonWebToken");
|
|
45
45
|
jest.mock("../../../Server/Services/UserService");
|
|
46
46
|
jest.mock("../../../Server/Services/AccessTokenService");
|
|
47
|
+
jest.mock("../../../Server/Services/GlobalConfigService");
|
|
47
48
|
jest.mock("../../../Server/Utils/Response");
|
|
48
49
|
jest.mock("../../../Server/Services/ProjectService");
|
|
49
50
|
jest.mock("../../../Server/Services/TeamMemberService");
|
|
@@ -56,7 +57,6 @@ describe("UserMiddleware", () => {
|
|
|
56
57
|
const mockedAccessToken: string = ObjectID.generate().toString();
|
|
57
58
|
const projectId: ObjectID = ObjectID.generate();
|
|
58
59
|
const userId: ObjectID = ObjectID.generate();
|
|
59
|
-
const mockedProject: Project = { _id: projectId.toString() } as Project;
|
|
60
60
|
|
|
61
61
|
beforeEach(() => {
|
|
62
62
|
jest.clearAllMocks();
|
|
@@ -590,15 +590,32 @@ describe("UserMiddleware", () => {
|
|
|
590
590
|
ProjectService,
|
|
591
591
|
"getRequireSsoForLogin",
|
|
592
592
|
);
|
|
593
|
+
const spyGetRequireSsoWithSsoProviderId: jest.SpyInstance = getJestSpyOn(
|
|
594
|
+
ProjectService,
|
|
595
|
+
"getRequireSsoWithSsoProviderId",
|
|
596
|
+
);
|
|
593
597
|
const spyDoesSsoTokenForProjectExist: jest.SpyInstance = getJestSpyOn(
|
|
594
598
|
UserMiddleware,
|
|
595
599
|
"doesSsoTokenForProjectExist",
|
|
596
600
|
);
|
|
601
|
+
const spyGetGlobalRequireSsoForLogin: jest.SpyInstance = getJestSpyOn(
|
|
602
|
+
GlobalConfigService,
|
|
603
|
+
"getRequireSsoForLogin",
|
|
604
|
+
);
|
|
597
605
|
|
|
598
606
|
afterEach(() => {
|
|
599
607
|
jest.clearAllMocks();
|
|
600
608
|
});
|
|
601
609
|
|
|
610
|
+
/*
|
|
611
|
+
* By default no project requires a specific SSO provider (discriminator),
|
|
612
|
+
* and the instance-wide "Require SSO for Login" flag is off.
|
|
613
|
+
*/
|
|
614
|
+
beforeEach(() => {
|
|
615
|
+
spyGetRequireSsoWithSsoProviderId.mockResolvedValue(null);
|
|
616
|
+
spyGetGlobalRequireSsoForLogin.mockResolvedValue(false);
|
|
617
|
+
});
|
|
618
|
+
|
|
602
619
|
test("should throw 'Invalid tenantId' error, when project is not found for the tenantId", async () => {
|
|
603
620
|
spyGetRequireSsoForLogin.mockRejectedValueOnce(
|
|
604
621
|
new BadDataException("Project not found"),
|
|
@@ -630,6 +647,7 @@ describe("UserMiddleware", () => {
|
|
|
630
647
|
req,
|
|
631
648
|
projectId,
|
|
632
649
|
userId,
|
|
650
|
+
undefined,
|
|
633
651
|
);
|
|
634
652
|
});
|
|
635
653
|
|
|
@@ -688,16 +706,37 @@ describe("UserMiddleware", () => {
|
|
|
688
706
|
projectId,
|
|
689
707
|
} as UserTenantAccessPermission;
|
|
690
708
|
|
|
691
|
-
const
|
|
709
|
+
const spyGetProjectRequireSsoForLogin: jest.SpyInstance = getJestSpyOn(
|
|
710
|
+
ProjectService,
|
|
711
|
+
"getRequireSsoForLogin",
|
|
712
|
+
);
|
|
713
|
+
const spyGetRequireSsoWithSsoProviderId: jest.SpyInstance = getJestSpyOn(
|
|
714
|
+
ProjectService,
|
|
715
|
+
"getRequireSsoWithSsoProviderId",
|
|
716
|
+
);
|
|
692
717
|
const spyDoesSsoTokenForProjectExist: jest.SpyInstance = getJestSpyOn(
|
|
693
718
|
UserMiddleware,
|
|
694
719
|
"doesSsoTokenForProjectExist",
|
|
695
720
|
);
|
|
721
|
+
const spyGetGlobalRequireSsoForLogin: jest.SpyInstance = getJestSpyOn(
|
|
722
|
+
GlobalConfigService,
|
|
723
|
+
"getRequireSsoForLogin",
|
|
724
|
+
);
|
|
696
725
|
|
|
697
726
|
afterEach(() => {
|
|
698
727
|
jest.clearAllMocks();
|
|
699
728
|
});
|
|
700
729
|
|
|
730
|
+
/*
|
|
731
|
+
* By default neither a project's own nor the instance-wide "Require SSO for
|
|
732
|
+
* Login" flag is on, and no project requires a specific SSO provider.
|
|
733
|
+
*/
|
|
734
|
+
beforeEach(() => {
|
|
735
|
+
spyGetProjectRequireSsoForLogin.mockResolvedValue(false);
|
|
736
|
+
spyGetRequireSsoWithSsoProviderId.mockResolvedValue(null);
|
|
737
|
+
spyGetGlobalRequireSsoForLogin.mockResolvedValue(false);
|
|
738
|
+
});
|
|
739
|
+
|
|
701
740
|
test("should return null, when projectIds length is zero", async () => {
|
|
702
741
|
const result: Dictionary<UserTenantAccessPermission> | null =
|
|
703
742
|
await UserMiddleware.getUserTenantAccessPermissionForMultiTenant(
|
|
@@ -707,14 +746,12 @@ describe("UserMiddleware", () => {
|
|
|
707
746
|
);
|
|
708
747
|
|
|
709
748
|
expect(result).toBeNull();
|
|
710
|
-
expect(
|
|
749
|
+
expect(spyGetProjectRequireSsoForLogin).not.toBeCalled();
|
|
711
750
|
});
|
|
712
751
|
|
|
713
752
|
test("should return default tenant access permission, when project for a projectId is found, sso is required for login, but sso token does not exist for that projectId", async () => {
|
|
714
753
|
spyDoesSsoTokenForProjectExist.mockReturnValueOnce(false);
|
|
715
|
-
|
|
716
|
-
{ ...mockedProject, requireSsoForLogin: true },
|
|
717
|
-
]);
|
|
754
|
+
spyGetProjectRequireSsoForLogin.mockResolvedValueOnce(true);
|
|
718
755
|
|
|
719
756
|
const spyGetDefaultUserTenantAccessPermission: jest.SpyInstance =
|
|
720
757
|
getJestSpyOn(
|
|
@@ -736,6 +773,7 @@ describe("UserMiddleware", () => {
|
|
|
736
773
|
req,
|
|
737
774
|
projectId,
|
|
738
775
|
userId,
|
|
776
|
+
undefined,
|
|
739
777
|
);
|
|
740
778
|
expect(spyGetDefaultUserTenantAccessPermission).toHaveBeenCalledWith(
|
|
741
779
|
projectId,
|
|
@@ -743,8 +781,6 @@ describe("UserMiddleware", () => {
|
|
|
743
781
|
});
|
|
744
782
|
|
|
745
783
|
test("should return user tenant access permission, when project for a projectId is found, sso is not required for login and project level permission exist for the projectId", async () => {
|
|
746
|
-
spyFindBy.mockResolvedValueOnce([mockedProject]);
|
|
747
|
-
|
|
748
784
|
const spyGetUserTenantAccessPermission: jest.SpyInstance = getJestSpyOn(
|
|
749
785
|
AccessTokenService,
|
|
750
786
|
"getUserTenantAccessPermission",
|
|
@@ -768,8 +804,6 @@ describe("UserMiddleware", () => {
|
|
|
768
804
|
});
|
|
769
805
|
|
|
770
806
|
test("should return null, when project for a projectId is found, sso is not required for login but project level permission does not exist for the projectId", async () => {
|
|
771
|
-
spyFindBy.mockResolvedValueOnce([mockedProject]);
|
|
772
|
-
|
|
773
807
|
const spyGetUserTenantAccessPermission: jest.SpyInstance = getJestSpyOn(
|
|
774
808
|
AccessTokenService,
|
|
775
809
|
"getUserTenantAccessPermission",
|
|
@@ -790,7 +824,9 @@ describe("UserMiddleware", () => {
|
|
|
790
824
|
});
|
|
791
825
|
|
|
792
826
|
test("should return user tenant access permission, when project for a projectId is not found, but project level permission exist for the projectId", async () => {
|
|
793
|
-
|
|
827
|
+
spyGetProjectRequireSsoForLogin.mockRejectedValueOnce(
|
|
828
|
+
new BadDataException("Project not found"),
|
|
829
|
+
);
|
|
794
830
|
|
|
795
831
|
getJestSpyOn(
|
|
796
832
|
AccessTokenService,
|
|
@@ -810,7 +846,9 @@ describe("UserMiddleware", () => {
|
|
|
810
846
|
});
|
|
811
847
|
|
|
812
848
|
test("should return null, when project for a projectId is not found, and project level permission does not exist for the projectId", async () => {
|
|
813
|
-
|
|
849
|
+
spyGetProjectRequireSsoForLogin.mockRejectedValueOnce(
|
|
850
|
+
new BadDataException("Project not found"),
|
|
851
|
+
);
|
|
814
852
|
|
|
815
853
|
const spyGetUserTenantAccessPermission: jest.SpyInstance = getJestSpyOn(
|
|
816
854
|
AccessTokenService,
|