@oneuptime/common 12.0.32 → 12.0.33

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 (597) hide show
  1. package/Models/AnalyticsModels/Span.ts +14 -0
  2. package/Models/DatabaseModels/EnterpriseLicense.ts +56 -0
  3. package/Models/DatabaseModels/Index.ts +10 -0
  4. package/Models/DatabaseModels/Monitor.ts +76 -0
  5. package/Models/DatabaseModels/NetworkAlertPolicy.ts +690 -0
  6. package/Models/DatabaseModels/NetworkDevice.ts +176 -1
  7. package/Models/DatabaseModels/NetworkSite.ts +201 -2
  8. package/Models/DatabaseModels/NetworkSiteType.ts +102 -3
  9. package/Models/DatabaseModels/NetworkSnmpCredentialProfile.ts +841 -0
  10. package/Models/DatabaseModels/TelemetryException.ts +119 -0
  11. package/Models/DatabaseModels/UserNotificationEmailRollupBatch.ts +334 -0
  12. package/Models/DatabaseModels/UserNotificationEmailRollupItem.ts +370 -0
  13. package/Models/DatabaseModels/UserNotificationEmailRollupSetting.ts +282 -0
  14. package/Server/API/EnterpriseLicenseAPI.ts +391 -64
  15. package/Server/API/LlmProviderAPI.ts +137 -22
  16. package/Server/EnvironmentConfig.ts +14 -0
  17. package/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.ts +55 -0
  18. package/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.ts +31 -0
  19. package/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.ts +124 -0
  20. package/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.ts +132 -0
  21. package/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.ts +79 -0
  22. package/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.ts +191 -0
  23. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +12 -0
  24. package/Server/Infrastructure/QueueWorker.ts +38 -8
  25. package/Server/Middleware/BearerTokenAuthorization.ts +12 -0
  26. package/Server/Middleware/ProjectAuthorization.ts +11 -0
  27. package/Server/Middleware/SCIMAuthorization.ts +12 -0
  28. package/Server/Middleware/TelemetryIngest.ts +11 -0
  29. package/Server/Services/AIBillingService.ts +101 -27
  30. package/Server/Services/EnterpriseLicenseInstanceService.ts +197 -0
  31. package/Server/Services/EnterpriseLicenseService.ts +55 -0
  32. package/Server/Services/Index.ts +10 -0
  33. package/Server/Services/MonitorService.ts +143 -21
  34. package/Server/Services/MonitorStatusTimelineService.ts +150 -8
  35. package/Server/Services/MonitorTemplateService.ts +217 -1
  36. package/Server/Services/NetworkAlertPolicyEngineService.ts +2159 -0
  37. package/Server/Services/NetworkAlertPolicyService.ts +944 -0
  38. package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +9 -10
  39. package/Server/Services/NetworkDeviceAutoImportRuleService.ts +60 -15
  40. package/Server/Services/NetworkDeviceService.ts +1032 -73
  41. package/Server/Services/NetworkSiteService.ts +1502 -129
  42. package/Server/Services/NetworkSiteTypeService.ts +1216 -0
  43. package/Server/Services/NetworkSnmpCredentialProfileService.ts +238 -0
  44. package/Server/Services/NotificationService.ts +118 -28
  45. package/Server/Services/ProjectService.ts +105 -48
  46. package/Server/Services/StatusPagePrivateUserService.ts +103 -3
  47. package/Server/Services/UserNotificationEmailRollupBatchService.ts +78 -0
  48. package/Server/Services/UserNotificationEmailRollupItemService.ts +79 -0
  49. package/Server/Services/UserNotificationEmailRollupSettingService.ts +113 -0
  50. package/Server/Services/UserNotificationSettingService.ts +62 -25
  51. package/Server/Services/UserService.ts +95 -0
  52. package/Server/Types/Database/QueryHelper.ts +2 -2
  53. package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +14 -3
  54. package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +10 -0
  55. package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +10 -0
  56. package/Server/Utils/AI/SRE/Insights/InsightTriageRunner.ts +62 -1
  57. package/Server/Utils/AI/Toolbox/AlertTools.ts +15 -1
  58. package/Server/Utils/Billing/BillingFailureNoticeThrottle.ts +80 -0
  59. package/Server/Utils/DataSource/HttpFetch.ts +9 -2
  60. package/Server/Utils/EmailRollup/EmailRollupConstants.ts +98 -0
  61. package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +872 -0
  62. package/Server/Utils/EmailRollup/EmailRollupRenderer.ts +781 -0
  63. package/Server/Utils/EmailRollup/EmailRollupWriter.ts +368 -0
  64. package/Server/Utils/LLM/LLMService.ts +78 -0
  65. package/Server/Utils/LogRedaction.ts +8 -0
  66. package/Server/Utils/Logger.ts +79 -1
  67. package/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.ts +190 -0
  68. package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +9 -2
  69. package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +61 -1
  70. package/Server/Utils/Monitor/MonitorCriteriaDataExtractor.ts +14 -0
  71. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +49 -0
  72. package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +255 -4
  73. package/Server/Utils/Monitor/MonitorMetricUtil.ts +41 -0
  74. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +43 -0
  75. package/Server/Utils/Monitor/NetworkDeviceHydrationUtil.ts +499 -19
  76. package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +66 -10
  77. package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +238 -44
  78. package/Server/Utils/Monitor/NetworkInventoryUtil.ts +146 -39
  79. package/Server/Utils/NetworkDevice/DeviceHealthAggregation.ts +31 -18
  80. package/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.ts +213 -0
  81. package/Server/Utils/OutboundUserAgent.ts +152 -0
  82. package/Server/Utils/StartServer.ts +51 -19
  83. package/Server/Utils/Telemetry/CaptureSpan.ts +32 -8
  84. package/Server/Utils/Telemetry/ErrorClassResolver.ts +120 -0
  85. package/Server/Utils/Telemetry/SpanUtil.ts +33 -0
  86. package/Server/Utils/Telemetry.ts +198 -51
  87. package/Server/Views/Partials/SensitiveUrlToken.ejs +140 -0
  88. package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +134 -33
  89. package/Tests/App/Dashboard/AskAiSuggestedPrompts.test.ts +279 -0
  90. package/Tests/App/Dashboard/DashboardEditPermissions.test.tsx +517 -0
  91. package/Tests/App/Dashboard/DashboardVariablesDiscard.test.tsx +26 -0
  92. package/Tests/App/Dashboard/DeviceStatusHero.test.tsx +588 -0
  93. package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +18 -9
  94. package/Tests/App/Dashboard/MonitorCreateFromMonitorBackedDevice.test.tsx +632 -0
  95. package/Tests/App/Dashboard/MonitorRecommendationCreateProgress.test.tsx +682 -0
  96. package/Tests/App/Dashboard/MonitorTypePicker.test.tsx +4 -2
  97. package/Tests/App/Dashboard/NetworkDeviceCreateFormMonitorBinding.test.tsx +676 -0
  98. package/Tests/App/Dashboard/NetworkDeviceCreateFormPingMonitor.test.tsx +791 -0
  99. package/Tests/App/Dashboard/NetworkDeviceCreateFormProbeAndSnmp.test.tsx +833 -0
  100. package/Tests/App/Dashboard/NetworkDeviceCriteriaFilter.test.ts +161 -0
  101. package/Tests/App/Dashboard/NetworkDeviceSettingsMonitoringSection.test.tsx +458 -0
  102. package/Tests/App/Dashboard/NetworkSideMenu.test.tsx +41 -5
  103. package/Tests/App/Dashboard/PingMonitorProvisioning.test.ts +368 -0
  104. package/Tests/App/Dashboard/RecommendationCard.test.tsx +796 -0
  105. package/Tests/App/Dashboard/RecommendationToolbar.test.tsx +519 -0
  106. package/Tests/App/Dashboard/RecommendationsList.test.tsx +661 -0
  107. package/Tests/App/Dashboard/UseBulkCreatePingMonitors.test.tsx +899 -0
  108. package/Tests/App/Dashboard/UseBulkSnmpCredentialProfileActions.test.tsx +732 -0
  109. package/Tests/App/SensitiveUrlTokenBootstrap.test.ts +256 -0
  110. package/Tests/App/StatusPage/StatusPageIndexPageRobotsMeta.test.ts +11 -1
  111. package/Tests/App/StatusPage/StatusPageLoginCodeBootstrap.test.ts +9 -4
  112. package/Tests/Models/NetworkSiteHierarchy.test.ts +41 -4
  113. package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +951 -7
  114. package/Tests/Server/API/LlmProviderConnectionTest.test.ts +522 -0
  115. package/Tests/Server/Infrastructure/Postgres/NetworkSnmpCredentialProfilesAndAlertPoliciesMigration.test.ts +854 -0
  116. package/Tests/Server/Infrastructure/Postgres/SchemaMigrationsOrdering.test.ts +18 -0
  117. package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupTableMigration.test.ts +535 -0
  118. package/Tests/Server/Services/AIChatPrivacyPin.test.ts +560 -0
  119. package/Tests/Server/Services/BillingRechargeOwnerEmailGuards.test.ts +783 -0
  120. package/Tests/Server/Services/EnterpriseLicenseInstanceServiceDeletionUsage.test.ts +707 -0
  121. package/Tests/Server/Services/EnterpriseLicenseServiceUsageAggregationLock.test.ts +329 -0
  122. package/Tests/Server/Services/MonitorServiceDeleteNetworkDeviceCleanup.test.ts +294 -0
  123. package/Tests/Server/Services/MonitorStatusBridgeProbePath.test.ts +802 -0
  124. package/Tests/Server/Services/MonitorStatusTimelineService.test.ts +72 -2
  125. package/Tests/Server/Services/NetworkAlertPolicyEngineHooks.test.ts +752 -0
  126. package/Tests/Server/Services/NetworkAlertPolicyEngineService.test.ts +1849 -0
  127. package/Tests/Server/Services/NetworkAlertPolicyModel.test.ts +1793 -0
  128. package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +47 -4
  129. package/Tests/Server/Services/NetworkDeviceAutoImportRuleService.test.ts +97 -12
  130. package/Tests/Server/Services/NetworkDeviceAutoMonitorLifecycle.test.ts +148 -3
  131. package/Tests/Server/Services/NetworkDeviceMonitorBindingUpdateGuard.test.ts +514 -0
  132. package/Tests/Server/Services/NetworkDeviceMonitorStatusStamp.test.ts +447 -58
  133. package/Tests/Server/Services/NetworkDeviceMonitoringMethodTransition.test.ts +739 -0
  134. package/Tests/Server/Services/NetworkDevicePollingTenancy.test.ts +501 -0
  135. package/Tests/Server/Services/NetworkDeviceSiteDefaultProbe.test.ts +432 -0
  136. package/Tests/Server/Services/NetworkSiteMonitoringDefaults.test.ts +498 -0
  137. package/Tests/Server/Services/NetworkSiteRollupPolicyAndMaintenance.test.ts +337 -55
  138. package/Tests/Server/Services/NetworkSiteService.test.ts +1868 -131
  139. package/Tests/Server/Services/NetworkSiteTypeService.test.ts +1109 -0
  140. package/Tests/Server/Services/NetworkSnmpCredentialProfileModel.test.ts +926 -0
  141. package/Tests/Server/Services/NetworkSnmpCredentialProfileService.test.ts +796 -0
  142. package/Tests/Server/Services/ProjectServiceNetworkSiteTypeDefaults.test.ts +214 -0
  143. package/Tests/Server/Services/StatusPagePrivateUserEmailChangePasswordResetExpiry.test.ts +269 -0
  144. package/Tests/Server/Services/UserEmailChangePasswordResetExpiry.test.ts +472 -0
  145. package/Tests/Server/Services/UserNotificationEmailRollupModels.test.ts +569 -0
  146. package/Tests/Server/Services/UserNotificationEmailRollupSettingModel.test.ts +314 -0
  147. package/Tests/Server/Services/UserNotificationEmailRollupSettingService.test.ts +409 -0
  148. package/Tests/Server/Services/UserNotificationSettingRollupRouting.test.ts +856 -0
  149. package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +102 -1
  150. package/Tests/Server/Types/Database/Permissions/DashboardAccessPermission.test.ts +321 -0
  151. package/Tests/Server/Types/Database/QueryHelperOperators.test.ts +17 -0
  152. package/Tests/Server/Utils/AI/AlertMonitorFilters.test.ts +124 -0
  153. package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +208 -0
  154. package/Tests/Server/Utils/AI/LLMServiceToolCalling.test.ts +235 -0
  155. package/Tests/Server/Utils/AI/ObservabilityChatPrompt.test.ts +253 -0
  156. package/Tests/Server/Utils/Captcha.test.ts +422 -0
  157. package/Tests/Server/Utils/DataSource/HttpFetch.test.ts +96 -2
  158. package/Tests/Server/Utils/Database/MigrationFailureLog.test.ts +466 -0
  159. package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerBehaviour.test.ts +1096 -0
  160. package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerClaim.test.ts +466 -0
  161. package/Tests/Server/Utils/EmailRollup/EmailRollupRenderer.test.ts +1428 -0
  162. package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +752 -0
  163. package/Tests/Server/Utils/EmailRollup/EmailRollupWriter.test.ts +864 -0
  164. package/Tests/Server/Utils/LoggerFaultDemotion.test.ts +346 -0
  165. package/Tests/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.test.ts +633 -0
  166. package/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.ts +196 -0
  167. package/Tests/Server/Utils/Monitor/DatabaseMetricWrite.test.ts +367 -0
  168. package/Tests/Server/Utils/Monitor/MonitorCriteriaObservationBuilderUnits.test.ts +100 -0
  169. package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +5 -0
  170. package/Tests/Server/Utils/Monitor/NetworkDeviceHydrationUtil.test.ts +512 -31
  171. package/Tests/Server/Utils/Monitor/NetworkDeviceMetricUtil.test.ts +252 -0
  172. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +479 -42
  173. package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +351 -5
  174. package/Tests/Server/Utils/NetworkDevice/DeviceHealthAggregation.test.ts +136 -12
  175. package/Tests/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.test.ts +306 -0
  176. package/Tests/Server/Utils/OutboundUserAgent.test.ts +266 -0
  177. package/Tests/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClientUserAgent.test.ts +141 -0
  178. package/Tests/Server/Utils/Telemetry/ErrorClassResolver.test.ts +298 -0
  179. package/Tests/Server/Utils/Telemetry.test.ts +456 -66
  180. package/Tests/Types/Monitor/DatabaseMetricCatalog.test.ts +388 -0
  181. package/Tests/Types/Monitor/MonitorStepDatabaseMonitor.test.ts +243 -0
  182. package/Tests/Types/Monitor/MonitorStepDefaultTelemetryConfig.test.ts +1 -0
  183. package/Tests/Types/Monitor/MonitorType.test.ts +1 -0
  184. package/Tests/Types/Monitor/MonitorTypeKeywords.test.ts +16 -7
  185. package/Tests/Types/Monitor/NetworkDeviceAlertPack.test.ts +60 -0
  186. package/Tests/Types/NetworkDevice/NetworkAlertPolicyScope.test.ts +655 -0
  187. package/Tests/Types/NetworkDevice/NetworkDeviceMonitoringMethod.test.ts +115 -26
  188. package/Tests/Types/NetworkSite/DefaultNetworkSiteType.test.ts +39 -0
  189. package/Tests/Types/NotificationSetting/NotificationEmailRollupPolicy.test.ts +299 -0
  190. package/Tests/Types/Telemetry/ErrorClass.test.ts +483 -0
  191. package/Tests/UI/Components/BasicRadioButtons.test.tsx +336 -0
  192. package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +15 -0
  193. package/Tests/UI/Components/ProgressBar.test.tsx +38 -2
  194. package/Tests/UI/Components/SideMenuItem.test.tsx +226 -4
  195. package/Tests/UI/Components/SideMenuSection.test.tsx +310 -0
  196. package/Tests/UI/Components/SideOverSubmitState.test.tsx +335 -0
  197. package/Tests/UI/Utils/PageScrollLock.test.tsx +377 -0
  198. package/Tests/UI/Utils/PermissionGate.test.ts +78 -0
  199. package/Tests/UI/Utils/SensitiveUrlToken.test.ts +140 -0
  200. package/Tests/Utils/EnterpriseLicenseSeats.test.ts +69 -0
  201. package/Tests/Utils/EnterpriseLicenseSync.test.ts +7 -1
  202. package/Tests/Utils/EnterpriseLicenseUsage.test.ts +433 -2
  203. package/Tests/Utils/Monitor/MonitorMetricType.test.ts +280 -1
  204. package/Tests/Utils/Monitor/MonitorSummarySnapshotUtil.test.ts +1 -0
  205. package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +38 -0
  206. package/Tests/Utils/NetworkDevice/DeviceHealthStateUtil.test.ts +284 -23
  207. package/Tests/Utils/NetworkDevice/DeviceReachabilityUtil.test.ts +177 -0
  208. package/Tests/Utils/NetworkDevice/MonitoringMethodThreadedClassifiers.test.ts +992 -0
  209. package/Tests/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.test.ts +427 -0
  210. package/Tests/Utils/NetworkDevice/ReachabilityStampConsistency.test.ts +185 -0
  211. package/Tests/Utils/NetworkDevice/SnmpCredentialUtil.test.ts +268 -0
  212. package/Tests/Utils/NetworkDiscovery/AutoImportRuleMatcher.test.ts +55 -5
  213. package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +98 -21
  214. package/Tests/Utils/NetworkDiscovery/DiscoveryImportEligibility.test.ts +98 -20
  215. package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +8 -7
  216. package/Tests/Utils/NetworkDiscovery/PingMonitorBuilderForAddress.test.ts +274 -0
  217. package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +230 -51
  218. package/Tests/Utils/NetworkSite/TypeHierarchyUtil.test.ts +209 -0
  219. package/Tests/Utils/Telemetry/CaptureSpanExportGating.test.ts +145 -0
  220. package/Types/AI/ExceptionAIClassification.ts +10 -24
  221. package/Types/Email/EmailTemplateType.ts +2 -0
  222. package/Types/EnterpriseLicense/EnterpriseLicenseInstanceSummary.ts +5 -0
  223. package/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.ts +13 -0
  224. package/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.ts +6 -0
  225. package/Types/Exception/ApiException.ts +10 -0
  226. package/Types/Exception/BadDataException.ts +11 -0
  227. package/Types/Exception/BadRequestException.ts +11 -0
  228. package/Types/Exception/Exception.ts +65 -0
  229. package/Types/Exception/ForbiddenException.ts +10 -0
  230. package/Types/Exception/NotAuthenticatedException.ts +10 -0
  231. package/Types/Exception/NotAuthorizedException.ts +10 -0
  232. package/Types/Exception/NotFoundException.ts +11 -0
  233. package/Types/Exception/PayloadTooLargeException.ts +11 -0
  234. package/Types/Exception/PaymentRequiredException.ts +10 -0
  235. package/Types/Exception/ServiceUnavailableException.ts +10 -0
  236. package/Types/Exception/SsoAuthorizationException.ts +10 -0
  237. package/Types/Exception/TenantNotFoundException.ts +11 -0
  238. package/Types/Exception/TimeoutException.ts +10 -0
  239. package/Types/Exception/TooManyRequestsException.ts +10 -0
  240. package/Types/Exception/UnableToReachServer.ts +10 -0
  241. package/Types/Exception/WebsiteRequestException.ts +10 -0
  242. package/Types/Monitor/CriteriaFilter.ts +60 -2
  243. package/Types/Monitor/DatabaseMetricCatalog.ts +693 -0
  244. package/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.ts +83 -0
  245. package/Types/Monitor/MonitorCriteriaInstance.ts +76 -0
  246. package/Types/Monitor/MonitorMetricType.ts +71 -0
  247. package/Types/Monitor/MonitorStep.ts +76 -0
  248. package/Types/Monitor/MonitorStepDatabaseMonitor.ts +171 -0
  249. package/Types/Monitor/MonitorStepSqlMonitor.ts +2 -20
  250. package/Types/Monitor/MonitorType.ts +47 -1
  251. package/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.ts +22 -1
  252. package/Types/Monitor/SqlConnectionConfig.ts +31 -0
  253. package/Types/NetworkDevice/NetworkAlertPolicyScope.ts +343 -0
  254. package/Types/NetworkDevice/NetworkDeviceMonitoringMethod.ts +42 -22
  255. package/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.ts +30 -0
  256. package/Types/NotificationSetting/NotificationEmailRollupCategory.ts +255 -0
  257. package/Types/NotificationSetting/NotificationEmailRollupPolicy.ts +104 -0
  258. package/Types/Permission.ts +90 -0
  259. package/Types/Probe/ProbeMonitorResponse.ts +16 -0
  260. package/Types/Telemetry/ErrorClass.ts +274 -0
  261. package/Types/Telemetry/UnitOfWork.ts +59 -0
  262. package/UI/Components/CommandPalette/CommandPalette.tsx +2 -8
  263. package/UI/Components/EditionLabel/EditionLabel.tsx +4 -0
  264. package/UI/Components/Modal/Modal.tsx +2 -8
  265. package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +44 -0
  266. package/UI/Components/ProgressBar/ProgressBar.tsx +12 -1
  267. package/UI/Components/RadioButtons/BasicRadioButtons.tsx +37 -7
  268. package/UI/Components/SideMenu/SideMenu.tsx +123 -5
  269. package/UI/Components/SideMenu/SideMenuItem.tsx +76 -84
  270. package/UI/Components/SideMenu/SideMenuSection.tsx +55 -23
  271. package/UI/Components/SideOver/SideOver.tsx +21 -20
  272. package/UI/Utils/PageScrollLock.ts +79 -3
  273. package/UI/Utils/PermissionGate.ts +61 -0
  274. package/UI/Utils/SensitiveUrlToken.ts +112 -0
  275. package/UI/Utils/TestLLMProvider.ts +11 -0
  276. package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +16 -0
  277. package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +191 -11
  278. package/Utils/Monitor/MonitorMetricType.ts +153 -1
  279. package/Utils/Monitor/NetworkTopologyUtil.ts +23 -3
  280. package/Utils/NetworkDevice/DeviceHealthStateUtil.ts +65 -14
  281. package/Utils/NetworkDevice/DeviceReachabilityUtil.ts +43 -14
  282. package/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.ts +247 -0
  283. package/Utils/NetworkDevice/SnmpCredentialUtil.ts +68 -0
  284. package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +15 -7
  285. package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +52 -17
  286. package/Utils/NetworkDiscovery/DiscoveryImportEligibility.ts +55 -23
  287. package/Utils/NetworkDiscovery/PingMonitorBuilder.ts +115 -13
  288. package/Utils/NetworkSite/SiteStatusRollupUtil.ts +66 -20
  289. package/Utils/NetworkSite/TypeHierarchyUtil.ts +313 -0
  290. package/build/dist/Models/AnalyticsModels/Span.js +14 -0
  291. package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
  292. package/build/dist/Models/DatabaseModels/EnterpriseLicense.js +59 -0
  293. package/build/dist/Models/DatabaseModels/EnterpriseLicense.js.map +1 -1
  294. package/build/dist/Models/DatabaseModels/Index.js +10 -0
  295. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  296. package/build/dist/Models/DatabaseModels/Monitor.js +75 -0
  297. package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
  298. package/build/dist/Models/DatabaseModels/NetworkAlertPolicy.js +713 -0
  299. package/build/dist/Models/DatabaseModels/NetworkAlertPolicy.js.map +1 -0
  300. package/build/dist/Models/DatabaseModels/NetworkDevice.js +180 -1
  301. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  302. package/build/dist/Models/DatabaseModels/NetworkSite.js +200 -2
  303. package/build/dist/Models/DatabaseModels/NetworkSite.js.map +1 -1
  304. package/build/dist/Models/DatabaseModels/NetworkSiteType.js +102 -3
  305. package/build/dist/Models/DatabaseModels/NetworkSiteType.js.map +1 -1
  306. package/build/dist/Models/DatabaseModels/NetworkSnmpCredentialProfile.js +878 -0
  307. package/build/dist/Models/DatabaseModels/NetworkSnmpCredentialProfile.js.map +1 -0
  308. package/build/dist/Models/DatabaseModels/TelemetryException.js +123 -0
  309. package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
  310. package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupBatch.js +363 -0
  311. package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupBatch.js.map +1 -0
  312. package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js +402 -0
  313. package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js.map +1 -0
  314. package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupSetting.js +296 -0
  315. package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupSetting.js.map +1 -0
  316. package/build/dist/Server/API/EnterpriseLicenseAPI.js +273 -60
  317. package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +1 -1
  318. package/build/dist/Server/API/LlmProviderAPI.js +108 -13
  319. package/build/dist/Server/API/LlmProviderAPI.js.map +1 -1
  320. package/build/dist/Server/EnvironmentConfig.js +12 -0
  321. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  322. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.js +24 -0
  323. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.js.map +1 -0
  324. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.js +16 -0
  325. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.js.map +1 -0
  326. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.js +111 -0
  327. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.js.map +1 -0
  328. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.js +77 -0
  329. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.js.map +1 -0
  330. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.js +50 -0
  331. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.js.map +1 -0
  332. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.js +83 -0
  333. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.js.map +1 -0
  334. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +12 -0
  335. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  336. package/build/dist/Server/Infrastructure/QueueWorker.js +33 -5
  337. package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
  338. package/build/dist/Server/Middleware/BearerTokenAuthorization.js +12 -0
  339. package/build/dist/Server/Middleware/BearerTokenAuthorization.js.map +1 -1
  340. package/build/dist/Server/Middleware/ProjectAuthorization.js +11 -0
  341. package/build/dist/Server/Middleware/ProjectAuthorization.js.map +1 -1
  342. package/build/dist/Server/Middleware/SCIMAuthorization.js +12 -0
  343. package/build/dist/Server/Middleware/SCIMAuthorization.js.map +1 -1
  344. package/build/dist/Server/Middleware/TelemetryIngest.js +11 -0
  345. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  346. package/build/dist/Server/Services/AIBillingService.js +70 -16
  347. package/build/dist/Server/Services/AIBillingService.js.map +1 -1
  348. package/build/dist/Server/Services/EnterpriseLicenseInstanceService.js +167 -0
  349. package/build/dist/Server/Services/EnterpriseLicenseInstanceService.js.map +1 -1
  350. package/build/dist/Server/Services/EnterpriseLicenseService.js +39 -0
  351. package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
  352. package/build/dist/Server/Services/Index.js +10 -0
  353. package/build/dist/Server/Services/Index.js.map +1 -1
  354. package/build/dist/Server/Services/MonitorService.js +119 -21
  355. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  356. package/build/dist/Server/Services/MonitorStatusTimelineService.js +127 -8
  357. package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
  358. package/build/dist/Server/Services/MonitorTemplateService.js +162 -0
  359. package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
  360. package/build/dist/Server/Services/NetworkAlertPolicyEngineService.js +1683 -0
  361. package/build/dist/Server/Services/NetworkAlertPolicyEngineService.js.map +1 -0
  362. package/build/dist/Server/Services/NetworkAlertPolicyService.js +732 -0
  363. package/build/dist/Server/Services/NetworkAlertPolicyService.js.map +1 -0
  364. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +10 -9
  365. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
  366. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +54 -11
  367. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
  368. package/build/dist/Server/Services/NetworkDeviceService.js +841 -70
  369. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  370. package/build/dist/Server/Services/NetworkSiteService.js +1145 -107
  371. package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
  372. package/build/dist/Server/Services/NetworkSiteTypeService.js +863 -0
  373. package/build/dist/Server/Services/NetworkSiteTypeService.js.map +1 -1
  374. package/build/dist/Server/Services/NetworkSnmpCredentialProfileService.js +217 -0
  375. package/build/dist/Server/Services/NetworkSnmpCredentialProfileService.js.map +1 -0
  376. package/build/dist/Server/Services/NotificationService.js +80 -17
  377. package/build/dist/Server/Services/NotificationService.js.map +1 -1
  378. package/build/dist/Server/Services/ProjectService.js +66 -30
  379. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  380. package/build/dist/Server/Services/StatusPagePrivateUserService.js +92 -2
  381. package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
  382. package/build/dist/Server/Services/UserNotificationEmailRollupBatchService.js +76 -0
  383. package/build/dist/Server/Services/UserNotificationEmailRollupBatchService.js.map +1 -0
  384. package/build/dist/Server/Services/UserNotificationEmailRollupItemService.js +77 -0
  385. package/build/dist/Server/Services/UserNotificationEmailRollupItemService.js.map +1 -0
  386. package/build/dist/Server/Services/UserNotificationEmailRollupSettingService.js +111 -0
  387. package/build/dist/Server/Services/UserNotificationEmailRollupSettingService.js.map +1 -0
  388. package/build/dist/Server/Services/UserNotificationSettingService.js +46 -20
  389. package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
  390. package/build/dist/Server/Services/UserService.js +90 -0
  391. package/build/dist/Server/Services/UserService.js.map +1 -1
  392. package/build/dist/Server/Types/Database/QueryHelper.js +1 -1
  393. package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
  394. package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +14 -3
  395. package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js.map +1 -1
  396. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +10 -0
  397. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -1
  398. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +10 -0
  399. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -1
  400. package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js +54 -1
  401. package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js.map +1 -1
  402. package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js +18 -4
  403. package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js.map +1 -1
  404. package/build/dist/Server/Utils/Billing/BillingFailureNoticeThrottle.js +59 -0
  405. package/build/dist/Server/Utils/Billing/BillingFailureNoticeThrottle.js.map +1 -0
  406. package/build/dist/Server/Utils/DataSource/HttpFetch.js +2 -1
  407. package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -1
  408. package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js +91 -0
  409. package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js.map +1 -0
  410. package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +691 -0
  411. package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -0
  412. package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js +497 -0
  413. package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js.map +1 -0
  414. package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js +257 -0
  415. package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js.map +1 -0
  416. package/build/dist/Server/Utils/LLM/LLMService.js +64 -1
  417. package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
  418. package/build/dist/Server/Utils/LogRedaction.js +8 -0
  419. package/build/dist/Server/Utils/LogRedaction.js.map +1 -1
  420. package/build/dist/Server/Utils/Logger.js +63 -1
  421. package/build/dist/Server/Utils/Logger.js.map +1 -1
  422. package/build/dist/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.js +141 -0
  423. package/build/dist/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.js.map +1 -0
  424. package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +8 -1
  425. package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
  426. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +51 -1
  427. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
  428. package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js +7 -0
  429. package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js.map +1 -1
  430. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +37 -0
  431. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  432. package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +158 -6
  433. package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
  434. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +33 -0
  435. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
  436. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +32 -0
  437. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  438. package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js +330 -21
  439. package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js.map +1 -1
  440. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +55 -10
  441. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
  442. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +178 -49
  443. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
  444. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +119 -29
  445. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
  446. package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js +30 -17
  447. package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js.map +1 -1
  448. package/build/dist/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.js +158 -0
  449. package/build/dist/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.js.map +1 -0
  450. package/build/dist/Server/Utils/OutboundUserAgent.js +123 -0
  451. package/build/dist/Server/Utils/OutboundUserAgent.js.map +1 -0
  452. package/build/dist/Server/Utils/StartServer.js +38 -14
  453. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  454. package/build/dist/Server/Utils/Telemetry/CaptureSpan.js +28 -8
  455. package/build/dist/Server/Utils/Telemetry/CaptureSpan.js.map +1 -1
  456. package/build/dist/Server/Utils/Telemetry/ErrorClassResolver.js +95 -0
  457. package/build/dist/Server/Utils/Telemetry/ErrorClassResolver.js.map +1 -0
  458. package/build/dist/Server/Utils/Telemetry/SpanUtil.js +29 -0
  459. package/build/dist/Server/Utils/Telemetry/SpanUtil.js.map +1 -1
  460. package/build/dist/Server/Utils/Telemetry.js +162 -46
  461. package/build/dist/Server/Utils/Telemetry.js.map +1 -1
  462. package/build/dist/Types/AI/ExceptionAIClassification.js +10 -24
  463. package/build/dist/Types/AI/ExceptionAIClassification.js.map +1 -1
  464. package/build/dist/Types/Email/EmailTemplateType.js +1 -0
  465. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  466. package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.js +2 -0
  467. package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.js.map +1 -0
  468. package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.js +7 -0
  469. package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.js.map +1 -0
  470. package/build/dist/Types/Exception/ApiException.js +9 -0
  471. package/build/dist/Types/Exception/ApiException.js.map +1 -1
  472. package/build/dist/Types/Exception/BadDataException.js +10 -0
  473. package/build/dist/Types/Exception/BadDataException.js.map +1 -1
  474. package/build/dist/Types/Exception/BadRequestException.js +10 -0
  475. package/build/dist/Types/Exception/BadRequestException.js.map +1 -1
  476. package/build/dist/Types/Exception/Exception.js +56 -0
  477. package/build/dist/Types/Exception/Exception.js.map +1 -1
  478. package/build/dist/Types/Exception/ForbiddenException.js +9 -0
  479. package/build/dist/Types/Exception/ForbiddenException.js.map +1 -1
  480. package/build/dist/Types/Exception/NotAuthenticatedException.js +9 -0
  481. package/build/dist/Types/Exception/NotAuthenticatedException.js.map +1 -1
  482. package/build/dist/Types/Exception/NotAuthorizedException.js +9 -0
  483. package/build/dist/Types/Exception/NotAuthorizedException.js.map +1 -1
  484. package/build/dist/Types/Exception/NotFoundException.js +10 -0
  485. package/build/dist/Types/Exception/NotFoundException.js.map +1 -1
  486. package/build/dist/Types/Exception/PayloadTooLargeException.js +10 -0
  487. package/build/dist/Types/Exception/PayloadTooLargeException.js.map +1 -1
  488. package/build/dist/Types/Exception/PaymentRequiredException.js +9 -0
  489. package/build/dist/Types/Exception/PaymentRequiredException.js.map +1 -1
  490. package/build/dist/Types/Exception/ServiceUnavailableException.js +9 -0
  491. package/build/dist/Types/Exception/ServiceUnavailableException.js.map +1 -1
  492. package/build/dist/Types/Exception/SsoAuthorizationException.js +9 -0
  493. package/build/dist/Types/Exception/SsoAuthorizationException.js.map +1 -1
  494. package/build/dist/Types/Exception/TenantNotFoundException.js +10 -0
  495. package/build/dist/Types/Exception/TenantNotFoundException.js.map +1 -1
  496. package/build/dist/Types/Exception/TimeoutException.js +9 -0
  497. package/build/dist/Types/Exception/TimeoutException.js.map +1 -1
  498. package/build/dist/Types/Exception/TooManyRequestsException.js +9 -0
  499. package/build/dist/Types/Exception/TooManyRequestsException.js.map +1 -1
  500. package/build/dist/Types/Exception/UnableToReachServer.js +9 -0
  501. package/build/dist/Types/Exception/UnableToReachServer.js.map +1 -1
  502. package/build/dist/Types/Exception/WebsiteRequestException.js +9 -0
  503. package/build/dist/Types/Exception/WebsiteRequestException.js.map +1 -1
  504. package/build/dist/Types/Monitor/CriteriaFilter.js +45 -2
  505. package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
  506. package/build/dist/Types/Monitor/DatabaseMetricCatalog.js +594 -0
  507. package/build/dist/Types/Monitor/DatabaseMetricCatalog.js.map +1 -0
  508. package/build/dist/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.js +21 -0
  509. package/build/dist/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.js.map +1 -0
  510. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +70 -0
  511. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
  512. package/build/dist/Types/Monitor/MonitorMetricType.js +61 -0
  513. package/build/dist/Types/Monitor/MonitorMetricType.js.map +1 -1
  514. package/build/dist/Types/Monitor/MonitorStep.js +54 -0
  515. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  516. package/build/dist/Types/Monitor/MonitorStepDatabaseMonitor.js +122 -0
  517. package/build/dist/Types/Monitor/MonitorStepDatabaseMonitor.js.map +1 -0
  518. package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js.map +1 -1
  519. package/build/dist/Types/Monitor/MonitorType.js +45 -1
  520. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  521. package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js +21 -1
  522. package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js.map +1 -1
  523. package/build/dist/Types/Monitor/SqlConnectionConfig.js +2 -0
  524. package/build/dist/Types/Monitor/SqlConnectionConfig.js.map +1 -0
  525. package/build/dist/Types/NetworkDevice/NetworkAlertPolicyScope.js +172 -0
  526. package/build/dist/Types/NetworkDevice/NetworkAlertPolicyScope.js.map +1 -0
  527. package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js +40 -22
  528. package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js.map +1 -1
  529. package/build/dist/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.js +26 -0
  530. package/build/dist/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.js.map +1 -0
  531. package/build/dist/Types/NotificationSetting/NotificationEmailRollupCategory.js +186 -0
  532. package/build/dist/Types/NotificationSetting/NotificationEmailRollupCategory.js.map +1 -0
  533. package/build/dist/Types/NotificationSetting/NotificationEmailRollupPolicy.js +87 -0
  534. package/build/dist/Types/NotificationSetting/NotificationEmailRollupPolicy.js.map +1 -0
  535. package/build/dist/Types/Permission.js +80 -0
  536. package/build/dist/Types/Permission.js.map +1 -1
  537. package/build/dist/Types/Telemetry/ErrorClass.js +216 -0
  538. package/build/dist/Types/Telemetry/ErrorClass.js.map +1 -0
  539. package/build/dist/Types/Telemetry/UnitOfWork.js +59 -0
  540. package/build/dist/Types/Telemetry/UnitOfWork.js.map +1 -0
  541. package/build/dist/UI/Components/CommandPalette/CommandPalette.js +2 -7
  542. package/build/dist/UI/Components/CommandPalette/CommandPalette.js.map +1 -1
  543. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +3 -0
  544. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  545. package/build/dist/UI/Components/Modal/Modal.js +2 -7
  546. package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
  547. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +39 -0
  548. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
  549. package/build/dist/UI/Components/ProgressBar/ProgressBar.js +12 -1
  550. package/build/dist/UI/Components/ProgressBar/ProgressBar.js.map +1 -1
  551. package/build/dist/UI/Components/RadioButtons/BasicRadioButtons.js +6 -6
  552. package/build/dist/UI/Components/RadioButtons/BasicRadioButtons.js.map +1 -1
  553. package/build/dist/UI/Components/SideMenu/SideMenu.js +67 -5
  554. package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
  555. package/build/dist/UI/Components/SideMenu/SideMenuItem.js +49 -53
  556. package/build/dist/UI/Components/SideMenu/SideMenuItem.js.map +1 -1
  557. package/build/dist/UI/Components/SideMenu/SideMenuSection.js +25 -7
  558. package/build/dist/UI/Components/SideMenu/SideMenuSection.js.map +1 -1
  559. package/build/dist/UI/Components/SideOver/SideOver.js +5 -20
  560. package/build/dist/UI/Components/SideOver/SideOver.js.map +1 -1
  561. package/build/dist/UI/Utils/PageScrollLock.js +31 -3
  562. package/build/dist/UI/Utils/PageScrollLock.js.map +1 -1
  563. package/build/dist/UI/Utils/PermissionGate.js +42 -1
  564. package/build/dist/UI/Utils/PermissionGate.js.map +1 -1
  565. package/build/dist/UI/Utils/SensitiveUrlToken.js +97 -0
  566. package/build/dist/UI/Utils/SensitiveUrlToken.js.map +1 -0
  567. package/build/dist/UI/Utils/TestLLMProvider.js +4 -5
  568. package/build/dist/UI/Utils/TestLLMProvider.js.map +1 -1
  569. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +15 -0
  570. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +1 -1
  571. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js +111 -9
  572. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js.map +1 -1
  573. package/build/dist/Utils/Monitor/MonitorMetricType.js +109 -1
  574. package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
  575. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +8 -3
  576. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
  577. package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js +27 -7
  578. package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js.map +1 -1
  579. package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js +7 -5
  580. package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js.map +1 -1
  581. package/build/dist/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.js +180 -0
  582. package/build/dist/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.js.map +1 -0
  583. package/build/dist/Utils/NetworkDevice/SnmpCredentialUtil.js +12 -0
  584. package/build/dist/Utils/NetworkDevice/SnmpCredentialUtil.js.map +1 -0
  585. package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js +15 -5
  586. package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
  587. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +44 -15
  588. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
  589. package/build/dist/Utils/NetworkDiscovery/DiscoveryImportEligibility.js +52 -23
  590. package/build/dist/Utils/NetworkDiscovery/DiscoveryImportEligibility.js.map +1 -1
  591. package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js +85 -13
  592. package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js.map +1 -1
  593. package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +30 -15
  594. package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -1
  595. package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js +191 -0
  596. package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js.map +1 -0
  597. package/package.json +2 -2
