@oneuptime/common 13.0.8 → 14.0.1
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/AnalyticsModels/AuditLog.ts +23 -15
- package/Models/DatabaseModels/GlobalConfig.ts +24 -0
- package/Models/DatabaseModels/Index.ts +4 -0
- package/Models/DatabaseModels/Monitor.ts +3 -2
- package/Models/DatabaseModels/MonitorTemplate.ts +2 -1
- package/Models/DatabaseModels/ServiceLevelObjectiveFeed.ts +2 -0
- package/Models/DatabaseModels/ServiceLevelObjectiveLabelRule.ts +522 -0
- package/Models/DatabaseModels/ServiceLevelObjectiveMonitorRule.ts +38 -4
- package/Models/DatabaseModels/ServiceLevelObjectiveOwnerRule.ts +603 -0
- package/Scripts/generate-service-worker.js +65 -4
- package/Server/API/BaseAPI.ts +26 -5
- package/Server/API/GlobalConfigAPI.ts +228 -462
- package/Server/API/ProjectOIDC.ts +25 -16
- package/Server/API/ProjectSSO.ts +24 -16
- package/Server/API/StatusPageAPI.ts +100 -42
- package/Server/API/TeamMemberAPI.ts +10 -1
- package/Server/Enterprise/EnterpriseEdition.ts +649 -0
- package/Server/Enterprise/EnterpriseFeature.ts +48 -0
- package/Server/Enterprise/EnterpriseLicenseSnapshot.ts +192 -0
- package/Server/Enterprise/EnterpriseServerModule.ts +233 -0
- package/Server/EnvironmentConfig.ts +147 -2
- package/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1794100000000-AddSloLabelAndOwnerRules.ts +248 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1794200000000-AddSloMonitorRuleMonitorType.ts +19 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
- package/Server/Middleware/UserAuthorization.ts +38 -16
- package/Server/Services/AuditLogService.ts +84 -1079
- package/Server/Services/DatabaseService.ts +10 -0
- package/Server/Services/EnterpriseLicenseService.ts +38 -0
- package/Server/Services/GlobalConfigService.ts +80 -1
- package/Server/Services/Index.ts +4 -0
- package/Server/Services/MonitorProbeService.ts +116 -20
- package/Server/Services/MonitorService.ts +59 -6
- package/Server/Services/MonitorStatusTimelineService.ts +284 -0
- package/Server/Services/MonitorTemplateService.ts +26 -0
- package/Server/Services/ProjectService.ts +284 -0
- package/Server/Services/RumSessionPinService.ts +25 -6
- package/Server/Services/ServiceLevelObjectiveLabelRuleEngineService.ts +385 -0
- package/Server/Services/ServiceLevelObjectiveLabelRuleService.ts +51 -0
- package/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.ts +92 -16
- package/Server/Services/ServiceLevelObjectiveMonitorRuleService.ts +36 -1
- package/Server/Services/ServiceLevelObjectiveOwnerRuleEngineService.ts +521 -0
- package/Server/Services/ServiceLevelObjectiveOwnerRuleService.ts +51 -0
- package/Server/Services/ServiceLevelObjectiveService.ts +28 -0
- package/Server/Services/StatusPagePrivateUserService.ts +7 -3
- package/Server/Services/StatusPageService.ts +78 -1
- package/Server/Services/TeamMemberService.ts +11 -0
- package/Server/Services/TeamService.ts +10 -0
- package/Server/Services/UserService.ts +10 -17
- package/Server/Types/Database/Permissions/CreatePermission.ts +15 -0
- package/Server/Types/Database/Permissions/EditionPermission.ts +208 -18
- package/Server/Types/Database/Permissions/TablePermission.ts +10 -3
- package/Server/Types/Database/Permissions/UpdatePermission.ts +29 -0
- package/Server/Types/Markdown.ts +41 -0
- package/Server/Types/Workflow/Components/Telegram/SendMessageToChat.ts +27 -1
- package/Server/Utils/AI/Toolbox/SloTools.ts +1 -0
- package/Server/Utils/CommunityEditionSsoReport.ts +361 -0
- package/Server/Utils/EditionEnforcement.ts +233 -0
- package/Server/Utils/FrontendEnvironment.ts +41 -2
- package/Server/Utils/InstanceHealth/RedisHealth.ts +12 -277
- package/Server/Utils/Monitor/AffectedResourceList.ts +148 -0
- package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +1 -1
- package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +10 -1
- package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +1 -1
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +720 -465
- package/Server/Utils/Monitor/MonitoringIntervalValidator.ts +116 -0
- package/Server/Utils/Monitor/RootCauseList.ts +139 -0
- package/Server/Utils/Rules/RuleRun/RuleRunRegistry.ts +28 -0
- package/Server/Utils/Slo/SloRulePatternValidator.ts +42 -0
- package/Server/Utils/Workspace/Slack/Slack.ts +423 -10
- package/Tests/App/Accounts/LoginPasskey.test.tsx +18 -0
- package/Tests/App/Accounts/LoginSsoEdition.test.tsx +616 -0
- package/Tests/App/AdminDashboard/AdminAuthenticationSsoEdition.test.tsx +217 -0
- package/Tests/App/AdminDashboard/AdminEnterprisePluginPage.test.tsx +357 -0
- package/Tests/App/AdminDashboard/EnterpriseLicensesShell.test.tsx +214 -0
- package/Tests/App/AdminDashboard/GlobalSSOEnterpriseShells.test.tsx +271 -0
- package/Tests/App/AdminDashboard/HealthShells.test.tsx +659 -0
- package/Tests/App/Dashboard/AuditLogsAndComplianceShells.test.tsx +572 -0
- package/Tests/App/Dashboard/EnterpriseFeatureUpgrade.test.tsx +547 -0
- package/Tests/App/Dashboard/EnterprisePluginPage.test.tsx +667 -0
- package/Tests/App/Dashboard/FeedFilterSortIntegration.test.tsx +1632 -0
- package/Tests/App/Dashboard/FeedOptionsLocales.test.ts +250 -0
- package/Tests/App/Dashboard/FeedOrdering.test.ts +279 -9
- package/Tests/App/Dashboard/IdentityEnterpriseShells.test.tsx +319 -0
- package/Tests/App/Dashboard/InvestigationFeedRefresh.test.tsx +60 -1
- package/Tests/App/Dashboard/InvestigationPanel.test.tsx +594 -3
- package/Tests/App/Dashboard/OnboardingSsoEmptyState.test.tsx +185 -0
- package/Tests/App/Dashboard/ProductOrientation.test.tsx +646 -0
- package/Tests/App/Dashboard/ResourceFeed.test.tsx +612 -2
- package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +30 -0
- package/Tests/App/Dashboard/ResourceFeedPagesFilterSort.test.tsx +1202 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceFeedRefresh.test.tsx +52 -1
- package/Tests/App/Dashboard/SecurityEventConnectionDiagnostics.test.tsx +45 -9
- package/Tests/App/Dashboard/SecurityEventDetailPanel.test.tsx +399 -0
- package/Tests/App/Dashboard/SecurityEventListRow.test.tsx +214 -0
- package/Tests/App/Dashboard/SecurityEventsEmptyState.test.tsx +1 -83
- package/Tests/App/Dashboard/SecurityEventsNavTabs.test.tsx +248 -0
- package/Tests/App/Dashboard/SecurityEventsViewer.test.tsx +1203 -0
- package/Tests/App/Dashboard/SloFeed.test.tsx +106 -1
- package/Tests/App/Dashboard/SloMonitorRuleCriteria.test.tsx +566 -0
- package/Tests/App/Dashboard/SloNavigationWiring.test.tsx +6 -4
- package/Tests/App/Dashboard/SloNoticeBanner.test.tsx +186 -0
- package/Tests/App/Dashboard/SloOverviewKpiStrip.test.tsx +388 -44
- package/Tests/App/Dashboard/SloOverviewLayout.test.tsx +613 -0
- package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +11 -91
- package/Tests/App/StatusPage/StatusPageSsoEmptyState.test.tsx +319 -0
- package/Tests/Helpers/RefreshAwareApiScan.ts +757 -0
- package/Tests/Helpers/TenantScopedRequestScan.ts +515 -0
- package/Tests/Models/DatabaseModels/ResourceFeedModels.test.ts +0 -8
- package/Tests/Models/DatabaseModels/SloLabelAndOwnerRuleModels.test.ts +404 -0
- package/Tests/Models/DatabaseModels/SloOverhaulModels.test.ts +17 -1
- package/Tests/Models/DatabaseModels/StaticRuleCriteriaInheritance.test.ts +4 -2
- package/Tests/Scripts/GenerateServiceWorker.test.ts +931 -0
- package/Tests/Server/API/BaseAPICreateItemDoesNotMutateModel.test.ts +130 -0
- package/Tests/Server/API/GlobalConfigLicense.test.ts +742 -497
- package/Tests/Server/API/OnCallReadinessAPI.test.ts +35 -909
- package/Tests/Server/API/SsoProviderListingsEdition.test.ts +432 -0
- package/Tests/Server/API/TeamMemberLeaveScimLockEdition.test.ts +252 -0
- package/Tests/Server/Enterprise/EnterpriseEdition.test.ts +824 -0
- package/Tests/Server/Enterprise/EnterpriseFeatureActive.test.ts +643 -0
- package/Tests/Server/Enterprise/EnterpriseLicenseSnapshot.test.ts +294 -0
- package/Tests/Server/Enterprise/EnterpriseModelFeatureMap.test.ts +93 -0
- package/Tests/Server/Enterprise/EnterpriseOnlyModulesLiveInEe.test.ts +582 -0
- package/Tests/Server/Enterprise/EnterpriseServerModule.test.ts +247 -0
- package/Tests/Server/Enterprise/FakeEnterpriseModule.ts +502 -0
- package/Tests/Server/Enterprise/TestBillingFlag.ts +70 -0
- package/Tests/Server/EnvironmentConfigEnterpriseEdition.test.ts +314 -0
- package/Tests/Server/Infrastructure/ContainerBootConfiguration.test.ts +289 -0
- package/Tests/Server/Infrastructure/E2EClickHouseFixtureAccess.test.ts +5 -1
- package/Tests/Server/Infrastructure/Postgres/AddConfigurableRuleCriteriaMigration.test.ts +3 -0
- package/Tests/Server/Infrastructure/Postgres/AddSloLabelAndOwnerRulesMigration.test.ts +407 -0
- package/Tests/Server/Infrastructure/Postgres/AddSloMonitorRuleMonitorTypeMigration.test.ts +171 -0
- package/Tests/Server/Infrastructure/Postgres/SloProductOverhaulMigration.test.ts +88 -4
- package/Tests/Server/Middleware/UserAuthorization.test.ts +37 -2
- package/Tests/Server/Middleware/UserAuthorizationEditionEnforcement.test.ts +516 -0
- package/Tests/Server/Services/AuditLogService.test.ts +460 -990
- package/Tests/Server/Services/CreateAndReadResponsesKeepIds.test.ts +263 -0
- package/Tests/Server/Services/DatabaseServiceRuleCriteriaValidation.test.ts +104 -0
- package/Tests/Server/Services/EnterpriseLicenseServiceKeyGeneration.test.ts +151 -0
- package/Tests/Server/Services/GlobalConfigServiceLicenseColumns.test.ts +357 -0
- package/Tests/Server/Services/MonitorDestinationInfoIPv6.test.ts +101 -0
- package/Tests/Server/Services/MonitorProbeServiceIntervalScheduling.test.ts +333 -0
- package/Tests/Server/Services/MonitorStatusTimelineDailyAggregates.test.ts +303 -0
- package/Tests/Server/Services/ProjectServiceAuditLogLicense.test.ts +701 -0
- package/Tests/Server/Services/ProjectServiceAuditLogSettingsCache.test.ts +31 -35
- package/Tests/Server/Services/RuleRun/LabelRuleEnginesGroupBRun.test.ts +48 -1
- package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupBRun.test.ts +30 -0
- package/Tests/Server/Services/ScimPushGroupsTeamLocksEdition.test.ts +431 -0
- package/Tests/Server/Services/ServiceLevelObjectiveLabelAndOwnerRuleEngines.test.ts +1170 -0
- package/Tests/Server/Services/ServiceLevelObjectiveLabelAndOwnerRuleServices.test.ts +172 -0
- package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.test.ts +323 -0
- package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleService.test.ts +115 -0
- package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleTriggers.test.ts +21 -2
- package/Tests/Server/Services/ServiceLevelObjectiveMonitorTypePostgres.test.ts +480 -0
- package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +162 -0
- package/Tests/Server/Services/SsoRequirementReadMasking.test.ts +419 -0
- package/Tests/Server/Services/SsoRequirementWriteGuard.test.ts +769 -0
- package/Tests/Server/Services/StaticRuleCriteriaRuntimeCoverage.test.ts +45 -6
- package/Tests/Server/Services/StatusPagePrivateUserInvitationPolicy.test.ts +94 -0
- package/Tests/Server/Services/UserAuthenticationService.test.ts +35 -0
- package/Tests/Server/Services/UserServiceSeatLimit.test.ts +94 -56
- package/Tests/Server/Types/Database/FeedEventTypeFilterQuery.test.ts +745 -0
- package/Tests/Server/Types/Database/Permissions/EditionPermission.test.ts +1823 -0
- package/Tests/Server/Types/Markdown.test.ts +183 -1
- package/Tests/Server/Types/Workflow/Components/ApiComponentSsrf.test.ts +49 -0
- package/Tests/Server/Types/Workflow/Components/TelegramSendMessageToChat.test.ts +331 -0
- package/Tests/Server/Utils/AI/SloTools.test.ts +10 -0
- package/Tests/Server/Utils/CommunityEditionSsoReport.test.ts +565 -0
- package/Tests/Server/Utils/EditionEnforcement.test.ts +303 -0
- package/Tests/Server/Utils/FrontendEnvironment.test.ts +367 -0
- package/Tests/Server/Utils/InstanceHealth/RedisHealth.test.ts +38 -418
- package/Tests/Server/Utils/Monitor/AffectedResourceList.test.ts +518 -0
- package/Tests/Server/Utils/Monitor/Criteria/EvaluateOverTime.test.ts +24 -4
- package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteriaAnomalyUnits.test.ts +1 -1
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +1339 -96
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorBreachingSamples.test.ts +1101 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorMetricUnits.test.ts +106 -80
- package/Tests/Server/Utils/Monitor/MonitoringIntervalValidator.test.ts +188 -0
- package/Tests/Server/Utils/Monitor/RootCauseList.test.ts +252 -0
- package/Tests/Server/Utils/Rules/RuleRun/RuleRunPermission.test.ts +154 -0
- package/Tests/Server/Utils/SSRFProtection.test.ts +111 -0
- package/Tests/Server/Utils/Slo/SloRulePatternValidator.test.ts +67 -0
- package/Tests/Server/Utils/VM/VMRunnerSsrf.test.ts +213 -0
- package/Tests/Server/Utils/Workspace/Slack/SlackMarkdownSectionSplit.test.ts +1209 -0
- package/Tests/Types/API/HostnameFromAuthority.test.ts +20 -10
- package/Tests/Types/API/HostnameIPv6.test.ts +149 -0
- package/Tests/Types/API/Route.test.ts +56 -0
- package/Tests/Types/API/URLSchemeLikePath.test.ts +304 -0
- package/Tests/Types/Database/CanonicalModelInstance.test.ts +190 -0
- package/Tests/UI/Components/EditionLabelLapseCopy.ts +104 -0
- package/Tests/UI/Components/EditionLabelLicenseManagerWiring.test.tsx +254 -0
- package/Tests/UI/Components/EditionLabelLicenseRefresh.test.tsx +84 -178
- package/Tests/UI/Components/EditionLabelLicenseStatus.test.tsx +1586 -0
- package/Tests/UI/Components/EditionLabelLicenseWritesGuard.test.tsx +157 -0
- package/Tests/UI/Components/FeedOptions.test.ts +1404 -0
- package/Tests/UI/Components/FeedOptionsButton.test.tsx +2603 -0
- package/Tests/UI/Components/Graphs/DayUptimeGraph.test.tsx +49 -2
- package/Tests/UI/Components/Icon.test.tsx +26 -0
- package/Tests/UI/Components/MarkdownConverters.test.ts +684 -0
- package/Tests/UI/Components/ModelListEmptyState.test.tsx +289 -0
- package/Tests/UI/Components/RuleCriteria/RuleCriteriaModelTable.test.tsx +3 -3
- package/Tests/UI/Components/TelemetryViewer/TelemetryViewerEmptyContent.test.tsx +131 -0
- package/Tests/UI/Components/useFeedItemsViewKey.test.tsx +1017 -0
- package/Tests/UI/Components/useFeedOptions.test.tsx +1107 -0
- package/Tests/UI/EsbuildEnterpriseAlias.test.ts +1127 -0
- package/Tests/Utils/HostAddressUtil.test.ts +138 -0
- package/Tests/Utils/LabelRuleImportExport.test.ts +102 -0
- package/Tests/Utils/Monitor/MonitorDestinationUtil.test.ts +313 -0
- package/Tests/Utils/Monitor/MonitoringIntervalUtil.test.ts +304 -0
- package/Tests/Utils/Slo/SloDuration.test.ts +115 -24
- package/Tests/Utils/Slo/SloHealth.test.ts +93 -10
- package/Tests/Utils/Slo/SloMonitorRuleCriteria.test.ts +109 -0
- package/Tests/Utils/Slo/SloOverviewText.test.ts +64 -0
- package/Tests/Utils/StatusPage/UptimeDailyAggregateUtil.test.ts +248 -0
- package/Types/API/Hostname.ts +63 -16
- package/Types/API/Route.ts +19 -2
- package/Types/API/URL.ts +26 -2
- package/Types/Database/AccessControl/ColumnAccessControl.ts +19 -7
- package/Types/Database/AccessControl/ColumnBillingAccessControl.ts +19 -7
- package/Types/Database/AccessControl/OwnerOnlyColumn.ts +15 -6
- package/Types/Database/CanonicalModelInstance.ts +102 -0
- package/Types/Database/TableColumn.ts +20 -6
- package/Types/EnterpriseLicense/EnterpriseLicensePeriods.ts +29 -0
- package/Types/IP/IPv6.ts +6 -1
- package/Types/Monitor/MetricMonitor/MetricCriteriaContext.ts +6 -5
- package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +9 -0
- package/Types/Monitor/MonitorStep.ts +6 -1
- package/Types/Monitor/ProxmoxAlertTemplates.ts +1 -1
- package/Types/Permission.ts +90 -0
- package/Types/Rules/RuleCriteriaFieldRegistry.ts +11 -0
- package/Types/Rules/RuleRun.ts +4 -0
- package/Types/StatusPage/UptimeDailyAggregate.ts +110 -0
- package/UI/Components/EditionLabel/EditionLabel.tsx +796 -1195
- package/UI/Components/EditionLabel/LicenseManager.ts +119 -0
- package/UI/Components/Feed/FeedOptions.ts +427 -0
- package/UI/Components/Feed/FeedOptionsButton.tsx +692 -0
- package/UI/Components/Feed/useFeedItems.ts +28 -9
- package/UI/Components/Feed/useFeedOptions.ts +225 -0
- package/UI/Components/Graphs/DayUptimeGraph.tsx +123 -15
- package/UI/Components/Icon/Icon.tsx +1 -1
- package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
- package/UI/Components/ModelList/ModelList.tsx +11 -1
- package/UI/Components/MonitorGraphs/Uptime.tsx +69 -0
- package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +28 -12
- package/UI/esbuild-enterprise.js +263 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +7 -2
- package/Utils/HostAddressUtil.ts +94 -0
- package/Utils/LabelRuleImportExport.ts +27 -9
- package/Utils/Monitor/MetricValueFormatter.ts +2 -2
- package/Utils/Monitor/MonitorDestinationUtil.ts +157 -0
- package/Utils/Monitor/MonitoringIntervalUtil.ts +436 -0
- package/Utils/Rules/MonitorTypeRuleCriteria.ts +31 -0
- package/Utils/Slo/SloDuration.ts +22 -6
- package/Utils/Slo/SloHealth.ts +8 -7
- package/Utils/Slo/SloMonitorRuleCriteria.ts +33 -1
- package/Utils/Slo/SloOverviewText.ts +33 -0
- package/Utils/Slo/SloProjection.ts +4 -3
- package/Utils/StatusPage/UptimeDailyAggregateUtil.ts +192 -0
- package/build/dist/Models/AnalyticsModels/AuditLog.js +23 -15
- package/build/dist/Models/AnalyticsModels/AuditLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalConfig.js +25 -0
- package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +4 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Monitor.js +2 -2
- package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorTemplate.js +2 -1
- package/build/dist/Models/DatabaseModels/MonitorTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveFeed.js +2 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveLabelRule.js +530 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveLabelRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveMonitorRule.js +39 -4
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveMonitorRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerRule.js +612 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerRule.js.map +1 -0
- package/build/dist/Server/API/BaseAPI.js +26 -5
- package/build/dist/Server/API/BaseAPI.js.map +1 -1
- package/build/dist/Server/API/GlobalConfigAPI.js +148 -344
- package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
- package/build/dist/Server/API/ProjectOIDC.js +24 -16
- package/build/dist/Server/API/ProjectOIDC.js.map +1 -1
- package/build/dist/Server/API/ProjectSSO.js +24 -16
- package/build/dist/Server/API/ProjectSSO.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +93 -43
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/TeamMemberAPI.js +8 -1
- package/build/dist/Server/API/TeamMemberAPI.js.map +1 -1
- package/build/dist/Server/Enterprise/EnterpriseEdition.js +466 -0
- package/build/dist/Server/Enterprise/EnterpriseEdition.js.map +1 -0
- package/build/dist/Server/Enterprise/EnterpriseFeature.js +39 -0
- package/build/dist/Server/Enterprise/EnterpriseFeature.js.map +1 -0
- package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js +70 -0
- package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js.map +1 -0
- package/build/dist/Server/Enterprise/EnterpriseServerModule.js +84 -0
- package/build/dist/Server/Enterprise/EnterpriseServerModule.js.map +1 -0
- package/build/dist/Server/EnvironmentConfig.js +84 -2
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794100000000-AddSloLabelAndOwnerRules.js +93 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794100000000-AddSloLabelAndOwnerRules.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794200000000-AddSloMonitorRuleMonitorType.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794200000000-AddSloMonitorRuleMonitorType.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/UserAuthorization.js +30 -11
- package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
- package/build/dist/Server/Services/AuditLogService.js +71 -740
- package/build/dist/Server/Services/AuditLogService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +7 -0
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/EnterpriseLicenseService.js +34 -0
- package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
- package/build/dist/Server/Services/GlobalConfigService.js +63 -0
- package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +4 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/MonitorProbeService.js +90 -17
- package/build/dist/Server/Services/MonitorProbeService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +48 -6
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorStatusTimelineService.js +242 -0
- package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorTemplateService.js +16 -0
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +214 -0
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/RumSessionPinService.js +24 -6
- package/build/dist/Server/Services/RumSessionPinService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveLabelRuleEngineService.js +295 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveLabelRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveLabelRuleService.js +56 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveLabelRuleService.js.map +1 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.js +59 -14
- package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleService.js +22 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveOwnerRuleEngineService.js +400 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveOwnerRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveOwnerRuleService.js +56 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveOwnerRuleService.js.map +1 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveService.js +21 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveService.js.map +1 -1
- package/build/dist/Server/Services/StatusPagePrivateUserService.js +7 -3
- package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +71 -0
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +10 -0
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TeamService.js +9 -0
- package/build/dist/Server/Services/TeamService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +10 -16
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/CreatePermission.js +10 -0
- package/build/dist/Server/Types/Database/Permissions/CreatePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/EditionPermission.js +154 -14
- package/build/dist/Server/Types/Database/Permissions/EditionPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/TablePermission.js +10 -3
- package/build/dist/Server/Types/Database/Permissions/TablePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js +17 -0
- package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js.map +1 -1
- package/build/dist/Server/Types/Markdown.js +31 -0
- package/build/dist/Server/Types/Markdown.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/Telegram/SendMessageToChat.js +20 -1
- package/build/dist/Server/Types/Workflow/Components/Telegram/SendMessageToChat.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/SloTools.js +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/SloTools.js.map +1 -1
- package/build/dist/Server/Utils/CommunityEditionSsoReport.js +223 -0
- package/build/dist/Server/Utils/CommunityEditionSsoReport.js.map +1 -0
- package/build/dist/Server/Utils/EditionEnforcement.js +187 -0
- package/build/dist/Server/Utils/EditionEnforcement.js.map +1 -0
- package/build/dist/Server/Utils/FrontendEnvironment.js +31 -2
- package/build/dist/Server/Utils/FrontendEnvironment.js.map +1 -1
- package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js +6 -193
- package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/AffectedResourceList.js +67 -0
- package/build/dist/Server/Utils/Monitor/AffectedResourceList.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +8 -1
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +585 -367
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitoringIntervalValidator.js +88 -0
- package/build/dist/Server/Utils/Monitor/MonitoringIntervalValidator.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/RootCauseList.js +101 -0
- package/build/dist/Server/Utils/Monitor/RootCauseList.js.map +1 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js +28 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Slo/SloRulePatternValidator.js +28 -0
- package/build/dist/Server/Utils/Slo/SloRulePatternValidator.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js +331 -11
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
- package/build/dist/Types/API/Hostname.js +59 -11
- package/build/dist/Types/API/Hostname.js.map +1 -1
- package/build/dist/Types/API/Route.js +18 -2
- package/build/dist/Types/API/Route.js.map +1 -1
- package/build/dist/Types/API/URL.js +23 -2
- package/build/dist/Types/API/URL.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js +19 -7
- package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js +19 -7
- package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js +13 -6
- package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js.map +1 -1
- package/build/dist/Types/Database/CanonicalModelInstance.js +88 -0
- package/build/dist/Types/Database/CanonicalModelInstance.js.map +1 -0
- package/build/dist/Types/Database/TableColumn.js +19 -6
- package/build/dist/Types/Database/TableColumn.js.map +1 -1
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js +28 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js.map +1 -0
- package/build/dist/Types/IP/IPv6.js +6 -1
- package/build/dist/Types/IP/IPv6.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +5 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +1 -1
- package/build/dist/Types/Permission.js +84 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js +11 -0
- package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js.map +1 -1
- package/build/dist/Types/Rules/RuleRun.js +4 -0
- package/build/dist/Types/Rules/RuleRun.js.map +1 -1
- package/build/dist/Types/StatusPage/UptimeDailyAggregate.js +32 -0
- package/build/dist/Types/StatusPage/UptimeDailyAggregate.js.map +1 -0
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +414 -585
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/LicenseManager.js +2 -0
- package/build/dist/UI/Components/EditionLabel/LicenseManager.js.map +1 -0
- package/build/dist/UI/Components/Feed/FeedOptions.js +235 -0
- package/build/dist/UI/Components/Feed/FeedOptions.js.map +1 -0
- package/build/dist/UI/Components/Feed/FeedOptionsButton.js +346 -0
- package/build/dist/UI/Components/Feed/FeedOptionsButton.js.map +1 -0
- package/build/dist/UI/Components/Feed/useFeedItems.js +17 -7
- package/build/dist/UI/Components/Feed/useFeedItems.js.map +1 -1
- package/build/dist/UI/Components/Feed/useFeedOptions.js +130 -0
- package/build/dist/UI/Components/Feed/useFeedOptions.js.map +1 -0
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +90 -17
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +1 -1
- package/build/dist/UI/Components/Icon/Icon.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/ModelList/ModelList.js +4 -1
- package/build/dist/UI/Components/ModelList/ModelList.js.map +1 -1
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js +42 -1
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +2 -2
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js +6 -2
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js.map +1 -1
- package/build/dist/Utils/HostAddressUtil.js +80 -0
- package/build/dist/Utils/HostAddressUtil.js.map +1 -0
- package/build/dist/Utils/LabelRuleImportExport.js +22 -6
- package/build/dist/Utils/LabelRuleImportExport.js.map +1 -1
- package/build/dist/Utils/Monitor/MetricValueFormatter.js +2 -2
- package/build/dist/Utils/Monitor/MonitorDestinationUtil.js +127 -0
- package/build/dist/Utils/Monitor/MonitorDestinationUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitoringIntervalUtil.js +374 -0
- package/build/dist/Utils/Monitor/MonitoringIntervalUtil.js.map +1 -0
- package/build/dist/Utils/Rules/MonitorTypeRuleCriteria.js +18 -0
- package/build/dist/Utils/Rules/MonitorTypeRuleCriteria.js.map +1 -0
- package/build/dist/Utils/Slo/SloDuration.js +13 -5
- package/build/dist/Utils/Slo/SloDuration.js.map +1 -1
- package/build/dist/Utils/Slo/SloHealth.js +8 -7
- package/build/dist/Utils/Slo/SloHealth.js.map +1 -1
- package/build/dist/Utils/Slo/SloMonitorRuleCriteria.js +16 -1
- package/build/dist/Utils/Slo/SloMonitorRuleCriteria.js.map +1 -1
- package/build/dist/Utils/Slo/SloOverviewText.js +16 -0
- package/build/dist/Utils/Slo/SloOverviewText.js.map +1 -1
- package/build/dist/Utils/Slo/SloProjection.js.map +1 -1
- package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js +148 -0
- package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js.map +1 -0
- package/jest.config.json +3 -1
- package/package.json +1 -1
- package/test-setup.sh +103 -34
- package/tsconfig.json +13 -0
- package/Server/API/EnterpriseLicenseAPI.ts +0 -925
- package/Server/API/TeamComplianceAPI.ts +0 -158
- package/Server/Middleware/SCIMAuthorization.ts +0 -141
- package/Server/Services/TeamComplianceService.ts +0 -733
- package/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.ts +0 -186
- package/Server/Utils/InstanceHealth/PostgresHealth.ts +0 -286
- package/Tests/App/AdminDashboard/EnterpriseLicenseInstanceActivity.test.tsx +0 -451
- package/Tests/App/Dashboard/AuditLogsTable.test.tsx +0 -598
- package/Tests/App/Dashboard/SecurityEventsExplorer.test.tsx +0 -761
- package/Tests/App/Dashboard/SecurityEventsSideMenu.test.tsx +0 -247
- package/Tests/App/Dashboard/SecurityEventsTableColumns.test.tsx +0 -382
- package/Tests/App/Dashboard/SecurityEventsVolumeChart.test.tsx +0 -321
- package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +0 -1851
- package/Tests/Server/Middleware/SCIMAuthorization.test.ts +0 -525
- package/Tests/Server/Services/TeamComplianceServiceBehaviour.test.ts +0 -1845
- package/Tests/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.test.ts +0 -495
- package/Tests/Server/Utils/InstanceHealth/PostgresHealth.test.ts +0 -337
- package/Tests/Utils/EnterpriseLicenseSeats.test.ts +0 -576
- package/Tests/Utils/EnterpriseLicenseSync.test.ts +0 -568
- package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +0 -287
- package/Utils/EnterpriseLicense/EnterpriseLicenseSync.ts +0 -244
- package/build/dist/Server/API/EnterpriseLicenseAPI.js +0 -646
- package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +0 -1
- package/build/dist/Server/API/TeamComplianceAPI.js +0 -111
- package/build/dist/Server/API/TeamComplianceAPI.js.map +0 -1
- package/build/dist/Server/Middleware/SCIMAuthorization.js +0 -124
- package/build/dist/Server/Middleware/SCIMAuthorization.js.map +0 -1
- package/build/dist/Server/Services/TeamComplianceService.js +0 -537
- package/build/dist/Server/Services/TeamComplianceService.js.map +0 -1
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js +0 -145
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js.map +0 -1
- package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js +0 -194
- package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js.map +0 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +0 -168
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +0 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSync.js +0 -174
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSync.js.map +0 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import BaseModel from "../../../Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
|
|
2
2
|
import { ColumnAccessControl } from "../../BaseDatabase/AccessControl";
|
|
3
|
+
import getCanonicalModelInstance from "../CanonicalModelInstance";
|
|
3
4
|
import Dictionary from "../../Dictionary";
|
|
4
5
|
import { ReflectionMetadataType } from "../../Reflection";
|
|
5
6
|
import "reflect-metadata";
|
|
@@ -31,10 +32,12 @@ type GetColumnAccessControlForAllColumnsFunction = <T extends BaseModel>(
|
|
|
31
32
|
) => Dictionary<ColumnAccessControl>;
|
|
32
33
|
|
|
33
34
|
/*
|
|
34
|
-
* Per-class cache
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
35
|
+
* Per-class cache, keyed on the constructor and built from a canonical
|
|
36
|
+
* instance of that class rather than from whichever instance asked first, so
|
|
37
|
+
* a caller that has deleted a column off its own instance cannot define what
|
|
38
|
+
* the class reports for the rest of the process. See
|
|
39
|
+
* CanonicalModelInstance.ts for the bug this prevents. Callers must treat the
|
|
40
|
+
* returned dictionary as read-only.
|
|
38
41
|
*/
|
|
39
42
|
const accessControlCache: WeakMap<
|
|
40
43
|
{ new (): BaseModel },
|
|
@@ -50,12 +53,14 @@ export const getColumnAccessControlForAllColumns: GetColumnAccessControlForAllCo
|
|
|
50
53
|
accessControlCache.get(modelClass);
|
|
51
54
|
|
|
52
55
|
if (!cached) {
|
|
56
|
+
const canonical: T | null = getCanonicalModelInstance(target);
|
|
57
|
+
const metadataSource: T = canonical || target;
|
|
53
58
|
const dictonary: Dictionary<ColumnAccessControl> = {};
|
|
54
|
-
const keys: Array<string> = Object.keys(
|
|
59
|
+
const keys: Array<string> = Object.keys(metadataSource);
|
|
55
60
|
|
|
56
61
|
for (const key of keys) {
|
|
57
62
|
const accessControl: ColumnAccessControl | undefined =
|
|
58
|
-
Reflect.getMetadata(accessControlSymbol,
|
|
63
|
+
Reflect.getMetadata(accessControlSymbol, metadataSource, key) as
|
|
59
64
|
| ColumnAccessControl
|
|
60
65
|
| undefined;
|
|
61
66
|
if (accessControl) {
|
|
@@ -64,7 +69,14 @@ export const getColumnAccessControlForAllColumns: GetColumnAccessControlForAllCo
|
|
|
64
69
|
}
|
|
65
70
|
|
|
66
71
|
cached = dictonary;
|
|
67
|
-
|
|
72
|
+
/*
|
|
73
|
+
* No canonical instance (see CanonicalModelInstance): answer from the
|
|
74
|
+
* instance we were handed, but do NOT cache it for the class - that
|
|
75
|
+
* instance may be a mutilated one, and a cached answer outlives it.
|
|
76
|
+
*/
|
|
77
|
+
if (canonical) {
|
|
78
|
+
accessControlCache.set(modelClass, cached);
|
|
79
|
+
}
|
|
68
80
|
}
|
|
69
81
|
|
|
70
82
|
return cached;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import BaseModel from "../../../Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
|
|
2
2
|
import ColumnBillingAccessControl from "../../BaseDatabase/ColumnBillingAccessControl";
|
|
3
|
+
import getCanonicalModelInstance from "../CanonicalModelInstance";
|
|
3
4
|
import Dictionary from "../../Dictionary";
|
|
4
5
|
import { ReflectionMetadataType } from "../../Reflection";
|
|
5
6
|
import "reflect-metadata";
|
|
@@ -31,10 +32,12 @@ type GetColumnBillingAccessControlForAllColumnsFunction = <T extends BaseModel>(
|
|
|
31
32
|
) => Dictionary<ColumnBillingAccessControl>;
|
|
32
33
|
|
|
33
34
|
/*
|
|
34
|
-
* Per-class cache
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
35
|
+
* Per-class cache, keyed on the constructor and built from a canonical
|
|
36
|
+
* instance of that class rather than from whichever instance asked first, so
|
|
37
|
+
* a caller that has deleted a column off its own instance cannot define what
|
|
38
|
+
* the class reports for the rest of the process. See
|
|
39
|
+
* CanonicalModelInstance.ts for the bug this prevents. Callers must treat the
|
|
40
|
+
* returned dictionary as read-only.
|
|
38
41
|
*/
|
|
39
42
|
const billingAccessControlCache: WeakMap<
|
|
40
43
|
{ new (): BaseModel },
|
|
@@ -50,12 +53,14 @@ export const getColumnBillingAccessControlForAllColumns: GetColumnBillingAccessC
|
|
|
50
53
|
billingAccessControlCache.get(modelClass);
|
|
51
54
|
|
|
52
55
|
if (!cached) {
|
|
56
|
+
const canonical: T | null = getCanonicalModelInstance(target);
|
|
57
|
+
const metadataSource: T = canonical || target;
|
|
53
58
|
const dictonary: Dictionary<ColumnBillingAccessControl> = {};
|
|
54
|
-
const keys: Array<string> = Object.keys(
|
|
59
|
+
const keys: Array<string> = Object.keys(metadataSource);
|
|
55
60
|
|
|
56
61
|
for (const key of keys) {
|
|
57
62
|
const accessControl: ColumnBillingAccessControl | undefined =
|
|
58
|
-
Reflect.getMetadata(accessControlSymbol,
|
|
63
|
+
Reflect.getMetadata(accessControlSymbol, metadataSource, key) as
|
|
59
64
|
| ColumnBillingAccessControl
|
|
60
65
|
| undefined;
|
|
61
66
|
if (accessControl) {
|
|
@@ -64,7 +69,14 @@ export const getColumnBillingAccessControlForAllColumns: GetColumnBillingAccessC
|
|
|
64
69
|
}
|
|
65
70
|
|
|
66
71
|
cached = dictonary;
|
|
67
|
-
|
|
72
|
+
/*
|
|
73
|
+
* No canonical instance (see CanonicalModelInstance): answer from the
|
|
74
|
+
* instance we were handed, but do NOT cache it for the class - that
|
|
75
|
+
* instance may be a mutilated one, and a cached answer outlives it.
|
|
76
|
+
*/
|
|
77
|
+
if (canonical) {
|
|
78
|
+
billingAccessControlCache.set(modelClass, cached);
|
|
79
|
+
}
|
|
68
80
|
}
|
|
69
81
|
|
|
70
82
|
return cached;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import BaseModel from "../../../Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
|
|
2
|
+
import getCanonicalModelInstance from "../CanonicalModelInstance";
|
|
2
3
|
import { ReflectionMetadataType } from "../../Reflection";
|
|
3
4
|
import "reflect-metadata";
|
|
4
5
|
|
|
@@ -66,10 +67,14 @@ type GetOwnerOnlyColumnsFunction = <T extends BaseModel>(
|
|
|
66
67
|
) => Array<string>;
|
|
67
68
|
|
|
68
69
|
/**
|
|
69
|
-
* Every owner-only column on this model.
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
70
|
+
* Every owner-only column on this model. Which columns a MODEL marks is a
|
|
71
|
+
* property of the class, so the enumeration reads a canonical instance of the
|
|
72
|
+
* class rather than the caller's own instance: a caller that had deleted a
|
|
73
|
+
* key off its instance would otherwise get an answer that silently omits a
|
|
74
|
+
* marked column, and this list is what OwnerOnlyColumnPermission enforces
|
|
75
|
+
* against. See CanonicalModelInstance.ts. (Enumerating at all relies on every
|
|
76
|
+
* declared column being initialised to `undefined` in the class body - the
|
|
77
|
+
* same assumption getTableColumns() makes.)
|
|
73
78
|
*/
|
|
74
79
|
export const getOwnerOnlyColumns: GetOwnerOnlyColumnsFunction = <
|
|
75
80
|
T extends BaseModel,
|
|
@@ -77,9 +82,13 @@ export const getOwnerOnlyColumns: GetOwnerOnlyColumnsFunction = <
|
|
|
77
82
|
target: T,
|
|
78
83
|
): Array<string> => {
|
|
79
84
|
const columns: Array<string> = [];
|
|
85
|
+
// Nothing is cached here, so falling back to the caller's instance is safe.
|
|
86
|
+
const metadataSource: T = getCanonicalModelInstance(target) || target;
|
|
80
87
|
|
|
81
|
-
for (const key of Object.keys(
|
|
82
|
-
if (
|
|
88
|
+
for (const key of Object.keys(metadataSource)) {
|
|
89
|
+
if (
|
|
90
|
+
Reflect.getMetadata(ownerOnlyColumnSymbol, metadataSource, key) === true
|
|
91
|
+
) {
|
|
83
92
|
columns.push(key);
|
|
84
93
|
}
|
|
85
94
|
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The one instance of a model class that column-metadata enumeration is
|
|
3
|
+
* allowed to look at.
|
|
4
|
+
*
|
|
5
|
+
* WHY THIS EXISTS.
|
|
6
|
+
*
|
|
7
|
+
* Every "which columns does this model have" lookup in this directory answers
|
|
8
|
+
* the question by enumerating an INSTANCE's own keys (Object.keys) and then
|
|
9
|
+
* caching the answer per CLASS. That is only sound while every instance of a
|
|
10
|
+
* class has the same own keys. The class bodies do guarantee that - each
|
|
11
|
+
* decorated column is initialised to `undefined` - right up until some caller
|
|
12
|
+
* deletes a key off a live instance.
|
|
13
|
+
*
|
|
14
|
+
* One caller did. BaseAPI.createItem used to `delete item._id` before handing
|
|
15
|
+
* the model to the service, and DatabaseService.create asks that very instance
|
|
16
|
+
* for its columns (generateDefaultValues). Whenever the mutilated instance was
|
|
17
|
+
* the first to ask, the class's cached column list was built WITHOUT `_id` -
|
|
18
|
+
* permanently, for the life of the process, for every later caller - and since
|
|
19
|
+
* DatabaseBaseModel.toJSONObject serialises a row by iterating exactly that
|
|
20
|
+
* list, every API response for that model silently lost its id. A single
|
|
21
|
+
* create was enough, including a create that was refused, because the columns
|
|
22
|
+
* are read before the permission check. Rows still carried their real `_id` in
|
|
23
|
+
* memory and in the SQL projection; it was dropped on the way out.
|
|
24
|
+
*
|
|
25
|
+
* So enumeration stopped reading the caller's instance. It reads a frozen,
|
|
26
|
+
* private instance of the caller's CLASS instead - constructed here, reachable
|
|
27
|
+
* by nobody, impossible to mutate - so what a class reports about itself can
|
|
28
|
+
* never depend on which instance happened to ask first, or on what anyone did
|
|
29
|
+
* to that instance. Reads already constructed a throwaway instance for exactly
|
|
30
|
+
* this purpose (SelectPermission, QueryPermission, ColumnPermission all do
|
|
31
|
+
* `new modelType()`), which is why a single read of a model was enough to make
|
|
32
|
+
* the same create harmless; this makes that the only behaviour.
|
|
33
|
+
*
|
|
34
|
+
* Every database model is no-arg constructible (Models/DatabaseModels/Index.ts
|
|
35
|
+
* relies on it already, in getModelTypeByName), and a fresh instance carries
|
|
36
|
+
* every declared column - both facts are asserted by
|
|
37
|
+
* Tests/Types/Database/CanonicalModelInstance.test.ts against all 400+ models.
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
type NoArgConstructor = new () => unknown;
|
|
41
|
+
|
|
42
|
+
const canonicalInstanceCache: WeakMap<NoArgConstructor, unknown> =
|
|
43
|
+
new WeakMap();
|
|
44
|
+
|
|
45
|
+
/*
|
|
46
|
+
* Classes whose canonical instance is being constructed right now. A model
|
|
47
|
+
* constructor that asked for its own columns would otherwise recurse forever;
|
|
48
|
+
* such a call gets the caller's instance instead, which is the old behaviour.
|
|
49
|
+
*/
|
|
50
|
+
const beingConstructed: WeakSet<NoArgConstructor> = new WeakSet();
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* A frozen, shared instance of `target`'s class, safe to enumerate for
|
|
54
|
+
* metadata - or NULL when no such instance can be made: a class that needs
|
|
55
|
+
* constructor arguments, a class still being defined (circular imports), a
|
|
56
|
+
* constructor that throws, or a plain object with no useful constructor.
|
|
57
|
+
*
|
|
58
|
+
* Null, rather than falling back to `target`, because the two are NOT
|
|
59
|
+
* interchangeable and treating them as if they were is how this bug worked in
|
|
60
|
+
* the first place. A caller with no canonical instance may still answer from
|
|
61
|
+
* whatever instance it was handed - a metadata lookup must never be the reason
|
|
62
|
+
* a process fails to boot - but it must not then CACHE that answer for the
|
|
63
|
+
* class, because the instance it read may be a mutilated one and the cached
|
|
64
|
+
* answer would outlive it. Returning null forces each caller to make that
|
|
65
|
+
* decision in the open; the four caches in this directory all take the same
|
|
66
|
+
* route, and say so where they do it.
|
|
67
|
+
*/
|
|
68
|
+
export default function getCanonicalModelInstance<T>(target: T): T | null {
|
|
69
|
+
const modelClass: NoArgConstructor | undefined = (
|
|
70
|
+
target as { constructor?: NoArgConstructor } | null | undefined
|
|
71
|
+
)?.constructor;
|
|
72
|
+
|
|
73
|
+
if (typeof modelClass !== "function") {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const cached: unknown = canonicalInstanceCache.get(modelClass);
|
|
78
|
+
|
|
79
|
+
if (cached) {
|
|
80
|
+
return cached as T;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (beingConstructed.has(modelClass)) {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
let canonical: T;
|
|
88
|
+
|
|
89
|
+
beingConstructed.add(modelClass);
|
|
90
|
+
|
|
91
|
+
try {
|
|
92
|
+
canonical = Object.freeze(new modelClass()) as T;
|
|
93
|
+
} catch {
|
|
94
|
+
return null;
|
|
95
|
+
} finally {
|
|
96
|
+
beingConstructed.delete(modelClass);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
canonicalInstanceCache.set(modelClass, canonical);
|
|
100
|
+
|
|
101
|
+
return canonical;
|
|
102
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import BaseModel from "../../Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
|
|
2
|
+
import getCanonicalModelInstance from "./CanonicalModelInstance";
|
|
2
3
|
import Dictionary from "../Dictionary";
|
|
3
4
|
import { JSONObject } from "../JSON";
|
|
4
5
|
import { ReflectionMetadataType } from "../Reflection";
|
|
@@ -99,9 +100,12 @@ type GetTableColumnsFunction = <T extends BaseModel>(
|
|
|
99
100
|
) => Dictionary<TableColumnMetadata>;
|
|
100
101
|
|
|
101
102
|
/*
|
|
102
|
-
* Per-class cache
|
|
103
|
-
*
|
|
104
|
-
*
|
|
103
|
+
* Per-class cache, keyed on the constructor and built from a canonical
|
|
104
|
+
* instance of that class - never from the instance that happened to ask
|
|
105
|
+
* first. A caller that had deleted a column off its own instance (BaseAPI's
|
|
106
|
+
* create path used to delete `_id`) would otherwise define the class's column
|
|
107
|
+
* list without that column for the whole process, and every response for that
|
|
108
|
+
* model would lose it. See CanonicalModelInstance.ts.
|
|
105
109
|
*/
|
|
106
110
|
const tableColumnsCache: WeakMap<
|
|
107
111
|
{ new (): BaseModel },
|
|
@@ -118,13 +122,15 @@ export const getTableColumns: GetTableColumnsFunction = <T extends BaseModel>(
|
|
|
118
122
|
tableColumnsCache.get(modelClass);
|
|
119
123
|
|
|
120
124
|
if (!cached) {
|
|
125
|
+
const canonical: T | null = getCanonicalModelInstance(target);
|
|
126
|
+
const metadataSource: T = canonical || target;
|
|
121
127
|
const dictonary: Dictionary<TableColumnMetadata> = {};
|
|
122
|
-
const keys: Array<string> = Object.keys(
|
|
128
|
+
const keys: Array<string> = Object.keys(metadataSource);
|
|
123
129
|
|
|
124
130
|
for (const key of keys) {
|
|
125
131
|
const metadata: TableColumnMetadata | undefined = Reflect.getMetadata(
|
|
126
132
|
tableColumn,
|
|
127
|
-
|
|
133
|
+
metadataSource,
|
|
128
134
|
key,
|
|
129
135
|
) as TableColumnMetadata | undefined;
|
|
130
136
|
if (metadata) {
|
|
@@ -133,7 +139,15 @@ export const getTableColumns: GetTableColumnsFunction = <T extends BaseModel>(
|
|
|
133
139
|
}
|
|
134
140
|
|
|
135
141
|
cached = dictonary;
|
|
136
|
-
|
|
142
|
+
|
|
143
|
+
/*
|
|
144
|
+
* No canonical instance (see CanonicalModelInstance): answer from the
|
|
145
|
+
* instance we were handed, but do NOT cache it for the class - that
|
|
146
|
+
* instance may be a mutilated one, and a cached answer outlives it.
|
|
147
|
+
*/
|
|
148
|
+
if (canonical) {
|
|
149
|
+
tableColumnsCache.set(modelClass, cached);
|
|
150
|
+
}
|
|
137
151
|
}
|
|
138
152
|
|
|
139
153
|
/*
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The two periods a self-hosted Enterprise Edition install runs without a
|
|
3
|
+
* current license. They are different periods with different lengths, and
|
|
4
|
+
* the product must never call one by the other's name:
|
|
5
|
+
*
|
|
6
|
+
* trial an Enterprise install that has never had a license, counted from
|
|
7
|
+
* GlobalConfig.enterpriseEditionFirstSeenAt
|
|
8
|
+
* grace a license that expired (a verified license's signed expiry, or an
|
|
9
|
+
* unverified legacy license's stored expiry column), counted from
|
|
10
|
+
* its expiry
|
|
11
|
+
*
|
|
12
|
+
* Until either ends nothing changes; after it, enterprise configuration
|
|
13
|
+
* becomes read-only and SSO, SCIM and audit logging stop
|
|
14
|
+
* (EnterpriseEdition.isFeatureActive) until a license is activated.
|
|
15
|
+
*
|
|
16
|
+
* They live here, with no server dependency, so the copy that states them in
|
|
17
|
+
* the browser (the edition dialog, the enterprise banners) derives the
|
|
18
|
+
* numbers from the same place the license classifier does. Server code reads
|
|
19
|
+
* them through Common/Server/Enterprise/EnterpriseLicenseSnapshot.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
// How long an expired license keeps working, counted from its expiry.
|
|
23
|
+
export const ENTERPRISE_LICENSE_GRACE_PERIOD_IN_DAYS: number = 30;
|
|
24
|
+
|
|
25
|
+
/*
|
|
26
|
+
* How long an Enterprise install with no license at all is on trial, counted
|
|
27
|
+
* from GlobalConfig.enterpriseEditionFirstSeenAt.
|
|
28
|
+
*/
|
|
29
|
+
export const ENTERPRISE_LICENSE_TRIAL_PERIOD_IN_DAYS: number = 14;
|
package/Types/IP/IPv6.ts
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import BadDataException from "../Exception/BadDataException";
|
|
2
2
|
import IP from "./IP";
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
/*
|
|
5
|
+
* The class used to be declared `class IPv4 extends IP` here — a copy-paste
|
|
6
|
+
* that the default export hid from every import site, while leaving
|
|
7
|
+
* IPv6.name === "IPv4" in error messages, serialized output and API docs.
|
|
8
|
+
*/
|
|
9
|
+
export default class IPv6 extends IP {
|
|
5
10
|
public constructor(ip: string) {
|
|
6
11
|
super(ip);
|
|
7
12
|
|
|
@@ -25,7 +25,8 @@ export interface MetricBreachingSample {
|
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
27
|
* Descriptor for one variable referenced by a formula, used to label
|
|
28
|
-
*
|
|
28
|
+
* each breaching sample's component values and render the Metric
|
|
29
|
+
* Details section. Name is the
|
|
29
30
|
* metric display name (usually the metric name, sometimes the formula
|
|
30
31
|
* expression for nested formulas) and unit is the variable's native
|
|
31
32
|
* unit as configured.
|
|
@@ -103,8 +104,8 @@ export default interface MetricCriteriaContext {
|
|
|
103
104
|
breachingSample?: MetricBreachingSample | undefined;
|
|
104
105
|
/**
|
|
105
106
|
* All samples in the evaluation window that breached the threshold,
|
|
106
|
-
* in chronological order. Used to render
|
|
107
|
-
* values on the incident root-cause page.
|
|
107
|
+
* in chronological order. Used to render the Breaching Samples list
|
|
108
|
+
* of timestamps and values on the incident root-cause page.
|
|
108
109
|
*/
|
|
109
110
|
breachingSamples?: Array<MetricBreachingSample> | undefined;
|
|
110
111
|
/**
|
|
@@ -116,8 +117,8 @@ export default interface MetricCriteriaContext {
|
|
|
116
117
|
/**
|
|
117
118
|
* For formulas: metadata for each variable the formula references,
|
|
118
119
|
* in the order they appear in the expression. Consumers use this to
|
|
119
|
-
* label
|
|
120
|
-
* names in the Metric Details section.
|
|
120
|
+
* label each breaching sample's component values and to surface
|
|
121
|
+
* underlying units/metric names in the Metric Details section.
|
|
121
122
|
*/
|
|
122
123
|
components?: Array<MetricComponent> | undefined;
|
|
123
124
|
}
|
|
@@ -13,7 +13,16 @@ export interface KubernetesAffectedResource {
|
|
|
13
13
|
containerName?: string | undefined;
|
|
14
14
|
workloadType?: string | undefined;
|
|
15
15
|
workloadName?: string | undefined;
|
|
16
|
+
/** Highest sample seen for this resource in the monitoring window. */
|
|
16
17
|
metricValue: number;
|
|
18
|
+
/**
|
|
19
|
+
* Lowest sample seen for this resource in the monitoring window. A
|
|
20
|
+
* criteria that fires when the metric FALLS (node Ready = 0, etcd has
|
|
21
|
+
* leader = 0) breached on this value, not on `metricValue`: a node that
|
|
22
|
+
* was NotReady for one scrape and Ready for the rest has a highest of 1.
|
|
23
|
+
* Absent on breakdowns built before this field existed.
|
|
24
|
+
*/
|
|
25
|
+
lowestMetricValue?: number | undefined;
|
|
17
26
|
}
|
|
18
27
|
|
|
19
28
|
export interface KubernetesResourceBreakdown {
|
|
@@ -497,8 +497,13 @@ export default class MonitorStep extends DatabaseProperty {
|
|
|
497
497
|
return this;
|
|
498
498
|
}
|
|
499
499
|
|
|
500
|
+
/*
|
|
501
|
+
* `undefined` clears it. The form needs that: a destination that no longer
|
|
502
|
+
* parses must not leave the previously parsed one sitting in the step,
|
|
503
|
+
* where it would be saved as if the operator had meant it.
|
|
504
|
+
*/
|
|
500
505
|
public setMonitorDestination(
|
|
501
|
-
monitorDestination: URL | IP | Hostname,
|
|
506
|
+
monitorDestination: URL | IP | Hostname | undefined,
|
|
502
507
|
): MonitorStep {
|
|
503
508
|
this.data!.monitorDestination = monitorDestination;
|
|
504
509
|
return this;
|
|
@@ -897,7 +897,7 @@ const guestNotBackedUpTemplate: ProxmoxAlertTemplate = {
|
|
|
897
897
|
/*
|
|
898
898
|
* Cluster-level gauge from the backup-info collector — one
|
|
899
899
|
* series, no `id` label, so no groupBy: one incident per
|
|
900
|
-
* cluster. Per-guest naming belongs to the
|
|
900
|
+
* cluster. Per-guest naming belongs to the Affected Resources list
|
|
901
901
|
* (pve_not_backed_up_info grouped by `id`), not the alert.
|
|
902
902
|
*/
|
|
903
903
|
metricName: "pve_not_backed_up_total",
|
package/Types/Permission.ts
CHANGED
|
@@ -2018,6 +2018,18 @@ enum Permission {
|
|
|
2018
2018
|
EditServiceLevelObjectiveOwnerTeam = "EditServiceLevelObjectiveOwnerTeam",
|
|
2019
2019
|
ReadServiceLevelObjectiveOwnerTeam = "ReadServiceLevelObjectiveOwnerTeam",
|
|
2020
2020
|
|
|
2021
|
+
// Service Level Objective Owner Rule Permissions
|
|
2022
|
+
CreateServiceLevelObjectiveOwnerRule = "CreateServiceLevelObjectiveOwnerRule",
|
|
2023
|
+
DeleteServiceLevelObjectiveOwnerRule = "DeleteServiceLevelObjectiveOwnerRule",
|
|
2024
|
+
EditServiceLevelObjectiveOwnerRule = "EditServiceLevelObjectiveOwnerRule",
|
|
2025
|
+
ReadServiceLevelObjectiveOwnerRule = "ReadServiceLevelObjectiveOwnerRule",
|
|
2026
|
+
|
|
2027
|
+
// Service Level Objective Label Rule Permissions
|
|
2028
|
+
CreateServiceLevelObjectiveLabelRule = "CreateServiceLevelObjectiveLabelRule",
|
|
2029
|
+
DeleteServiceLevelObjectiveLabelRule = "DeleteServiceLevelObjectiveLabelRule",
|
|
2030
|
+
EditServiceLevelObjectiveLabelRule = "EditServiceLevelObjectiveLabelRule",
|
|
2031
|
+
ReadServiceLevelObjectiveLabelRule = "ReadServiceLevelObjectiveLabelRule",
|
|
2032
|
+
|
|
2021
2033
|
/*
|
|
2022
2034
|
* Wildcard permissions covering all models marked @OperationalResource().
|
|
2023
2035
|
* These short-circuit table-level checks for that resource class. Scope on
|
|
@@ -16140,6 +16152,84 @@ export class PermissionHelper {
|
|
|
16140
16152
|
group: PermissionGroup.SLO,
|
|
16141
16153
|
},
|
|
16142
16154
|
|
|
16155
|
+
// Service Level Objective Owner Rule Permissions
|
|
16156
|
+
{
|
|
16157
|
+
permission: Permission.CreateServiceLevelObjectiveOwnerRule,
|
|
16158
|
+
title: "Create SLO Owner Rule",
|
|
16159
|
+
description:
|
|
16160
|
+
"Permission to create SLO Owner Rules, which add owner users and teams to matching SLOs, in this project.",
|
|
16161
|
+
isAssignableToTenant: true,
|
|
16162
|
+
isAccessControlPermission: false,
|
|
16163
|
+
isRolePermission: false,
|
|
16164
|
+
group: PermissionGroup.SLO,
|
|
16165
|
+
},
|
|
16166
|
+
{
|
|
16167
|
+
permission: Permission.DeleteServiceLevelObjectiveOwnerRule,
|
|
16168
|
+
title: "Delete SLO Owner Rule",
|
|
16169
|
+
description: "Permission to delete SLO Owner Rules of this project.",
|
|
16170
|
+
isAssignableToTenant: true,
|
|
16171
|
+
isAccessControlPermission: false,
|
|
16172
|
+
isRolePermission: false,
|
|
16173
|
+
group: PermissionGroup.SLO,
|
|
16174
|
+
},
|
|
16175
|
+
{
|
|
16176
|
+
permission: Permission.EditServiceLevelObjectiveOwnerRule,
|
|
16177
|
+
title: "Edit SLO Owner Rule",
|
|
16178
|
+
description: "Permission to edit SLO Owner Rules of this project.",
|
|
16179
|
+
isAssignableToTenant: true,
|
|
16180
|
+
isAccessControlPermission: false,
|
|
16181
|
+
isRolePermission: false,
|
|
16182
|
+
group: PermissionGroup.SLO,
|
|
16183
|
+
},
|
|
16184
|
+
{
|
|
16185
|
+
permission: Permission.ReadServiceLevelObjectiveOwnerRule,
|
|
16186
|
+
title: "Read SLO Owner Rule",
|
|
16187
|
+
description: "Permission to read SLO Owner Rules of this project.",
|
|
16188
|
+
isAssignableToTenant: true,
|
|
16189
|
+
isAccessControlPermission: false,
|
|
16190
|
+
isRolePermission: false,
|
|
16191
|
+
group: PermissionGroup.SLO,
|
|
16192
|
+
},
|
|
16193
|
+
|
|
16194
|
+
// Service Level Objective Label Rule Permissions
|
|
16195
|
+
{
|
|
16196
|
+
permission: Permission.CreateServiceLevelObjectiveLabelRule,
|
|
16197
|
+
title: "Create SLO Label Rule",
|
|
16198
|
+
description:
|
|
16199
|
+
"Permission to create SLO Label Rules, which attach labels to matching SLOs, in this project.",
|
|
16200
|
+
isAssignableToTenant: true,
|
|
16201
|
+
isAccessControlPermission: false,
|
|
16202
|
+
isRolePermission: false,
|
|
16203
|
+
group: PermissionGroup.SLO,
|
|
16204
|
+
},
|
|
16205
|
+
{
|
|
16206
|
+
permission: Permission.DeleteServiceLevelObjectiveLabelRule,
|
|
16207
|
+
title: "Delete SLO Label Rule",
|
|
16208
|
+
description: "Permission to delete SLO Label Rules of this project.",
|
|
16209
|
+
isAssignableToTenant: true,
|
|
16210
|
+
isAccessControlPermission: false,
|
|
16211
|
+
isRolePermission: false,
|
|
16212
|
+
group: PermissionGroup.SLO,
|
|
16213
|
+
},
|
|
16214
|
+
{
|
|
16215
|
+
permission: Permission.EditServiceLevelObjectiveLabelRule,
|
|
16216
|
+
title: "Edit SLO Label Rule",
|
|
16217
|
+
description: "Permission to edit SLO Label Rules of this project.",
|
|
16218
|
+
isAssignableToTenant: true,
|
|
16219
|
+
isAccessControlPermission: false,
|
|
16220
|
+
isRolePermission: false,
|
|
16221
|
+
group: PermissionGroup.SLO,
|
|
16222
|
+
},
|
|
16223
|
+
{
|
|
16224
|
+
permission: Permission.ReadServiceLevelObjectiveLabelRule,
|
|
16225
|
+
title: "Read SLO Label Rule",
|
|
16226
|
+
description: "Permission to read SLO Label Rules of this project.",
|
|
16227
|
+
isAssignableToTenant: true,
|
|
16228
|
+
isAccessControlPermission: false,
|
|
16229
|
+
isRolePermission: false,
|
|
16230
|
+
group: PermissionGroup.SLO,
|
|
16231
|
+
},
|
|
16232
|
+
|
|
16143
16233
|
// Operational Resource Wildcard Permissions
|
|
16144
16234
|
{
|
|
16145
16235
|
permission: Permission.ReadAllOperationalResources,
|
|
@@ -379,11 +379,22 @@ export const RULE_CRITERIA_FIELDS_BY_MODEL: Readonly<
|
|
|
379
379
|
"serviceNamePattern",
|
|
380
380
|
"serviceDescriptionPattern",
|
|
381
381
|
],
|
|
382
|
+
ServiceLevelObjectiveLabelRule: [
|
|
383
|
+
"serviceLevelObjectiveLabels",
|
|
384
|
+
"serviceLevelObjectiveNamePattern",
|
|
385
|
+
"serviceLevelObjectiveDescriptionPattern",
|
|
386
|
+
],
|
|
382
387
|
ServiceLevelObjectiveMonitorRule: [
|
|
383
388
|
"monitorLabels",
|
|
389
|
+
"monitorType",
|
|
384
390
|
"monitorNamePattern",
|
|
385
391
|
"monitorDescriptionPattern",
|
|
386
392
|
],
|
|
393
|
+
ServiceLevelObjectiveOwnerRule: [
|
|
394
|
+
"serviceLevelObjectiveLabels",
|
|
395
|
+
"serviceLevelObjectiveNamePattern",
|
|
396
|
+
"serviceLevelObjectiveDescriptionPattern",
|
|
397
|
+
],
|
|
387
398
|
ServiceOwnerRule: [
|
|
388
399
|
"serviceLabels",
|
|
389
400
|
"serviceNamePattern",
|
package/Types/Rules/RuleRun.ts
CHANGED
|
@@ -92,7 +92,9 @@ export enum RuleRunType {
|
|
|
92
92
|
ServerlessFunctionLabelRule = "ServerlessFunctionLabelRule",
|
|
93
93
|
ServerlessFunctionOwnerRule = "ServerlessFunctionOwnerRule",
|
|
94
94
|
ServiceLabelRule = "ServiceLabelRule",
|
|
95
|
+
ServiceLevelObjectiveLabelRule = "ServiceLevelObjectiveLabelRule",
|
|
95
96
|
ServiceLevelObjectiveMonitorRule = "ServiceLevelObjectiveMonitorRule",
|
|
97
|
+
ServiceLevelObjectiveOwnerRule = "ServiceLevelObjectiveOwnerRule",
|
|
96
98
|
ServiceOwnerRule = "ServiceOwnerRule",
|
|
97
99
|
StatusPageLabelRule = "StatusPageLabelRule",
|
|
98
100
|
StatusPageOwnerRule = "StatusPageOwnerRule",
|
|
@@ -316,11 +318,13 @@ export const RULE_RUN_TYPE_METADATA: Readonly<
|
|
|
316
318
|
"serverless functions",
|
|
317
319
|
),
|
|
318
320
|
[RuleRunType.ServiceLabelRule]: metadata(Labels, "service", "services"),
|
|
321
|
+
[RuleRunType.ServiceLevelObjectiveLabelRule]: metadata(Labels, "SLO", "SLOs"),
|
|
319
322
|
[RuleRunType.ServiceLevelObjectiveMonitorRule]: metadata(
|
|
320
323
|
RuleRunAction.SyncSloMonitors,
|
|
321
324
|
"monitor",
|
|
322
325
|
"monitors",
|
|
323
326
|
),
|
|
327
|
+
[RuleRunType.ServiceLevelObjectiveOwnerRule]: metadata(Owners, "SLO", "SLOs"),
|
|
324
328
|
[RuleRunType.ServiceOwnerRule]: metadata(Owners, "service", "services"),
|
|
325
329
|
[RuleRunType.StatusPageLabelRule]: metadata(
|
|
326
330
|
Labels,
|