@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.
Files changed (514) hide show
  1. package/Models/AnalyticsModels/AuditLog.ts +23 -15
  2. package/Models/DatabaseModels/GlobalConfig.ts +24 -0
  3. package/Models/DatabaseModels/Index.ts +4 -0
  4. package/Models/DatabaseModels/Monitor.ts +3 -2
  5. package/Models/DatabaseModels/MonitorTemplate.ts +2 -1
  6. package/Models/DatabaseModels/ServiceLevelObjectiveFeed.ts +2 -0
  7. package/Models/DatabaseModels/ServiceLevelObjectiveLabelRule.ts +522 -0
  8. package/Models/DatabaseModels/ServiceLevelObjectiveMonitorRule.ts +38 -4
  9. package/Models/DatabaseModels/ServiceLevelObjectiveOwnerRule.ts +603 -0
  10. package/Scripts/generate-service-worker.js +65 -4
  11. package/Server/API/BaseAPI.ts +26 -5
  12. package/Server/API/GlobalConfigAPI.ts +228 -462
  13. package/Server/API/ProjectOIDC.ts +25 -16
  14. package/Server/API/ProjectSSO.ts +24 -16
  15. package/Server/API/StatusPageAPI.ts +100 -42
  16. package/Server/API/TeamMemberAPI.ts +10 -1
  17. package/Server/Enterprise/EnterpriseEdition.ts +649 -0
  18. package/Server/Enterprise/EnterpriseFeature.ts +48 -0
  19. package/Server/Enterprise/EnterpriseLicenseSnapshot.ts +192 -0
  20. package/Server/Enterprise/EnterpriseServerModule.ts +233 -0
  21. package/Server/EnvironmentConfig.ts +147 -2
  22. package/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.ts +25 -0
  23. package/Server/Infrastructure/Postgres/SchemaMigrations/1794100000000-AddSloLabelAndOwnerRules.ts +248 -0
  24. package/Server/Infrastructure/Postgres/SchemaMigrations/1794200000000-AddSloMonitorRuleMonitorType.ts +19 -0
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
  26. package/Server/Middleware/UserAuthorization.ts +38 -16
  27. package/Server/Services/AuditLogService.ts +84 -1079
  28. package/Server/Services/DatabaseService.ts +10 -0
  29. package/Server/Services/EnterpriseLicenseService.ts +38 -0
  30. package/Server/Services/GlobalConfigService.ts +80 -1
  31. package/Server/Services/Index.ts +4 -0
  32. package/Server/Services/MonitorProbeService.ts +116 -20
  33. package/Server/Services/MonitorService.ts +59 -6
  34. package/Server/Services/MonitorStatusTimelineService.ts +284 -0
  35. package/Server/Services/MonitorTemplateService.ts +26 -0
  36. package/Server/Services/ProjectService.ts +284 -0
  37. package/Server/Services/RumSessionPinService.ts +25 -6
  38. package/Server/Services/ServiceLevelObjectiveLabelRuleEngineService.ts +385 -0
  39. package/Server/Services/ServiceLevelObjectiveLabelRuleService.ts +51 -0
  40. package/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.ts +92 -16
  41. package/Server/Services/ServiceLevelObjectiveMonitorRuleService.ts +36 -1
  42. package/Server/Services/ServiceLevelObjectiveOwnerRuleEngineService.ts +521 -0
  43. package/Server/Services/ServiceLevelObjectiveOwnerRuleService.ts +51 -0
  44. package/Server/Services/ServiceLevelObjectiveService.ts +28 -0
  45. package/Server/Services/StatusPagePrivateUserService.ts +7 -3
  46. package/Server/Services/StatusPageService.ts +78 -1
  47. package/Server/Services/TeamMemberService.ts +11 -0
  48. package/Server/Services/TeamService.ts +10 -0
  49. package/Server/Services/UserService.ts +10 -17
  50. package/Server/Types/Database/Permissions/CreatePermission.ts +15 -0
  51. package/Server/Types/Database/Permissions/EditionPermission.ts +208 -18
  52. package/Server/Types/Database/Permissions/TablePermission.ts +10 -3
  53. package/Server/Types/Database/Permissions/UpdatePermission.ts +29 -0
  54. package/Server/Types/Markdown.ts +41 -0
  55. package/Server/Types/Workflow/Components/Telegram/SendMessageToChat.ts +27 -1
  56. package/Server/Utils/AI/Toolbox/SloTools.ts +1 -0
  57. package/Server/Utils/CommunityEditionSsoReport.ts +361 -0
  58. package/Server/Utils/EditionEnforcement.ts +233 -0
  59. package/Server/Utils/FrontendEnvironment.ts +41 -2
  60. package/Server/Utils/InstanceHealth/RedisHealth.ts +12 -277
  61. package/Server/Utils/Monitor/AffectedResourceList.ts +148 -0
  62. package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +1 -1
  63. package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +10 -1
  64. package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +1 -1
  65. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +720 -465
  66. package/Server/Utils/Monitor/MonitoringIntervalValidator.ts +116 -0
  67. package/Server/Utils/Monitor/RootCauseList.ts +139 -0
  68. package/Server/Utils/Rules/RuleRun/RuleRunRegistry.ts +28 -0
  69. package/Server/Utils/Slo/SloRulePatternValidator.ts +42 -0
  70. package/Server/Utils/Workspace/Slack/Slack.ts +423 -10
  71. package/Tests/App/Accounts/LoginPasskey.test.tsx +18 -0
  72. package/Tests/App/Accounts/LoginSsoEdition.test.tsx +616 -0
  73. package/Tests/App/AdminDashboard/AdminAuthenticationSsoEdition.test.tsx +217 -0
  74. package/Tests/App/AdminDashboard/AdminEnterprisePluginPage.test.tsx +357 -0
  75. package/Tests/App/AdminDashboard/EnterpriseLicensesShell.test.tsx +214 -0
  76. package/Tests/App/AdminDashboard/GlobalSSOEnterpriseShells.test.tsx +271 -0
  77. package/Tests/App/AdminDashboard/HealthShells.test.tsx +659 -0
  78. package/Tests/App/Dashboard/AuditLogsAndComplianceShells.test.tsx +572 -0
  79. package/Tests/App/Dashboard/EnterpriseFeatureUpgrade.test.tsx +547 -0
  80. package/Tests/App/Dashboard/EnterprisePluginPage.test.tsx +667 -0
  81. package/Tests/App/Dashboard/FeedFilterSortIntegration.test.tsx +1632 -0
  82. package/Tests/App/Dashboard/FeedOptionsLocales.test.ts +250 -0
  83. package/Tests/App/Dashboard/FeedOrdering.test.ts +279 -9
  84. package/Tests/App/Dashboard/IdentityEnterpriseShells.test.tsx +319 -0
  85. package/Tests/App/Dashboard/InvestigationFeedRefresh.test.tsx +60 -1
  86. package/Tests/App/Dashboard/InvestigationPanel.test.tsx +594 -3
  87. package/Tests/App/Dashboard/OnboardingSsoEmptyState.test.tsx +185 -0
  88. package/Tests/App/Dashboard/ProductOrientation.test.tsx +646 -0
  89. package/Tests/App/Dashboard/ResourceFeed.test.tsx +612 -2
  90. package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +30 -0
  91. package/Tests/App/Dashboard/ResourceFeedPagesFilterSort.test.tsx +1202 -0
  92. package/Tests/App/Dashboard/ScheduledMaintenanceFeedRefresh.test.tsx +52 -1
  93. package/Tests/App/Dashboard/SecurityEventConnectionDiagnostics.test.tsx +45 -9
  94. package/Tests/App/Dashboard/SecurityEventDetailPanel.test.tsx +399 -0
  95. package/Tests/App/Dashboard/SecurityEventListRow.test.tsx +214 -0
  96. package/Tests/App/Dashboard/SecurityEventsEmptyState.test.tsx +1 -83
  97. package/Tests/App/Dashboard/SecurityEventsNavTabs.test.tsx +248 -0
  98. package/Tests/App/Dashboard/SecurityEventsViewer.test.tsx +1203 -0
  99. package/Tests/App/Dashboard/SloFeed.test.tsx +106 -1
  100. package/Tests/App/Dashboard/SloMonitorRuleCriteria.test.tsx +566 -0
  101. package/Tests/App/Dashboard/SloNavigationWiring.test.tsx +6 -4
  102. package/Tests/App/Dashboard/SloNoticeBanner.test.tsx +186 -0
  103. package/Tests/App/Dashboard/SloOverviewKpiStrip.test.tsx +388 -44
  104. package/Tests/App/Dashboard/SloOverviewLayout.test.tsx +613 -0
  105. package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +11 -91
  106. package/Tests/App/StatusPage/StatusPageSsoEmptyState.test.tsx +319 -0
  107. package/Tests/Helpers/RefreshAwareApiScan.ts +757 -0
  108. package/Tests/Helpers/TenantScopedRequestScan.ts +515 -0
  109. package/Tests/Models/DatabaseModels/ResourceFeedModels.test.ts +0 -8
  110. package/Tests/Models/DatabaseModels/SloLabelAndOwnerRuleModels.test.ts +404 -0
  111. package/Tests/Models/DatabaseModels/SloOverhaulModels.test.ts +17 -1
  112. package/Tests/Models/DatabaseModels/StaticRuleCriteriaInheritance.test.ts +4 -2
  113. package/Tests/Scripts/GenerateServiceWorker.test.ts +931 -0
  114. package/Tests/Server/API/BaseAPICreateItemDoesNotMutateModel.test.ts +130 -0
  115. package/Tests/Server/API/GlobalConfigLicense.test.ts +742 -497
  116. package/Tests/Server/API/OnCallReadinessAPI.test.ts +35 -909
  117. package/Tests/Server/API/SsoProviderListingsEdition.test.ts +432 -0
  118. package/Tests/Server/API/TeamMemberLeaveScimLockEdition.test.ts +252 -0
  119. package/Tests/Server/Enterprise/EnterpriseEdition.test.ts +824 -0
  120. package/Tests/Server/Enterprise/EnterpriseFeatureActive.test.ts +643 -0
  121. package/Tests/Server/Enterprise/EnterpriseLicenseSnapshot.test.ts +294 -0
  122. package/Tests/Server/Enterprise/EnterpriseModelFeatureMap.test.ts +93 -0
  123. package/Tests/Server/Enterprise/EnterpriseOnlyModulesLiveInEe.test.ts +582 -0
  124. package/Tests/Server/Enterprise/EnterpriseServerModule.test.ts +247 -0
  125. package/Tests/Server/Enterprise/FakeEnterpriseModule.ts +502 -0
  126. package/Tests/Server/Enterprise/TestBillingFlag.ts +70 -0
  127. package/Tests/Server/EnvironmentConfigEnterpriseEdition.test.ts +314 -0
  128. package/Tests/Server/Infrastructure/ContainerBootConfiguration.test.ts +289 -0
  129. package/Tests/Server/Infrastructure/E2EClickHouseFixtureAccess.test.ts +5 -1
  130. package/Tests/Server/Infrastructure/Postgres/AddConfigurableRuleCriteriaMigration.test.ts +3 -0
  131. package/Tests/Server/Infrastructure/Postgres/AddSloLabelAndOwnerRulesMigration.test.ts +407 -0
  132. package/Tests/Server/Infrastructure/Postgres/AddSloMonitorRuleMonitorTypeMigration.test.ts +171 -0
  133. package/Tests/Server/Infrastructure/Postgres/SloProductOverhaulMigration.test.ts +88 -4
  134. package/Tests/Server/Middleware/UserAuthorization.test.ts +37 -2
  135. package/Tests/Server/Middleware/UserAuthorizationEditionEnforcement.test.ts +516 -0
  136. package/Tests/Server/Services/AuditLogService.test.ts +460 -990
  137. package/Tests/Server/Services/CreateAndReadResponsesKeepIds.test.ts +263 -0
  138. package/Tests/Server/Services/DatabaseServiceRuleCriteriaValidation.test.ts +104 -0
  139. package/Tests/Server/Services/EnterpriseLicenseServiceKeyGeneration.test.ts +151 -0
  140. package/Tests/Server/Services/GlobalConfigServiceLicenseColumns.test.ts +357 -0
  141. package/Tests/Server/Services/MonitorDestinationInfoIPv6.test.ts +101 -0
  142. package/Tests/Server/Services/MonitorProbeServiceIntervalScheduling.test.ts +333 -0
  143. package/Tests/Server/Services/MonitorStatusTimelineDailyAggregates.test.ts +303 -0
  144. package/Tests/Server/Services/ProjectServiceAuditLogLicense.test.ts +701 -0
  145. package/Tests/Server/Services/ProjectServiceAuditLogSettingsCache.test.ts +31 -35
  146. package/Tests/Server/Services/RuleRun/LabelRuleEnginesGroupBRun.test.ts +48 -1
  147. package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupBRun.test.ts +30 -0
  148. package/Tests/Server/Services/ScimPushGroupsTeamLocksEdition.test.ts +431 -0
  149. package/Tests/Server/Services/ServiceLevelObjectiveLabelAndOwnerRuleEngines.test.ts +1170 -0
  150. package/Tests/Server/Services/ServiceLevelObjectiveLabelAndOwnerRuleServices.test.ts +172 -0
  151. package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.test.ts +323 -0
  152. package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleService.test.ts +115 -0
  153. package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleTriggers.test.ts +21 -2
  154. package/Tests/Server/Services/ServiceLevelObjectiveMonitorTypePostgres.test.ts +480 -0
  155. package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +162 -0
  156. package/Tests/Server/Services/SsoRequirementReadMasking.test.ts +419 -0
  157. package/Tests/Server/Services/SsoRequirementWriteGuard.test.ts +769 -0
  158. package/Tests/Server/Services/StaticRuleCriteriaRuntimeCoverage.test.ts +45 -6
  159. package/Tests/Server/Services/StatusPagePrivateUserInvitationPolicy.test.ts +94 -0
  160. package/Tests/Server/Services/UserAuthenticationService.test.ts +35 -0
  161. package/Tests/Server/Services/UserServiceSeatLimit.test.ts +94 -56
  162. package/Tests/Server/Types/Database/FeedEventTypeFilterQuery.test.ts +745 -0
  163. package/Tests/Server/Types/Database/Permissions/EditionPermission.test.ts +1823 -0
  164. package/Tests/Server/Types/Markdown.test.ts +183 -1
  165. package/Tests/Server/Types/Workflow/Components/ApiComponentSsrf.test.ts +49 -0
  166. package/Tests/Server/Types/Workflow/Components/TelegramSendMessageToChat.test.ts +331 -0
  167. package/Tests/Server/Utils/AI/SloTools.test.ts +10 -0
  168. package/Tests/Server/Utils/CommunityEditionSsoReport.test.ts +565 -0
  169. package/Tests/Server/Utils/EditionEnforcement.test.ts +303 -0
  170. package/Tests/Server/Utils/FrontendEnvironment.test.ts +367 -0
  171. package/Tests/Server/Utils/InstanceHealth/RedisHealth.test.ts +38 -418
  172. package/Tests/Server/Utils/Monitor/AffectedResourceList.test.ts +518 -0
  173. package/Tests/Server/Utils/Monitor/Criteria/EvaluateOverTime.test.ts +24 -4
  174. package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteriaAnomalyUnits.test.ts +1 -1
  175. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +1339 -96
  176. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorBreachingSamples.test.ts +1101 -0
  177. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorMetricUnits.test.ts +106 -80
  178. package/Tests/Server/Utils/Monitor/MonitoringIntervalValidator.test.ts +188 -0
  179. package/Tests/Server/Utils/Monitor/RootCauseList.test.ts +252 -0
  180. package/Tests/Server/Utils/Rules/RuleRun/RuleRunPermission.test.ts +154 -0
  181. package/Tests/Server/Utils/SSRFProtection.test.ts +111 -0
  182. package/Tests/Server/Utils/Slo/SloRulePatternValidator.test.ts +67 -0
  183. package/Tests/Server/Utils/VM/VMRunnerSsrf.test.ts +213 -0
  184. package/Tests/Server/Utils/Workspace/Slack/SlackMarkdownSectionSplit.test.ts +1209 -0
  185. package/Tests/Types/API/HostnameFromAuthority.test.ts +20 -10
  186. package/Tests/Types/API/HostnameIPv6.test.ts +149 -0
  187. package/Tests/Types/API/Route.test.ts +56 -0
  188. package/Tests/Types/API/URLSchemeLikePath.test.ts +304 -0
  189. package/Tests/Types/Database/CanonicalModelInstance.test.ts +190 -0
  190. package/Tests/UI/Components/EditionLabelLapseCopy.ts +104 -0
  191. package/Tests/UI/Components/EditionLabelLicenseManagerWiring.test.tsx +254 -0
  192. package/Tests/UI/Components/EditionLabelLicenseRefresh.test.tsx +84 -178
  193. package/Tests/UI/Components/EditionLabelLicenseStatus.test.tsx +1586 -0
  194. package/Tests/UI/Components/EditionLabelLicenseWritesGuard.test.tsx +157 -0
  195. package/Tests/UI/Components/FeedOptions.test.ts +1404 -0
  196. package/Tests/UI/Components/FeedOptionsButton.test.tsx +2603 -0
  197. package/Tests/UI/Components/Graphs/DayUptimeGraph.test.tsx +49 -2
  198. package/Tests/UI/Components/Icon.test.tsx +26 -0
  199. package/Tests/UI/Components/MarkdownConverters.test.ts +684 -0
  200. package/Tests/UI/Components/ModelListEmptyState.test.tsx +289 -0
  201. package/Tests/UI/Components/RuleCriteria/RuleCriteriaModelTable.test.tsx +3 -3
  202. package/Tests/UI/Components/TelemetryViewer/TelemetryViewerEmptyContent.test.tsx +131 -0
  203. package/Tests/UI/Components/useFeedItemsViewKey.test.tsx +1017 -0
  204. package/Tests/UI/Components/useFeedOptions.test.tsx +1107 -0
  205. package/Tests/UI/EsbuildEnterpriseAlias.test.ts +1127 -0
  206. package/Tests/Utils/HostAddressUtil.test.ts +138 -0
  207. package/Tests/Utils/LabelRuleImportExport.test.ts +102 -0
  208. package/Tests/Utils/Monitor/MonitorDestinationUtil.test.ts +313 -0
  209. package/Tests/Utils/Monitor/MonitoringIntervalUtil.test.ts +304 -0
  210. package/Tests/Utils/Slo/SloDuration.test.ts +115 -24
  211. package/Tests/Utils/Slo/SloHealth.test.ts +93 -10
  212. package/Tests/Utils/Slo/SloMonitorRuleCriteria.test.ts +109 -0
  213. package/Tests/Utils/Slo/SloOverviewText.test.ts +64 -0
  214. package/Tests/Utils/StatusPage/UptimeDailyAggregateUtil.test.ts +248 -0
  215. package/Types/API/Hostname.ts +63 -16
  216. package/Types/API/Route.ts +19 -2
  217. package/Types/API/URL.ts +26 -2
  218. package/Types/Database/AccessControl/ColumnAccessControl.ts +19 -7
  219. package/Types/Database/AccessControl/ColumnBillingAccessControl.ts +19 -7
  220. package/Types/Database/AccessControl/OwnerOnlyColumn.ts +15 -6
  221. package/Types/Database/CanonicalModelInstance.ts +102 -0
  222. package/Types/Database/TableColumn.ts +20 -6
  223. package/Types/EnterpriseLicense/EnterpriseLicensePeriods.ts +29 -0
  224. package/Types/IP/IPv6.ts +6 -1
  225. package/Types/Monitor/MetricMonitor/MetricCriteriaContext.ts +6 -5
  226. package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +9 -0
  227. package/Types/Monitor/MonitorStep.ts +6 -1
  228. package/Types/Monitor/ProxmoxAlertTemplates.ts +1 -1
  229. package/Types/Permission.ts +90 -0
  230. package/Types/Rules/RuleCriteriaFieldRegistry.ts +11 -0
  231. package/Types/Rules/RuleRun.ts +4 -0
  232. package/Types/StatusPage/UptimeDailyAggregate.ts +110 -0
  233. package/UI/Components/EditionLabel/EditionLabel.tsx +796 -1195
  234. package/UI/Components/EditionLabel/LicenseManager.ts +119 -0
  235. package/UI/Components/Feed/FeedOptions.ts +427 -0
  236. package/UI/Components/Feed/FeedOptionsButton.tsx +692 -0
  237. package/UI/Components/Feed/useFeedItems.ts +28 -9
  238. package/UI/Components/Feed/useFeedOptions.ts +225 -0
  239. package/UI/Components/Graphs/DayUptimeGraph.tsx +123 -15
  240. package/UI/Components/Icon/Icon.tsx +1 -1
  241. package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
  242. package/UI/Components/ModelList/ModelList.tsx +11 -1
  243. package/UI/Components/MonitorGraphs/Uptime.tsx +69 -0
  244. package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +28 -12
  245. package/UI/esbuild-enterprise.js +263 -0
  246. package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +7 -2
  247. package/Utils/HostAddressUtil.ts +94 -0
  248. package/Utils/LabelRuleImportExport.ts +27 -9
  249. package/Utils/Monitor/MetricValueFormatter.ts +2 -2
  250. package/Utils/Monitor/MonitorDestinationUtil.ts +157 -0
  251. package/Utils/Monitor/MonitoringIntervalUtil.ts +436 -0
  252. package/Utils/Rules/MonitorTypeRuleCriteria.ts +31 -0
  253. package/Utils/Slo/SloDuration.ts +22 -6
  254. package/Utils/Slo/SloHealth.ts +8 -7
  255. package/Utils/Slo/SloMonitorRuleCriteria.ts +33 -1
  256. package/Utils/Slo/SloOverviewText.ts +33 -0
  257. package/Utils/Slo/SloProjection.ts +4 -3
  258. package/Utils/StatusPage/UptimeDailyAggregateUtil.ts +192 -0
  259. package/build/dist/Models/AnalyticsModels/AuditLog.js +23 -15
  260. package/build/dist/Models/AnalyticsModels/AuditLog.js.map +1 -1
  261. package/build/dist/Models/DatabaseModels/GlobalConfig.js +25 -0
  262. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  263. package/build/dist/Models/DatabaseModels/Index.js +4 -0
  264. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  265. package/build/dist/Models/DatabaseModels/Monitor.js +2 -2
  266. package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
  267. package/build/dist/Models/DatabaseModels/MonitorTemplate.js +2 -1
  268. package/build/dist/Models/DatabaseModels/MonitorTemplate.js.map +1 -1
  269. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveFeed.js +2 -0
  270. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveFeed.js.map +1 -1
  271. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveLabelRule.js +530 -0
  272. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveLabelRule.js.map +1 -0
  273. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveMonitorRule.js +39 -4
  274. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveMonitorRule.js.map +1 -1
  275. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerRule.js +612 -0
  276. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerRule.js.map +1 -0
  277. package/build/dist/Server/API/BaseAPI.js +26 -5
  278. package/build/dist/Server/API/BaseAPI.js.map +1 -1
  279. package/build/dist/Server/API/GlobalConfigAPI.js +148 -344
  280. package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
  281. package/build/dist/Server/API/ProjectOIDC.js +24 -16
  282. package/build/dist/Server/API/ProjectOIDC.js.map +1 -1
  283. package/build/dist/Server/API/ProjectSSO.js +24 -16
  284. package/build/dist/Server/API/ProjectSSO.js.map +1 -1
  285. package/build/dist/Server/API/StatusPageAPI.js +93 -43
  286. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  287. package/build/dist/Server/API/TeamMemberAPI.js +8 -1
  288. package/build/dist/Server/API/TeamMemberAPI.js.map +1 -1
  289. package/build/dist/Server/Enterprise/EnterpriseEdition.js +466 -0
  290. package/build/dist/Server/Enterprise/EnterpriseEdition.js.map +1 -0
  291. package/build/dist/Server/Enterprise/EnterpriseFeature.js +39 -0
  292. package/build/dist/Server/Enterprise/EnterpriseFeature.js.map +1 -0
  293. package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js +70 -0
  294. package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js.map +1 -0
  295. package/build/dist/Server/Enterprise/EnterpriseServerModule.js +84 -0
  296. package/build/dist/Server/Enterprise/EnterpriseServerModule.js.map +1 -0
  297. package/build/dist/Server/EnvironmentConfig.js +84 -2
  298. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  299. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.js +18 -0
  300. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.js.map +1 -0
  301. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794100000000-AddSloLabelAndOwnerRules.js +93 -0
  302. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794100000000-AddSloLabelAndOwnerRules.js.map +1 -0
  303. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794200000000-AddSloMonitorRuleMonitorType.js +12 -0
  304. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794200000000-AddSloMonitorRuleMonitorType.js.map +1 -0
  305. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
  306. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  307. package/build/dist/Server/Middleware/UserAuthorization.js +30 -11
  308. package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
  309. package/build/dist/Server/Services/AuditLogService.js +71 -740
  310. package/build/dist/Server/Services/AuditLogService.js.map +1 -1
  311. package/build/dist/Server/Services/DatabaseService.js +7 -0
  312. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  313. package/build/dist/Server/Services/EnterpriseLicenseService.js +34 -0
  314. package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
  315. package/build/dist/Server/Services/GlobalConfigService.js +63 -0
  316. package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
  317. package/build/dist/Server/Services/Index.js +4 -0
  318. package/build/dist/Server/Services/Index.js.map +1 -1
  319. package/build/dist/Server/Services/MonitorProbeService.js +90 -17
  320. package/build/dist/Server/Services/MonitorProbeService.js.map +1 -1
  321. package/build/dist/Server/Services/MonitorService.js +48 -6
  322. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  323. package/build/dist/Server/Services/MonitorStatusTimelineService.js +242 -0
  324. package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
  325. package/build/dist/Server/Services/MonitorTemplateService.js +16 -0
  326. package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
  327. package/build/dist/Server/Services/ProjectService.js +214 -0
  328. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  329. package/build/dist/Server/Services/RumSessionPinService.js +24 -6
  330. package/build/dist/Server/Services/RumSessionPinService.js.map +1 -1
  331. package/build/dist/Server/Services/ServiceLevelObjectiveLabelRuleEngineService.js +295 -0
  332. package/build/dist/Server/Services/ServiceLevelObjectiveLabelRuleEngineService.js.map +1 -0
  333. package/build/dist/Server/Services/ServiceLevelObjectiveLabelRuleService.js +56 -0
  334. package/build/dist/Server/Services/ServiceLevelObjectiveLabelRuleService.js.map +1 -0
  335. package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.js +59 -14
  336. package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.js.map +1 -1
  337. package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleService.js +22 -1
  338. package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleService.js.map +1 -1
  339. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerRuleEngineService.js +400 -0
  340. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerRuleEngineService.js.map +1 -0
  341. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerRuleService.js +56 -0
  342. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerRuleService.js.map +1 -0
  343. package/build/dist/Server/Services/ServiceLevelObjectiveService.js +21 -0
  344. package/build/dist/Server/Services/ServiceLevelObjectiveService.js.map +1 -1
  345. package/build/dist/Server/Services/StatusPagePrivateUserService.js +7 -3
  346. package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
  347. package/build/dist/Server/Services/StatusPageService.js +71 -0
  348. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  349. package/build/dist/Server/Services/TeamMemberService.js +10 -0
  350. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  351. package/build/dist/Server/Services/TeamService.js +9 -0
  352. package/build/dist/Server/Services/TeamService.js.map +1 -1
  353. package/build/dist/Server/Services/UserService.js +10 -16
  354. package/build/dist/Server/Services/UserService.js.map +1 -1
  355. package/build/dist/Server/Types/Database/Permissions/CreatePermission.js +10 -0
  356. package/build/dist/Server/Types/Database/Permissions/CreatePermission.js.map +1 -1
  357. package/build/dist/Server/Types/Database/Permissions/EditionPermission.js +154 -14
  358. package/build/dist/Server/Types/Database/Permissions/EditionPermission.js.map +1 -1
  359. package/build/dist/Server/Types/Database/Permissions/TablePermission.js +10 -3
  360. package/build/dist/Server/Types/Database/Permissions/TablePermission.js.map +1 -1
  361. package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js +17 -0
  362. package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js.map +1 -1
  363. package/build/dist/Server/Types/Markdown.js +31 -0
  364. package/build/dist/Server/Types/Markdown.js.map +1 -1
  365. package/build/dist/Server/Types/Workflow/Components/Telegram/SendMessageToChat.js +20 -1
  366. package/build/dist/Server/Types/Workflow/Components/Telegram/SendMessageToChat.js.map +1 -1
  367. package/build/dist/Server/Utils/AI/Toolbox/SloTools.js +1 -0
  368. package/build/dist/Server/Utils/AI/Toolbox/SloTools.js.map +1 -1
  369. package/build/dist/Server/Utils/CommunityEditionSsoReport.js +223 -0
  370. package/build/dist/Server/Utils/CommunityEditionSsoReport.js.map +1 -0
  371. package/build/dist/Server/Utils/EditionEnforcement.js +187 -0
  372. package/build/dist/Server/Utils/EditionEnforcement.js.map +1 -0
  373. package/build/dist/Server/Utils/FrontendEnvironment.js +31 -2
  374. package/build/dist/Server/Utils/FrontendEnvironment.js.map +1 -1
  375. package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js +6 -193
  376. package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js.map +1 -1
  377. package/build/dist/Server/Utils/Monitor/AffectedResourceList.js +67 -0
  378. package/build/dist/Server/Utils/Monitor/AffectedResourceList.js.map +1 -0
  379. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +1 -1
  380. package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +8 -1
  381. package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
  382. package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js +1 -1
  383. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +585 -367
  384. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  385. package/build/dist/Server/Utils/Monitor/MonitoringIntervalValidator.js +88 -0
  386. package/build/dist/Server/Utils/Monitor/MonitoringIntervalValidator.js.map +1 -0
  387. package/build/dist/Server/Utils/Monitor/RootCauseList.js +101 -0
  388. package/build/dist/Server/Utils/Monitor/RootCauseList.js.map +1 -0
  389. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js +28 -0
  390. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js.map +1 -1
  391. package/build/dist/Server/Utils/Slo/SloRulePatternValidator.js +28 -0
  392. package/build/dist/Server/Utils/Slo/SloRulePatternValidator.js.map +1 -0
  393. package/build/dist/Server/Utils/Workspace/Slack/Slack.js +331 -11
  394. package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
  395. package/build/dist/Types/API/Hostname.js +59 -11
  396. package/build/dist/Types/API/Hostname.js.map +1 -1
  397. package/build/dist/Types/API/Route.js +18 -2
  398. package/build/dist/Types/API/Route.js.map +1 -1
  399. package/build/dist/Types/API/URL.js +23 -2
  400. package/build/dist/Types/API/URL.js.map +1 -1
  401. package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js +19 -7
  402. package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js.map +1 -1
  403. package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js +19 -7
  404. package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js.map +1 -1
  405. package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js +13 -6
  406. package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js.map +1 -1
  407. package/build/dist/Types/Database/CanonicalModelInstance.js +88 -0
  408. package/build/dist/Types/Database/CanonicalModelInstance.js.map +1 -0
  409. package/build/dist/Types/Database/TableColumn.js +19 -6
  410. package/build/dist/Types/Database/TableColumn.js.map +1 -1
  411. package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js +28 -0
  412. package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js.map +1 -0
  413. package/build/dist/Types/IP/IPv6.js +6 -1
  414. package/build/dist/Types/IP/IPv6.js.map +1 -1
  415. package/build/dist/Types/Monitor/MonitorStep.js +5 -0
  416. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  417. package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +1 -1
  418. package/build/dist/Types/Permission.js +84 -0
  419. package/build/dist/Types/Permission.js.map +1 -1
  420. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js +11 -0
  421. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js.map +1 -1
  422. package/build/dist/Types/Rules/RuleRun.js +4 -0
  423. package/build/dist/Types/Rules/RuleRun.js.map +1 -1
  424. package/build/dist/Types/StatusPage/UptimeDailyAggregate.js +32 -0
  425. package/build/dist/Types/StatusPage/UptimeDailyAggregate.js.map +1 -0
  426. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +414 -585
  427. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  428. package/build/dist/UI/Components/EditionLabel/LicenseManager.js +2 -0
  429. package/build/dist/UI/Components/EditionLabel/LicenseManager.js.map +1 -0
  430. package/build/dist/UI/Components/Feed/FeedOptions.js +235 -0
  431. package/build/dist/UI/Components/Feed/FeedOptions.js.map +1 -0
  432. package/build/dist/UI/Components/Feed/FeedOptionsButton.js +346 -0
  433. package/build/dist/UI/Components/Feed/FeedOptionsButton.js.map +1 -0
  434. package/build/dist/UI/Components/Feed/useFeedItems.js +17 -7
  435. package/build/dist/UI/Components/Feed/useFeedItems.js.map +1 -1
  436. package/build/dist/UI/Components/Feed/useFeedOptions.js +130 -0
  437. package/build/dist/UI/Components/Feed/useFeedOptions.js.map +1 -0
  438. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +90 -17
  439. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
  440. package/build/dist/UI/Components/Icon/Icon.js +1 -1
  441. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  442. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
  443. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
  444. package/build/dist/UI/Components/ModelList/ModelList.js +4 -1
  445. package/build/dist/UI/Components/ModelList/ModelList.js.map +1 -1
  446. package/build/dist/UI/Components/MonitorGraphs/Uptime.js +42 -1
  447. package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
  448. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +2 -2
  449. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
  450. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js +6 -2
  451. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js.map +1 -1
  452. package/build/dist/Utils/HostAddressUtil.js +80 -0
  453. package/build/dist/Utils/HostAddressUtil.js.map +1 -0
  454. package/build/dist/Utils/LabelRuleImportExport.js +22 -6
  455. package/build/dist/Utils/LabelRuleImportExport.js.map +1 -1
  456. package/build/dist/Utils/Monitor/MetricValueFormatter.js +2 -2
  457. package/build/dist/Utils/Monitor/MonitorDestinationUtil.js +127 -0
  458. package/build/dist/Utils/Monitor/MonitorDestinationUtil.js.map +1 -0
  459. package/build/dist/Utils/Monitor/MonitoringIntervalUtil.js +374 -0
  460. package/build/dist/Utils/Monitor/MonitoringIntervalUtil.js.map +1 -0
  461. package/build/dist/Utils/Rules/MonitorTypeRuleCriteria.js +18 -0
  462. package/build/dist/Utils/Rules/MonitorTypeRuleCriteria.js.map +1 -0
  463. package/build/dist/Utils/Slo/SloDuration.js +13 -5
  464. package/build/dist/Utils/Slo/SloDuration.js.map +1 -1
  465. package/build/dist/Utils/Slo/SloHealth.js +8 -7
  466. package/build/dist/Utils/Slo/SloHealth.js.map +1 -1
  467. package/build/dist/Utils/Slo/SloMonitorRuleCriteria.js +16 -1
  468. package/build/dist/Utils/Slo/SloMonitorRuleCriteria.js.map +1 -1
  469. package/build/dist/Utils/Slo/SloOverviewText.js +16 -0
  470. package/build/dist/Utils/Slo/SloOverviewText.js.map +1 -1
  471. package/build/dist/Utils/Slo/SloProjection.js.map +1 -1
  472. package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js +148 -0
  473. package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js.map +1 -0
  474. package/jest.config.json +3 -1
  475. package/package.json +1 -1
  476. package/test-setup.sh +103 -34
  477. package/tsconfig.json +13 -0
  478. package/Server/API/EnterpriseLicenseAPI.ts +0 -925
  479. package/Server/API/TeamComplianceAPI.ts +0 -158
  480. package/Server/Middleware/SCIMAuthorization.ts +0 -141
  481. package/Server/Services/TeamComplianceService.ts +0 -733
  482. package/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.ts +0 -186
  483. package/Server/Utils/InstanceHealth/PostgresHealth.ts +0 -286
  484. package/Tests/App/AdminDashboard/EnterpriseLicenseInstanceActivity.test.tsx +0 -451
  485. package/Tests/App/Dashboard/AuditLogsTable.test.tsx +0 -598
  486. package/Tests/App/Dashboard/SecurityEventsExplorer.test.tsx +0 -761
  487. package/Tests/App/Dashboard/SecurityEventsSideMenu.test.tsx +0 -247
  488. package/Tests/App/Dashboard/SecurityEventsTableColumns.test.tsx +0 -382
  489. package/Tests/App/Dashboard/SecurityEventsVolumeChart.test.tsx +0 -321
  490. package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +0 -1851
  491. package/Tests/Server/Middleware/SCIMAuthorization.test.ts +0 -525
  492. package/Tests/Server/Services/TeamComplianceServiceBehaviour.test.ts +0 -1845
  493. package/Tests/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.test.ts +0 -495
  494. package/Tests/Server/Utils/InstanceHealth/PostgresHealth.test.ts +0 -337
  495. package/Tests/Utils/EnterpriseLicenseSeats.test.ts +0 -576
  496. package/Tests/Utils/EnterpriseLicenseSync.test.ts +0 -568
  497. package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +0 -287
  498. package/Utils/EnterpriseLicense/EnterpriseLicenseSync.ts +0 -244
  499. package/build/dist/Server/API/EnterpriseLicenseAPI.js +0 -646
  500. package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +0 -1
  501. package/build/dist/Server/API/TeamComplianceAPI.js +0 -111
  502. package/build/dist/Server/API/TeamComplianceAPI.js.map +0 -1
  503. package/build/dist/Server/Middleware/SCIMAuthorization.js +0 -124
  504. package/build/dist/Server/Middleware/SCIMAuthorization.js.map +0 -1
  505. package/build/dist/Server/Services/TeamComplianceService.js +0 -537
  506. package/build/dist/Server/Services/TeamComplianceService.js.map +0 -1
  507. package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js +0 -145
  508. package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js.map +0 -1
  509. package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js +0 -194
  510. package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js.map +0 -1
  511. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +0 -168
  512. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +0 -1
  513. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSync.js +0 -174
  514. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSync.js.map +0 -1