@@ -0,0 +1,83 @@
1
+ import ProbeAttempt from "../../Probe/ProbeAttempt";
2
+ import { DatabaseMetricGroup } from "../DatabaseMetricCatalog";
3
+ import MonitorMetricType from "../MonitorMetricType";
4
+
5
+ /*
6
+ * Why a metric group produced nothing. Kept as a closed set so the dashboard
7
+ * can render an actionable message (and, for MissingPermission, the exact
8
+ * GRANT to run) instead of echoing a driver error at the operator.
9
+ */
10
+ export enum DatabaseMetricGroupUnavailableReason {
11
+ // The monitoring login lacks the grant this group's views need.
12
+ MissingPermission = "MissingPermission",
13
+ /*
14
+ * The engine does not expose this data at all: an older major version, a
15
+ * disabled extension, or a feature the engine simply does not have (there
16
+ * is no deadlock counter in stock MySQL, for instance).
17
+ */
18
+ NotSupportedByEngine = "NotSupportedByEngine",
19
+ // The group's query exceeded the statement timeout.
20
+ Timeout = "Timeout",
21
+ // Anything else. `message` carries the sanitized detail.
22
+ Error = "Error",
23
+ }
24
+
25
+ export interface DatabaseMetricGroupStatus {
26
+ group: DatabaseMetricGroup;
27
+ reason: DatabaseMetricGroupUnavailableReason;
28
+ /*
29
+ * Sanitized, operator-facing explanation. Never contains a DSN, a
30
+ * password, or a raw driver error - SqlMonitor.sanitizeError is applied
31
+ * before anything lands here.
32
+ */
33
+ message: string;
34
+ /*
35
+ * The grant that would fix it, when we know it (e.g.
36
+ * "GRANT pg_read_all_stats TO monitoring_user"). Rendered verbatim in the
37
+ * monitor's summary view so the fix is copy-pasteable.
38
+ */
39
+ remediation?: string | undefined;
40
+ }
41
+
42
+ /*
43
+ * What a probe reports back for one Database Health check.
44
+ *
45
+ * The central contract here is that COLLECTION IS PARTIAL BY DESIGN.
46
+ * `isOnline` answers exactly one question - could we connect and run the
47
+ * baseline probe query - and nothing else in this payload can change it. A
48
+ * login without VIEW SERVER STATE, a replica group that times out, or an
49
+ * engine that has no deadlock counter all produce entries in
50
+ * `unavailableGroups` while the monitor stays online, because the database
51
+ * being monitored is fine; it is our visibility into it that is reduced.
52
+ *
53
+ * No rows of customer data ever appear here. Values are numeric aggregates
54
+ * read from engine catalog views, keyed by the metric series they feed.
55
+ */
56
+ export default interface DatabaseMonitorResponse {
57
+ isOnline: boolean;
58
+ // Time to connect and run the baseline probe query.
59
+ responseTimeInMs: number;
60
+ failureCause: string;
61
+ /*
62
+ * Collected values, keyed by the series each one writes. A metric absent
63
+ * from this map is simply not written - the engine did not report it,
64
+ * or its group was skipped. Never zero-fill: a missing replication lag
65
+ * and a replication lag of zero mean opposite things.
66
+ */
67
+ metrics: Partial<Record<MonitorMetricType, number>>;
68
+ // Groups that ran and produced values.
69
+ collectedGroups: Array<DatabaseMetricGroup>;
70
+ // Groups that could not be collected, with the reason and the fix.
71
+ unavailableGroups: Array<DatabaseMetricGroupStatus>;
72
+ /*
73
+ * Engine version string as the server reports it, for the summary view.
74
+ * Also what the collector version-gates on (PostgreSQL moved the
75
+ * checkpoint counters out of pg_stat_bgwriter in 17, for example).
76
+ */
77
+ engineVersion?: string | undefined;
78
+ // Sanitized connection error, present only when isOnline is false.
79
+ connectionError: string | null;
80
+ isTimeout?: boolean | undefined;
81
+ probeAttempts?: Array<ProbeAttempt> | undefined;
82
+ totalAttempts?: number | undefined;
83
+ }
@@ -568,6 +568,40 @@ export default class MonitorCriteriaInstance extends DatabaseProperty {
568
568
  return monitorCriteriaInstance;
569
569
  }
