@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,112 @@
1
+ /*
2
+ * Client half of the sensitive-URL-token handoff.
3
+ *
4
+ * Common/Server/Views/Partials/SensitiveUrlToken.ejs runs in <head>, moves the
5
+ * bearer token out of the path into sessionStorage and rewrites the address bar
6
+ * to the token-free route. By the time React mounts, the token is no longer a
7
+ * route parameter, so pages read it from here instead of from the router.
8
+ *
9
+ * Deliberately not routed through Common/UI/Utils/Navigation: this is read
10
+ * during the reset and verification flows, where the value has to be available
11
+ * whether or not the bootstrap managed to clean the URL, and Navigation only
12
+ * ever sees whatever the router was given.
13
+ *
14
+ * TOKEN_ROUTES is duplicated in the partial. The two lists have to agree about
15
+ * which routes carry a token; Common/Tests/App/SensitiveUrlTokenBootstrap.test.ts
16
+ * asserts that they do.
17
+ */
18
+
19
+ const STORAGE_KEY: string = "oneuptime-sensitive-url-token";
20
+
21
+ /*
22
+ * Route segments whose NEXT path segment is a single-use bearer token. Matched
23
+ * against the second-to-last segment, so this covers
24
+ * /accounts/reset-password/<token>, /reset-password/<token> and
25
+ * /status-page/<id>/reset-password/<token> alike.
26
+ */
27
+ const TOKEN_ROUTES: Array<string> = ["reset-password", "verify-email"];
28
+
29
+ interface HandoffWindow extends Window {
30
+ __ONEUPTIME_SENSITIVE_URL_TOKEN__?: string | undefined;
31
+ }
32
+
33
+ export default class SensitiveUrlToken {
34
+ /*
35
+ * The token for the current page, or "" when there is none.
36
+ *
37
+ * Order matters. sessionStorage is where the bootstrap normally puts it and
38
+ * is the only source that survives a reload of the cleaned URL. The in-memory
39
+ * handoff covers blocked storage. The path is the last resort: it only holds
40
+ * a token when the bootstrap could not run, and reading it keeps the flow
41
+ * working on the browsers where that happens.
42
+ */
43
+ public static read(): string {
44
+ try {
45
+ const stored: string | null = window.sessionStorage.getItem(STORAGE_KEY);
46
+
47
+ if (stored) {
48
+ return stored;
49
+ }
50
+ } catch {
51
+ /* Private mode or storage disabled; fall through. */
52
+ }
53
+
54
+ const handedOff: string | undefined = (window as HandoffWindow)
55
+ .__ONEUPTIME_SENSITIVE_URL_TOKEN__;
56
+
57
+ if (handedOff) {
58
+ return handedOff;
59
+ }
60
+
61
+ return SensitiveUrlToken.readFromPath(window.location.pathname);
62
+ }
63
+
64
+ /*
65
+ * Pull the token out of a path, if that path is a token-bearing route.
66
+ * Returns "" for the cleaned form of the same route, which is what the
67
+ * address bar holds once the bootstrap has run.
68
+ */
69
+ public static readFromPath(pathname: string): string {
70
+ const segments: Array<string> = SensitiveUrlToken.segmentsOf(pathname);
71
+
72
+ if (segments.length < 2) {
73
+ return "";
74
+ }
75
+
76
+ if (!TOKEN_ROUTES.includes(segments[segments.length - 2]!)) {
77
+ return "";
78
+ }
79
+
80
+ const token: string = segments[segments.length - 1]!;
81
+
82
+ try {
83
+ return decodeURIComponent(token);
84
+ } catch {
85
+ // A malformed escape sequence is handed on verbatim.
86
+ return token;
87
+ }
88
+ }
89
+
90
+ /*
91
+ * Drop the stashed token once the flow that needed it has completed.
92
+ *
93
+ * Only call this on success. A failed reset (an expired token, a password the
94
+ * server rejected) has to leave the stash intact, or the retry — and any
95
+ * reload of the now token-free URL — has nothing to submit.
96
+ */
97
+ public static clear(): void {
98
+ try {
99
+ window.sessionStorage.removeItem(STORAGE_KEY);
100
+ } catch {
101
+ /* Nothing was stored, so nothing to remove. */
102
+ }
103
+
104
+ delete (window as HandoffWindow).__ONEUPTIME_SENSITIVE_URL_TOKEN__;
105
+ }
106
+
107
+ private static segmentsOf(pathname: string): Array<string> {
108
+ return (pathname || "").split("/").filter((segment: string): boolean => {
109
+ return segment !== "";
110
+ });
111
+ }
112
+ }
@@ -9,6 +9,14 @@ import API from "./API/API";
9
9
  export interface LLMProviderTestResult {
10
10
  success: boolean;
11
11
  message: string;
12
+ /*
13
+ * Whether the provider actually used the tool offered by the connection
14
+ * test. Reachability alone is not enough for Ask AI or investigations —
15
+ * they read the user's data exclusively through tools — so a provider can
16
+ * connect successfully and still be unusable for every AI feature.
17
+ * Undefined for an older server that does not report it.
18
+ */
19
+ supportsToolCalling?: boolean | undefined;
12
20
  }