@@ -0,0 +1,187 @@
1
+ import EnterpriseEdition from "../Enterprise/EnterpriseEdition";
2
+ import EnterpriseFeature from "../Enterprise/EnterpriseFeature";
3
+ import { ENTERPRISE_LICENSE_GRACE_PERIOD_IN_DAYS, ENTERPRISE_LICENSE_TRIAL_PERIOD_IN_DAYS, } from "../Enterprise/EnterpriseLicenseSnapshot";
4
+ import logger from "./Logger";
5
+ import PaymentRequiredException from "../../Types/Exception/PaymentRequiredException";
6
+ /*
7
+ * Which enterprise identity controls are live in this process.
8
+ *
9
+ * Every answer here follows the RUNTIME state of the feature behind it
10
+ * (EnterpriseEdition.isFeatureActive): SSO for the SSO requirements, the
11
+ * SAML/OIDC sign-in routes and the provider listings, SCIM for the SCIM Push
12
+ * Groups team locks. A feature is active when the Enterprise Edition is loaded
13
+ * and, with billing off, its license covers the feature (valid, in the grace
14
+ * period after it expired, or - with no license - inside the trial).
15
+ *
16
+ * The controls are relaxed where they cannot work:
17
+ * - on the Community Edition, which has no SAML/OIDC sign-in routes and no
18
+ * SCIM endpoints;
19
+ * - on an Enterprise install whose license has lapsed, where those routes
20
+ * refuse (ee/Server/Identity).
21
+ * Enforcing a leftover "Require SSO for login" there would lock every user
22
+ * out, and a leftover SCIM Push Groups lock would leave teams nobody can
23
+ * manage. Users sign in with their password instead (users who only ever used
24
+ * SSO reset it). The configuration itself is kept untouched - reads made for
25
+ * a caller report the requirement as off, and a caller's write can neither
26
+ * switch it off nor set it meanwhile (guardSsoRequirementWrite) - so running
27
+ * the Enterprise Edition again (with a valid license, or during its trial or
28
+ * grace period), or renewing the license, restores enforcement without a
29
+ * restart.
30
+ *
31
+ * Failure direction: an error while deciding answers "enforce", and an
32
+ * unknown license state counts as active (see isFeatureActive), so a read
33
+ * error never switches a control off.
34
+ */
35
+ class EditionEnforcement {
36
+ /*
37
+ * Whether configured SSO requirements - a project's requireSsoForLogin (and
38
+ * its required provider), the instance-wide requireSsoForLogin and a status
39
+ * page's requireSsoForLogin - are enforced.
40
+ */
41
+ static isSsoEnforced() {
42
+ try {
43
+ return EnterpriseEdition.isFeatureActive(EnterpriseFeature.SSO);
44
+ }
45
+ catch (err) {
46
+ logger.error("EditionEnforcement: could not tell whether SSO is enforced; enforcing it.");
47
+ logger.error(err);
48
+ return true;
49
+ }
50
+ }
51
+ // A configured SSO requirement that is also enforced in this process.
52
+ static isSsoRequired(configuredRequirement) {
53
+ if (!configuredRequirement) {
54
+ return false;
55
+ }
56
+ return EditionEnforcement.isSsoEnforced();
57
+ }
58
+ /*
59
+ * Whether SCIM Push Groups owns team membership: while a project's SCIM
60
+ * configuration has Push Groups on, teams and team members can only be
61
+ * changed by the identity provider. Relaxed on the Community Edition, and
62
+ * while the license does not cover SCIM, because then no SCIM endpoint
63
+ * answers the identity provider and nobody else could manage those teams.
64
+ */
65
+ static areScimTeamLocksEnforced() {
66
+ try {
67
+ return EnterpriseEdition.isFeatureActive(EnterpriseFeature.SCIM);
68
+ }
69
+ catch (err) {
70
+ logger.error("EditionEnforcement: could not tell whether SCIM team locks apply; applying them.");
71
+ logger.error(err);
72
+ return true;
73
+ }
74
+ }
75
+ /*
76
+ * Whether the SAML/OIDC sign-in routes answer right now. Provider listings
77
+ * (the lists a sign-in page offers) are empty when they do not, so no client
78
+ * sends a user into a route that answers 404 (Community Edition) or refuses
79
+ * because the license lapsed (Enterprise Edition).
80
+ */
81
+ static areSsoRoutesServed() {
82
+ try {
83
+ return EnterpriseEdition.isFeatureActive(EnterpriseFeature.SSO);
84
+ }
85
+ catch (err) {
86
+ logger.error("EditionEnforcement: could not tell whether the SSO routes are served; serving them.");
87
+ logger.error(err);
88
+ return true;
89
+ }
90
+ }
91
+ /*
92
+ * Whether a read should report the EFFECTIVE SSO requirement (false)
93
+ * instead of the stored one. Clients - the mobile app in particular, whose
94
+ * store builds cannot be patched - decide from these columns whether to
95
+ * start an SSO flow, and while SSO is not active that flow does not exist
96
+ * (Community Edition) or refuses (lapsed license).
97
+ *
98
+ * Only reads made for a caller are masked. Internal (root) reads see the
99
+ * stored value, and a read never writes, so the configuration is intact
100
+ * when SSO is active again. The write half is guardSsoRequirementWrite.
101
+ */
102
+ static shouldMaskSsoRequirementOnRead(props) {
103
+ if (!props || props.isRoot) {
104
+ return false;
105
+ }
106
+ return !EditionEnforcement.isSsoEnforced();
107
+ }
108
+ /*
109
+ * The write half of shouldMaskSsoRequirementOnRead, for the services'
110
+ * onBeforeUpdate. A caller whose reads are masked has only ever seen the
111
+ * requirement as off (no required provider), so what it writes to those
112
+ * columns cannot be taken at face value: a settings form, or an API client
113
+ * doing a read-modify-write, sends back the masked value it read. Saving it
114
+ * would switch a configured requirement off without anybody deciding to,
115
+ * and it would stay off once SSO is active again.
116
+ *
117
+ * So while this caller's reads are masked:
118
+ * - a write of the masked value (false, or no provider) is dropped from
119
+ * `data`, and the stored requirement is kept;
120
+ * - a write that would set a requirement (true, or a provider) is
121
+ * refused: it could neither be seen nor enforced until SSO is active;
122
+ * - a write that is left with nothing else to save is refused with the
123
+ * same explanation, rather than reporting a save that did not happen.
124
+ *
125
+ * Root writes, and every write while SSO is active, are left alone.
126
+ * Mutates `data`. Throws PaymentRequiredException.
127
+ */
128
+ static guardSsoRequirementWrite(input) {
129
+ if (!EditionEnforcement.shouldMaskSsoRequirementOnRead(input.props)) {
130
+ return;
131
+ }
132
+ const writtenColumns = input.columns.filter((column) => {
133
+ return input.data[column] !== undefined;
134
+ });
135
+ if (writtenColumns.length === 0) {
136
+ return;
137
+ }
138
+ const setsRequirement = writtenColumns.some((column) => {
139
+ return !EditionEnforcement.isMaskedSsoRequirementValue(input.data[column]);
140
+ });
141
+ if (setsRequirement) {
142
+ throw EditionEnforcement.createSsoRequirementUnchangeableException();
143
+ }
144
+ for (const column of writtenColumns) {
145
+ delete input.data[column];
146
+ }
147
+ /*
148
+ * `data` is the plain update onBeforeUpdate receives (a model instance
149
+ * has already been reduced to its set columns by
150
+ * DatabaseService.sanitizeUpdateData); a key left undefined writes
151
+ * nothing, so it does not count.
152
+ */
153
+ const hasOtherColumns = Object.keys(input.data).some((key) => {
154
+ return input.data[key] !== undefined;
155
+ });
156
+ if (!hasOtherColumns) {
157
+ throw EditionEnforcement.createSsoRequirementUnchangeableException();
158
+ }
159
+ }
160
+ // What a masked read reports for a requirement column: false or null.
161
+ static isMaskedSsoRequirementValue(value) {
162
+ return value === false || value === null;
163
+ }
164
+ static createSsoRequirementUnchangeableException() {
165
+ let isEnterpriseEditionLoaded = true;
166
+ try {
167
+ isEnterpriseEditionLoaded = EnterpriseEdition.isLoaded();
168
+ }
169
+ catch (err) {
170
+ logger.error(err);
171
+ }
172
+ return new PaymentRequiredException(isEnterpriseEditionLoaded
173
+ ? EditionEnforcement.SSO_REQUIREMENT_UNCHANGEABLE_LICENSE_MESSAGE
174
+ : EditionEnforcement.SSO_REQUIREMENT_UNCHANGEABLE_COMMUNITY_MESSAGE);
175
+ }
176
+ }
177
+ // Why guardSsoRequirementWrite refuses a write, on the Community Edition.
178
+ EditionEnforcement.SSO_REQUIREMENT_UNCHANGEABLE_COMMUNITY_MESSAGE = 'Single sign-on is part of the OneUptime Enterprise Edition and this server runs the Community Edition, so "Require SSO for login" shows as off, is not enforced and cannot be changed here. ' +
179
+ `A setting saved earlier is kept, and it is enforced again when this server runs the Enterprise Edition image with a valid license (or during its ${ENTERPRISE_LICENSE_TRIAL_PERIOD_IN_DAYS}-day trial, or the ${ENTERPRISE_LICENSE_GRACE_PERIOD_IN_DAYS}-day grace period after a license expires).`;
180
+ /*
181
+ * Why guardSsoRequirementWrite refuses a write, on an Enterprise install
182
+ * whose license does not cover SSO right now.
183
+ */
184
+ EditionEnforcement.SSO_REQUIREMENT_UNCHANGEABLE_LICENSE_MESSAGE = 'Single sign-on has stopped because the OneUptime Enterprise license is missing, expired or does not include SSO, so "Require SSO for login" shows as off, is not enforced and cannot be changed. ' +
185
+ "The saved setting is kept, and it is enforced again as soon as a master admin activates or renews the license from the edition label in the Admin Dashboard header.";
186
+ export default EditionEnforcement;
187
+ //# sourceMappingURL=EditionEnforcement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditionEnforcement.js","sourceRoot":"","sources":["../../../../Server/Utils/EditionEnforcement.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,35 @@
1
- import { getFrontendEnvVars } from "../EnvironmentConfig";
1
+ import { getFrontendEnvVars, isEnterpriseEditionRequested, } from "../EnvironmentConfig";
2
+ import EnterpriseEdition from "../Enterprise/EnterpriseEdition";
2
3
  import Response from "./Response";