570
570
 
571
+ if (arg.monitorType === MonitorType.Database) {
572
+ const monitorCriteriaInstance: MonitorCriteriaInstance =
573
+ new MonitorCriteriaInstance();
574
+
575
+ /*
576
+ * Online means one thing only: the probe connected and collected. It
577
+ * deliberately does NOT assert anything about the metrics. A database
578
+ * with a 97% cache hit ratio is not "down", and a monitor that treats
579
+ * every threshold as an outage teaches its operators to ignore it.
580
+ * Metric thresholds ship as templates the user opts into instead.
581
+ */
582
+ monitorCriteriaInstance.data = {
583
+ id: ObjectID.generate().toString(),
584
+ monitorStatusId: arg.monitorStatusId,
585
+ filterCondition: FilterCondition.All,
586
+ filters: [
587
+ {
588
+ checkOn: CheckOn.DatabaseIsOnline,
589
+ filterType: FilterType.True,
590
+ value: undefined,
591
+ },
592
+ ],
593
+ incidents: [],
594
+ alerts: [],
595
+ createAlerts: false,
596
+ changeMonitorStatus: true,
597
+ createIncidents: false,
598
+ name: `Check if ${arg.monitorName} is online`,
599
+ description: `This criteria checks if ${arg.monitorName} is reachable and its health metrics were collected`,
600
+ };
601
+
602
+ return monitorCriteriaInstance;
603
+ }
604
+
571
605
  if (arg.monitorType === MonitorType.Domain) {
572
606
  const monitorCriteriaInstance: MonitorCriteriaInstance =
573
607
  new MonitorCriteriaInstance();
@@ -801,6 +835,48 @@ export default class MonitorCriteriaInstance extends DatabaseProperty {
801
835
  };
802
836
  }
