@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
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* How often a monitor is probed: the canonical reading of
|
|
3
|
+
* `Monitor.monitoringInterval` (and `MonitorTemplate.monitoringInterval`).
|
|
4
|
+
*
|
|
5
|
+
* WHY IT LIVES IN Common
|
|
6
|
+
*
|
|
7
|
+
* The column is free-text ShortText and is supposed to hold a 5-field cron
|
|
8
|
+
* expression, but nothing ever validated it. Four places have an opinion
|
|
9
|
+
* about what a stored value MEANS and they must not disagree:
|
|
10
|
+
*
|
|
11
|
+
* - the write hooks (MonitorService / MonitorTemplateService) — which now
|
|
12
|
+
* normalize on save, so the column converges on canonical cron;
|
|
13
|
+
* - the claim query (MonitorProbeService.claimMonitorProbesForProbing) —
|
|
14
|
+
* which derives `nextPingAt` and is the thing that actually schedules
|
|
15
|
+
* the probe;
|
|
16
|
+
* - the telemetry-monitor worker and the over-time criteria evaluator —
|
|
17
|
+
* which need the cadence to size their evaluation windows;
|
|
18
|
+
* - the data migration that cleans the rows written before any of this.
|
|
19
|
+
*
|
|
20
|
+
* It is isomorphic (no server-only imports) because the dashboard needs the
|
|
21
|
+
* same reading to render a stored value, and pure and TOTAL — it never
|
|
22
|
+
* throws. Policy (reject / rewrite / leave alone) belongs to the caller:
|
|
23
|
+
* the write hook throws, the scheduler falls back, the migration skips.
|
|
24
|
+
* Same reason RescanIntervalUtil and ScanTargetUtil sit in Common.
|
|
25
|
+
*
|
|
26
|
+
* WHAT WENT WRONG, so the next person does not undo it
|
|
27
|
+
*
|
|
28
|
+
* A monitor storing "5m" was not a cron expression, so cron-parser threw,
|
|
29
|
+
* and the claim query caught that and fell back to a hard-coded "one minute
|
|
30
|
+
* from now". A monitor configured for five minutes was probed every ~75
|
|
31
|
+
* seconds — four times the requested rate — silently, for as long as the row
|
|
32
|
+
* existed. 103 monitors across 10 projects were in that state. Most of them
|
|
33
|
+
* got there by copying OUR OWN Terraform examples, which passed the dropdown
|
|
34
|
+
* LABEL ("Every 5 minutes") where the API wanted the VALUE ("*\/5 * * * *").
|
|
35
|
+
*
|
|
36
|
+
* THE INTERPRETIVE RULE THIS ENCODES
|
|
37
|
+
*
|
|
38
|
+
* A bare duration in THIS column is always a CADENCE, never a clock
|
|
39
|
+
* position: "5m" means "every five minutes", not "at five past". That is
|
|
40
|
+
* unambiguous here because the column's only consumer is a polling
|
|
41
|
+
* schedule. Do not lift this parser somewhere a duration could mean an
|
|
42
|
+
* offset. Note CronTime.ts spells out the same cadence-shaped constants.
|
|
43
|
+
*/
|
|
44
|
+
import CronTab from "../CronTab";
|
|
45
|
+
export var MonitoringIntervalNormalizationStatus;
|
|
46
|
+
(function (MonitoringIntervalNormalizationStatus) {
|
|
47
|
+
/*
|
|
48
|
+
* Null, undefined or blank. A legitimate state: the monitor is not probed
|
|
49
|
+
* on a schedule (Manual monitors, and ~4,177 rows in production).
|
|
50
|
+
*/
|
|
51
|
+
MonitoringIntervalNormalizationStatus["Empty"] = "Empty";
|
|
52
|
+
/* Already a valid cron expression. Returned byte-identical. */
|
|
53
|
+
MonitoringIntervalNormalizationStatus["AlreadyCanonical"] = "AlreadyCanonical";
|
|
54
|
+
/* Understood, and rewritten to canonical cron. */
|
|
55
|
+
MonitoringIntervalNormalizationStatus["Normalized"] = "Normalized";
|
|
56
|
+
/* Not understood. The caller decides what that means. */
|
|
57
|
+
MonitoringIntervalNormalizationStatus["Unrecognized"] = "Unrecognized";
|
|
58
|
+
})(MonitoringIntervalNormalizationStatus || (MonitoringIntervalNormalizationStatus = {}));
|
|
59
|
+
/*
|
|
60
|
+
* Cadences that divide their unit evenly.
|
|
61
|
+
*
|
|
62
|
+
* A 7-minute step fires at :00, :07 ... :56 and then :00 again — a four-minute
|
|
63
|
+
* gap at every hour wrap. It is NOT "every 7 minutes", so storing it as the
|
|
64
|
+
* normalization of "every 7 minutes" would be storing a lie. We only accept
|
|
65
|
+
* n where the unit divides evenly; everything else is Unrecognized and the
|
|
66
|
+
* caller can tell the user to write the cron they actually want.
|
|
67
|
+
*/
|
|
68
|
+
const minutesDivideEvenly = (n) => {
|
|
69
|
+
return n >= 2 && n <= 59 && 60 % n === 0;
|
|
70
|
+
};
|
|
71
|
+
const hoursDivideEvenly = (n) => {
|
|
72
|
+
return n >= 2 && n <= 23 && 24 % n === 0;
|
|
73
|
+
};
|
|
74
|
+
/*
|
|
75
|
+
* Labels the dashboard dropdown offers, mirrored here because Common cannot
|
|
76
|
+
* import from the App package. MonitoringIntervalLabelParity.test.ts fails
|
|
77
|
+
* if MonitorIntervalDropdownOptions.ts and this list ever drift apart — that
|
|
78
|
+
* test is the link, not this comment.
|
|
79
|
+
*/
|
|
80
|
+
const DASHBOARD_DROPDOWN_LABELS = {
|
|
81
|
+
"every minute": "* * * * *",
|
|
82
|
+
"every 2 minutes": "*/2 * * * *",
|
|
83
|
+
"every 5 minutes": "*/5 * * * *",
|
|
84
|
+
"every 10 minutes": "*/10 * * * *",
|
|
85
|
+
"every 15 minutes": "*/15 * * * *",
|
|
86
|
+
"every 30 minutes": "*/30 * * * *",
|
|
87
|
+
"every hour": "0 * * * *",
|
|
88
|
+
"every 2 hours": "0 */2 * * *",
|
|
89
|
+
"every 3 hours": "0 */3 * * *",
|
|
90
|
+
"every 6 hours": "0 */6 * * *",
|
|
91
|
+
"every 12 hours": "0 */12 * * *",
|
|
92
|
+
"every day": "0 0 * * *",
|
|
93
|
+
};
|
|
94
|
+
/*
|
|
95
|
+
* Bare adverbs, which carry no number to run through the grammar.
|
|
96
|
+
*/
|
|
97
|
+
const ADVERB_LABELS = {
|
|
98
|
+
minutely: "* * * * *",
|
|
99
|
+
hourly: "0 * * * *",
|
|
100
|
+
daily: "0 0 * * *",
|
|
101
|
+
nightly: "0 0 * * *",
|
|
102
|
+
weekly: "0 0 * * 0",
|
|
103
|
+
monthly: "0 0 1 * *",
|
|
104
|
+
yearly: "0 0 1 1 *",
|
|
105
|
+
annually: "0 0 1 1 *",
|
|
106
|
+
};
|
|
107
|
+
/*
|
|
108
|
+
* The unit vocabulary the duration grammar accepts. Seconds are deliberately
|
|
109
|
+
* absent: the claim loop runs once a minute, so a sub-minute cadence cannot
|
|
110
|
+
* be honoured and accepting one would promise a rate we never deliver.
|
|
111
|
+
*/
|
|
112
|
+
/*
|
|
113
|
+
* Numbers written as words. "Every Five Minutes" is in the production
|
|
114
|
+
* census, so the grammar has to read these; the range stops where a cadence
|
|
115
|
+
* stops being plausible rather than trying to be a general number parser.
|
|
116
|
+
*/
|
|
117
|
+
const SPELLED_NUMBERS = {
|
|
118
|
+
a: 1,
|
|
119
|
+
an: 1,
|
|
120
|
+
one: 1,
|
|
121
|
+
two: 2,
|
|
122
|
+
three: 3,
|
|
123
|
+
four: 4,
|
|
124
|
+
five: 5,
|
|
125
|
+
six: 6,
|
|
126
|
+
seven: 7,
|
|
127
|
+
eight: 8,
|
|
128
|
+
nine: 9,
|
|
129
|
+
ten: 10,
|
|
130
|
+
eleven: 11,
|
|
131
|
+
twelve: 12,
|
|
132
|
+
fifteen: 15,
|
|
133
|
+
twenty: 20,
|
|
134
|
+
thirty: 30,
|
|
135
|
+
sixty: 60,
|
|
136
|
+
};
|
|
137
|
+
const DIGITS_ONLY = /^\d+$/u;
|
|
138
|
+
const MINUTE_UNITS = [
|
|
139
|
+
"m",
|
|
140
|
+
"min",
|
|
141
|
+
"mins",
|
|
142
|
+
"minute",
|
|
143
|
+
"minutes",
|
|
144
|
+
];
|
|
145
|
+
const HOUR_UNITS = ["h", "hr", "hrs", "hour", "hours"];
|
|
146
|
+
const DAY_UNITS = ["d", "day", "days"];
|
|
147
|
+
const WEEK_UNITS = ["w", "week", "weeks"];
|
|
148
|
+
class MonitoringIntervalUtil {
|
|
149
|
+
/*
|
|
150
|
+
* Lowercase, collapse any run of whitespace (including the non-breaking
|
|
151
|
+
* space that survives a copy-paste out of our docs) to one space, and drop
|
|
152
|
+
* wrapping quotes and a trailing period. Lookup keys are built this way so
|
|
153
|
+
* "EVERY 5 MINUTES." and "every 5 minutes" are the same key.
|
|
154
|
+
*
|
|
155
|
+
* toLowerCase, not toLocaleLowerCase: in a Turkish locale the latter maps
|
|
156
|
+
* "I" to a dotless i and the table would stop matching.
|
|
157
|
+
*/
|
|
158
|
+
static toLookupKey(value) {
|
|
159
|
+
return value
|
|
160
|
+
.replace(/[\s\u00a0]+/g, " ")
|
|
161
|
+
.trim()
|
|
162
|
+
.replace(/^["']+|["']+$/g, "")
|
|
163
|
+
.replace(/\.+$/, "")
|
|
164
|
+
.trim()
|
|
165
|
+
.toLowerCase();
|
|
166
|
+
}
|
|
167
|
+
/*
|
|
168
|
+
* The preset labels we ship, keyed for lookup. Built by iterating
|
|
169
|
+
* CronTab.PRESETS rather than retyping them, so a preset added there is
|
|
170
|
+
* understood here without anyone remembering to update this file.
|
|
171
|
+
*/
|
|
172
|
+
static buildLabelTable() {
|
|
173
|
+
const table = {};
|
|
174
|
+
for (const preset of CronTab.PRESETS) {
|
|
175
|
+
table[MonitoringIntervalUtil.toLookupKey(preset.label)] = preset.value;
|
|
176
|
+
}
|
|
177
|
+
/*
|
|
178
|
+
* The dashboard's own labels win where the two lists disagree on
|
|
179
|
+
* wording, because that is what an operator sees on screen and what
|
|
180
|
+
* they are most likely to paste into an API call.
|
|
181
|
+
*/
|
|
182
|
+
for (const [label, cron] of Object.entries(DASHBOARD_DROPDOWN_LABELS)) {
|
|
183
|
+
table[label] = cron;
|
|
184
|
+
}
|
|
185
|
+
for (const [label, cron] of Object.entries(ADVERB_LABELS)) {
|
|
186
|
+
table[label] = cron;
|
|
187
|
+
}
|
|
188
|
+
return table;
|
|
189
|
+
}
|
|
190
|
+
static getLabelTable() {
|
|
191
|
+
if (!MonitoringIntervalUtil.labelTable) {
|
|
192
|
+
MonitoringIntervalUtil.labelTable =
|
|
193
|
+
MonitoringIntervalUtil.buildLabelTable();
|
|
194
|
+
}
|
|
195
|
+
return MonitoringIntervalUtil.labelTable;
|
|
196
|
+
}
|
|
197
|
+
/*
|
|
198
|
+
* "5m", "every 5 minutes", "2 hrs", "1 day" -> cron, or null.
|
|
199
|
+
*
|
|
200
|
+
* A missing count means one ("every minute", "hourly" handled above;
|
|
201
|
+
* "minute" and "m" land here). The divisor guards above decide whether a
|
|
202
|
+
* count is expressible as a cron step at all.
|
|
203
|
+
*/
|
|
204
|
+
static fromDurationGrammar(key) {
|
|
205
|
+
/*
|
|
206
|
+
* A digit may sit flush against its unit ("5m"); a spelled-out number
|
|
207
|
+
* needs a separator or "fiveminutes" would parse. Hence the two
|
|
208
|
+
* alternatives rather than one `\s*`.
|
|
209
|
+
*/
|
|
210
|
+
const match = key.match(/^(every\s+)?(?:(\d+)\s*|([a-z]+)\s+)?([a-z]+)$/);
|
|
211
|
+
if (!match) {
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
214
|
+
const hasEveryPrefix = Boolean(match[1]);
|
|
215
|
+
const digitCount = match[2];
|
|
216
|
+
const wordCount = match[3];
|
|
217
|
+
const unit = match[4];
|
|
218
|
+
const rawCount = digitCount !== null && digitCount !== void 0 ? digitCount : wordCount;
|
|
219
|
+
let count;
|
|
220
|
+
if (rawCount === undefined) {
|
|
221
|
+
/*
|
|
222
|
+
* A bare unit with no count and no "every" is not a cadence, it is a
|
|
223
|
+
* noun: "minutes" tells us nothing. Require one or the other, so
|
|
224
|
+
* "every minute" and "1 minute" are read and "minutes" is refused.
|
|
225
|
+
*/
|
|
226
|
+
if (!hasEveryPrefix) {
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
count = 1;
|
|
230
|
+
}
|
|
231
|
+
else if (DIGITS_ONLY.test(rawCount)) {
|
|
232
|
+
count = parseInt(rawCount, 10);
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
/*
|
|
236
|
+
* Spelled-out numbers: "Every Five Minutes" is a real production
|
|
237
|
+
* value, so the grammar has to read words as well as digits.
|
|
238
|
+
*/
|
|
239
|
+
const spelled = SPELLED_NUMBERS[rawCount];
|
|
240
|
+
if (spelled === undefined) {
|
|
241
|
+
return null;
|
|
242
|
+
}
|
|
243
|
+
count = spelled;
|
|
244
|
+
}
|
|
245
|
+
if (!Number.isFinite(count) || count < 1) {
|
|
246
|
+
return null;
|
|
247
|
+
}
|
|
248
|
+
if (MINUTE_UNITS.includes(unit)) {
|
|
249
|
+
if (count === 1) {
|
|
250
|
+
return "* * * * *";
|
|
251
|
+
}
|
|
252
|
+
if (count === 60) {
|
|
253
|
+
return "0 * * * *";
|
|
254
|
+
}
|
|
255
|
+
return minutesDivideEvenly(count) ? `*/${count} * * * *` : null;
|
|
256
|
+
}
|
|
257
|
+
if (HOUR_UNITS.includes(unit)) {
|
|
258
|
+
if (count === 1) {
|
|
259
|
+
return "0 * * * *";
|
|
260
|
+
}
|
|
261
|
+
if (count === 24) {
|
|
262
|
+
return "0 0 * * *";
|
|
263
|
+
}
|
|
264
|
+
return hoursDivideEvenly(count) ? `0 */${count} * * *` : null;
|
|
265
|
+
}
|
|
266
|
+
if (DAY_UNITS.includes(unit)) {
|
|
267
|
+
return count === 1 ? "0 0 * * *" : null;
|
|
268
|
+
}
|
|
269
|
+
if (WEEK_UNITS.includes(unit)) {
|
|
270
|
+
return count === 1 ? "0 0 * * 0" : null;
|
|
271
|
+
}
|
|
272
|
+
return null;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Read a stored (or inbound) monitoring interval.
|
|
276
|
+
*
|
|
277
|
+
* Never throws. Never guesses at something it does not understand — an
|
|
278
|
+
* unrecognized value comes back as Unrecognized with a null cron, and the
|
|
279
|
+
* caller decides whether that is a 400, a log line, or a skipped row.
|
|
280
|
+
*/
|
|
281
|
+
static normalize(value) {
|
|
282
|
+
if (value === null || value === undefined || typeof value !== "string") {
|
|
283
|
+
return {
|
|
284
|
+
status: MonitoringIntervalNormalizationStatus.Empty,
|
|
285
|
+
cron: null,
|
|
286
|
+
input: null,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
const collapsed = value.replace(/[\s\u00a0]+/g, " ").trim();
|
|
290
|
+
if (collapsed === "") {
|
|
291
|
+
return {
|
|
292
|
+
status: MonitoringIntervalNormalizationStatus.Empty,
|
|
293
|
+
cron: null,
|
|
294
|
+
input: value,
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
/*
|
|
298
|
+
* Valid cron first, and on the RAW value.
|
|
299
|
+
*
|
|
300
|
+
* This is what keeps the ~4,700 rows that were always correct on an
|
|
301
|
+
* identical code path, byte for byte. It also means anything cron-parser
|
|
302
|
+
* accepts but this hand-rolled grammar does not — "@hourly", six-field
|
|
303
|
+
* expressions, step/range combinations nobody here anticipated — is
|
|
304
|
+
* passed through untouched rather than being "corrected" into something
|
|
305
|
+
* else. A normalizer that disagrees with the runtime parser would
|
|
306
|
+
* reintroduce this very bug in mirror image.
|
|
307
|
+
*/
|
|
308
|
+
if (CronTab.isValid(collapsed)) {
|
|
309
|
+
return {
|
|
310
|
+
status: collapsed === value
|
|
311
|
+
? MonitoringIntervalNormalizationStatus.AlreadyCanonical
|
|
312
|
+
: MonitoringIntervalNormalizationStatus.Normalized,
|
|
313
|
+
cron: collapsed,
|
|
314
|
+
input: value,
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
const key = MonitoringIntervalUtil.toLookupKey(collapsed);
|
|
318
|
+
const fromLabel = MonitoringIntervalUtil.getLabelTable()[key];
|
|
319
|
+
if (fromLabel) {
|
|
320
|
+
return {
|
|
321
|
+
status: MonitoringIntervalNormalizationStatus.Normalized,
|
|
322
|
+
cron: fromLabel,
|
|
323
|
+
input: value,
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
/*
|
|
327
|
+
* "every-1-min" and friends: treat a hyphen or underscore as a space and
|
|
328
|
+
* try the label table and the grammar again. Done after the plain
|
|
329
|
+
* lookup so a legitimate cron is never mangled by it.
|
|
330
|
+
*/
|
|
331
|
+
const looseKey = key.replace(/[-_]+/g, " ").replace(/\s+/g, " ");
|
|
332
|
+
const fromLooseLabel = MonitoringIntervalUtil.getLabelTable()[looseKey];
|
|
333
|
+
if (fromLooseLabel) {
|
|
334
|
+
return {
|
|
335
|
+
status: MonitoringIntervalNormalizationStatus.Normalized,
|
|
336
|
+
cron: fromLooseLabel,
|
|
337
|
+
input: value,
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
const fromGrammar = MonitoringIntervalUtil.fromDurationGrammar(key) ||
|
|
341
|
+
MonitoringIntervalUtil.fromDurationGrammar(looseKey);
|
|
342
|
+
if (fromGrammar) {
|
|
343
|
+
return {
|
|
344
|
+
status: MonitoringIntervalNormalizationStatus.Normalized,
|
|
345
|
+
cron: fromGrammar,
|
|
346
|
+
input: value,
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
return {
|
|
350
|
+
status: MonitoringIntervalNormalizationStatus.Unrecognized,
|
|
351
|
+
cron: null,
|
|
352
|
+
input: value,
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* The cron this value means, or null if it is empty or not understood.
|
|
357
|
+
*
|
|
358
|
+
* The convenience form for read paths that only want a schedule and have
|
|
359
|
+
* their own fallback for "no schedule".
|
|
360
|
+
*/
|
|
361
|
+
static toCronOrNull(value) {
|
|
362
|
+
return MonitoringIntervalUtil.normalize(value).cron;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* The canonical cron for a recognised cadence label, for building error
|
|
366
|
+
* messages that tell the caller what to write instead.
|
|
367
|
+
*/
|
|
368
|
+
static getSuggestedCronForMessage() {
|
|
369
|
+
return "*/5 * * * *";
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
MonitoringIntervalUtil.labelTable = null;
|
|
373
|
+
export default MonitoringIntervalUtil;
|
|
374
|
+
//# sourceMappingURL=MonitoringIntervalUtil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MonitoringIntervalUtil.js","sourceRoot":"","sources":["../../../../Utils/Monitor/MonitoringIntervalUtil.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import MonitorType from "../../Types/Monitor/MonitorType";
|
|
2
|
+
import { RuleCriteriaOperator, } from "../../Types/Rules/RuleCriteria";
|
|
3
|
+
const MONITOR_TYPES = new Set(Object.values(MonitorType));
|
|
4
|
+
export function isMonitorTypeCriteriaValue(value) {
|
|
5
|
+
return typeof value === "string" && MONITOR_TYPES.has(value);
|
|
6
|
+
}
|
|
7
|
+
/** Monitor types are enum choices, so text and relation operators do not apply. */
|
|
8
|
+
export function getMonitorTypeCriteriaValidationError(filter) {
|
|
9
|
+
if (filter.operator !== RuleCriteriaOperator.Equals &&
|
|
10
|
+
filter.operator !== RuleCriteriaOperator.NotEquals) {
|
|
11
|
+
return "Monitor type criteria only support Equals and Does not equal operators.";
|
|
12
|
+
}
|
|
13
|
+
if (!isMonitorTypeCriteriaValue(filter.value)) {
|
|
14
|
+
return "Monitor type criteria require a valid monitor type.";
|
|
15
|
+
}
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=MonitorTypeRuleCriteria.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MonitorTypeRuleCriteria.js","sourceRoot":"","sources":["../../../../Utils/Rules/MonitorTypeRuleCriteria.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,iCAAiC,CAAC;AAC1D,OAAO,EAEL,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AAExC,MAAM,aAAa,GAAwB,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;AAE/E,MAAM,UAAU,0BAA0B,CACxC,KAAc;IAEd,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/D,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,qCAAqC,CACnD,MAA0B;IAE1B,IACE,MAAM,CAAC,QAAQ,KAAK,oBAAoB,CAAC,MAAM;QAC/C,MAAM,CAAC,QAAQ,KAAK,oBAAoB,CAAC,SAAS,EAClD,CAAC;QACD,OAAO,yEAAyE,CAAC;IACnF,CAAC;IAED,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,OAAO,qDAAqD,CAAC;IAC/D,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -14,8 +14,6 @@
|
|
|
14
14
|
* one rendering, and so every rounding edge is unit-testable without a
|
|
15
15
|
* DOM.
|
|
16
16
|
*/
|
|
17
|
-
/** U+2212 MINUS SIGN — reads as a minus rather than a hyphen at tile sizes. */
|
|
18
|
-
const MINUS_SIGN = "−";
|
|
19
17
|
/**
|
|
20
18
|
* Seconds per unit, largest first. Only the two most significant non-zero
|
|
21
19
|
* units are rendered: "2d 5h" is what an on-call engineer needs, "2d 5h
|
|
@@ -59,15 +57,20 @@ export const formatDurationCompact = (seconds) => {
|
|
|
59
57
|
}
|
|
60
58
|
return parts.join(" ");
|
|
61
59
|
};
|
|
60
|
+
const formatBudgetDuration = (seconds) => {
|
|
61
|
+
return seconds !== 0 && Math.abs(seconds) < 1
|
|
62
|
+
? "under 1s"
|
|
63
|
+
: formatDurationCompact(seconds);
|
|
64
|
+
};
|
|
62
65
|
export const formatErrorBudgetRemaining = (seconds) => {
|
|
63
66
|
const numericSeconds = toFiniteNumber(seconds);
|
|
64
67
|
if (numericSeconds === null) {
|
|
65
68
|
return null;
|
|
66
69
|
}
|
|
67
70
|
if (numericSeconds < 0) {
|
|
68
|
-
return `${
|
|
71
|
+
return `${formatBudgetDuration(numericSeconds)} over budget`;
|
|
69
72
|
}
|
|
70
|
-
return `${
|
|
73
|
+
return `${formatBudgetDuration(numericSeconds)} left`;
|
|
71
74
|
};
|
|
72
75
|
export const formatErrorBudgetRemainingOfTotal = (data) => {
|
|
73
76
|
const remainingText = formatErrorBudgetRemaining(data.remainingSeconds);
|
|
@@ -82,6 +85,11 @@ export const formatErrorBudgetRemainingOfTotal = (data) => {
|
|
|
82
85
|
if (totalSeconds === null || totalSeconds <= 0) {
|
|
83
86
|
return remainingText;
|
|
84
87
|
}
|
|
85
|
-
|
|
88
|
+
const totalText = formatBudgetDuration(totalSeconds);
|
|
89
|
+
if (typeof data.remainingSeconds === "number" &&
|
|
90
|
+
data.remainingSeconds < 0) {
|
|
91
|
+
return `${remainingText} · ${totalText} allowed`;
|
|
92
|
+
}
|
|
93
|
+
return `${remainingText} of ${totalText}`;
|
|
86
94
|
};
|
|
87
95
|
//# sourceMappingURL=SloDuration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SloDuration.js","sourceRoot":"","sources":["../../../../Utils/Slo/SloDuration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH
|
|
1
|
+
{"version":3,"file":"SloDuration.js","sourceRoot":"","sources":["../../../../Utils/Slo/SloDuration.ts"],"names":[],"mappings":"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"}
|
|
@@ -138,16 +138,17 @@ export const getSloNotice = (data) => {
|
|
|
138
138
|
};
|
|
139
139
|
}
|
|
140
140
|
/*
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
*
|
|
141
|
+
* Monitors may have been attached since the last evaluation, or the
|
|
142
|
+
* worker may still be waiting for their status data. A stored
|
|
143
|
+
* Misconfigured status alone does not mean the current setup is wrong.
|
|
144
|
+
* Keep the monitor link so users can check data that is still missing.
|
|
144
145
|
*/
|
|
145
146
|
return {
|
|
146
|
-
type: SloNoticeType.
|
|
147
|
-
title: "
|
|
148
|
-
body: "
|
|
147
|
+
type: SloNoticeType.Info,
|
|
148
|
+
title: "Waiting for SLO evaluation",
|
|
149
|
+
body: "Monitors are attached. OneUptime evaluates this SLO every few minutes. Results will appear once monitor status data is available and the next evaluation completes.",
|
|
149
150
|
action: {
|
|
150
|
-
label: "
|
|
151
|
+
label: "View monitors",
|
|
151
152
|
target: SloNoticeActionTarget.Monitors,
|
|
152
153
|
},
|
|
153
154
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SloHealth.js","sourceRoot":"","sources":["../../../../Utils/Slo/SloHealth.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"SloHealth.js","sourceRoot":"","sources":["../../../../Utils/Slo/SloHealth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import FilterCondition from "../../Types/Filter/FilterCondition";
|
|
2
2
|
import { RuleCriteriaOperator, } from "../../Types/Rules/RuleCriteria";
|
|
3
3
|
import { isValidRuleCriteria } from "../Rules/RuleCriteriaMatcher";
|
|
4
|
+
import { getMonitorTypeCriteriaValidationError, isMonitorTypeCriteriaValue, } from "../Rules/MonitorTypeRuleCriteria";
|
|
4
5
|
/*
|
|
5
6
|
* Plain-English descriptions of what an SLO monitor rule matches, for the
|
|
6
7
|
* places that cannot render the dashboard's RuleCriteriaSummary component:
|
|
@@ -25,6 +26,7 @@ import { isValidRuleCriteria } from "../Rules/RuleCriteriaMatcher";
|
|
|
25
26
|
*/
|
|
26
27
|
export const SLO_MONITOR_RULE_CRITERIA_FIELD_TITLES = {
|
|
27
28
|
monitorLabels: "Labels",
|
|
29
|
+
monitorType: "Type",
|
|
28
30
|
monitorNamePattern: "Name",
|
|
29
31
|
monitorDescriptionPattern: "Description",
|
|
30
32
|
};
|
|
@@ -134,7 +136,11 @@ export const describeSloMonitorRuleCriteria = (data) => {
|
|
|
134
136
|
}
|
|
135
137
|
}
|
|
136
138
|
if (hasConfiguredCriteria(rule)) {
|
|
137
|
-
if (!isValidRuleCriteria(rule.criteria)
|
|
139
|
+
if (!isValidRuleCriteria(rule.criteria) ||
|
|
140
|
+
rule.criteria.filters.some((filter) => {
|
|
141
|
+
return (filter.field === "monitorType" &&
|
|
142
|
+
getMonitorTypeCriteriaValidationError(filter) !== null);
|
|
143
|
+
})) {
|
|
138
144
|
return SLO_MONITOR_RULE_INVALID_CRITERIA_DESCRIPTION;
|
|
139
145
|
}
|
|
140
146
|
if (rule.criteria.filters.length === 0) {
|
|
@@ -149,11 +155,19 @@ export const describeSloMonitorRuleCriteria = (data) => {
|
|
|
149
155
|
})
|
|
150
156
|
.join(connector);
|
|
151
157
|
}
|
|
158
|
+
if (rule.monitorType !== undefined &&
|
|
159
|
+
rule.monitorType !== null &&
|
|
160
|
+
!isMonitorTypeCriteriaValue(rule.monitorType)) {
|
|
161
|
+
return SLO_MONITOR_RULE_INVALID_CRITERIA_DESCRIPTION;
|
|
162
|
+
}
|
|
152
163
|
const parts = [];
|
|
153
164
|
const legacyLabelIds = getSloMonitorRuleLabelIds(rule);
|
|
154
165
|
if (legacyLabelIds.length > 0) {
|
|
155
166
|
parts.push(`${SLO_MONITOR_RULE_CRITERIA_FIELD_TITLES["monitorLabels"]} ${SLO_MONITOR_RULE_OPERATOR_PHRASES[RuleCriteriaOperator.HasAnyOf]} ${describeLabels({ labelIds: legacyLabelIds, labelNameById })}`);
|
|
156
167
|
}
|
|
168
|
+
if (rule.monitorType) {
|
|
169
|
+
parts.push(`${SLO_MONITOR_RULE_CRITERIA_FIELD_TITLES["monitorType"]} ${SLO_MONITOR_RULE_OPERATOR_PHRASES[RuleCriteriaOperator.Equals]} ${quote(rule.monitorType)}`);
|
|
170
|
+
}
|
|
157
171
|
if (rule.monitorNamePattern) {
|
|
158
172
|
parts.push(`${SLO_MONITOR_RULE_CRITERIA_FIELD_TITLES["monitorNamePattern"]} ${SLO_MONITOR_RULE_OPERATOR_PHRASES[RuleCriteriaOperator.MatchesPattern]} ${quote(rule.monitorNamePattern)}`);
|
|
159
173
|
}
|
|
@@ -209,6 +223,7 @@ export const getSloMonitorRuleCriteriaKey = (rule) => {
|
|
|
209
223
|
return id.toLowerCase();
|
|
210
224
|
})
|
|
211
225
|
.sort(),
|
|
226
|
+
monitorType: rule.monitorType || "",
|
|
212
227
|
name: rule.monitorNamePattern || "",
|
|
213
228
|
description: rule.monitorDescriptionPattern || "",
|
|
214
229
|
})}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SloMonitorRuleCriteria.js","sourceRoot":"","sources":["../../../../Utils/Slo/SloMonitorRuleCriteria.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"SloMonitorRuleCriteria.js","sourceRoot":"","sources":["../../../../Utils/Slo/SloMonitorRuleCriteria.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,6 +34,22 @@ export const getSloTargetText = (targetPercentage) => {
|
|
|
34
34
|
const target = formatSloPercent(targetPercentage);
|
|
35
35
|
return target === null ? null : `Target ${target}`;
|
|
36
36
|
};
|
|
37
|
+
export const getSloBudgetRemainingText = (percentage) => {
|
|
38
|
+
const remaining = toFiniteNumber(percentage);
|
|
39
|
+
if (remaining === null) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
if (remaining < 0) {
|
|
43
|
+
return "Budget exceeded";
|
|
44
|
+
}
|
|
45
|
+
if (remaining === 0) {
|
|
46
|
+
return "No budget left";
|
|
47
|
+
}
|
|
48
|
+
if (remaining < 0.1) {
|
|
49
|
+
return "<0.1%";
|
|
50
|
+
}
|
|
51
|
+
return formatSloPercent(Math.min(remaining, 100), 1);
|
|
52
|
+
};
|
|
37
53
|
export const getSloMonitorCountText = (count) => {
|
|
38
54
|
if (!isFinite(count) || count <= 0) {
|
|
39
55
|
return "No monitors";
|