3
4
  export const FRONTEND_ENVIRONMENT_CACHE_CONTROL = "private, no-store, no-cache, must-revalidate";
5
+ /*
6
+ * The edition the frontends are told about is the EFFECTIVE one: whether the
7
+ * enterprise module actually loaded in this process, not what the raw
8
+ * IS_ENTERPRISE_EDITION variable claims. A Community image with a leftover
9
+ * IS_ENTERPRISE_EDITION=true must not show enterprise pages whose server
10
+ * routes do not exist; ENTERPRISE_EDITION_REQUESTED_BUT_NOT_LOADED lets the
11
+ * admin UI explain that mismatch to a master admin instead.
12
+ *
13
+ * "Requested" is EnvironmentConfig's isEnterpriseEditionRequested, the same
14
+ * definition the App's boot guard uses: an explicit ONEUPTIME_EDITION=community
15
+ * withdraws the request, so the Enterprise image (which bakes
16
+ * IS_ENTERPRISE_EDITION=true) run as the Community Edition on purpose is not
17
+ * told to switch images. It is read on every call, like the rest of the
18
+ * environment served here.
19
+ */
20
+ export const getFrontendEnvironmentVariables = () => {
21
+ const frontendEnv = getFrontendEnvVars();
22
+ const isEnterpriseEditionLoaded = EnterpriseEdition.isLoaded();
23
+ const isEnterpriseEditionExpected = isEnterpriseEditionRequested(process.env);
24
+ frontendEnv["IS_ENTERPRISE_EDITION"] = isEnterpriseEditionLoaded
25
+ ? "true"
26
+ : "false";
27
+ frontendEnv["ENTERPRISE_EDITION_REQUESTED_BUT_NOT_LOADED"] =
28
+ isEnterpriseEditionExpected && !isEnterpriseEditionLoaded
29
+ ? "true"
30
+ : "false";
31
+ return frontendEnv;
32
+ };
4
33
  /*
5
34
  * The combined App server and the five standalone frontend servers must emit
6
35
  * exactly the same environment payload. Keeping the serializer here prevents
@@ -15,7 +44,7 @@ if(!window.process){
15
44
  if(!window.process.env){
16
45
  window.process.env = {}
17
46
  }
18
- window.process.env = ${JSON.stringify(getFrontendEnvVars())};
47
+ window.process.env = ${JSON.stringify(getFrontendEnvironmentVariables())};
19
48
  `;
20
49
  };
21
50
  /*
@@ -1 +1 @@
1
- {"version":3,"file":"FrontendEnvironment.js","sourceRoot":"","sources":["../../../../Server/Utils/FrontendEnvironment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,kCAAkC,GAC7C,8CAA8C,CAAC;AAEjD;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAiB,GAAW,EAAE;IACrE,OAAO;;;;;;;;uBAQc,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC;CAC1D,CAAC;AACF,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAGhC,CAAC,GAAmB,EAAE,GAAoB,EAAQ,EAAE;IAC9D,QAAQ,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAChC,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,kCAAkC,CAAC,CAAC;IACnE,QAAQ,CAAC,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,4BAA4B,EAAE,CAAC,CAAC;AAC5E,CAAC,CAAC"}
1
+ {"version":3,"file":"FrontendEnvironment.js","sourceRoot":"","sources":["../../../../Server/Utils/FrontendEnvironment.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,4BAA4B,GAC7B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,iBAAiB,MAAM,iCAAiC,CAAC;AAEhE,OAAO,QAAQ,MAAM,YAAY,CAAC;AAGlC,MAAM,CAAC,MAAM,kCAAkC,GAC7C,8CAA8C,CAAC;AAEjD;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAC1C,GAAe,EAAE;IACf,MAAM,WAAW,GAAe,kBAAkB,EAAE,CAAC;IACrD,MAAM,yBAAyB,GAAY,iBAAiB,CAAC,QAAQ,EAAE,CAAC;IACxE,MAAM,2BAA2B,GAAY,4BAA4B,CACvE,OAAO,CAAC,GAAG,CACZ,CAAC;IAEF,WAAW,CAAC,uBAAuB,CAAC,GAAG,yBAAyB;QAC9D,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,OAAO,CAAC;IACZ,WAAW,CAAC,6CAA6C,CAAC;QACxD,2BAA2B,IAAI,CAAC,yBAAyB;YACvD,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,OAAO,CAAC;IAEd,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEJ;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAiB,GAAW,EAAE;IACrE,OAAO;;;;;;;;uBAQc,IAAI,CAAC,SAAS,CAAC,+BAA+B,EAAE,CAAC;CACvE,CAAC;AACF,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAGhC,CAAC,GAAmB,EAAE,GAAoB,EAAQ,EAAE;IAC9D,QAAQ,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAChC,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,kCAAkC,CAAC,CAAC;IACnE,QAAQ,CAAC,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,4BAA4B,EAAE,CAAC,CAAC;AAC5E,CAAC,CAAC"}
@@ -1,36 +1,4 @@
1
1
  import Redis from "../../Infrastructure/Redis";
2
- /*
3
- * Where the previous counter sample is kept so a later run can turn Redis'
4
- * monotonic counters into "did this happen since we last looked".
5
- *
6
- * Redis stores its own history here on purpose: the counters and the sample
7
- * then share a lifetime, so a Redis restart clears both together and cannot
8
- * leave a stale baseline that fabricates an enormous delta. The uptime guard
9
- * below covers the case where the sample somehow outlives a restart anyway.
10
- *
11
- * Under memory pressure with an eviction policy this key can itself be evicted,
12
- * which costs one interval of eviction detection: the next run finds no sample,
13
- * re-seeds it, and reports deltas again from there.
14
- */
15
- const COUNTER_SAMPLE_KEY = "oneuptime-instance-health-redis-sample";
16
- const COUNTER_SAMPLE_TTL_IN_SECONDS = 60 * 60;
17
- /*
18
- * The minimum age of the baseline the counter deltas are measured against, so
19
- * every evaluation answers "did this happen in at least the last half hour"
20
- * rather than "did it happen in the last five minutes".
21
- *
22
- * That span is what keeps an edge-triggered signal from flapping. Evictions
23
- * arriving in bursts would otherwise clear on the first quiet tick and fire
24
- * again on the next, emailing every other cycle.
25
- *
26
- * Two samples are kept rather than one because a single rolling baseline is a
27
- * TUMBLING window, not a sliding one: the tick immediately after a roll would
28
- * compare against a five-minute-old sample and a lone quiet tick there would
29
- * resolve the notification, re-notifying on the next burst of the same ongoing
30
- * incident. Measuring against the OLDER of two samples makes the lookback
31
- * always at least this long (and at most twice it).
32
- */
33
- export const COUNTER_WINDOW_IN_SECONDS = 30 * 60;
34
2
  /*
35
3
  * INFO is a flat `field:value` document split into `# Section` blocks. Section
36
4
  * headers and comment lines are dropped; field names are unique across sections
@@ -110,103 +78,11 @@ async function getMaxClients(client, info) {
110
78
  }
111
79
  return null;
112
80
  }
113
- function parseCounterSample(value) {
114
- if (!value || typeof value !== "object" || Array.isArray(value)) {
115
- return null;
116
- }
117
- const sample = value;
118
- const evictedKeys = Number(sample["evictedKeys"]);
119
- const rejectedConnections = Number(sample["rejectedConnections"]);
120
- const uptimeInSeconds = Number(sample["uptimeInSeconds"]);
121
- if (!Number.isFinite(evictedKeys) ||
122
- !Number.isFinite(rejectedConnections) ||
123
- !Number.isFinite(uptimeInSeconds)) {
124
- return null;
125
- }
126
- return { evictedKeys, rejectedConnections, uptimeInSeconds };
127
- }
128
- async function readCounterSamples(client) {
129
- try {
130
- const raw = await client.get(COUNTER_SAMPLE_KEY);
131
- if (!raw) {
132
- return null;
133
- }
134
- const parsed = JSON.parse(raw);
135
- if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
136
- return null;
137
- }
138
- const stored = parsed;
139
- const older = parseCounterSample(stored["older"]);
140
- const newer = parseCounterSample(stored["newer"]);
141
- if (older && newer) {
142
- return { older, newer };
143
- }
144
- /*
145
- * A single-sample payload is what the previous release wrote. Treat it as
146
- * both ends of the pair so an upgrade keeps its baseline instead of going
147
- * blind for a window.
148
- */
149
- const legacy = parseCounterSample(parsed);
150
- return legacy ? { older: legacy, newer: legacy } : null;
151
- }
152
- catch (_a) {
153
- // A missing or unreadable sample simply means no delta this run.
154
- return null;
155
- }
156
- }
157
81
  /*
158
- * Returns whether the baseline was actually stored. The caller needs to know,
159
- * because a write can fail for a reason that does not stop the key from being
160
- * kept alive by other means — see getRedisHealthSnapshot.
82
+ * One INFO read, plus the CONFIG fallback for maxclients. Exported so the
83
+ * Enterprise worker's snapshot reads Redis exactly the way this file does.
161
84
  */
