@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
@@ -13,6 +13,7 @@ import MetricType from "../../../Models/DatabaseModels/MetricType";
13
13
  import Dictionary from "../../../Types/Dictionary";
14
14
  import { JSONObject } from "../../../Types/JSON";
15
15
  import MonitorMetricType from "../../../Types/Monitor/MonitorMetricType";
16
+ import PingMonitorResponse from "../../../Types/Monitor/PingMonitor/PingMonitorResponse";
16
17
  import SnmpInterface from "../../../Types/Monitor/SnmpMonitor/SnmpInterface";
17
18
  import SnmpMonitorResponse, {
18
19
  SnmpOidResponse,
@@ -22,14 +23,28 @@ import OneUptimeDate from "../../../Types/Date";
22
23
  import CaptureSpan from "../Telemetry/CaptureSpan";
23
24
 
24
25
  /*
25
- * Emits device-scoped metrics from each device walk — availability,
26
- * response time, per-interface status/bandwidth/utilization/errors, and
27
- * polled health-OID values. Series are keyed to the NetworkDevice
28
- * (primaryEntityId = deviceId, attributes.networkDeviceId), NOT to a
29
- * monitor, so the device pages can chart health for every registered
30
- * device — including devices no monitor watches. Mirrors the SNMP sections
31
- * of MonitorMetricUtil, which continue to emit monitor-scoped series for
32
- * monitors that alert on the device.
26
+ * Ping round-trip time of a network device, in ms.
27
+ *
28
+ * Ping monitors write their RTT into MonitorMetricType.ResponseTime, but on
29
+ * a network device that series is the SNMP walk's time (and is absent on a
30
+ * ping-only poll), so the RTT needs a series of its own. It sits in the
31
+ * `oneuptime.monitor.ping.*` namespace beside PacketLossPercent and Jitter,
32
+ * which ARE reused from the Ping monitor. MonitorMetricType has no member
33
+ * for it yet; this constant should graduate into that enum (and the device
34
+ * metric catalog) rather than be duplicated.
35
+ */
36
+ export const NETWORK_DEVICE_PING_ROUND_TRIP_TIME_METRIC_NAME: string =
37
+ "oneuptime.monitor.ping.round.trip.time";
38
+
39
+ /*
40
+ * Emits device-scoped metrics from each device poll — reachability, ping
41
+ * RTT / packet loss, SNMP walk time, per-interface
42
+ * status/bandwidth/utilization/errors, and polled health-OID values.
43
+ * Series are keyed to the NetworkDevice (primaryEntityId = deviceId,
44
+ * attributes.networkDeviceId), NOT to a monitor, so the device pages can
45
+ * chart health for every registered device — including devices no monitor
46
+ * watches. Mirrors the SNMP sections of MonitorMetricUtil, which continue
47
+ * to emit monitor-scoped series for monitors that alert on the device.
33
48
  */
34
49
  export default class NetworkDeviceMetricUtil {
35
50
  /*
@@ -103,9 +118,14 @@ export default class NetworkDeviceMetricUtil {
103
118
  networkDeviceId: ObjectID;
104
119
  deviceName: string | undefined;
105
120
  probeId: ObjectID | undefined;
121
+ // The SNMP walk when one ran; undefined on a ping-only poll.
106
122
  snmpResponse: SnmpMonitorResponse | undefined;
123
+ // The walk's time only - undefined on a ping-only poll, never the RTT.
107
124
  responseTimeInMs: number | undefined;
125
+ // Device reachability: answered ping OR the walk succeeded.
108
126
  isOnline: boolean | undefined;
127
+ // RTT / packet loss from the probe's ping, when it ran one.
128
+ pingResponse?: PingMonitorResponse | undefined;
109
129
  }): Promise<void> {
110
130
  const metricRows: Array<JSONObject> = [];
111
131
  const metricNameServiceNameMap: Dictionary<MetricType> = {};
@@ -177,16 +197,52 @@ export default class NetworkDeviceMetricUtil {
177
197
  pushMetric({
178
198
  metricName: MonitorMetricType.IsOnline,
179
199
  value: data.isOnline ? 1 : 0,
180
- description: "SNMP reachability of this network device (1 up, 0 down)",
200
+ description:
201
+ "Reachability of this network device by ping or SNMP (1 up, 0 down)",
181
202
  unit: "",
182
203
  });
183
204
  }
184
205
 
206
+ /*
207
+ * Walk time only. A ping-only poll has no walk and writes no point
208
+ * here; its latency is the RTT series below. Mixing the two into one
209
+ * series would chart a 1 ms ICMP echo and a 400 ms 48-port walk as the
210
+ * same thing.
211
+ */
185
212
  if (data.responseTimeInMs !== undefined) {
186
213
  pushMetric({
187
214
  metricName: MonitorMetricType.ResponseTime,
188
215
  value: data.responseTimeInMs,
189
- description: "SNMP response time of this network device",
216
+ description:
217
+ "SNMP walk time of this network device (absent when the poll ran no walk)",
218
+ unit: "ms",
219
+ });
220
+ }
221
+
222
+ /*
223
+ * The probe's ping, when it ran one. Packet loss and jitter reuse the
224
+ * Ping monitor's series so the same charts and criteria vocabulary
225
+ * apply; the RTT gets its own (see the constant's comment). pushMetric
226
+ * skips undefined values, so an older probe that reports no ping
227
+ * writes nothing here.
228
+ */
229
+ if (data.pingResponse) {
230
+ pushMetric({
231
+ metricName: NETWORK_DEVICE_PING_ROUND_TRIP_TIME_METRIC_NAME,
232
+ value: data.pingResponse.avgRoundTripTimeInMs,
233
+ description: "Ping round-trip time to this network device",
234
+ unit: "ms",
235
+ });
236
+ pushMetric({
237
+ metricName: MonitorMetricType.PacketLossPercent,
238
+ value: data.pingResponse.packetLossPercent,
239
+ description: "Ping packet loss to this network device",
240
+ unit: "%",
241
+ });
242
+ pushMetric({
243
+ metricName: MonitorMetricType.Jitter,
244
+ value: data.pingResponse.jitterInMs,
245
+ description: "Ping jitter to this network device",
190
246
  unit: "ms",
191
247
  });
192
248
  }
@@ -2,13 +2,18 @@ import Monitor from "../../../Models/DatabaseModels/Monitor";
2
2
  import NetworkDevice from "../../../Models/DatabaseModels/NetworkDevice";
3
3
  import MonitorService from "../../Services/MonitorService";
4
4
  import NetworkDeviceService from "../../Services/NetworkDeviceService";
5
+ import Query from "../../Types/Database/Query";
6
+ import QueryHelper from "../../Types/Database/QueryHelper";
5
7
  import MonitorResourceUtil from "./MonitorResource";
8
+ import { NetworkDevicePollMode } from "./NetworkDeviceHydrationUtil";
6
9
  import NetworkDeviceMetricUtil from "./NetworkDeviceMetricUtil";
7
10
  import NetworkInventoryUtil from "./NetworkInventoryUtil";
8
11
  import SnmpInterfaceRateUtil from "./SnmpInterfaceRateUtil";
12
+ import SortOrder from "../../../Types/BaseDatabase/SortOrder";
9
13
  import LIMIT_MAX from "../../../Types/Database/LimitMax";
10
14
  import MonitorStep from "../../../Types/Monitor/MonitorStep";
11
15
  import MonitorType from "../../../Types/Monitor/MonitorType";
16
+ import PingMonitorResponse from "../../../Types/Monitor/PingMonitor/PingMonitorResponse";
12
17
  import SnmpMonitorResponse from "../../../Types/Monitor/SnmpMonitor/SnmpMonitorResponse";
13
18
  import ProbeMonitorResponse from "../../../Types/Probe/ProbeMonitorResponse";
14
19
  import { JSONObject } from "../../../Types/JSON";
@@ -16,18 +21,37 @@ import ObjectID from "../../../Types/ObjectID";
16
21
  import OneUptimeDate from "../../../Types/Date";
17
22
  import logger from "../Logger";
18
23
 
24
+ /*
25
+ * What the probe's ping of a device found, as the probe reports it
26
+ * (PingMonitor.checkReachability): a verdict, the average RTT, the loss,
27
+ * and why it failed when it did. Packet counts are optional because the
28
+ * reachability ping is a short fixed burst whose counts the probe need not
29
+ * report; the loss percentage is the number that matters.
30
+ */
31
+ export interface NetworkDevicePingResult {
32
+ isOnline: boolean;
33
+ avgRttMs?: number | undefined;
34
+ packetLossPercent?: number | undefined;
35
+ packetsSent?: number | undefined;
36
+ packetsReceived?: number | undefined;
37
+ failureCause?: string | undefined;
38
+ }
39
+
19
40
  /*
20
41
  * Server half of device-owned polling.
21
42
  *
22
- * The device's assigned probe walks every polling-enabled NetworkDevice on
23
- * the device's own schedule and reports each walk here. This util then:
43
+ * The device's assigned probe polls every polling-enabled NetworkDevice on
44
+ * the device's own schedule - pinging it always, and walking it over SNMP
45
+ * as well when it has usable credentials - and reports each poll here. This
46
+ * util then:
24
47
  *
25
48
  * 1. computes interface rates against the device's previous walk
26
- * (NetworkDevice.lastWalkLog),
27
- * 2. syncs the device/interface/endpoint inventory and lastSeenAt,
49
+ * (NetworkDevice.lastWalkLog) when interfaces were walked,
50
+ * 2. syncs the device/interface/endpoint inventory, reachability and
51
+ * lastSeenAt,
28
52
  * 3. emits device-scoped metrics (so health charts work with zero
29
53
  * monitors), and
30
- * 4. fans the walk out to every Network Device monitor referencing the
54
+ * 4. fans the poll out to every Network Device monitor referencing the
31
55
  * device — each gets an event-driven ProbeMonitorResponse evaluated
32
56
  * through the ordinary criteria pipeline (incidents, alerts, status).
33
57
  *
@@ -35,10 +59,36 @@ import logger from "../Logger";
35
59
  * every monitor leaves the device fully inventoried and charted.
36
60
  */
37
61
  export default class NetworkDeviceWalkUtil {
62
+ /*
63
+ * One page of the monitor fan-out lookup. The indexed query rarely needs
64
+ * a second page (a device has a handful of monitors); the legacy JSON
65
+ * scan can, on a project with more than this many hand-made Network
66
+ * Device monitors.
67
+ */
68
+ private static readonly FAN_OUT_PAGE_SIZE: number = LIMIT_MAX;
69
+
38
70
  public static async processWalkResult(data: {
39
71
  probeId: ObjectID;
40
72
  networkDeviceId: ObjectID;
41
- snmpResponse: SnmpMonitorResponse;
73
+ /*
74
+ * Device reachability: answered ping OR the walk succeeded. A caller
75
+ * that predates ping-first polling passes only a walk; its verdict is
76
+ * then the device's verdict.
77
+ */
78
+ isOnline?: boolean | undefined;
79
+ /*
80
+ * How the probe polled - "ping" (no credentials, ping only) or "snmp"
81
+ * (ping and a walk in parallel). Absent from a pre-ping-first caller,
82
+ * and read as "snmp" then: such a probe only ever walked.
83
+ */
84
+ pollMode?: NetworkDevicePollMode | undefined;
85
+ // The probe's ping, when it ran one (older probes send none).
86
+ pingResponse?: NetworkDevicePingResult | undefined;
87
+ /*
88
+ * The SNMP walk, when one ran - success or failure. Undefined on a
89
+ * ping-only poll, and never synthesized from the ping.
90
+ */
91
+ snmpResponse?: SnmpMonitorResponse | undefined;
42
92
  monitoredAt: Date;
43
93
  }): Promise<void> {
44
94
  /*
@@ -66,28 +116,45 @@ export default class NetworkDeviceWalkUtil {
66
116
 
67
117
  if (!device || !device.id || !device.projectId) {
68
118
  logger.warn(
69
- `Device walk ignored: device ${data.networkDeviceId.toString()} is not assigned to probe ${data.probeId.toString()}.`,
119
+ `Device poll ignored: device ${data.networkDeviceId.toString()} is not assigned to probe ${data.probeId.toString()}.`,
70
120
  );
71
121
  return;
72
122
  }
73
123
 
74
- const isOnline: boolean | undefined = data.snmpResponse.isOnline;
124
+ const pollMode: NetworkDevicePollMode = data.pollMode ?? "snmp";
125
+
126
+ /*
127
+ * The device verdict. A ping-first probe states it (ping OR walk); an
128
+ * older probe only walked, so its walk verdict IS the device verdict -
129
+ * and, matching the inventory's convention, a walk that reports no
130
+ * verdict at all counts as answered.
131
+ */
132
+ const isOnline: boolean =
133
+ data.isOnline ??
134
+ (data.snmpResponse ? data.snmpResponse.isOnline !== false : false);
135
+
136
+ const pingResponse: PingMonitorResponse | undefined =
137
+ NetworkDeviceWalkUtil.toPingMonitorResponse(data.pingResponse);
75
138
 
76
139
  /*
77
140
  * Interface rates are counter deltas against the previous walk. Compute
78
141
  * them on the FULL interface set, before inventory pruning, so muted
79
- * ports still get fresh rates in the inventory table.
142
+ * ports still get fresh rates in the inventory table. Nothing to do on
143
+ * a poll that ran no walk.
80
144
  */
81
- SnmpInterfaceRateUtil.attachInterfaceRates({
82
- snmpResponse: data.snmpResponse,
83
- previousWalkLog: device.lastWalkLog as JSONObject | undefined,
84
- });
145
+ if (data.snmpResponse) {
146
+ SnmpInterfaceRateUtil.attachInterfaceRates({
147
+ snmpResponse: data.snmpResponse,
148
+ previousWalkLog: device.lastWalkLog as JSONObject | undefined,
149
+ });
150
+ }
85
151
 
86
152
  /*
87
153
  * Persist this walk as the next delta baseline — but only when it
88
154
  * actually walked interfaces. Keeping the last GOOD counters across
89
- * failed polls means rates resume with a correct (longer-window) delta
90
- * instead of losing a cycle.
155
+ * failed polls (and across ping-only polls, which walk nothing) means
156
+ * rates resume with a correct (longer-window) delta instead of losing
157
+ * a cycle.
91
158
  *
92
159
  * Hook-free single-statement write, deliberately. A 48-interface walk
93
160
  * log is ~28 KB of jsonb, stored out of line: the full updateOneById
@@ -126,6 +193,7 @@ export default class NetworkDeviceWalkUtil {
126
193
  * counter at all.
127
194
  */
128
195
  if (
196
+ data.snmpResponse &&
129
197
  data.snmpResponse.interfaces &&
130
198
  data.snmpResponse.interfaces.length > 0
131
199
  ) {
@@ -177,6 +245,7 @@ export default class NetworkDeviceWalkUtil {
177
245
  deviceId: device.id,
178
246
  snmpResponse: data.snmpResponse,
179
247
  isOnline: isOnline,
248
+ pollMode: pollMode,
180
249
  });
181
250
 
182
251
  try {
@@ -186,8 +255,10 @@ export default class NetworkDeviceWalkUtil {
186
255
  deviceName: device.name,
187
256
  probeId: data.probeId,
188
257
  snmpResponse: data.snmpResponse,
189
- responseTimeInMs: data.snmpResponse.responseTimeInMs,
258
+ // Walk time only: a ping-only poll writes no response-time point.
259
+ responseTimeInMs: data.snmpResponse?.responseTimeInMs,
190
260
  isOnline: isOnline,
261
+ pingResponse: pingResponse,
191
262
  });
192
263
  } catch (err) {
193
264
  // Metrics must never fail the walk pipeline.
@@ -197,6 +268,19 @@ export default class NetworkDeviceWalkUtil {
197
268
  logger.error(err);
198
269
  }
199
270
 
271
+ /*
272
+ * Why the poll failed, for the incident/alert narrative. The walk's own
273
+ * cause is passed through whenever a walk ran (it is the more specific
274
+ * of the two, and the "SNMP walk failing" alert reads it); the ping's
275
+ * cause is only worth stating when the device is actually unreachable
276
+ * - on an ICMP-filtered device whose walk succeeds, "ping timed out" is
277
+ * not a failure of anything.
278
+ */
279
+ const failureCause: string =
280
+ data.snmpResponse?.failureCause ||
281
+ (!isOnline ? data.pingResponse?.failureCause : undefined) ||
282
+ "";
283
+
200
284
  // --- Fan out to the monitors alerting on this device ---
201
285
  const monitors: Array<Monitor> =
202
286
  await NetworkDeviceWalkUtil.findMonitorsWatchingDevices({
@@ -229,16 +313,23 @@ export default class NetworkDeviceWalkUtil {
229
313
  continue;
230
314
  }
231
315
 
316
+ /*
317
+ * `isOnline` is the device verdict; `snmpResponse` is the real walk
318
+ * or undefined - NEVER a synthesized failure, so walk-dependent
319
+ * criteria see "not evaluated" rather than "breaching" on a
320
+ * ping-only device. `responseTimeInMs` is the walk's time only.
321
+ */
232
322
  const walkResponse: ProbeMonitorResponse = {
233
323
  projectId: monitor.projectId,
234
324
  monitorId: monitor.id,
235
325
  monitorStepId: monitorStep.id,
236
326
  probeId: data.probeId,
237
327
  snmpResponse: data.snmpResponse,
328
+ pingResponse: pingResponse,
238
329
  isOnline: isOnline,
239
- responseTimeInMs: data.snmpResponse.responseTimeInMs,
240
- isTimeout: data.snmpResponse.isTimeout,
241
- failureCause: data.snmpResponse.failureCause || "",
330
+ responseTimeInMs: data.snmpResponse?.responseTimeInMs,
331
+ isTimeout: data.snmpResponse?.isTimeout,
332
+ failureCause: failureCause,
242
333
  monitoredAt: data.monitoredAt,
243
334
  ingestedAt: OneUptimeDate.getCurrentDate(),
244
335
  };
@@ -247,7 +338,7 @@ export default class NetworkDeviceWalkUtil {
247
338
  await MonitorResourceUtil.monitorResource(walkResponse);
248
339
  } catch (err) {
249
340
  logger.error(
250
- `Error evaluating device walk for monitor ${monitor.id.toString()}:`,
341
+ `Error evaluating device poll for monitor ${monitor.id.toString()}:`,
251
342
  );
252
343
  logger.error(err);
253
344
  }
@@ -255,16 +346,67 @@ export default class NetworkDeviceWalkUtil {
255
346
  }
256
347
 
257
348
  logger.debug(
258
- `Device walk for ${device.id.toString()} processed: evaluated ${monitors.length} watching monitor(s).`,
349
+ `Device poll for ${device.id.toString()} (${pollMode}) processed: evaluated ${monitors.length} watching monitor(s).`,
259
350
  );
260
351
  }
261
352
 
262
353
  /*
263
- * Every enabled Network Device monitor in the project whose steps
264
- * reference one of the given devices. Shared by the walk fan-out above
265
- * and the SNMP trap fan-out the monitor↔device link lives in step JSON,
266
- * so this fetches the project's Network Device monitors and filters
267
- * server-side.
354
+ * The probe's ping result in the shape the criteria pipeline already
355
+ * speaks (ProbeMonitorResponse.pingResponse, as Ping monitors report it),
356
+ * so packet-loss criteria, metrics and evidence read it without a special
357
+ * case. Undefined when the probe ran no ping (older probes).
358
+ */
359
+ public static toPingMonitorResponse(
360
+ ping: NetworkDevicePingResult | undefined,
361
+ ): PingMonitorResponse | undefined {
362
+ if (!ping) {
363
+ return undefined;
364
+ }
365
+
366
+ /*
367
+ * Loss is the one number every reader wants; when the probe did not
368
+ * measure it, the verdict implies it - an answered ping lost nothing
369
+ * that matters, a silent one lost everything.
370
+ */
371
+ const packetLossPercent: number =
372
+ typeof ping.packetLossPercent === "number" &&
373
+ isFinite(ping.packetLossPercent)
374
+ ? ping.packetLossPercent
375
+ : ping.isOnline
376
+ ? 0
377
+ : 100;
378
+
379
+ return {
380
+ packetsSent: ping.packetsSent ?? 0,
381
+ packetsReceived: ping.packetsReceived ?? 0,
382
+ packetLossPercent: packetLossPercent,
383
+ avgRoundTripTimeInMs:
384
+ typeof ping.avgRttMs === "number" && isFinite(ping.avgRttMs)
385
+ ? ping.avgRttMs
386
+ : undefined,
387
+ };
388
+ }
389
+
390
+ /*
391
+ * Every enabled Network Device monitor in the project watching one of
392
+ * the given devices. Shared by the walk fan-out above and the SNMP trap
393
+ * fan-out.
394
+ *
395
+ * Two sources, unioned and deduped by id:
396
+ *
397
+ * 1. Indexed: monitors whose `autoProvisionedNetworkDeviceId` is one of
398
+ * the devices - every monitor a template, an auto-import rule or an
399
+ * alert policy provisioned. Served by the partial index on that
400
+ * column, so it costs one index probe per device however many
401
+ * monitors the project has.
402
+ * 2. Legacy: hand-made monitors, which carry the device link only in
403
+ * their step JSON. Restricted to rows with NO
404
+ * autoProvisionedNetworkDeviceId (the indexed query already covered
405
+ * the rest), paged, and filtered server-side on the step JSON.
406
+ *
407
+ * The legacy scan is what this lookup used to be in full - one fetch of
408
+ * every Network Device monitor in the project per walk - and it shrinks
409
+ * as monitors move onto the column.
268
410
  */
269
411
  public static async findMonitorsWatchingDevices(data: {
270
412
  projectId: ObjectID;
@@ -276,27 +418,20 @@ export default class NetworkDeviceWalkUtil {
276
418
 
277
419
  const deviceIdSet: Set<string> = new Set(data.deviceIds);
278
420
 
279
- const monitors: Array<Monitor> = await MonitorService.findBy({
280
- query: {
421
+ const indexedMonitors: Array<Monitor> =
422
+ await NetworkDeviceWalkUtil.findNetworkDeviceMonitorsPaged({
281
423
  projectId: data.projectId,
282
424
  monitorType: MonitorType.NetworkDevice,
283
- },
284
- select: {
285
- _id: true,
286
- projectId: true,
287
- monitorSteps: true,
288
- disableActiveMonitoring: true,
289
- disableActiveMonitoringBecauseOfManualIncident: true,
290
- disableActiveMonitoringBecauseOfScheduledMaintenanceEvent: true,
291
- },
292
- limit: LIMIT_MAX,
293
- skip: 0,
294
- props: {
295
- isRoot: true,
296
- },
297
- });
425
+ autoProvisionedNetworkDeviceId: QueryHelper.any(data.deviceIds),
426
+ });
298
427
 
299
- return monitors.filter((monitor: Monitor) => {
428
+ const legacyMonitors: Array<Monitor> = (
429
+ await NetworkDeviceWalkUtil.findNetworkDeviceMonitorsPaged({
430
+ projectId: data.projectId,
431
+ monitorType: MonitorType.NetworkDevice,
432
+ autoProvisionedNetworkDeviceId: QueryHelper.isNull(),
433
+ })
434
+ ).filter((monitor: Monitor) => {
300
435
  return (monitor.monitorSteps?.data?.monitorStepsInstanceArray || []).some(
301
436
  (monitorStep: MonitorStep) => {
302
437
  const referencedDeviceId: string | undefined =
@@ -307,5 +442,64 @@ export default class NetworkDeviceWalkUtil {
307
442
  },
308
443
  );
309
444
  });
445
+
446
+ const seenMonitorIds: Set<string> = new Set();
447
+ const monitors: Array<Monitor> = [];
448
+
449
+ for (const monitor of [...indexedMonitors, ...legacyMonitors]) {
450
+ const monitorId: string | undefined = monitor.id?.toString();
451
+
452
+ if (!monitorId || seenMonitorIds.has(monitorId)) {
453
+ continue;
454
+ }
455
+
456
+ seenMonitorIds.add(monitorId);
457
+ monitors.push(monitor);
458
+ }
459
+
460
+ return monitors;
461
+ }
462
+
463
+ /*
464
+ * Every monitor matching the query, in id order so the pages stay
465
+ * stable while monitors are created or deleted underneath the scan.
466
+ */
467
+ private static async findNetworkDeviceMonitorsPaged(
468
+ query: Query<Monitor>,
469
+ ): Promise<Array<Monitor>> {
470
+ const monitors: Array<Monitor> = [];
471
+ let skip: number = 0;
472
+
473
+ for (;;) {
474
+ const page: Array<Monitor> = await MonitorService.findBy({
475
+ query: query,
476
+ select: {
477
+ _id: true,
478
+ projectId: true,
479
+ monitorSteps: true,
480
+ disableActiveMonitoring: true,
481
+ disableActiveMonitoringBecauseOfManualIncident: true,
482
+ disableActiveMonitoringBecauseOfScheduledMaintenanceEvent: true,
483
+ },
484
+ sort: {
485
+ _id: SortOrder.Ascending,
486
+ },
487
+ limit: NetworkDeviceWalkUtil.FAN_OUT_PAGE_SIZE,
488
+ skip: skip,
489
+ props: {
490
+ isRoot: true,
491
+ },
492
+ });
493
+
494
+ monitors.push(...page);
495
+
496
+ if (page.length < NetworkDeviceWalkUtil.FAN_OUT_PAGE_SIZE) {
497
+ break;
498
+ }
499
+
500
+ skip += page.length;
501
+ }
502
+
503
+ return monitors;
310
504
  }
311
505
  }