13
21
 
14
22
  export default class TestLLMProvider {
@@ -48,6 +56,9 @@ export default class TestLLMProvider {
48
56
  message:
49
57
  (responseData["message"] as string) ||
50
58
  "Connection successful. The LLM provider responded to a test prompt.",
59
+ ...(typeof responseData["supportsToolCalling"] === "boolean"
60
+ ? { supportsToolCalling: responseData["supportsToolCalling"] }
61
+ : {}),
51
62
  };
52
63
  } catch (err) {
53
64
  return {
@@ -222,6 +222,22 @@ export default class EnterpriseLicenseSeatsUtil {
222
222
  return null;
223
223
  }
224
224
 
225
+ /*
226
+ * The active-only aggregate contains none of this installation's stale
227
+ * reported users. Subtracting that old count would remove users belonging
228
+ * to active instances and under-enforce the license. Treat the complete
229
+ * aggregate as other-instance usage. We also cannot add the two counts:
230
+ * the same users may exist on both this installation and active ones.
231
+ * Return null to use the existing uncertainty fallback, which takes the
232
+ * larger complete-or-live total without subtracting or double-counting.
233
+ *
234
+ * Undefined retains the legacy behavior for responses from older license
235
+ * servers that did not send activity provenance.
236
+ */
237
+ if (thisInstance.isCountedTowardsUsage === false) {
238
+ return null;
239
+ }
240
+
225
241
  const ownReportedCount: number | null = this.parseCount(
226
242
  thisInstance.userCount,
227
243
  );
@@ -1,4 +1,4 @@
1
- import OneUptimeDate from "../../Types/Date";
1
+ import EnterpriseLicenseUserCountSource from "../../Types/EnterpriseLicense/EnterpriseLicenseUserCountSource";
2
2
 
3
3
  /*
4
4
  * Usage reported by one self-hosted instance of an enterprise license.
@@ -7,11 +7,37 @@ import OneUptimeDate from "../../Types/Date";
7
7
  * on staging, production and gov-cloud consumes a single seat.
8
8
  */
9
9
  export interface EnterpriseLicenseInstanceUsage {
10
+ /*
11
+ * Registration is the initial communication until the instance sends its
12
+ * first usage report.
13
+ */
14
+ createdAt?: Date | undefined;
10
15
  userCount?: number | undefined;
11
16
  userEmailHashes?: Array<string> | undefined;
12
17
  lastReportedAt?: Date | undefined;
13
18
  }
14
19
 
20
+ export interface EffectiveEnterpriseLicenseUserCountOptions {
21
+ instances: Array<EnterpriseLicenseInstanceUsage>;
22
+ storedUserCount?: number | null | undefined;
23
+ storedUserCountUpdatedAt?: Date | undefined;
24
+ storedUserCountSource?: EnterpriseLicenseUserCountSource | undefined;
25
+ legacyUserCount?: number | null | undefined;
26
+ legacyUserCountUpdatedAt?: Date | undefined;
27
+ /*
28
+ * Callers that just replaced/deleted modern rows know the stored aggregate
29
+ * came from those rows. They can suppress the one-time compatibility path
30
+ * for license records created before dedicated legacy fields existed.
31
+ */
32
+ allowStoredUserCountAsLegacyFallback?: boolean | undefined;
33
+ now: Date;
34
+ }
35
+
36
+ export interface EffectiveEnterpriseLicenseUserCount {
37
+ userCount: number | null;
38
+ source: EnterpriseLicenseUserCountSource | null;
39
+ }
40
+
15
41
  export default class EnterpriseLicenseUsageUtil {
16
42
  /*
17
43
  * How many days before a license expires that expiry reminder emails
@@ -41,11 +67,11 @@ export default class EnterpriseLicenseUsageUtil {
41
67
  )}`;
42
68
  }
43
69
  /*
44
- * Instances that stopped reporting (for example a decommissioned staging
45
- * environment) stop counting towards the seat total after this many days,
46
- * but are still listed so the customer can see them.
70
+ * An instance is inactive once it has gone this many complete days without
71
+ * communicating with oneuptime.com. Inactive instances stay visible, but
72
+ * their users no longer consume seats.
47
73
  */
48
- public static readonly InstanceUsageFreshnessInDays: number = 30;
74
+ public static readonly InstanceUsageFreshnessInDays: number = 7;
49
75
 
50
76
  // SHA-256 hex digest.
51
77
  private static readonly emailHashRegex: RegExp = /^[a-f0-9]{64}$/;
@@ -136,17 +162,171 @@ export default class EnterpriseLicenseUsageUtil {
136
162
  instance: EnterpriseLicenseInstanceUsage,
137
163
  now: Date,
138
164
  ): boolean {
139
- if (!instance.lastReportedAt) {
140
- // Registered (license key validated) but never reported usage yet.
165
+ const lastCommunicatedAt: Date | undefined =
166
+ this.getInstanceLastCommunicatedAt(instance);
167
+
168
+ if (!lastCommunicatedAt) {
141
169
  return false;
142
170
  }
143
171
 
144
- const staleBefore: Date = OneUptimeDate.addRemoveDays(
145
- now,
146
- -this.InstanceUsageFreshnessInDays,
172
+ const inactiveAfterInMilliseconds: number =
173
+ this.InstanceUsageFreshnessInDays * 24 * 60 * 60 * 1000;
174
+ const staleBefore: number = now.getTime() - inactiveAfterInMilliseconds;
175
+
176
+ /*
177
+ * Strictly greater than: at the exact seven-day boundary the instance has
178
+ * gone a full week without communicating and must already be inactive.
179
+ * Elapsed milliseconds are intentional; a daylight-saving transition
180
+ * must not shorten or extend the week.
181
+ */
182
+ return lastCommunicatedAt.getTime() > staleBefore;
183
+ }
184
+
185
+ public static getInstanceLastCommunicatedAt(
186
+ instance: EnterpriseLicenseInstanceUsage,
187
+ ): Date | undefined {
188
+ return instance.lastReportedAt || instance.createdAt;
189
+ }
190
+
191
+ /* A registration is active, but only a real report is modern seat data. */
192
+ public static hasActiveReportedInstanceUsage(
193
+ instances: Array<EnterpriseLicenseInstanceUsage>,
194
+ now: Date,
195
+ ): boolean {
196
+ return instances.some(
197
+ (instance: EnterpriseLicenseInstanceUsage): boolean => {
198
+ return (
199
+ Boolean(instance.lastReportedAt) &&
200
+ this.isInstanceCountedTowardsUsage(instance, now)
201
+ );
202
+ },
147
203
  );
204
+ }
205
+
206
+ public static isTimestampWithinUsageWindow(
207
+ timestamp: Date | undefined,
208
+ now: Date,
209
+ ): boolean {
210
+ return timestamp
211
+ ? this.isInstanceCountedTowardsUsage({ lastReportedAt: timestamp }, now)
212
+ : false;
213
+ }
214
+
215
+ public static hasReportedInstanceUsage(
216
+ instances: Array<EnterpriseLicenseInstanceUsage>,
217
+ ): boolean {
218
+ return instances.some(
219
+ (instance: EnterpriseLicenseInstanceUsage): boolean => {
220
+ return Boolean(instance.lastReportedAt);
221
+ },
222
+ );
223
+ }
224
+
225
+ /*
226
+ * Choose between modern per-instance reports and a separately persisted
227
+ * legacy license-wide heartbeat. The stored count fallback exists only for
228
+ * records written before those dedicated legacy columns were introduced;
229
+ * seeing any historical modern report proves that aggregate is not legacy.
230
+ * Once every authoritative communication timestamp is a week old, usage is
231
+ * zero.
232
+ */
233
+ public static getEffectiveUserCount(
234
+ options: EffectiveEnterpriseLicenseUserCountOptions,
235
+ ): number | null {
236
+ return this.getEffectiveUserCountAndSource(options).userCount;
237
+ }
238
+
239
+ public static getEffectiveUserCountAndSource(
240
+ options: EffectiveEnterpriseLicenseUserCountOptions,
241
+ ): EffectiveEnterpriseLicenseUserCount {
242
+ if (this.hasActiveReportedInstanceUsage(options.instances, options.now)) {
243
+ return {
244
+ userCount: this.getUniqueUserCount(options.instances, options.now),
245
+ source: EnterpriseLicenseUserCountSource.Instance,
246
+ };
247
+ }
248
+
249
+ if (
250
+ this.isTimestampWithinUsageWindow(
251
+ options.legacyUserCountUpdatedAt,
252
+ options.now,
253
+ )
254
+ ) {
255
+ return {
256
+ userCount: options.legacyUserCount ?? null,
257
+ source: EnterpriseLicenseUserCountSource.Legacy,
258
+ };
259
+ }
260
+
261
+ const hasRecentRegistration: boolean = options.instances.some(
262
+ (instance: EnterpriseLicenseInstanceUsage): boolean => {
263
+ return (
264
+ !instance.lastReportedAt &&
265
+ this.isInstanceCountedTowardsUsage(instance, options.now)
266
+ );
267
+ },
268
+ );
269
+ const hasRecentLegacyReport: boolean = options.storedUserCountUpdatedAt
270
+ ? this.isTimestampWithinUsageWindow(
271
+ options.storedUserCountUpdatedAt,
272
+ options.now,
273
+ )
274
+ : false;
275
+ const isExplicitLegacyFallback: boolean =
276
+ options.storedUserCountSource ===
277
+ EnterpriseLicenseUserCountSource.Legacy &&
278
+ !options.legacyUserCountUpdatedAt &&
279
+ hasRecentLegacyReport;
280
+ const canUseCompatibilityFallback: boolean =
281
+ options.allowStoredUserCountAsLegacyFallback !== false &&
282
+ options.storedUserCountSource !==
283
+ EnterpriseLicenseUserCountSource.Instance &&
284
+ !options.legacyUserCountUpdatedAt &&
285
+ !this.hasReportedInstanceUsage(options.instances);
286
+
287
+ if (
288
+ isExplicitLegacyFallback ||
289
+ (canUseCompatibilityFallback &&
290
+ (hasRecentRegistration || hasRecentLegacyReport))
291
+ ) {
292
+ return {
293
+ userCount: options.storedUserCount ?? null,
294
+ source: EnterpriseLicenseUserCountSource.Legacy,
295
+ };
296
+ }
297
+
298
+ if (
299
+ options.instances.length === 0 &&
300
+ (options.storedUserCount === undefined ||
301
+ options.storedUserCount === null) &&
302
+ !options.storedUserCountUpdatedAt &&
303
+ (options.legacyUserCount === undefined ||
304
+ options.legacyUserCount === null) &&
305
+ !options.legacyUserCountUpdatedAt &&
306
+ !options.storedUserCountSource
307
+ ) {
308
+ return {
309
+ userCount: null,
310
+ source: null,
311
+ };
312
+ }
313
+
314
+ let inactiveUsageSource: EnterpriseLicenseUserCountSource | null =
315
+ options.storedUserCountSource || null;
316
+
317
+ if (
318
+ !inactiveUsageSource &&
319
+ this.hasReportedInstanceUsage(options.instances)
320
+ ) {
321
+ inactiveUsageSource = EnterpriseLicenseUserCountSource.Instance;
322
+ } else if (!inactiveUsageSource && options.legacyUserCountUpdatedAt) {
323
+ inactiveUsageSource = EnterpriseLicenseUserCountSource.Legacy;
324
+ }
148
325
 
149
- return instance.lastReportedAt.getTime() >= staleBefore.getTime();
326
+ return {
327
+ userCount: 0,
328
+ source: inactiveUsageSource,
329
+ };
150
330
  }
151
331
 
152
332
  /*
@@ -1,5 +1,16 @@
1
1
  import AggregationType from "../../Types/BaseDatabase/AggregationType";
2
- import { CheckOn } from "../../Types/Monitor/CriteriaFilter";
2
+ import { CheckOn, CriteriaFilter } from "../../Types/Monitor/CriteriaFilter";
3
+ import {
4
+ DatabaseMetricCategory,
5
+ DatabaseMetricDefinition,
6
+ getAllDatabaseMetrics,
7
+ getDatabaseMetricByMetricType,
8
+ getDatabaseMetricCategoryDescription,
9
+ getDatabaseMetricCategoryOrder,
10
+ getDatabaseMetricsByCategory,
11
+ getDatabaseMetricsForEngine,
12
+ } from "../../Types/Monitor/DatabaseMetricCatalog";
13
+ import SqlDatabaseType from "../../Types/Monitor/SqlDatabaseType";
3
14
  import MonitorMetricType from "../../Types/Monitor/MonitorMetricType";
4
15
  import MonitorType, {
5
16
  MonitorTypeHelper,
@@ -20,6 +31,19 @@ class MonitorMetricTypeUtil {
20
31
  public static getAggregationTypeByMonitorMetricType(
21
32
  monitorMetricType: MonitorMetricType,
22
33
  ): AggregationType {
34
+ /*
35
+ * Database Health series carry their own aggregation in the catalog, so
36
+ * they resolve here instead of adding ~40 cases to this switch (and to
37
+ * the four other switches in this file). The catalog is the one place a
38
+ * new database metric has to be declared.
39
+ */
40
+ const databaseMetric: DatabaseMetricDefinition | null =
41
+ getDatabaseMetricByMetricType(monitorMetricType);
42
+
43
+ if (databaseMetric) {
44
+ return databaseMetric.defaultAggregation;
45
+ }
46
+
23
47
  switch (monitorMetricType) {
24
48
  case MonitorMetricType.ResponseTime:
25
49
  return AggregationType.Avg;
@@ -275,6 +299,22 @@ class MonitorMetricTypeUtil {
275
299
  ];
276
300
  }
277
301
 
302
+ if (monitorType === MonitorType.Database) {
303
+ /*
304
+ * Availability first, then every catalog series in category order.
305
+ * Engine filtering happens in getDatabaseMetricCategories, which is
306
+ * the only caller that knows which engine the monitor points at - this
307
+ * list is the full capability set for the monitor type.
308
+ */
309
+ return [
310
+ MonitorMetricType.IsOnline,
311
+ MonitorMetricType.ResponseTime,
312
+ ...getAllDatabaseMetrics().map((metric: DatabaseMetricDefinition) => {
313
+ return metric.metricType;
314
+ }),
315
+ ];
316
+ }
317
+
278
318
  if (
279
319
  monitorType === MonitorType.DNS ||
280
320
  monitorType === MonitorType.DNSSEC ||
@@ -308,6 +348,14 @@ class MonitorMetricTypeUtil {
308
348
  */
309
349
  public static getMonitorMetricCategoriesByMonitorType(
310
350
  monitorType: MonitorType,
351
+ /*
352
+ * Database Health only. When the caller knows which engine the monitor
353
+ * is pointed at, pass it and the cards drop the series that engine can
354
+ * never write - so a MySQL monitor does not show a permanently empty
355
+ * "Transaction ID Used" chart. Omitting it shows the full capability
356
+ * set, which is the right fallback when the engine is not loaded yet.
357
+ */
358
+ databaseType?: SqlDatabaseType | undefined,
311
359
  ): Array<MonitorMetricCategory> {
312
360
  if (monitorType === MonitorType.Server) {
313
361
  return [
@@ -375,6 +423,10 @@ class MonitorMetricTypeUtil {
375
423
  ];
376
424
  }
377
425
 
426
+ if (monitorType === MonitorType.Database) {
427
+ return this.getDatabaseMetricCategories(databaseType);
428
+ }
429
+
378
430
  if (monitorType === MonitorType.NetworkDevice) {
379
431
  return [
380
432
  {
@@ -423,6 +475,13 @@ class MonitorMetricTypeUtil {
423
475
  return "Total Connection Time (DNS + TCP)";
424
476
  }
425
477
 
478
+ const databaseMetric: DatabaseMetricDefinition | null =
479
+ getDatabaseMetricByMetricType(monitorMetricType);
480
+
481
+ if (databaseMetric) {
482
+ return databaseMetric.friendlyName;
483
+ }
484
+
426
485
  switch (monitorMetricType) {
427
486
  case MonitorMetricType.ResponseTime:
428
487
  return "Response Time";
@@ -534,6 +593,13 @@ class MonitorMetricTypeUtil {
534
593
  public static getLegendUnitByMonitorMetricType(
535
594
  monitorMetricType: MonitorMetricType,
536
595
  ): string {
596
+ const databaseMetric: DatabaseMetricDefinition | null =
597
+ getDatabaseMetricByMetricType(monitorMetricType);
598
+
599
+ if (databaseMetric) {
600
+ return databaseMetric.unit;
601
+ }
602
+
537
603
  switch (monitorMetricType) {
538
604
  case MonitorMetricType.ResponseTime:
539
605
  return "ms";
@@ -619,6 +685,13 @@ class MonitorMetricTypeUtil {
619
685
  return "Total time spent resolving the hostname (when needed) and establishing the TCP connection.";
620
686
  }
621
687
 
688
+ const databaseMetric: DatabaseMetricDefinition | null =
689
+ getDatabaseMetricByMetricType(monitorMetricType);
690
+
691
+ if (databaseMetric) {
692
+ return databaseMetric.description;
693
+ }
694
+
622
695
  switch (monitorMetricType) {
623
696
  case MonitorMetricType.ResponseTime:
624
697
  return "Response time is the time taken for a server to respond to a request. It is the sum of the time spent waiting to establish the connection, the time spent waiting for the request to be processed, and the time spent waiting for the response to be sent.";
@@ -714,6 +787,85 @@ class MonitorMetricTypeUtil {
714
787
  return "";
715
788
  }
716
789
  }
790
+
791
+ /**
792
+ * One card per catalog category, in the order an operator walks them
793
+ * during an incident. When `databaseType` is given, a category whose
794
+ * metrics are all unsupported on that engine is dropped entirely rather
795
+ * than rendered as a card of empty charts.
796
+ */
797
+ public static getDatabaseMetricCategories(
798
+ databaseType?: SqlDatabaseType | undefined,
799
+ ): Array<MonitorMetricCategory> {
800
+ const supported: Array<MonitorMetricType> | null = databaseType
801
+ ? getDatabaseMetricsForEngine(databaseType).map(
802
+ (metric: DatabaseMetricDefinition) => {
803
+ return metric.metricType;
804
+ },
805
+ )
806
+ : null;
807
+
808
+ const categories: Array<MonitorMetricCategory> = [];
809
+
810
+ for (const category of getDatabaseMetricCategoryOrder()) {
811
+ const metrics: Array<MonitorMetricType> = getDatabaseMetricsByCategory(
812
+ category,
813
+ )
814
+ .filter((metric: DatabaseMetricDefinition) => {
815
+ return !supported || supported.includes(metric.metricType);
816
+ })
817
+ .map((metric: DatabaseMetricDefinition) => {
818
+ return metric.metricType;
819
+ });
820
+
821
+ /*
822
+ * Availability additionally carries the shared probe series, so it is
823
+ * never empty even if every catalog metric in it were filtered out.
824
+ */
825
+ if (category === DatabaseMetricCategory.Availability) {
826
+ metrics.unshift(
827
+ MonitorMetricType.IsOnline,
828
+ MonitorMetricType.ResponseTime,
829
+ );
830
+ }
831
+
832
+ if (metrics.length === 0) {
833
+ continue;
834
+ }
835
+
836
+ categories.push({
837
+ title: category,
838
+ description: getDatabaseMetricCategoryDescription(category),
839
+ metrics: metrics,
840
+ });
841
+ }
842
+
843
+ return categories;
844
+ }
845
+
846
+ /**
847
+ * The metric series a criteria filter reads.
848
+ *
849
+ * Database Health filters name their series in
850
+ * databaseMonitorOptions.metricType rather than in the CheckOn itself, so
851
+ * resolving from the CheckOn alone would return null and silently turn
852
+ * "evaluate over time" into an instantaneous comparison. Callers that hold
853
+ * the whole filter - EvaluateOverTime does - must use this instead of
854
+ * getMonitorMetricTypeByCheckOnOrNull.
855
+ */
856
+ public static getMonitorMetricTypeByCriteriaFilterOrNull(
857
+ criteriaFilter: CriteriaFilter,
858
+ ): MonitorMetricType | null {
859
+ if (criteriaFilter.checkOn === CheckOn.DatabaseMetric) {
860
+ return criteriaFilter.databaseMonitorOptions?.metricType || null;
861
+ }
862
+
863
+ if (criteriaFilter.checkOn === CheckOn.DatabaseIsOnline) {
864
+ return MonitorMetricType.IsOnline;
865
+ }
866
+
867
+ return this.getMonitorMetricTypeByCheckOnOrNull(criteriaFilter.checkOn);
868
+ }
717
869
  }
718
870
 
719
871
  export default MonitorMetricTypeUtil;
@@ -42,6 +42,21 @@ export interface TopologyDeviceInput {
42
42
  lastPolledAt?: Date | undefined;
43
43
  lastSeenAt?: Date | undefined;
44
44
  pollingIntervalInMinutes?: number | undefined;
45
+ /*
46
+ * How this device's health is established. NULL, empty and anything
47
+ * unrecognised read as Probe — see NetworkDeviceMonitoringMethodUtil.parse,
48
+ * which is why an omitted value keeps every existing caller on the poll
49
+ * rule unchanged.
50
+ *
51
+ * Read only when `monitorStatus` below is absent, and load-bearing there:
52
+ * a monitor-backed device (monitoringMethod "Monitor") with nothing
53
+ * stamped yet is drawn "unknown", which is what the device list says
54
+ * about it too. Without this the poll columns above would decide — and on
55
+ * a device switched over from SNMP they hold the last thing a probe found
56
+ * before it stopped asking, so a months-old lastSeenAt would draw the node
57
+ * red while its row in the device list reads Pending.
58
+ */
59
+ monitoringMethod?: string | null | undefined;
45
60
  interfacesUp?: number | undefined;
46
61
  interfacesDown?: number | undefined;
47
62
  vendor?: string | undefined;
@@ -1654,9 +1669,13 @@ export default class NetworkTopologyUtil {
1654
1669
 
1655
1670
  /*
1656
1671
  * The shared reachability rule (DeviceReachabilityUtil), mapped onto the
1657
- * graph's three node states. "Pending" — never polled is the graph's
1658
- * "unknown", which is what keeps a device nothing walks from being drawn
1659
- * as a failure.
1672
+ * graph's three node states. "Pending" — never polled, or monitor-backed
1673
+ * with nothing reported yet is the graph's "unknown", which is what
1674
+ * keeps a device nothing walks from being drawn as a failure.
1675
+ *
1676
+ * Only reached with no stamped status (deviceStatus took every stamped
1677
+ * one), so the monitoring method is the one fact left that tells the rule
1678
+ * whether the poll columns are evidence or leftovers.
1660
1679
  */
1661
1680
  private static statusFromPoll(
1662
1681
  device: TopologyDeviceInput,
@@ -1668,6 +1687,7 @@ export default class NetworkTopologyUtil {
1668
1687
  lastPolledAt: device.lastPolledAt,
1669
1688
  lastSeenAt: device.lastSeenAt,
1670
1689
  pollingIntervalInMinutes: device.pollingIntervalInMinutes,
1690
+ monitoringMethod: device.monitoringMethod,
1671
1691
  },
1672
1692
  now,
1673
1693
  );