162
- async function writeCounterSamples(client, samples) {
163
- try {
164
- await client.set(COUNTER_SAMPLE_KEY, JSON.stringify(samples), "EX", COUNTER_SAMPLE_TTL_IN_SECONDS);
165
- return true;
166
- }
167
- catch (_a) {
168
- /*
169
- * Losing the baseline must never fail the health evaluation that produced
170
- * this snapshot, so the error is swallowed and reported through the return.
171
- */
172
- return false;
173
- }
174
- }
175
- // Keep a baseline alive across the runs that do not rewrite it.
176
- async function refreshCounterSampleTtl(client) {
177
- try {
178
- await client.expire(COUNTER_SAMPLE_KEY, COUNTER_SAMPLE_TTL_IN_SECONDS);
179
- }
180
- catch (_a) {
181
- // Same reasoning as writeCounterSamples: never fail the evaluation over this.
182
- }
183
- }
184
- /*
185
- * The pair rolls only once the NEWER sample has aged past the window, which
186
- * promotes it to `older` and starts a fresh one. Deltas are always measured
187
- * against `older`, so the lookback never drops below the window. Redis' own
188
- * uptime measures that age, which avoids trusting either machine's clock.
189
- */
190
- export function shouldRollCounterSamples(data) {
191
- if (!data.previous || data.didRestart) {
192
- return true;
193
- }
194
- return (data.currentUptimeInSeconds - data.previous.newer.uptimeInSeconds >=
195
- COUNTER_WINDOW_IN_SECONDS);
196
- }
197
- /*
198
- * Compare a monotonic counter against its previous value. A decrease, or a
199
- * shorter uptime than the sample was taken at, means Redis restarted and the
200
- * counter began again from zero — the difference is meaningless, so report no
201
- * delta rather than a fabricated spike.
202
- */
203
- export function getCounterDelta(data) {
204
- if (data.didRestart || data.current < data.previous) {
205
- return null;
206
- }
207
- return data.current - data.previous;
208
- }
209
- async function readInfoSnapshot(client) {
85
+ export async function readInfoSnapshot(client) {
210
86
  const info = parseRedisInfo(await client.info());
211
87
  return buildRedisInfoSnapshot({
212
88
  info,
@@ -215,9 +91,9 @@ async function readInfoSnapshot(client) {
215
91
  }
216
92
  /*
217
93
  * Read-only view for the admin health API. It deliberately does NOT touch the
218
- * stored counter sample: advancing that baseline here would consume the delta
219
- * the worker needs, so a page refresh could hide an eviction burst from the
220
- * notification that exists to catch it.
94
+ * counter sample the Enterprise health worker keeps: advancing that baseline
95
+ * here would consume the delta the worker needs, so a page refresh could hide
96
+ * an eviction burst from the notification that exists to catch it.
221
97
  */
222
98
  export async function getRedisInfoSnapshot() {
223
99
  const client = Redis.getClient();
@@ -226,67 +102,4 @@ export async function getRedisInfoSnapshot() {
226
102
  }
227
103
  return await readInfoSnapshot(client);
228
104
  }
229
- /*
230
- * The evaluating worker's view: the same INFO read, plus the counter deltas
231
- * that turn cumulative totals into "did this happen in roughly the last
232
- * COUNTER_WINDOW_IN_SECONDS". Returns null when Redis is unreachable, which the
233
- * caller treats as "cannot evaluate" rather than "healthy".
234
- */
235
- export async function getRedisHealthSnapshot() {
236
- const client = Redis.getClient();
237
- if (!client || !Redis.isConnected()) {
238
- return null;
239
- }
240
- const snapshot = await readInfoSnapshot(client);
241
- const previousSamples = await readCounterSamples(client);
242
- const didRestart = Boolean(previousSamples &&
243
- previousSamples.older.uptimeInSeconds > snapshot.uptimeInSeconds);
244
- // Deltas always measure against the older half, never the freshly rolled one.
245
- const baseline = previousSamples
246
- ? previousSamples.older
247
- : null;
248
- const current = {
249
- evictedKeys: snapshot.evictedKeys,
250
- rejectedConnections: snapshot.rejectedConnections,
251
- uptimeInSeconds: snapshot.uptimeInSeconds,
252
- };
253
- const wantsRoll = shouldRollCounterSamples({
254
- previous: previousSamples,
255
- currentUptimeInSeconds: snapshot.uptimeInSeconds,
256
- didRestart,
257
- });
258
- const didRoll = wantsRoll
259
- ? await writeCounterSamples(client, {
260
- older: previousSamples && !didRestart ? previousSamples.newer : current,
261
- newer: current,
262
- })
263
- : false;
264
- /*
265
- * Keep the existing samples alive whenever they were not rolled — including
266
- * when the roll FAILED, which is the case that matters most. Under the
267
- * noeviction policy Redis rejects SET once it is out of memory but still
268
- * serves EXPIRE, so letting a failed write skip the refresh would expire the
269
- * baseline precisely when memory is full: eviction detection would then go
270
- * permanently blind at the moment it is needed, because every later write
271
- * fails the same way and the key never returns.
272
- */
273
- if (!didRoll) {
274
- await refreshCounterSampleTtl(client);
275
- }
276
- return Object.assign(Object.assign({}, snapshot), { counterWindowInSeconds: baseline
277
- ? snapshot.uptimeInSeconds - baseline.uptimeInSeconds
278
- : null, evictedKeysDelta: baseline
279
- ? getCounterDelta({
280
- current: snapshot.evictedKeys,
281
- previous: baseline.evictedKeys,
282
- didRestart,
283
- })
284
- : null, rejectedConnectionsDelta: baseline
285
- ? getCounterDelta({
286
- current: snapshot.rejectedConnections,
287
- previous: baseline.rejectedConnections,
288
- didRestart,
289
- })
290
- : null });
291
- }
292
105
  //# sourceMappingURL=RedisHealth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RedisHealth.js","sourceRoot":"","sources":["../../../../../Server/Utils/InstanceHealth/RedisHealth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RedisHealth.js","sourceRoot":"","sources":["../../../../../Server/Utils/InstanceHealth/RedisHealth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import { escapeMarkdownInline } from "../../../Utils/Markdown/MarkdownEscape";
2
+ import RootCauseList from "./RootCauseList";
3
+ class AffectedResourceList {
4
+ static render(input) {
5
+ const items = input.entries.map((entry) => {
6
+ /*
7
+ * The kind is bold so each item's first line stands out from the
8
+ * detail bullets under it — the value at the end of the line is
9
+ * bold too, so the eye lands on what it is and how bad it is.
10
+ */
11
+ const kind = escapeMarkdownInline(entry.kind).trim();
12
+ return {
13
+ title: [kind ? `**${kind}**` : "", entry.name.trim()]
14
+ .filter((part) => {
15
+ return part.length > 0;
16
+ })
17
+ .join(" "),
18
+ value: entry.value,
19
+ details: entry.details.map((detail) => {
20
+ return {
21
+ label: escapeMarkdownInline(detail.label),
22
+ value: detail.value,
23
+ };
24
+ }),
25
+ };
26
+ });
27
+ const lines = [RootCauseList.render(items)];
28
+ const hiddenCount = input.totalCount - input.entries.length;
29
+ if (hiddenCount > 0) {
30
+ /*
31
+ * The blank line matters: without it the summary is a lazy
32
+ * continuation of the last item's final bullet, not a paragraph of
33
+ * its own.
34
+ */
35
+ lines.push("");
36
+ lines.push(`*... and ${hiddenCount} more ${escapeMarkdownInline(input.overflowNoun)}*`);
37
+ }
38
+ return `\n\n**${escapeMarkdownInline(input.heading)}** (${input.totalCount} total)\n\n${lines.join("\n")}`;
39
+ }
40
+ /*
41
+ * A resource identifier as an inline code span. The identifiers come from
42
+ * telemetry attributes, and a VMware VM or a Proxmox guest can be named
43
+ * anything — RootCauseList.code keeps a name with backticks or line breaks
44
+ * inside its span.
45
+ */
46
+ static code(value) {
47
+ return RootCauseList.code(value);
48
+ }
49
+ /*
50
+ * A display name alongside the identifier it abbreviates — a Proxmox
51
+ * guest's name and its `qemu/100` id, a Ceph pool's name and number, a
52
+ * vSphere resource pool's name and inventory path. Either half may be
53
+ * missing; when both are the same only one is shown.
54
+ */
55
+ static codeWithId(input) {
56
+ const name = AffectedResourceList.code(input.name);
57
+ const id = AffectedResourceList.code(input.id);
58
+ if (name && id && name !== id) {
59
+ return `${name} (${id})`;
60
+ }
61
+ return name || id;
62
+ }
63
+ }
64
+ // How many resources the list shows before it summarises the rest.
65
+ AffectedResourceList.MAX_ENTRIES = 10;
66
+ export default AffectedResourceList;
67
+ //# sourceMappingURL=AffectedResourceList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AffectedResourceList.js","sourceRoot":"","sources":["../../../../../Server/Utils/Monitor/AffectedResourceList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,aAGN,MAAM,iBAAiB,CAAC;AAqDzB,MAAqB,oBAAoB;IAIhC,MAAM,CAAC,MAAM,CAAC,KASpB;QACC,MAAM,KAAK,GAA6B,KAAK,CAAC,OAAO,CAAC,GAAG,CACvD,CAAC,KAAgC,EAAqB,EAAE;YACtD;;;;eAIG;YACH,MAAM,IAAI,GAAW,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YAE7D,OAAO;gBACL,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;qBAClD,MAAM,CAAC,CAAC,IAAY,EAAW,EAAE;oBAChC,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;gBACzB,CAAC,CAAC;qBACD,IAAI,CAAC,GAAG,CAAC;gBACZ,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CACxB,CAAC,MAAkC,EAAuB,EAAE;oBAC1D,OAAO;wBACL,KAAK,EAAE,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC;wBACzC,KAAK,EAAE,MAAM,CAAC,KAAK;qBACpB,CAAC;gBACJ,CAAC,CACF;aACF,CAAC;QACJ,CAAC,CACF,CAAC;QAEF,MAAM,KAAK,GAAkB,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAE3D,MAAM,WAAW,GAAW,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAEpE,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB;;;;eAIG;YACH,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CACR,YAAY,WAAW,SAAS,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAC5E,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,KAAK,CAAC,UAAU,cAAc,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC7G,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,IAAI,CAAC,KAAgC;QACjD,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,UAAU,CAAC,KAGxB;QACC,MAAM,IAAI,GAAW,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3D,MAAM,EAAE,GAAW,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAEvD,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAC9B,OAAO,GAAG,IAAI,KAAK,EAAE,GAAG,CAAC;QAC3B,CAAC;QAED,OAAO,IAAI,IAAI,EAAE,CAAC;IACpB,CAAC;;AAxFD,mEAAmE;AAC5C,gCAAW,GAAW,EAAE,CAAC;eAF7B,oBAAoB"}
@@ -725,7 +725,7 @@ export default class CompareCriteria {
725
725
  * reads naturally ("is 42, 55, 60"). For larger arrays, summarize
726
726
  * — dumping 30+ numbers on one line makes the root cause unreadable
727
727
  * and the detailed breakdown is shown in the Breaching Samples
728
- * table below.
728
+ * list below.
729
729
  */
730
730
  const MAX_INLINE = 5;
731
731
  if (values.length <= MAX_INLINE) {
@@ -15,6 +15,7 @@ import MetricService from "../../../Services/MetricService";
15
15
  import CaptureSpan from "../../Telemetry/CaptureSpan";
16
16
  import InBetween from "../../../../Types/BaseDatabase/InBetween";
17
17
  import CronTab from "../../CronTab";
18
+ import MonitoringIntervalUtil from "../../../../Utils/Monitor/MonitoringIntervalUtil";
18
19
  import logger from "../../Logger";
19
20
  /**
20
21
  * Outcome of trying to turn an "evaluate over time" filter into a value the
@@ -362,7 +363,13 @@ class EvaluateOverTime {
362
363
  * it is the safest estimate of the cadence.
363
364
  */
364
365
  static getSamplingIntervalInSeconds(data) {
365
- const configuredIntervalInSeconds = CronTab.getIntervalInSeconds(data.monitoringInterval);
366
+ /*
367
+ * Through the normalizer first: a monitor storing "5m" has a perfectly
368
+ * well-defined cadence, and treating it as "cadence unknown" made
369
+ * over-time windows fall back to guessing from the data.
370
+ */
371
+ const configuredIntervalInSeconds = CronTab.getIntervalInSeconds(MonitoringIntervalUtil.toCronOrNull(data.monitoringInterval) ||
372
+ data.monitoringInterval);
366
373
  if (configuredIntervalInSeconds !== null) {
367
374
  return configuredIntervalInSeconds;
368
375
  }
@@ -1 +1 @@
1
- {"version":3,"file":"EvaluateOverTime.js","sourceRoot":"","sources":["../../../../../../Server/Utils/Monitor/Criteria/EvaluateOverTime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EvaluateOverTime.js","sourceRoot":"","sources":["../../../../../../Server/Utils/Monitor/Criteria/EvaluateOverTime.ts"],"names":[],"mappings":"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"}