803
837
 
838
+ if (arg.monitorType === MonitorType.Database) {
839
+ monitorCriteriaInstance.data = {
840
+ id: ObjectID.generate().toString(),
841
+ monitorStatusId: arg.monitorStatusId,
842
+ filterCondition: FilterCondition.Any,
843
+ filters: [
844
+ {
845
+ checkOn: CheckOn.DatabaseIsOnline,
846
+ filterType: FilterType.False,
847
+ value: undefined,
848
+ },
849
+ ],
850
+ incidents: [
851
+ {
852
+ title: `${arg.monitorName} is offline`,
853
+ description: `${arg.monitorName} is not reachable, or the health check could not connect.`,
854
+ incidentSeverityId: arg.incidentSeverityId,
855
+ autoResolveIncident: true,
856
+ id: ObjectID.generate().toString(),
857
+ onCallPolicyIds: [],
858
+ },
859
+ ],
860
+ changeMonitorStatus: true,
861
+ createIncidents: true,
862
+ createAlerts: false,
863
+ alerts: [
864
+ {
865
+ title: `${arg.monitorName} is offline`,
866
+ description: `${arg.monitorName} is not reachable, or the health check could not connect.`,
867
+ alertSeverityId: arg.alertSeverityId,
868
+ autoResolveAlert: true,
869
+ id: ObjectID.generate().toString(),
870
+ onCallPolicyIds: [],
871
+ },
872
+ ],
873
+ name: `Check if ${arg.monitorName} is offline`,
874
+ description: `This criteria checks if ${arg.monitorName} is offline`,
875
+ };
876
+
877
+ return monitorCriteriaInstance;
878
+ }
879
+
804
880
  if (arg.monitorType === MonitorType.SQLQuery) {
805
881
  monitorCriteriaInstance.data = {
806
882
  id: ObjectID.generate().toString(),
@@ -83,6 +83,77 @@ enum MonitorMetricType {
83
83
 
84
84
  HostUptimeSeconds = "oneuptime.monitor.host.uptime.seconds",
85
85
  ProcessCountTotal = "oneuptime.monitor.process.count.total",
86
+
87
+ /*
88
+ * Database Health monitor series. A probe connects to PostgreSQL / MySQL /
89
+ * Microsoft SQL Server on a schedule and runs built-in read-only catalog
90
+ * queries; each value below is one normalized series.
91
+ *
92
+ * Not every engine can produce every series - MySQL has no deadlock
93
+ * counter, SQL Server has no fixed connection ceiling by default, and
94
+ * PostgreSQL's I/O timings need track_io_timing on. The authoritative
95
+ * per-engine support matrix lives in DatabaseMetricCatalog.ts, which is
96
+ * also the single source of truth for each series' title, unit,
97
+ * aggregation and display category. Add a member here and an entry there
98
+ * together - a member without a catalog entry is invisible to the UI and
99
+ * fails the metric-invariant tests.
100
+ */
101
+ DatabaseUptimeSeconds = "oneuptime.monitor.database.uptime.seconds",
102
+
103
+ DatabaseConnectionsTotal = "oneuptime.monitor.database.connections.total",
104
+ DatabaseConnectionsActive = "oneuptime.monitor.database.connections.active",
105
+ DatabaseConnectionsMax = "oneuptime.monitor.database.connections.max",
106
+ DatabaseConnectionsUsedPercent = "oneuptime.monitor.database.connections.used.percent",
107
+ DatabaseConnectionsIdleInTransaction = "oneuptime.monitor.database.connections.idle.in.transaction",
108
+ DatabaseConnectionsAbortedTotal = "oneuptime.monitor.database.connections.aborted.total",
109
+
110
+ DatabaseLongestQuerySeconds = "oneuptime.monitor.database.query.longest.seconds",
111
+ DatabaseLongestTransactionSeconds = "oneuptime.monitor.database.transaction.longest.seconds",
112
+ DatabaseOpenTransactions = "oneuptime.monitor.database.transaction.open.count",
113
+
114
+ DatabaseSessionsBlocked = "oneuptime.monitor.database.sessions.blocked",
115
+ DatabaseLocksWaiting = "oneuptime.monitor.database.locks.waiting",
116
+ DatabaseDeadlocksTotal = "oneuptime.monitor.database.deadlocks.total",
117
+ DatabaseTableLocksWaitedTotal = "oneuptime.monitor.database.table.locks.waited.total",
118
+
119
+ DatabaseTransactionsTotal = "oneuptime.monitor.database.transactions.total",
120
+ DatabaseQueriesTotal = "oneuptime.monitor.database.queries.total",
121
+ DatabaseSlowQueriesTotal = "oneuptime.monitor.database.queries.slow.total",
122
+ DatabaseRollbackPercent = "oneuptime.monitor.database.rollback.percent",
123
+
124
+ DatabaseCacheHitPercent = "oneuptime.monitor.database.cache.hit.percent",
125
+ DatabaseDiskReadsTotal = "oneuptime.monitor.database.disk.reads.total",
126
+ DatabaseDiskWritesTotal = "oneuptime.monitor.database.disk.writes.total",
127
+ DatabaseIoReadTimeMs = "oneuptime.monitor.database.io.read.time.ms",
128
+ DatabaseIoWriteTimeMs = "oneuptime.monitor.database.io.write.time.ms",
129
+ DatabasePageLifeExpectancySeconds = "oneuptime.monitor.database.page.life.expectancy.seconds",
130
+ DatabaseMemoryGrantsPending = "oneuptime.monitor.database.memory.grants.pending",
131
+
132
+ DatabaseSizeBytes = "oneuptime.monitor.database.size.bytes",
133
+ DatabaseTempBytesTotal = "oneuptime.monitor.database.temp.bytes.total",
134
+ DatabaseTempDiskTablesTotal = "oneuptime.monitor.database.temp.disk.tables.total",
135
+ DatabaseLogSpaceUsedPercent = "oneuptime.monitor.database.log.space.used.percent",
136
+ DatabaseTempDbFreeBytes = "oneuptime.monitor.database.tempdb.free.bytes",
137
+
138
+ DatabaseReplicaCount = "oneuptime.monitor.database.replica.count",
139
+ DatabaseReplicationLagSeconds = "oneuptime.monitor.database.replication.lag.seconds",
140
+ DatabaseReplicationLagBytes = "oneuptime.monitor.database.replication.lag.bytes",
141
+ DatabaseIsInRecovery = "oneuptime.monitor.database.is.in.recovery",
142
+ DatabaseReplicationSlotsInactive = "oneuptime.monitor.database.replication.slots.inactive",
143
+
144
+ DatabaseTransactionIdUsedPercent = "oneuptime.monitor.database.transaction.id.used.percent",
145
+ DatabaseDeadTuples = "oneuptime.monitor.database.dead.tuples",
146
+ DatabaseTablesNeverAutovacuumed = "oneuptime.monitor.database.tables.never.autovacuumed",
147
+ DatabaseCheckpointsRequestedTotal = "oneuptime.monitor.database.checkpoints.requested.total",
148
+ DatabaseCheckpointsTimedTotal = "oneuptime.monitor.database.checkpoints.timed.total",
149
+
150
+ /*
151
+ * Meta-series: how many collection groups failed on this check (a missing
152
+ * grant, a disabled extension, a per-group timeout). Lets an operator
153
+ * alert on "I have lost visibility" without the monitor itself going
154
+ * offline, which is what a partial failure must never do.
155
+ */
156
+ DatabaseMetricGroupsFailed = "oneuptime.monitor.database.metric.groups.failed",
86
157
  }
87
158
 
88
159
  export default MonitorMetricType;
@@ -50,6 +50,9 @@ import MonitorStepDnssecMonitor, {
50
50
  import MonitorStepSqlMonitor, {
51
51
  MonitorStepSqlMonitorUtil,
52
52
  } from "./MonitorStepSqlMonitor";
53
+ import MonitorStepDatabaseMonitor, {
54
+ MonitorStepDatabaseMonitorUtil,
55
+ } from "./MonitorStepDatabaseMonitor";
53
56
  import SqlDatabaseType from "./SqlDatabaseType";
54
57
  import MonitorStepExternalStatusPageMonitor, {
55
58
  MonitorStepExternalStatusPageMonitorUtil,
@@ -204,6 +207,9 @@ export interface MonitorStepType {
204
207
  // SQL Query monitor
205
208
  sqlMonitor?: MonitorStepSqlMonitor | undefined;
206
209
 
210
+ // Database Health monitor (built-in catalog metrics, no user query)
211
+ databaseMonitor?: MonitorStepDatabaseMonitor | undefined;
212
+
207
213
  // External Status Page monitor
208
214
  externalStatusPageMonitor?: MonitorStepExternalStatusPageMonitor | undefined;
209
215
 
@@ -269,6 +275,7 @@ export default class MonitorStep extends DatabaseProperty {
269
275
  domainMonitor: undefined,
270
276
  dnssecMonitor: undefined,
271
277
  sqlMonitor: undefined,
278
+ databaseMonitor: undefined,
272
279
  externalStatusPageMonitor: undefined,
273
280
  kubernetesMonitor: undefined,
274
281
  dockerMonitor: undefined,
@@ -345,6 +352,16 @@ export default class MonitorStep extends DatabaseProperty {
345
352
  domainMonitor: undefined,
346
353
  dnssecMonitor: undefined,
347
354
  sqlMonitor: undefined,
355
+ /*
356
+ * Seeded, unlike sqlMonitor. The SQL form always writes its config
357
+ * because the query field is required; a Database Health step has no
358
+ * required field, so an untouched step would reach the probe with no
359
+ * connection details at all and the monitor would never run.
360
+ */
361
+ databaseMonitor:
362
+ arg.monitorType === MonitorType.Database
363
+ ? MonitorStepDatabaseMonitorUtil.getDefault()
364
+ : undefined,
348
365
  externalStatusPageMonitor: undefined,
349
366
  kubernetesMonitor: undefined,
350
367
  dockerMonitor: undefined,
@@ -620,6 +637,13 @@ export default class MonitorStep extends DatabaseProperty {
620
637
  return this;
621
638
  }
622
639
 
640
+ public setDatabaseMonitor(
641
+ databaseMonitor: MonitorStepDatabaseMonitor,
642
+ ): MonitorStep {
643
+ this.data!.databaseMonitor = databaseMonitor;
644
+ return this;
645
+ }
646
+
623
647
  public setExternalStatusPageMonitor(
624
648
  externalStatusPageMonitor: MonitorStepExternalStatusPageMonitor,
625
649
  ): MonitorStep {
@@ -876,6 +900,42 @@ export default class MonitorStep extends DatabaseProperty {
876
900
  }
877
901
  }
878
902
 
903
+ if (monitorType === MonitorType.Database) {
904
+ if (!value.data.databaseMonitor) {
905
+ return "Database monitor configuration is required";
906
+ }
907
+
908
+ if (!value.data.databaseMonitor.host) {
909
+ return "Database host is required";
910
+ }
911
+
912
+ if (!value.data.databaseMonitor.databaseName) {
913
+ return "Database name is required";
914
+ }
915
+
916
+ /*
917
+ * Deliberately no query check - that is the difference between this
918
+ * monitor and the SQL Query monitor. Nor is a metric group required:
919
+ * an empty list is normalized back to every group rather than
920
+ * rejected, so a step can never be saved in a state that silently
921
+ * collects nothing.
922
+ */
923
+ if (
924
+ value.data.databaseMonitor.useWindowsIntegratedAuthentication &&
925
+ value.data.databaseMonitor.databaseType !==
926
+ SqlDatabaseType.MicrosoftSqlServer
927
+ ) {
928
+ return "Windows Integrated Authentication is only supported for Microsoft SQL Server";
929
+ }
930
+
931
+ if (
932
+ !value.data.databaseMonitor.useWindowsIntegratedAuthentication &&
933
+ !value.data.databaseMonitor.username
934
+ ) {
935
+ return "Database username is required";
936
+ }
937
+ }
938
+
879
939
  if (monitorType === MonitorType.ExternalStatusPage) {
880
940
  if (!value.data.externalStatusPageMonitor) {
881
941
  return "External status page configuration is required";
@@ -1049,6 +1109,9 @@ export default class MonitorStep extends DatabaseProperty {
1049
1109
  sqlMonitor: this.data.sqlMonitor
1050
1110
  ? MonitorStepSqlMonitorUtil.toJSON(this.data.sqlMonitor)
1051
1111
  : undefined,
1112
+ databaseMonitor: this.data.databaseMonitor
1113
+ ? MonitorStepDatabaseMonitorUtil.toJSON(this.data.databaseMonitor)
1114
+ : undefined,
1052
1115
  externalStatusPageMonitor: this.data.externalStatusPageMonitor
1053
1116
  ? MonitorStepExternalStatusPageMonitorUtil.toJSON(
1054
1117
  this.data.externalStatusPageMonitor,
@@ -1250,6 +1313,18 @@ export default class MonitorStep extends DatabaseProperty {
1250
1313
  sqlMonitor: json["sqlMonitor"]
1251
1314
  ? (json["sqlMonitor"] as JSONObject)
1252
1315
  : undefined,
1316
+ /*
1317
+ * Normalized on the way in, like metricMonitor above: the group list
1318
+ * and the timeouts are clamped here so no consumer downstream has to
1319
+ * defend against a step written by an older build or by hand.
1320
+ */
1321
+ databaseMonitor: json["databaseMonitor"]
1322
+ ? MonitorStepDatabaseMonitorUtil.toJSON(
1323
+ MonitorStepDatabaseMonitorUtil.fromJSON(
1324
+ json["databaseMonitor"] as JSONObject,
1325
+ ),
1326
+ )
1327
+ : undefined,
1253
1328
  externalStatusPageMonitor: json["externalStatusPageMonitor"]
1254
1329
  ? (json["externalStatusPageMonitor"] as JSONObject)
1255
1330
  : undefined,
@@ -1315,6 +1390,7 @@ export default class MonitorStep extends DatabaseProperty {
1315
1390
  domainMonitor: Zod.any().optional(),
1316
1391
  dnssecMonitor: Zod.any().optional(),
1317
1392
  sqlMonitor: Zod.any().optional(),
1393
+ databaseMonitor: Zod.any().optional(),
1318
1394
  externalStatusPageMonitor: Zod.any().optional(),
1319
1395
  kubernetesMonitor: Zod.any().optional(),
1320
1396
  dockerMonitor: Zod.any().optional(),
@@ -0,0 +1,171 @@
1
+ import { JSONObject } from "../JSON";
2
+ import { DatabaseMetricGroup } from "./DatabaseMetricCatalog";
3
+ import {
4
+ clampSqlConnectionTimeoutInMs,
5
+ clampSqlStatementTimeoutInMs,
6
+ } from "./MonitorStepSqlMonitor";
7
+ import SqlConnectionConfig from "./SqlConnectionConfig";
8
+ import SqlDatabaseType from "./SqlDatabaseType";
9
+
10
+ /*
11
+ * Connection + collection configuration for a Database Health monitor.
12
+ *
13
+ * The connection block deliberately mirrors MonitorStepSqlMonitor field for
14
+ * field: the two monitor types point at the same kind of server, and an
15
+ * operator who has configured one should not have to learn a second form.
16
+ * What differs is everything after the connection - there is no user query
17
+ * here. The probe runs built-in read-only catalog queries chosen by engine,
18
+ * grouped so a missing grant degrades one group instead of the monitor.
19
+ *
20
+ * As with the SQL Query monitor, `password` (or any other field) may hold a
21
+ * {{monitorSecrets.name}} reference that the server resolves before the
22
+ * config is handed to a probe. OneUptime never creates those secrets itself.
23
+ */
24
+
25
+ /*
26
+ * Health queries are introspection, not user workload: they should return in
27
+ * milliseconds against a healthy server. A tighter default than the SQL Query
28
+ * monitor's is deliberate - if pg_stat_activity takes ten seconds, the useful
29
+ * signal is "this server is in trouble", and we want the check to say so
30
+ * rather than to sit and wait.
31
+ */
32
+ export const DEFAULT_DATABASE_STATEMENT_TIMEOUT_IN_MS: number = 10000;
33
+ export const DEFAULT_DATABASE_CONNECTION_TIMEOUT_IN_MS: number = 10000;
34
+
35
+ /*
36
+ * Every group is on by default. A group whose grant is missing reports itself
37
+ * as unavailable rather than failing the check, so a default-on configuration
38
+ * degrades into "the metrics you are entitled to" instead of an error.
39
+ */
40
+ export const DEFAULT_DATABASE_METRIC_GROUPS: Array<DatabaseMetricGroup> = [
41
+ DatabaseMetricGroup.Connections,
42
+ DatabaseMetricGroup.Activity,
43
+ DatabaseMetricGroup.Throughput,
44
+ DatabaseMetricGroup.Locks,
45
+ DatabaseMetricGroup.Storage,
46
+ DatabaseMetricGroup.Replication,
47
+ DatabaseMetricGroup.Maintenance,
48
+ ];
49
+
50
+ export default interface MonitorStepDatabaseMonitor
51
+ extends SqlConnectionConfig {
52
+ connectionTimeoutInMs: number;
53
+ statementTimeoutInMs: number;
54
+ /*
55
+ * Which collection groups to run. Trimming this list is how an operator
56
+ * opts out of a group they cannot grant, or one whose queries they would
57
+ * rather not pay for on a busy server (Storage is the usual candidate -
58
+ * summing information_schema.TABLES is not free on a large MySQL server).
59
+ */
60
+ enabledMetricGroups: Array<DatabaseMetricGroup>;
61
+ }
62
+
63
+ export class MonitorStepDatabaseMonitorUtil {
64
+ public static getDefault(): MonitorStepDatabaseMonitor {
65
+ return {
66
+ databaseType: SqlDatabaseType.PostgreSQL,
67
+ host: "",
68
+ port: 5432,
69
+ databaseName: "",
70
+ username: "",
71
+ password: "",
72
+ useWindowsIntegratedAuthentication: false,
73
+ useSsl: false,
74
+ rejectUnauthorizedSsl: true,
75
+ connectionTimeoutInMs: DEFAULT_DATABASE_CONNECTION_TIMEOUT_IN_MS,
76
+ statementTimeoutInMs: DEFAULT_DATABASE_STATEMENT_TIMEOUT_IN_MS,
77
+ enabledMetricGroups: [...DEFAULT_DATABASE_METRIC_GROUPS],
78
+ };
79
+ }
80
+
81
+ /**
82
+ * Keep only recognized groups. An unknown string (an older or newer
83
+ * dashboard, a hand-written API call) is dropped rather than passed to the
84
+ * probe, which would otherwise have to defend against it at collection
85
+ * time. An empty or absent list falls back to every group, because a
86
+ * monitor that silently collects nothing is worse than one that collects
87
+ * what it can.
88
+ */
89
+ public static sanitizeMetricGroups(
90
+ groups: unknown,
91
+ ): Array<DatabaseMetricGroup> {
92
+ if (!Array.isArray(groups)) {
93
+ return [...DEFAULT_DATABASE_METRIC_GROUPS];
94
+ }
95
+
96
+ const validGroups: Array<DatabaseMetricGroup> =
97
+ Object.values(DatabaseMetricGroup);
98
+
99
+ const sanitized: Array<DatabaseMetricGroup> = groups.filter(
100
+ (group: unknown) => {
101
+ return validGroups.includes(group as DatabaseMetricGroup);
102
+ },
103
+ ) as Array<DatabaseMetricGroup>;
104
+
105
+ // De-duplicate while preserving the canonical group order.
106
+ const seen: Set<DatabaseMetricGroup> = new Set<DatabaseMetricGroup>(
107
+ sanitized,
108
+ );
109
+
110
+ const ordered: Array<DatabaseMetricGroup> =
111
+ DEFAULT_DATABASE_METRIC_GROUPS.filter((group: DatabaseMetricGroup) => {
112
+ return seen.has(group);
113
+ });
114
+
115
+ if (ordered.length === 0) {
116
+ return [...DEFAULT_DATABASE_METRIC_GROUPS];
117
+ }
118
+
119
+ return ordered;
120
+ }
121
+
122
+ public static fromJSON(json: JSONObject): MonitorStepDatabaseMonitor {
123
+ return {
124
+ databaseType:
125
+ (json["databaseType"] as SqlDatabaseType) || SqlDatabaseType.PostgreSQL,
126
+ host: (json["host"] as string) || "",
127
+ port: (json["port"] as number) || 5432,
128
+ databaseName: (json["databaseName"] as string) || "",
129
+ username: (json["username"] as string) || "",
130
+ password: (json["password"] as string) || "",
131
+ useWindowsIntegratedAuthentication: Boolean(
132
+ json["useWindowsIntegratedAuthentication"],
133
+ ),
134
+ useSsl: Boolean(json["useSsl"]),
135
+ rejectUnauthorizedSsl:
136
+ json["rejectUnauthorizedSsl"] === undefined ||
137
+ json["rejectUnauthorizedSsl"] === null
138
+ ? true
139
+ : Boolean(json["rejectUnauthorizedSsl"]),
140
+ connectionTimeoutInMs: clampSqlConnectionTimeoutInMs(
141
+ (json["connectionTimeoutInMs"] as number) ||
142
+ DEFAULT_DATABASE_CONNECTION_TIMEOUT_IN_MS,
143
+ ),
144
+ statementTimeoutInMs: clampSqlStatementTimeoutInMs(
145
+ (json["statementTimeoutInMs"] as number) ||
146
+ DEFAULT_DATABASE_STATEMENT_TIMEOUT_IN_MS,
147
+ ),
148
+ enabledMetricGroups: this.sanitizeMetricGroups(
149
+ json["enabledMetricGroups"],
150
+ ),
151
+ };
152
+ }
153
+
154
+ public static toJSON(monitor: MonitorStepDatabaseMonitor): JSONObject {
155
+ return {
156
+ databaseType: monitor.databaseType,
157
+ host: monitor.host,
158
+ port: monitor.port,
159
+ databaseName: monitor.databaseName,
160
+ username: monitor.username,
161
+ password: monitor.password,
162
+ useWindowsIntegratedAuthentication:
163
+ monitor.useWindowsIntegratedAuthentication,
164
+ useSsl: monitor.useSsl,
165
+ rejectUnauthorizedSsl: monitor.rejectUnauthorizedSsl,
166
+ connectionTimeoutInMs: monitor.connectionTimeoutInMs,
167
+ statementTimeoutInMs: monitor.statementTimeoutInMs,
168
+ enabledMetricGroups: [...monitor.enabledMetricGroups],
169
+ };
170
+ }
171
+ }
@@ -1,4 +1,5 @@
1
1
  import { JSONObject } from "../JSON";
2
+ import SqlConnectionConfig from "./SqlConnectionConfig";
2
3
  import SqlDatabaseType from "./SqlDatabaseType";
3
4
 
4
5
  /*
@@ -56,26 +57,7 @@ export const clampSqlMaxRows: (value: number) => number = (
56
57
  * the config is handed to a probe. OneUptime never creates these secrets for
57
58
  * the user; referencing one is the user's choice.
58
59
  */
59
- export default interface MonitorStepSqlMonitor {
60
- databaseType: SqlDatabaseType;
61
- host: string;
62
- port: number;
63
- databaseName: string;
64
- username: string;
65
- // Raw password OR a {{monitorSecrets.name}} reference resolved server-side.
66
- password: string;
67
- /*
68
- * Microsoft SQL Server only: authenticate with the identity under which the
69
- * probe is running (SSPI on Windows, Kerberos on Linux/macOS). Username and
70
- * password are ignored when this is enabled.
71
- */
72
- useWindowsIntegratedAuthentication: boolean;
73
- useSsl: boolean;
74
- /*
75
- * When SSL is on, whether the server certificate chain must validate. Users
76
- * connecting to a DB with a self-signed cert set this to false.
77
- */
78
- rejectUnauthorizedSsl: boolean;
60
+ export default interface MonitorStepSqlMonitor extends SqlConnectionConfig {
79
61
  // The read-only SQL query to run. A single statement is expected.
80
62
  query: string;
81
63
  connectionTimeoutInMs: number;
@@ -24,6 +24,18 @@ enum MonitorType {
24
24
  // Database monitoring — runs a read-only SQL query on a schedule from a probe.
25
25
  SQLQuery = "SQL Query",
26
26
 
27
+ /*
28
+ * Database health monitoring. Where SQLQuery runs the query the user
29
+ * wrote, this runs the queries we wrote: a probe connects to the engine
30
+ * and reads its own catalog views (pg_stat_*, performance_schema,
31
+ * sys.dm_*) to produce connection, throughput, lock, cache, storage and
32
+ * replication series without the user knowing a single system table.
33
+ * The two are deliberately separate types - a health check has no user
34
+ * query, needs different grants, and runs a different number of
35
+ * statements per interval.
36
+ */
37
+ Database = "Database",
38
+
27
39
  // These two monitor types are same but we are keeping them separate for now - this is for marketing purposes
28
40
  SyntheticMonitor = "Synthetic Monitor",
29
41
  CustomJavaScriptCode = "Custom JavaScript Code",
@@ -103,7 +115,7 @@ export class MonitorTypeHelper {
103
115
  },
104
116
  {
105
117
  label: "Database Monitoring",
106
- monitorTypes: [MonitorType.SQLQuery],
118
+ monitorTypes: [MonitorType.Database, MonitorType.SQLQuery],
107
119
  },
108
120
  {
109
121
  label: "Synthetic Monitoring",
@@ -495,6 +507,37 @@ export class MonitorTypeHelper {
495
507
  "row count",
496
508
  ],
497
509
  },
510
+ {
511
+ monitorType: MonitorType.Database,
512
+ title: "Database Health",
513
+ description:
514
+ "Connections, locks, replication and cache health for PostgreSQL, MySQL and SQL Server.",
515
+ icon: IconProp.Database,
516
+ keywords: [
517
+ "database",
518
+ "db",
519
+ "health",
520
+ "performance",
521
+ "postgres",
522
+ "postgresql",
523
+ "mysql",
524
+ "mariadb",
525
+ "mssql",
526
+ "sql server",
527
+ "connections",
528
+ "replication",
529
+ "replica",
530
+ "lag",
531
+ "locks",
532
+ "deadlock",
533
+ "vacuum",
534
+ "bloat",
535
+ "buffer",
536
+ "cache hit",
537
+ "slow query",
538
+ "wraparound",
539
+ ],
540
+ },
498
541
  {
499
542
  monitorType: MonitorType.SyntheticMonitor,
500
543
  title: "Synthetic Monitor",
@@ -780,6 +823,7 @@ export class MonitorTypeHelper {
780
823
  monitorType === MonitorType.DNSSEC ||
781
824
  monitorType === MonitorType.Domain ||
782
825
  monitorType === MonitorType.SQLQuery ||
826
+ monitorType === MonitorType.Database ||
783
827
  monitorType === MonitorType.ExternalStatusPage;
784
828
  return isProbeableMonitor;
785
829
  }
@@ -808,6 +852,7 @@ export class MonitorTypeHelper {
808
852
  MonitorType.DNSSEC,
809
853
  MonitorType.Domain,
810
854
  MonitorType.SQLQuery,
855
+ MonitorType.Database,
811
856
  MonitorType.ExternalStatusPage,
812
857
  MonitorType.Kubernetes,
813
858
  MonitorType.Docker,
@@ -855,6 +900,7 @@ export class MonitorTypeHelper {
855
900
  monitorType === MonitorType.DNSSEC ||
856
901
  monitorType === MonitorType.Domain ||
857
902
  monitorType === MonitorType.SQLQuery ||
903
+ monitorType === MonitorType.Database ||
858
904
  monitorType === MonitorType.ExternalStatusPage
859
905
  ) {
860
906
  return true;