@oneuptime/common 12.0.30 → 12.0.32

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 (645) hide show
  1. package/Models/AnalyticsModels/SecurityEvent.ts +48 -16
  2. package/Models/AnalyticsModels/ThreatIntelIndicator.ts +10 -5
  3. package/Models/DatabaseModels/AlertSeverity.ts +44 -0
  4. package/Models/DatabaseModels/AlertState.ts +0 -2
  5. package/Models/DatabaseModels/DetectionRule.ts +16 -5
  6. package/Models/DatabaseModels/Domain.ts +1 -1
  7. package/Models/DatabaseModels/GoogleSecOpsConnection.ts +14 -5
  8. package/Models/DatabaseModels/Incident.ts +1 -1
  9. package/Models/DatabaseModels/IncidentSeverity.ts +44 -0
  10. package/Models/DatabaseModels/IncidentTemplate.ts +1 -1
  11. package/Models/DatabaseModels/Index.ts +4 -0
  12. package/Models/DatabaseModels/MetricType.ts +0 -2
  13. package/Models/DatabaseModels/MonitorStatusTimeline.ts +0 -2
  14. package/Models/DatabaseModels/MonitorTest.ts +0 -2
  15. package/Models/DatabaseModels/NetworkDevice.ts +234 -5
  16. package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +88 -0
  17. package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +22 -0
  18. package/Models/DatabaseModels/NetworkDeviceOidTemplate.ts +501 -0
  19. package/Models/DatabaseModels/NetworkDeviceRole.ts +648 -0
  20. package/Models/DatabaseModels/ScheduledMaintenance.ts +1 -1
  21. package/Models/DatabaseModels/ScheduledMaintenanceTemplate.ts +1 -1
  22. package/Models/DatabaseModels/StatusPageAnnouncement.ts +0 -2
  23. package/Models/DatabaseModels/StatusPageAnnouncementTemplate.ts +0 -2
  24. package/Models/DatabaseModels/StatusPagePrivateUser.ts +0 -2
  25. package/Models/DatabaseModels/StatusPageResource.ts +0 -2
  26. package/Models/DatabaseModels/StatusPageSubscriber.ts +0 -2
  27. package/Models/DatabaseModels/ThreatIntelFeed.ts +16 -5
  28. package/Server/API/GlobalConfigAPI.ts +362 -183
  29. package/Server/API/TelemetryAPI.ts +42 -4
  30. package/Server/EnvironmentConfig.ts +112 -0
  31. package/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.ts +59 -0
  32. package/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.ts +25 -0
  33. package/Server/Infrastructure/Postgres/SchemaMigrations/1790800000000-AddNetworkDeviceRoleTable.ts +72 -0
  34. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
  35. package/Server/Middleware/MultipartFormData.ts +118 -32
  36. package/Server/Services/AlertEpisodeLabelRuleEngineService.ts +9 -1
  37. package/Server/Services/AlertEpisodeOnCallRuleEngineService.ts +9 -1
  38. package/Server/Services/AlertEpisodeOwnerRuleEngineService.ts +9 -1
  39. package/Server/Services/AlertEpisodePrivacyRuleEngineService.ts +9 -1
  40. package/Server/Services/AlertGroupingEngineService.ts +9 -1
  41. package/Server/Services/AlertLabelRuleEngineService.ts +9 -1
  42. package/Server/Services/AlertOnCallRuleEngineService.ts +9 -1
  43. package/Server/Services/AlertOwnerRuleEngineService.ts +9 -1
  44. package/Server/Services/AlertPrivacyRuleEngineService.ts +9 -1
  45. package/Server/Services/AlertReminderRuleService.ts +9 -1
  46. package/Server/Services/AutoRemediationRuleEngineService.ts +9 -1
  47. package/Server/Services/CephClusterLabelRuleEngineService.ts +9 -1
  48. package/Server/Services/CephClusterOwnerRuleEngineService.ts +9 -1
  49. package/Server/Services/CloudResourceLabelRuleEngineService.ts +9 -1
  50. package/Server/Services/CloudResourceOwnerRuleEngineService.ts +9 -1
  51. package/Server/Services/DashboardLabelRuleEngineService.ts +9 -1
  52. package/Server/Services/DashboardOwnerRuleEngineService.ts +9 -1
  53. package/Server/Services/DatabaseService.ts +39 -9
  54. package/Server/Services/DockerHostLabelRuleEngineService.ts +9 -1
  55. package/Server/Services/DockerHostOwnerRuleEngineService.ts +9 -1
  56. package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +9 -1
  57. package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +9 -1
  58. package/Server/Services/HostLabelRuleEngineService.ts +9 -1
  59. package/Server/Services/HostOwnerRuleEngineService.ts +9 -1
  60. package/Server/Services/IncidentEpisodeLabelRuleEngineService.ts +9 -1
  61. package/Server/Services/IncidentEpisodeOnCallRuleEngineService.ts +9 -1
  62. package/Server/Services/IncidentEpisodeOwnerRuleEngineService.ts +9 -1
  63. package/Server/Services/IncidentEpisodePrivacyRuleEngineService.ts +9 -1
  64. package/Server/Services/IncidentGroupingEngineService.ts +9 -1
  65. package/Server/Services/IncidentLabelRuleEngineService.ts +9 -1
  66. package/Server/Services/IncidentOnCallRuleEngineService.ts +9 -1
  67. package/Server/Services/IncidentOwnerRuleEngineService.ts +9 -1
  68. package/Server/Services/IncidentPrivacyRuleEngineService.ts +9 -1
  69. package/Server/Services/IncidentReminderRuleService.ts +9 -1
  70. package/Server/Services/IncidentSlaRuleService.ts +9 -1
  71. package/Server/Services/IncomingCallPolicyLabelRuleEngineService.ts +9 -1
  72. package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +9 -1
  73. package/Server/Services/Index.ts +4 -0
  74. package/Server/Services/IoTFleetLabelRuleEngineService.ts +9 -1
  75. package/Server/Services/IoTFleetOwnerRuleEngineService.ts +9 -1
  76. package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +9 -1
  77. package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +9 -1
  78. package/Server/Services/KubernetesResourceService.ts +5 -1
  79. package/Server/Services/MonitorLabelRuleEngineService.ts +9 -1
  80. package/Server/Services/MonitorOwnerRuleEngineService.ts +9 -1
  81. package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +35 -0
  82. package/Server/Services/NetworkDeviceAutoImportRuleService.ts +96 -0
  83. package/Server/Services/NetworkDeviceLabelRuleEngineService.ts +9 -1
  84. package/Server/Services/NetworkDeviceOidTemplateService.ts +201 -0
  85. package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +9 -1
  86. package/Server/Services/NetworkDeviceRoleService.ts +90 -0
  87. package/Server/Services/NetworkDeviceService.ts +209 -1
  88. package/Server/Services/OnCallDutyPolicyLabelRuleEngineService.ts +9 -1
  89. package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +9 -1
  90. package/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.ts +9 -1
  91. package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +9 -1
  92. package/Server/Services/PodmanHostLabelRuleEngineService.ts +9 -1
  93. package/Server/Services/PodmanHostOwnerRuleEngineService.ts +9 -1
  94. package/Server/Services/ProjectService.ts +85 -0
  95. package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +9 -1
  96. package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +9 -1
  97. package/Server/Services/RumApplicationLabelRuleEngineService.ts +9 -1
  98. package/Server/Services/RumApplicationOwnerRuleEngineService.ts +9 -1
  99. package/Server/Services/RunbookLabelRuleEngineService.ts +9 -1
  100. package/Server/Services/RunbookOwnerRuleEngineService.ts +9 -1
  101. package/Server/Services/RunbookRuleEngineService.ts +9 -1
  102. package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +9 -1
  103. package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +9 -1
  104. package/Server/Services/ScheduledMaintenanceReminderRuleService.ts +9 -1
  105. package/Server/Services/ServerlessFunctionLabelRuleEngineService.ts +9 -1
  106. package/Server/Services/ServerlessFunctionOwnerRuleEngineService.ts +9 -1
  107. package/Server/Services/ServiceLabelRuleEngineService.ts +9 -1
  108. package/Server/Services/ServiceOwnerRuleEngineService.ts +9 -1
  109. package/Server/Services/StatusPageLabelRuleEngineService.ts +9 -1
  110. package/Server/Services/StatusPageMonitorRuleEngineService.ts +7 -0
  111. package/Server/Services/StatusPageOwnerRuleEngineService.ts +9 -1
  112. package/Server/Services/TelemetrySourceMapService.ts +266 -23
  113. package/Server/Services/UserNotificationSettingService.ts +0 -6
  114. package/Server/Services/UserService.ts +27 -0
  115. package/Server/Services/WorkflowLabelRuleEngineService.ts +9 -1
  116. package/Server/Services/WorkflowOwnerRuleEngineService.ts +9 -1
  117. package/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.ts +186 -0
  118. package/Server/Utils/Monitor/CapturedMetricAttributeUtil.ts +245 -0
  119. package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +21 -2
  120. package/Server/Utils/Monitor/MonitorMetricUtil.ts +55 -21
  121. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +32 -0
  122. package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +15 -2
  123. package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +18 -1
  124. package/Server/Utils/Monitor/NetworkInventoryUtil.ts +10 -0
  125. package/Server/Utils/Monitor/SeriesResourceLabels.ts +34 -0
  126. package/Server/Utils/Rules/RuleEngineRuleRead.ts +48 -0
  127. package/Server/Utils/Telemetry/ExceptionSanitizer.ts +14 -1
  128. package/Server/Utils/Telemetry/LogExceptionExtractor.ts +14 -2
  129. package/Server/Utils/Telemetry/SourceMapResolver.ts +16 -5
  130. package/Server/Utils/Telemetry/StackTraceParser.ts +399 -0
  131. package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +31 -1
  132. package/Tests/App/Dashboard/DashboardChartWidgetZoom.test.tsx +35 -8
  133. package/Tests/App/Dashboard/DashboardCommandPalette.test.tsx +107 -3
  134. package/Tests/App/Dashboard/DashboardWideChartZoom.test.tsx +401 -0
  135. package/Tests/App/Dashboard/EventOverlayHook.test.tsx +125 -0
  136. package/Tests/App/Dashboard/HeaderImageAssets.test.tsx +93 -0
  137. package/Tests/App/Dashboard/MonitorTemplateColumnAndFacet.test.tsx +318 -0
  138. package/Tests/App/Dashboard/NetworkDeviceBulkDelete.test.tsx +357 -0
  139. package/Tests/App/Dashboard/NetworkSideMenu.test.tsx +590 -0
  140. package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +3 -3
  141. package/Tests/App/Dashboard/SideMenuHarness.tsx +11 -3
  142. package/Tests/App/Dashboard/UserElementEmail.test.tsx +12 -4
  143. package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +1 -1
  144. package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +14 -0
  145. package/Tests/Models/DatabaseModels/ModelRegistryInvariants.test.ts +543 -0
  146. package/Tests/Models/SecurityDomainAccessControl.test.ts +429 -0
  147. package/Tests/Server/API/GlobalConfigLicense.test.ts +657 -0
  148. package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +84 -6
  149. package/Tests/Server/API/TelemetryResolveStackTraceAPI.test.ts +805 -0
  150. package/Tests/Server/Infrastructure/Postgres/AddOnCallCalendarFeedsMigration.test.ts +32 -7
  151. package/Tests/Server/Infrastructure/Postgres/NetworkDeviceRoleTableMigration.test.ts +476 -0
  152. package/Tests/Server/Middleware/IdentityRateLimit.test.ts +1144 -0
  153. package/Tests/Server/Middleware/MultipartFormData.test.ts +618 -3
  154. package/Tests/Server/Services/DatabaseServiceGenerateSlug.test.ts +215 -0
  155. package/Tests/Server/Services/MonitorLabelRuleEngineScale.test.ts +520 -0
  156. package/Tests/Server/Services/NetworkDeviceOidTemplateService.test.ts +332 -0
  157. package/Tests/Server/Services/NetworkDeviceOidTemplateWriteGuards.test.ts +409 -0
  158. package/Tests/Server/Services/NetworkDeviceRoleModel.test.ts +672 -0
  159. package/Tests/Server/Services/NetworkDeviceRuleEngines.test.ts +1 -1
  160. package/Tests/Server/Services/ProjectServiceCreateSubscriptionStarted.test.ts +67 -4
  161. package/Tests/Server/Services/RuleEngineRuleFetchLimit.test.ts +239 -0
  162. package/Tests/Server/Services/ScheduledMaintenanceSubscriberEndTime.test.ts +369 -0
  163. package/Tests/Server/Services/TelemetrySourceMapService.test.ts +1210 -2
  164. package/Tests/Server/Services/UserNotificationSettingMonitorDefaults.test.ts +248 -0
  165. package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +43 -2
  166. package/Tests/Server/Services/UserServiceSeatLimit.test.ts +182 -0
  167. package/Tests/Server/Types/AnalyticsDatabase/SecurityEventModelPermission.test.ts +255 -0
  168. package/Tests/Server/Types/Database/Permissions/ReadBlockPermission.test.ts +212 -0
  169. package/Tests/Server/Types/Database/Permissions/SecurityRoleAccess.test.ts +413 -0
  170. package/Tests/Server/Utils/BasicCron.test.ts +283 -0
  171. package/Tests/Server/Utils/CodeRepository.test.ts +689 -0
  172. package/Tests/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.test.ts +495 -0
  173. package/Tests/Server/Utils/ExceptionSanitizer.test.ts +77 -0
  174. package/Tests/Server/Utils/IncomingCallPhoneNumber.test.ts +174 -0
  175. package/Tests/Server/Utils/Monitor/CapturedMetricAttributeUtil.test.ts +284 -0
  176. package/Tests/Server/Utils/Monitor/MonitorCustomMetricAttributes.test.ts +503 -0
  177. package/Tests/Server/Utils/Monitor/MonitorTemplatePrototypePollution.test.ts +106 -0
  178. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkLogWritePath.test.ts +33 -4
  179. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +14 -4
  180. package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +44 -0
  181. package/Tests/Server/Utils/OpenAPISpec.test.ts +536 -0
  182. package/Tests/Server/Utils/Rules/RuleEngineRuleRead.test.ts +115 -0
  183. package/Tests/Server/Utils/StackTraceParser.test.ts +610 -0
  184. package/Tests/Server/Utils/Telemetry/LogExceptionExtractor.test.ts +0 -0
  185. package/Tests/Server/Utils/Telemetry/SourceMapLimits.test.ts +656 -0
  186. package/Tests/Server/Utils/Telemetry/SourceMapResolver.test.ts +100 -0
  187. package/Tests/Types/Monitor/SnmpMonitor/SnmpOidListUtil.test.ts +454 -0
  188. package/Tests/Types/NetworkDevice/DefaultNetworkDeviceRole.test.ts +417 -0
  189. package/Tests/Types/SecurityRolePermissions.test.ts +193 -0
  190. package/Tests/UI/Components/Charts/AnnotationLayout.test.ts +773 -0
  191. package/Tests/UI/Components/Charts/ChartAnnotationRail.test.tsx +789 -0
  192. package/Tests/UI/Components/Charts/ChartBucketIdentity.test.ts +254 -0
  193. package/Tests/UI/Components/Charts/ChartClickDoubleClickDisambiguation.test.tsx +221 -0
  194. package/Tests/UI/Components/Charts/ChartDoubleClickReset.test.tsx +220 -0
  195. package/Tests/UI/Components/Charts/TimeAnnotation.test.ts +471 -0
  196. package/Tests/UI/Components/EditionLabelLicenseRefresh.test.tsx +405 -0
  197. package/Tests/UI/Components/ErrorMessageRefreshControl.test.tsx +83 -0
  198. package/Tests/UI/Components/MarkdownConverters.test.ts +686 -0
  199. package/Tests/UI/Components/ModelTable/BaseModelTableBulkDelete.test.tsx +751 -0
  200. package/Tests/UI/Components/ModelTable/BaseModelTableColumnCustomization.test.tsx +475 -43
  201. package/Tests/UI/Components/ModelTable/BaseModelTableDeleteAndEmptyStates.test.tsx +341 -0
  202. package/Tests/UI/Components/ModelTable/ColumnPreference.test.ts +89 -0
  203. package/Tests/UI/Components/NavBarCommandKGating.test.tsx +103 -8
  204. package/Tests/UI/Components/OrderedStatesList.test.tsx +5 -5
  205. package/Tests/UI/Components/PendingProjectInvitations.test.tsx +1 -1
  206. package/Tests/UI/Components/SideMenuItem.test.tsx +30 -0
  207. package/Tests/UI/Components/TableSortAndMobileColumns.test.tsx +195 -0
  208. package/Tests/UI/Components/XAxis.test.ts +270 -5
  209. package/Tests/UI/Components/XAxisDaylightSaving.test.ts +113 -0
  210. package/Tests/UI/Styles/ChartFocusRing.test.ts +153 -0
  211. package/Tests/UI/Styles/ChartFocusRingCoverage.test.tsx +377 -0
  212. package/Tests/UI/Styles/ThemeStylesheet.ts +162 -0
  213. package/Tests/UI/Utils/TableColumnsToCsv.test.ts +30 -0
  214. package/Tests/UI/Utils/UseDashboardTimeRangeZoom.test.tsx +187 -0
  215. package/Tests/Utils/Dashboard/DashboardResourceListSharedArgs.test.ts +302 -0
  216. package/Tests/Utils/Dashboard/DashboardTimeRangeZoom.test.ts +242 -0
  217. package/Tests/Utils/EnterpriseLicenseSeats.test.ts +507 -0
  218. package/Tests/Utils/Monitor/NetworkDeviceRoleCatalog.test.ts +981 -0
  219. package/Tests/Utils/Monitor/NetworkTopologyRoleCatalog.test.ts +865 -0
  220. package/Tests/Utils/NetworkDevice/DeviceRoleKeyUtil.test.ts +538 -0
  221. package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +951 -1
  222. package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +238 -0
  223. package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +1056 -0
  224. package/Tests/Utils/NetworkDiscovery/ReverseDnsNameUtil.test.ts +882 -0
  225. package/Tests/Utils/Slo/SloEvaluation.test.ts +171 -0
  226. package/Tests/Utils/Slug.test.ts +61 -1
  227. package/Tests/jest.setup.ts +19 -0
  228. package/Types/Date.ts +39 -0
  229. package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +61 -0
  230. package/Types/Monitor/SnmpMonitor/SnmpOidListUtil.ts +333 -0
  231. package/Types/NetworkDevice/DefaultNetworkDeviceRole.ts +145 -0
  232. package/Types/Permission.ts +141 -0
  233. package/Types/Rum/SessionReplay.ts +21 -0
  234. package/Types/Telemetry/SourceMap.ts +8 -0
  235. package/UI/Components/Charts/Area/AreaChart.tsx +7 -0
  236. package/UI/Components/Charts/Bar/BarChart.tsx +6 -0
  237. package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +9 -1
  238. package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.tsx +176 -0
  239. package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.ts +745 -0
  240. package/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.tsx +576 -0
  241. package/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.tsx +204 -0
  242. package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +554 -545
  243. package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +337 -371
  244. package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +549 -540
  245. package/UI/Components/Charts/ChartLibrary/Types/FormattedReferenceRegion.ts +7 -3
  246. package/UI/Components/Charts/ChartLibrary/Types/FormattedTimeReferenceLine.ts +14 -3
  247. package/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.ts +13 -0
  248. package/UI/Components/Charts/Line/LineChart.tsx +7 -0
  249. package/UI/Components/Charts/Types/ChartEventKind.ts +13 -0
  250. package/UI/Components/Charts/Types/ReferenceRegionProps.ts +6 -0
  251. package/UI/Components/Charts/Types/TimeReferenceLineProps.ts +20 -3
  252. package/UI/Components/Charts/Utils/TimeAnnotation.ts +69 -35
  253. package/UI/Components/Charts/Utils/XAxis.ts +125 -18
  254. package/UI/Components/EditionLabel/EditionLabel.tsx +280 -26
  255. package/UI/Components/ErrorMessage/ErrorMessage.tsx +21 -10
  256. package/UI/Components/Feed/FeedItem.tsx +4 -5
  257. package/UI/Components/Header/HeaderIconDropdownButton.tsx +1 -2
  258. package/UI/Components/Header/UserProfile/UserProfile.tsx +1 -2
  259. package/UI/Components/Image/Image.tsx +20 -3
  260. package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
  261. package/UI/Components/MemberRoleAssignment/MemberRoleAssignment.tsx +1 -2
  262. package/UI/Components/ModelTable/BaseModelTable.tsx +200 -39
  263. package/UI/Components/Navbar/NavBar.tsx +62 -13
  264. package/UI/Components/Navbar/NavBarMenuModal.tsx +7 -2
  265. package/UI/Components/SideMenu/CountModelSideMenuItem.tsx +2 -0
  266. package/UI/Components/SideMenu/SideMenu.tsx +12 -2
  267. package/UI/Components/SideMenu/SideMenuItem.tsx +4 -1
  268. package/UI/Components/SideMenu/SideMenuSection.tsx +14 -2
  269. package/UI/Components/Table/TableHeader.tsx +64 -48
  270. package/UI/Components/Table/TableRow.tsx +13 -3
  271. package/UI/Styles/Theme.css +38 -0
  272. package/UI/Utils/UseDashboardTimeRangeZoom.ts +77 -0
  273. package/Utils/Dashboard/DashboardTimeRangeZoom.ts +118 -0
  274. package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +271 -0
  275. package/Utils/Monitor/NetworkDeviceRoleCatalog.ts +232 -0
  276. package/Utils/Monitor/NetworkDeviceRoleUtil.ts +2 -1
  277. package/Utils/Monitor/NetworkTopologyUtil.ts +116 -33
  278. package/Utils/NetworkDevice/DeviceRoleKeyUtil.ts +137 -0
  279. package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +6 -0
  280. package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +141 -10
  281. package/Utils/NetworkDiscovery/DiscoveredHostUtil.ts +55 -3
  282. package/Utils/NetworkDiscovery/ReverseDnsNameUtil.ts +151 -0
  283. package/Utils/Rules/RuleEngineLimits.ts +32 -0
  284. package/Utils/Rules/RulePatternMatchUtil.ts +1 -1
  285. package/Utils/Slug.ts +34 -1
  286. package/build/dist/Models/AnalyticsModels/SecurityEvent.js +48 -16
  287. package/build/dist/Models/AnalyticsModels/SecurityEvent.js.map +1 -1
  288. package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js +10 -5
  289. package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js.map +1 -1
  290. package/build/dist/Models/DatabaseModels/AlertSeverity.js +46 -1
  291. package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
  292. package/build/dist/Models/DatabaseModels/AlertState.js +0 -2
  293. package/build/dist/Models/DatabaseModels/AlertState.js.map +1 -1
  294. package/build/dist/Models/DatabaseModels/DetectionRule.js +16 -5
  295. package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
  296. package/build/dist/Models/DatabaseModels/Domain.js +1 -1
  297. package/build/dist/Models/DatabaseModels/Domain.js.map +1 -1
  298. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +14 -5
  299. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
  300. package/build/dist/Models/DatabaseModels/Incident.js +1 -1
  301. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  302. package/build/dist/Models/DatabaseModels/IncidentSeverity.js +46 -1
  303. package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
  304. package/build/dist/Models/DatabaseModels/IncidentTemplate.js +1 -1
  305. package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
  306. package/build/dist/Models/DatabaseModels/Index.js +4 -0
  307. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  308. package/build/dist/Models/DatabaseModels/MetricType.js +0 -2
  309. package/build/dist/Models/DatabaseModels/MetricType.js.map +1 -1
  310. package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js +0 -2
  311. package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js.map +1 -1
  312. package/build/dist/Models/DatabaseModels/MonitorTest.js +0 -2
  313. package/build/dist/Models/DatabaseModels/MonitorTest.js.map +1 -1
  314. package/build/dist/Models/DatabaseModels/NetworkDevice.js +239 -6
  315. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  316. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +88 -0
  317. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
  318. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
  319. package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js +521 -0
  320. package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js.map +1 -0
  321. package/build/dist/Models/DatabaseModels/NetworkDeviceRole.js +677 -0
  322. package/build/dist/Models/DatabaseModels/NetworkDeviceRole.js.map +1 -0
  323. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +1 -1
  324. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  325. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js +1 -1
  326. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js.map +1 -1
  327. package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +0 -2
  328. package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
  329. package/build/dist/Models/DatabaseModels/StatusPageAnnouncementTemplate.js +0 -2
  330. package/build/dist/Models/DatabaseModels/StatusPageAnnouncementTemplate.js.map +1 -1
  331. package/build/dist/Models/DatabaseModels/StatusPagePrivateUser.js +0 -2
  332. package/build/dist/Models/DatabaseModels/StatusPagePrivateUser.js.map +1 -1
  333. package/build/dist/Models/DatabaseModels/StatusPageResource.js +0 -2
  334. package/build/dist/Models/DatabaseModels/StatusPageResource.js.map +1 -1
  335. package/build/dist/Models/DatabaseModels/StatusPageSubscriber.js +0 -2
  336. package/build/dist/Models/DatabaseModels/StatusPageSubscriber.js.map +1 -1
  337. package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js +16 -5
  338. package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js.map +1 -1
  339. package/build/dist/Server/API/GlobalConfigAPI.js +293 -176
  340. package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
  341. package/build/dist/Server/API/TelemetryAPI.js +31 -3
  342. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  343. package/build/dist/Server/EnvironmentConfig.js +83 -0
  344. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  345. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js +26 -0
  346. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js.map +1 -0
  347. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js +14 -0
  348. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js.map +1 -0
  349. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790800000000-AddNetworkDeviceRoleTable.js +39 -0
  350. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790800000000-AddNetworkDeviceRoleTable.js.map +1 -0
  351. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
  352. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  353. package/build/dist/Server/Middleware/MultipartFormData.js +93 -28
  354. package/build/dist/Server/Middleware/MultipartFormData.js.map +1 -1
  355. package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js +8 -1
  356. package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js.map +1 -1
  357. package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js +8 -1
  358. package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js.map +1 -1
  359. package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js +8 -1
  360. package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js.map +1 -1
  361. package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js +8 -1
  362. package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js.map +1 -1
  363. package/build/dist/Server/Services/AlertGroupingEngineService.js +8 -1
  364. package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -1
  365. package/build/dist/Server/Services/AlertLabelRuleEngineService.js +8 -1
  366. package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
  367. package/build/dist/Server/Services/AlertOnCallRuleEngineService.js +8 -1
  368. package/build/dist/Server/Services/AlertOnCallRuleEngineService.js.map +1 -1
  369. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +8 -1
  370. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
  371. package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js +8 -1
  372. package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js.map +1 -1
  373. package/build/dist/Server/Services/AlertReminderRuleService.js +8 -1
  374. package/build/dist/Server/Services/AlertReminderRuleService.js.map +1 -1
  375. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +8 -1
  376. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
  377. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +8 -1
  378. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
  379. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +8 -1
  380. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
  381. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +8 -1
  382. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
  383. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +8 -1
  384. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
  385. package/build/dist/Server/Services/DashboardLabelRuleEngineService.js +8 -1
  386. package/build/dist/Server/Services/DashboardLabelRuleEngineService.js.map +1 -1
  387. package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js +8 -1
  388. package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js.map +1 -1
  389. package/build/dist/Server/Services/DatabaseService.js +31 -5
  390. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  391. package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +8 -1
  392. package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
  393. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +8 -1
  394. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
  395. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +8 -1
  396. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
  397. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +8 -1
  398. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
  399. package/build/dist/Server/Services/HostLabelRuleEngineService.js +8 -1
  400. package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
  401. package/build/dist/Server/Services/HostOwnerRuleEngineService.js +8 -1
  402. package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
  403. package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js +8 -1
  404. package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js.map +1 -1
  405. package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js +8 -1
  406. package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js.map +1 -1
  407. package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js +8 -1
  408. package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js.map +1 -1
  409. package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js +8 -1
  410. package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js.map +1 -1
  411. package/build/dist/Server/Services/IncidentGroupingEngineService.js +8 -1
  412. package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
  413. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +8 -1
  414. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
  415. package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js +8 -1
  416. package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js.map +1 -1
  417. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +8 -1
  418. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
  419. package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js +8 -1
  420. package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js.map +1 -1
  421. package/build/dist/Server/Services/IncidentReminderRuleService.js +8 -1
  422. package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -1
  423. package/build/dist/Server/Services/IncidentSlaRuleService.js +8 -1
  424. package/build/dist/Server/Services/IncidentSlaRuleService.js.map +1 -1
  425. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js +8 -1
  426. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js.map +1 -1
  427. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +8 -1
  428. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -1
  429. package/build/dist/Server/Services/Index.js +4 -0
  430. package/build/dist/Server/Services/Index.js.map +1 -1
  431. package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js +8 -1
  432. package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js.map +1 -1
  433. package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js +8 -1
  434. package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js.map +1 -1
  435. package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +8 -1
  436. package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
  437. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +8 -1
  438. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
  439. package/build/dist/Server/Services/KubernetesResourceService.js +5 -1
  440. package/build/dist/Server/Services/KubernetesResourceService.js.map +1 -1
  441. package/build/dist/Server/Services/MonitorLabelRuleEngineService.js +8 -1
  442. package/build/dist/Server/Services/MonitorLabelRuleEngineService.js.map +1 -1
  443. package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js +8 -1
  444. package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js.map +1 -1
  445. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +30 -21
  446. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
  447. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +64 -0
  448. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
  449. package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js +8 -1
  450. package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js.map +1 -1
  451. package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js +180 -0
  452. package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js.map +1 -0
  453. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +8 -1
  454. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
  455. package/build/dist/Server/Services/NetworkDeviceRoleService.js +70 -0
  456. package/build/dist/Server/Services/NetworkDeviceRoleService.js.map +1 -0
  457. package/build/dist/Server/Services/NetworkDeviceService.js +154 -1
  458. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  459. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js +8 -1
  460. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js.map +1 -1
  461. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js +8 -1
  462. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js.map +1 -1
  463. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js +8 -1
  464. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js.map +1 -1
  465. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js +8 -1
  466. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js.map +1 -1
  467. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +8 -1
  468. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -1
  469. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +8 -1
  470. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
  471. package/build/dist/Server/Services/ProjectService.js +65 -0
  472. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  473. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +8 -1
  474. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -1
  475. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +8 -1
  476. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
  477. package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js +8 -1
  478. package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js.map +1 -1
  479. package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js +8 -1
  480. package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js.map +1 -1
  481. package/build/dist/Server/Services/RunbookLabelRuleEngineService.js +8 -1
  482. package/build/dist/Server/Services/RunbookLabelRuleEngineService.js.map +1 -1
  483. package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js +8 -1
  484. package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js.map +1 -1
  485. package/build/dist/Server/Services/RunbookRuleEngineService.js +8 -1
  486. package/build/dist/Server/Services/RunbookRuleEngineService.js.map +1 -1
  487. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +8 -1
  488. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
  489. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +8 -1
  490. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
  491. package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js +8 -1
  492. package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js.map +1 -1
  493. package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js +8 -1
  494. package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js.map +1 -1
  495. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js +8 -1
  496. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js.map +1 -1
  497. package/build/dist/Server/Services/ServiceLabelRuleEngineService.js +8 -1
  498. package/build/dist/Server/Services/ServiceLabelRuleEngineService.js.map +1 -1
  499. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +8 -1
  500. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
  501. package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js +8 -1
  502. package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js.map +1 -1
  503. package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js +6 -0
  504. package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js.map +1 -1
  505. package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js +8 -1
  506. package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js.map +1 -1
  507. package/build/dist/Server/Services/TelemetrySourceMapService.js +213 -19
  508. package/build/dist/Server/Services/TelemetrySourceMapService.js.map +1 -1
  509. package/build/dist/Server/Services/UserNotificationSettingService.js +0 -1
  510. package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
  511. package/build/dist/Server/Services/UserService.js +25 -0
  512. package/build/dist/Server/Services/UserService.js.map +1 -1
  513. package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js +8 -1
  514. package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js.map +1 -1
  515. package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js +8 -1
  516. package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js.map +1 -1
  517. package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js +145 -0
  518. package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js.map +1 -0
  519. package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js +201 -0
  520. package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js.map +1 -0
  521. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +19 -2
  522. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
  523. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +42 -23
  524. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
  525. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +29 -0
  526. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  527. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +11 -2
  528. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
  529. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +16 -1
  530. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
  531. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +10 -0
  532. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
  533. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +33 -0
  534. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
  535. package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js +37 -0
  536. package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js.map +1 -0
  537. package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js +12 -1
  538. package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js.map +1 -1
  539. package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js +14 -2
  540. package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js.map +1 -1
  541. package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js +15 -5
  542. package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js.map +1 -1
  543. package/build/dist/Server/Utils/Telemetry/StackTraceParser.js +307 -0
  544. package/build/dist/Server/Utils/Telemetry/StackTraceParser.js.map +1 -1
  545. package/build/dist/Types/Date.js +27 -0
  546. package/build/dist/Types/Date.js.map +1 -1
  547. package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js +253 -0
  548. package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js.map +1 -0
  549. package/build/dist/Types/NetworkDevice/DefaultNetworkDeviceRole.js +105 -0
  550. package/build/dist/Types/NetworkDevice/DefaultNetworkDeviceRole.js.map +1 -0
  551. package/build/dist/Types/Permission.js +126 -0
  552. package/build/dist/Types/Permission.js.map +1 -1
  553. package/build/dist/Types/Rum/SessionReplay.js +19 -0
  554. package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
  555. package/build/dist/UI/Components/Charts/Area/AreaChart.js +1 -1
  556. package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
  557. package/build/dist/UI/Components/Charts/Bar/BarChart.js +1 -1
  558. package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
  559. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +6 -1
  560. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
  561. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js +83 -0
  562. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js.map +1 -0
  563. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js +531 -0
  564. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js.map +1 -0
  565. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js +264 -0
  566. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js.map +1 -0
  567. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js +122 -0
  568. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js.map +1 -0
  569. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +262 -234
  570. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
  571. package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +146 -153
  572. package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
  573. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +261 -233
  574. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
  575. package/build/dist/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.js +14 -0
  576. package/build/dist/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.js.map +1 -0
  577. package/build/dist/UI/Components/Charts/Line/LineChart.js +1 -1
  578. package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
  579. package/build/dist/UI/Components/Charts/Types/ChartEventKind.js +14 -0
  580. package/build/dist/UI/Components/Charts/Types/ChartEventKind.js.map +1 -0
  581. package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js +57 -28
  582. package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js.map +1 -1
  583. package/build/dist/UI/Components/Charts/Utils/XAxis.js +103 -17
  584. package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
  585. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +198 -23
  586. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  587. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js +15 -5
  588. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js.map +1 -1
  589. package/build/dist/UI/Components/Feed/FeedItem.js +4 -5
  590. package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
  591. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +1 -2
  592. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
  593. package/build/dist/UI/Components/Header/UserProfile/UserProfile.js.map +1 -1
  594. package/build/dist/UI/Components/Image/Image.js +6 -1
  595. package/build/dist/UI/Components/Image/Image.js.map +1 -1
  596. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
  597. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
  598. package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js +1 -2
  599. package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js.map +1 -1
  600. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +143 -36
  601. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  602. package/build/dist/UI/Components/Navbar/NavBar.js +44 -9
  603. package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
  604. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +2 -2
  605. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
  606. package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js +1 -1
  607. package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js.map +1 -1
  608. package/build/dist/UI/Components/SideMenu/SideMenu.js +9 -6
  609. package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
  610. package/build/dist/UI/Components/SideMenu/SideMenuItem.js +1 -1
  611. package/build/dist/UI/Components/SideMenu/SideMenuItem.js.map +1 -1
  612. package/build/dist/UI/Components/SideMenu/SideMenuSection.js +7 -2
  613. package/build/dist/UI/Components/SideMenu/SideMenuSection.js.map +1 -1
  614. package/build/dist/UI/Components/Table/TableHeader.js +20 -22
  615. package/build/dist/UI/Components/Table/TableHeader.js.map +1 -1
  616. package/build/dist/UI/Components/Table/TableRow.js +13 -4
  617. package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
  618. package/build/dist/UI/Utils/UseDashboardTimeRangeZoom.js +42 -0
  619. package/build/dist/UI/Utils/UseDashboardTimeRangeZoom.js.map +1 -0
  620. package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js +74 -0
  621. package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js.map +1 -0
  622. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +153 -0
  623. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +1 -0
  624. package/build/dist/Utils/Monitor/NetworkDeviceRoleCatalog.js +126 -0
  625. package/build/dist/Utils/Monitor/NetworkDeviceRoleCatalog.js.map +1 -0
  626. package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js +2 -1
  627. package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js.map +1 -1
  628. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +67 -32
  629. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
  630. package/build/dist/Utils/NetworkDevice/DeviceRoleKeyUtil.js +114 -0
  631. package/build/dist/Utils/NetworkDevice/DeviceRoleKeyUtil.js.map +1 -0
  632. package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
  633. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +127 -7
  634. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
  635. package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js +50 -3
  636. package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js.map +1 -1
  637. package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js +132 -0
  638. package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js.map +1 -0
  639. package/build/dist/Utils/Rules/RuleEngineLimits.js +31 -0
  640. package/build/dist/Utils/Rules/RuleEngineLimits.js.map +1 -0
  641. package/build/dist/Utils/Rules/RulePatternMatchUtil.js +1 -1
  642. package/build/dist/Utils/Slug.js +31 -1
  643. package/build/dist/Utils/Slug.js.map +1 -1
  644. package/jest.config.json +1 -0
  645. package/package.json +2 -2
@@ -0,0 +1,333 @@
1
+ import BadDataException from "../../Exception/BadDataException";
2
+ import SnmpOid from "./SnmpOid";
3
+
4
+ /*
5
+ * The one place that decides what a network device actually polls.
6
+ *
7
+ * A device's health OIDs come from two places now: the OID Collection
8
+ * Template it is linked to, and its own `snmpOids` column. Nothing is ever
9
+ * copied between them — the two lists are merged fresh on every poll in
10
+ * NetworkDevicePoll, which is why editing a template changes collection for
11
+ * every linked device without a single write to NetworkDevice.
12
+ *
13
+ * That makes this file load-bearing in three places at once: the poll path
14
+ * that builds the probe payload, the two service validators that reject a
15
+ * bad list at save time, and the dashboard, which has to show an operator
16
+ * the same effective list the probe will receive. Keep it pure so all three
17
+ * can share it.
18
+ */
19
+
20
+ /*
21
+ * A numeric dotted OID: at least two arcs, digits only. Deliberately not a
22
+ * MIB-name parser — the probe issues these verbatim to net-snmp, which
23
+ * accepts nothing else, and a symbolic name that reaches it is a silent
24
+ * "no such object" rather than an error.
25
+ */
26
+ const OID_SYNTAX: RegExp = /^\d+(\.\d+)+$/;
27
+
28
+ /*
29
+ * The three caps COMPOSE, and that is the whole point of the numbers.
30
+ *
31
+ * A template may hold 150 OIDs and a device may add 50 of its own, so the
32
+ * merged list can never exceed 200. Both write paths validate their own side
33
+ * against their own cap, and together they make the poll-time truncation
34
+ * further down unreachable - which matters because truncation drops from the
35
+ * END, and template entries are deliberately the stable prefix, so the
36
+ * entries lost would always be the operator's own device-specific ones.
37
+ * Somebody growing a shared template must never be able to silently stop a
38
+ * device collecting an OID they never touched.
39
+ *
40
+ * Validating each side independently against one 200 cap would NOT compose:
41
+ * 200 plus 200 is 400, and the operator who loses OIDs is not the operator
42
+ * who made the edit.
43
+ */
44
+ export const MAX_OIDS_PER_TEMPLATE: number = 150;
45
+ export const MAX_DEVICE_SPECIFIC_OIDS: number = 50;
46
+ export const MAX_EFFECTIVE_OIDS_PER_DEVICE: number =
47
+ MAX_OIDS_PER_TEMPLATE + MAX_DEVICE_SPECIFIC_OIDS;
48
+
49
+ /*
50
+ * A name is carried to the probe and lands on every metric row as an
51
+ * attribute, so it is bounded here rather than left an unbounded string
52
+ * multiplied by every device in a poll batch.
53
+ */
54
+ export const MAX_OID_NAME_LENGTH: number = 100;
55
+
56
+ /*
57
+ * Per-walk metric caps, previously a private const in
58
+ * NetworkDeviceMetricUtil and a bare literal in MonitorMetricUtil. Both now
59
+ * import these. The OID cap was 50 while nothing capped how many OIDs a
60
+ * device could be configured with, so a long list silently charted its first
61
+ * 50 in jsonb array order and warned to a log nobody reads.
62
+ */
63
+ export const MAX_OID_METRIC_SERIES: number = MAX_EFFECTIVE_OIDS_PER_DEVICE;
64
+ export const MAX_INTERFACE_METRIC_SERIES: number = 200;
65
+
66
+ /*
67
+ * The specific OIDs the poll already turns into a real, per-port metric
68
+ * series - and ONLY those.
69
+ *
70
+ * Deliberately a short list of columns rather than the whole ifTable
71
+ * subtree. The walk parses twelve ifTable columns, but most of them go
72
+ * nowhere a user can reach: in and out errors are emitted only as a COMBINED
73
+ * rate, discards are parsed and dropped, and speed and admin status are
74
+ * stored on NetworkInterface without ever becoming metrics. For those,
75
+ * typing the OID by hand is currently the only way to get a series, so
76
+ * warning "this is already collected" would be false and would talk an
77
+ * operator out of the only thing that works.
78
+ *
79
+ * What IS listed here is the set behind issue #3507: the reporter was about
80
+ * to hand-type a hundred per-port OIDs for exactly these counters, which the
81
+ * interface walk already emits per port, keyed by interfaceName and
82
+ * interfaceIndex.
83
+ */
84
+ const ALREADY_COLLECTED_OID_COLUMNS: Array<{
85
+ prefix: string;
86
+ collectedBy: string;
87
+ }> = [
88
+ {
89
+ // ifOperStatus
90
+ prefix: "1.3.6.1.2.1.2.2.1.8.",
91
+ collectedBy: "an up/down series for every port",
92
+ },
93
+ {
94
+ // ifInOctets
95
+ prefix: "1.3.6.1.2.1.2.2.1.10.",
96
+ collectedBy: "an inbound bits/second series for every port",
97
+ },
98
+ {
99
+ // ifOutOctets
100
+ prefix: "1.3.6.1.2.1.2.2.1.16.",
101
+ collectedBy: "an outbound bits/second series for every port",
102
+ },
103
+ {
104
+ // ifHCInOctets
105
+ prefix: "1.3.6.1.2.1.31.1.1.1.6.",
106
+ collectedBy: "an inbound bits/second series for every port",
107
+ },
108
+ {
109
+ // ifHCOutOctets
110
+ prefix: "1.3.6.1.2.1.31.1.1.1.10.",
111
+ collectedBy: "an outbound bits/second series for every port",
112
+ },
113
+ ];
114
+
115
+ export interface ValidateOidListOptions {
116
+ max: number;
117
+ // Names the list in every error message: "OID Collection Template", etc.
118
+ label: string;
119
+ }
120
+
121
+ export interface ResolveEffectiveOidsData {
122
+ deviceOids: Array<SnmpOid> | undefined;
123
+ templateOids: Array<SnmpOid> | undefined;
124
+ }
125
+
126
+ export interface EffectiveOidResolution {
127
+ oids: Array<SnmpOid>;
128
+ // How many entries the cap removed. Zero on every well-formed list.
129
+ truncatedCount: number;
130
+ }
131
+
132
+ export default class SnmpOidListUtil {
133
+ /**
134
+ * Canonical form of an OID string, for comparison and for storage.
135
+ *
136
+ * The single leading dot is the one that matters: ".1.3.6.1" and "1.3.6.1"
137
+ * are the same object, operators type both, and net-snmp answers with the
138
+ * dotless form. Storing the canonical form is what lets criteria compare
139
+ * a configured OID against a walk response with ===.
140
+ */
141
+ public static normalizeOid(oid: string | undefined): string {
142
+ let normalized: string = (oid || "").trim();
143
+
144
+ if (normalized.startsWith(".")) {
145
+ normalized = normalized.slice(1);
146
+ }
147
+
148
+ return normalized;
149
+ }
150
+
151
+ public static isValidOid(oid: string | undefined): boolean {
152
+ return OID_SYNTAX.test(SnmpOidListUtil.normalizeOid(oid));
153
+ }
154
+
155
+ /**
156
+ * What the poll already collects this OID as, or undefined. Advisory only:
157
+ * the editor warns, it never blocks, because an operator may still want an
158
+ * undimensioned scalar series for one specific port.
159
+ */
160
+ public static getAlreadyCollectedBy(
161
+ oid: string | undefined,
162
+ ): string | undefined {
163
+ const normalized: string = SnmpOidListUtil.normalizeOid(oid);
164
+
165
+ for (const entry of ALREADY_COLLECTED_OID_COLUMNS) {
166
+ if (normalized.startsWith(entry.prefix)) {
167
+ return entry.collectedBy;
168
+ }
169
+ }
170
+
171
+ return undefined;
172
+ }
173
+
174
+ /**
175
+ * Sanitize an OID list at save time, refusing what an operator has to fix
176
+ * by hand and quietly dropping what is only an editor artifact.
177
+ *
178
+ * Both write paths use this: the template service and the device service.
179
+ * Nothing validated snmpOids before, which was survivable when one bad row
180
+ * broke one device; with a template it would break every device linked to
181
+ * it.
182
+ *
183
+ * The split between dropping and throwing is deliberate, and it is about
184
+ * NOT locking anyone out of a settings card they need. Blank rows are what
185
+ * SnmpOidEditor's "Add OID" button leaves behind when a user clicks it and
186
+ * changes their mind, and duplicates can already exist in data written
187
+ * before any of this validation did - both are dropped silently, because
188
+ * refusing them would mean a device carrying one legacy artifact could
189
+ * never be linked to a template until somebody hunted the row down. A
190
+ * genuinely malformed OID does throw: it has never collected anything, the
191
+ * message names it, and the editor that reports the error is on the same
192
+ * card.
193
+ */
194
+ public static validateOidList(
195
+ oids: Array<SnmpOid> | undefined,
196
+ options: ValidateOidListOptions,
197
+ ): Array<SnmpOid> {
198
+ const list: Array<SnmpOid> = oids || [];
199
+
200
+ const seen: Set<string> = new Set();
201
+ const sanitized: Array<SnmpOid> = [];
202
+
203
+ for (const entry of list) {
204
+ const normalized: string = SnmpOidListUtil.normalizeOid(entry.oid);
205
+
206
+ // Editor artifact, not user intent.
207
+ if (!normalized) {
208
+ continue;
209
+ }
210
+
211
+ if (!OID_SYNTAX.test(normalized)) {
212
+ throw new BadDataException(
213
+ `${options.label}: "${entry.oid}" is not a numeric OID. Use dotted numbers, for example 1.3.6.1.2.1.1.3.0.`,
214
+ );
215
+ }
216
+
217
+ // Keep the first spelling of a duplicate, drop the rest.
218
+ if (seen.has(normalized)) {
219
+ continue;
220
+ }
221
+
222
+ seen.add(normalized);
223
+
224
+ const name: string | undefined = entry.name?.trim()
225
+ ? entry.name.trim().substring(0, MAX_OID_NAME_LENGTH)
226
+ : undefined;
227
+
228
+ sanitized.push({
229
+ ...entry,
230
+ oid: normalized,
231
+ ...(name === undefined ? {} : { name: name }),
232
+ });
233
+ }
234
+
235
+ /*
236
+ * Counted AFTER sanitizing, so blank rows and duplicates cannot push a
237
+ * legitimate list over the limit.
238
+ */
239
+ if (sanitized.length > options.max) {
240
+ throw new BadDataException(
241
+ `${options.label}: ${sanitized.length} OIDs is more than the limit of ${options.max}. Remove some, or move them to another template.`,
242
+ );
243
+ }
244
+
245
+ return sanitized;
246
+ }
247
+
248
+ /**
249
+ * Merge a template's OIDs with a device's own into the list the probe
250
+ * receives.
251
+ *
252
+ * Template entries come FIRST, in template order, and that ordering is
253
+ * load-bearing rather than cosmetic: the effective cap truncates from the
254
+ * end, so the shared items a whole device type depends on have to be the
255
+ * stable prefix. If device additions came first, adding one local OID
256
+ * could silently push a template OID off the end of every device that has
257
+ * one.
258
+ *
259
+ * A duplicate resolves to the DEVICE's entry — it keeps whatever name and
260
+ * description the operator gave it — but it stays at the TEMPLATE's
261
+ * position, for the same reason.
262
+ *
263
+ * Malformed rows are dropped rather than thrown on, because this runs on
264
+ * the poll path against data that was already persisted. The validators
265
+ * above are where a bad row is refused; here, one bad row must not stop a
266
+ * device polling the other ninety-nine.
267
+ */
268
+ public static mergeOidLists(
269
+ templateOids: Array<SnmpOid> | undefined,
270
+ deviceOids: Array<SnmpOid> | undefined,
271
+ ): Array<SnmpOid> {
272
+ const merged: Array<SnmpOid> = [];
273
+ const indexByOid: Map<string, number> = new Map();
274
+
275
+ const all: Array<SnmpOid> = [
276
+ ...(templateOids || []),
277
+ ...(deviceOids || []),
278
+ ];
279
+
280
+ for (const entry of all) {
281
+ const normalized: string = SnmpOidListUtil.normalizeOid(entry.oid);
282
+
283
+ if (!normalized || !OID_SYNTAX.test(normalized)) {
284
+ continue;
285
+ }
286
+
287
+ const normalizedEntry: SnmpOid = {
288
+ ...entry,
289
+ oid: normalized,
290
+ };
291
+
292
+ const existingIndex: number | undefined = indexByOid.get(normalized);
293
+
294
+ if (existingIndex === undefined) {
295
+ indexByOid.set(normalized, merged.length);
296
+ merged.push(normalizedEntry);
297
+ continue;
298
+ }
299
+
300
+ // Device entry wins on content, template keeps the position.
301
+ merged[existingIndex] = normalizedEntry;
302
+ }
303
+
304
+ return merged;
305
+ }
306
+
307
+ /**
308
+ * What this device polls, capped. The cap should be unreachable — both
309
+ * write paths reject an over-cap list with an error the operator can see —
310
+ * so this is the backstop for a template that grew after devices linked to
311
+ * it.
312
+ */
313
+ public static resolveEffectiveOids(
314
+ data: ResolveEffectiveOidsData,
315
+ ): EffectiveOidResolution {
316
+ const merged: Array<SnmpOid> = SnmpOidListUtil.mergeOidLists(
317
+ data.templateOids,
318
+ data.deviceOids,
319
+ );
320
+
321
+ if (merged.length <= MAX_EFFECTIVE_OIDS_PER_DEVICE) {
322
+ return {
323
+ oids: merged,
324
+ truncatedCount: 0,
325
+ };
326
+ }
327
+
328
+ return {
329
+ oids: merged.slice(0, MAX_EFFECTIVE_OIDS_PER_DEVICE),
330
+ truncatedCount: merged.length - MAX_EFFECTIVE_OIDS_PER_DEVICE,
331
+ };
332
+ }
333
+ }
@@ -0,0 +1,145 @@
1
+ import {
2
+ NetworkTopologyDeviceRole,
3
+ NetworkTopologyNodeShape,
4
+ } from "../Monitor/SnmpMonitor/NetworkTopology";
5
+
6
+ /*
7
+ * The device roles seeded into every project.
8
+ *
9
+ * Device roles used to be a fixed union (NetworkTopologyDeviceRole) with the
10
+ * label, the silhouette and the "is this a core device?" flag each hardcoded
11
+ * in a different module. They are now the per-project NetworkDeviceRole
12
+ * lookup table, so a project can rename "Wireless AP" to "Access Point",
13
+ * change what a firewall is drawn as, or add a role of its own.
14
+ *
15
+ * This file is the single source of truth for the DEFAULTS, shared by
16
+ * ProjectService (which seeds new projects) and the BackfillNetworkDeviceRoles
17
+ * data migration (which seeds projects that predate the table), so the two can
18
+ * never disagree about what a fresh project starts with.
19
+ *
20
+ * `key` is deliberately the built-in NetworkTopologyDeviceRole value. The SNMP
21
+ * classifier speaks that vocabulary and always will — it is evidence-driven
22
+ * and cannot invent a project's custom role — so matching its answer back to a
23
+ * configured row is a lookup by this key. That is also why the key is stable
24
+ * and the name is not: renaming a role must not stop the classifier finding it.
25
+ */
26
+ export interface DefaultNetworkDeviceRole {
27
+ key: NetworkTopologyDeviceRole;
28
+ name: string;
29
+ description: string;
30
+ topologyShape: NetworkTopologyNodeShape;
31
+ isCoreLayer: boolean;
32
+ isSnmpWalkable: boolean;
33
+ }
34
+
35
+ /*
36
+ * Ordered exactly as the map legend lists them, because the seeded `order`
37
+ * column is this array's index — a fresh project's settings page and its map
38
+ * legend therefore read in the same sequence.
39
+ *
40
+ * The shapes reproduce the renderer's historical SHAPE_BY_ROLE map and the
41
+ * isCoreLayer flags reproduce its CORE_DEVICE_ROLES set, so a project seeded
42
+ * from this list draws exactly the map it drew before roles were configurable.
43
+ *
44
+ * "unknown" is not here on purpose. It is not a role an operator assigns; it
45
+ * is the classifier saying it has no answer, and offering it as a choice would
46
+ * mean "stop classifying this device forever" rather than "I don't know".
47
+ */
48
+ export const DEFAULT_NETWORK_DEVICE_ROLES: ReadonlyArray<DefaultNetworkDeviceRole> =
49
+ [
50
+ {
51
+ key: "router",
52
+ name: "Router",
53
+ description:
54
+ "Moves traffic between networks. Sits at the top of the topology with the other core devices.",
55
+ topologyShape: "circle",
56
+ isCoreLayer: true,
57
+ isSnmpWalkable: true,
58
+ },
59
+ {
60
+ key: "switch",
61
+ name: "Switch",
62
+ description:
63
+ "Access or distribution switching. Endpoints hang off it, and it hangs off a core device.",
64
+ topologyShape: "rounded-square",
65
+ isCoreLayer: false,
66
+ isSnmpWalkable: true,
67
+ },
68
+ {
69
+ key: "firewall",
70
+ name: "Firewall",
71
+ description:
72
+ "Security appliance at a network boundary. Drawn at core level.",
73
+ topologyShape: "diamond",
74
+ isCoreLayer: true,
75
+ isSnmpWalkable: true,
76
+ },
77
+ {
78
+ key: "wirelessAccessPoint",
79
+ name: "Wireless AP",
80
+ description: "Wireless access point serving client devices.",
81
+ topologyShape: "triangle",
82
+ isCoreLayer: false,
83
+ isSnmpWalkable: true,
84
+ },
85
+ {
86
+ key: "loadBalancer",
87
+ name: "Load balancer",
88
+ description:
89
+ "Distributes traffic across a pool of servers. Drawn at core level.",
90
+ topologyShape: "hexagon",
91
+ isCoreLayer: true,
92
+ isSnmpWalkable: true,
93
+ },
94
+ {
95
+ key: "server",
96
+ name: "Server",
97
+ description: "A general purpose server or compute node.",
98
+ topologyShape: "tower",
99
+ isCoreLayer: false,
100
+ isSnmpWalkable: true,
101
+ },
102
+ {
103
+ key: "storage",
104
+ name: "Storage",
105
+ description: "A NAS, SAN or other storage appliance.",
106
+ topologyShape: "cylinder",
107
+ isCoreLayer: false,
108
+ isSnmpWalkable: true,
109
+ },
110
+ {
111
+ key: "printer",
112
+ name: "Printer",
113
+ description: "A network printer or multifunction device.",
114
+ topologyShape: "rect",
115
+ isCoreLayer: false,
116
+ isSnmpWalkable: false,
117
+ },
118
+ {
119
+ key: "camera",
120
+ name: "Camera",
121
+ description: "An IP camera or other video endpoint.",
122
+ topologyShape: "rect",
123
+ isCoreLayer: false,
124
+ isSnmpWalkable: false,
125
+ },
126
+ {
127
+ key: "phone",
128
+ name: "IP phone",
129
+ description: "A VoIP handset or conference phone.",
130
+ topologyShape: "rect",
131
+ isCoreLayer: false,
132
+ isSnmpWalkable: false,
133
+ },
134
+ {
135
+ key: "host",
136
+ name: "Host",
137
+ description:
138
+ "Anything plugged into an access port that is not one of the roles above.",
139
+ topologyShape: "rect",
140
+ isCoreLayer: false,
141
+ isSnmpWalkable: false,
142
+ },
143
+ ];
144
+
145
+ export default DEFAULT_NETWORK_DEVICE_ROLES;
@@ -101,6 +101,25 @@ enum Permission {
101
101
  TelemetryMember = "TelemetryMember",
102
102
  TelemetryViewer = "TelemetryViewer",
103
103
 
104
+ /*
105
+ * SIEM data is its own domain, not a fourth telemetry signal. Security
106
+ * events, the Sigma detection rules over them, the threat-intel feeds and
107
+ * their indicators, and the SecOps connector credentials all read through
108
+ * these three tiers and through nothing else that is handed out broadly -
109
+ * not ProjectMember, not the project-wide Viewer, not the Telemetry tiers.
110
+ *
111
+ * That exclusion is the whole point of the family. A SIEM holds authentication
112
+ * failures, privilege escalations and the analyst's own investigation trail;
113
+ * "everyone who can open a dashboard can read it" is not an access policy an
114
+ * organisation deploying one can accept. Whoever should see it is given a
115
+ * Security tier deliberately, the same way BillingViewer is given
116
+ * deliberately, and everybody else - including a Telemetry Admin with the run
117
+ * of every log, metric and trace in the project - sees nothing.
118
+ */
119
+ SecurityAdmin = "SecurityAdmin",
120
+ SecurityMember = "SecurityMember",
121
+ SecurityViewer = "SecurityViewer",
122
+
104
123
  SettingsAdmin = "SettingsAdmin",
105
124
  SettingsMember = "SettingsMember",
106
125
  SettingsViewer = "SettingsViewer",
@@ -617,6 +636,11 @@ enum Permission {
617
636
  EditNetworkDeviceAutoImportRule = "EditNetworkDeviceAutoImportRule",
618
637
  ReadNetworkDeviceAutoImportRule = "ReadNetworkDeviceAutoImportRule",
619
638
 
639
+ CreateNetworkDeviceOidTemplate = "CreateNetworkDeviceOidTemplate",
640
+ DeleteNetworkDeviceOidTemplate = "DeleteNetworkDeviceOidTemplate",
641
+ EditNetworkDeviceOidTemplate = "EditNetworkDeviceOidTemplate",
642
+ ReadNetworkDeviceOidTemplate = "ReadNetworkDeviceOidTemplate",
643
+
620
644
  // Podman Host Label Rule Permissions
621
645
  CreatePodmanHostLabelRule = "CreatePodmanHostLabelRule",
622
646
  DeletePodmanHostLabelRule = "DeletePodmanHostLabelRule",
@@ -1369,6 +1393,11 @@ enum Permission {
1369
1393
  EditNetworkSiteType = "EditNetworkSiteType",
1370
1394
  ReadNetworkSiteType = "ReadNetworkSiteType",
1371
1395
 
1396
+ CreateNetworkDeviceRole = "CreateNetworkDeviceRole",
1397
+ DeleteNetworkDeviceRole = "DeleteNetworkDeviceRole",
1398
+ EditNetworkDeviceRole = "EditNetworkDeviceRole",
1399
+ ReadNetworkDeviceRole = "ReadNetworkDeviceRole",
1400
+
1372
1401
  CreateRecommendationDismissal = "CreateRecommendationDismissal",
1373
1402
  DeleteRecommendationDismissal = "DeleteRecommendationDismissal",
1374
1403
  EditRecommendationDismissal = "EditRecommendationDismissal",
@@ -2371,6 +2400,36 @@ export class PermissionHelper {
2371
2400
  isRolePermission: true,
2372
2401
  group: PermissionGroup.Telemetry,
2373
2402
  },
2403
+ {
2404
+ permission: Permission.SecurityAdmin,
2405
+ title: "Security Admin",
2406
+ description:
2407
+ "Full control over the SIEM: security events, Sigma detection rules, threat intelligence feeds and indicators, and Google SecOps connections. Security data is not readable through any other role.",
2408
+ isAssignableToTenant: true,
2409
+ isAccessControlPermission: false,
2410
+ isRolePermission: true,
2411
+ group: PermissionGroup.Security,
2412
+ },
2413
+ {
2414
+ permission: Permission.SecurityMember,
2415
+ title: "Security Member",
2416
+ description:
2417
+ "Can read security events and threat intelligence, and create, edit, and delete detection rules and threat intel feeds. Cannot configure Google SecOps connections.",
2418
+ isAssignableToTenant: true,
2419
+ isAccessControlPermission: false,
2420
+ isRolePermission: true,
2421
+ group: PermissionGroup.Security,
2422
+ },
2423
+ {
2424
+ permission: Permission.SecurityViewer,
2425
+ title: "Security Viewer",
2426
+ description:
2427
+ "Read-only access to security events, detection rules, threat intelligence feeds, and indicators.",
2428
+ isAssignableToTenant: true,
2429
+ isAccessControlPermission: false,
2430
+ isRolePermission: true,
2431
+ group: PermissionGroup.Security,
2432
+ },
2374
2433
  {
2375
2434
  permission: Permission.SettingsAdmin,
2376
2435
  title: "Settings Admin",
@@ -8518,6 +8577,46 @@ export class PermissionHelper {
8518
8577
  isRolePermission: false,
8519
8578
  group: PermissionGroup.Monitor,
8520
8579
  },
8580
+ {
8581
+ permission: Permission.CreateNetworkDeviceRole,
8582
+ title: "Create Network Device Role",
8583
+ description:
8584
+ "This permission can create Network Device Role in this project.",
8585
+ isAssignableToTenant: true,
8586
+ isAccessControlPermission: false,
8587
+ isRolePermission: false,
8588
+ group: PermissionGroup.Monitor,
8589
+ },
8590
+ {
8591
+ permission: Permission.DeleteNetworkDeviceRole,
8592
+ title: "Delete Network Device Role",
8593
+ description:
8594
+ "This permission can delete Network Device Role of this project.",
8595
+ isAssignableToTenant: true,
8596
+ isAccessControlPermission: true,
8597
+ isRolePermission: false,
8598
+ group: PermissionGroup.Monitor,
8599
+ },
8600
+ {
8601
+ permission: Permission.EditNetworkDeviceRole,
8602
+ title: "Edit Network Device Role",
8603
+ description:
8604
+ "This permission can edit Network Device Role of this project.",
8605
+ isAssignableToTenant: true,
8606
+ isAccessControlPermission: true,
8607
+ isRolePermission: false,
8608
+ group: PermissionGroup.Monitor,
8609
+ },
8610
+ {
8611
+ permission: Permission.ReadNetworkDeviceRole,
8612
+ title: "Read Network Device Role",
8613
+ description:
8614
+ "This permission can read Network Device Role of this project.",
8615
+ isAssignableToTenant: true,
8616
+ isAccessControlPermission: true,
8617
+ isRolePermission: false,
8618
+ group: PermissionGroup.Monitor,
8619
+ },
8521
8620
  {
8522
8621
  permission: Permission.CreateRecommendationDismissal,
8523
8622
  title: "Create Recommendation Dismissal",
@@ -12341,6 +12440,48 @@ export class PermissionHelper {
12341
12440
  group: PermissionGroup.Telemetry,
12342
12441
  },
12343
12442
 
12443
+ // OID Collection Template Permissions
12444
+ {
12445
+ permission: Permission.CreateNetworkDeviceOidTemplate,
12446
+ title: "Create OID Collection Template",
12447
+ description:
12448
+ "This permission can create OID Collection Templates in this project.",
12449
+ isAssignableToTenant: true,
12450
+ isAccessControlPermission: false,
12451
+ isRolePermission: false,
12452
+ group: PermissionGroup.Telemetry,
12453
+ },
12454
+ {
12455
+ permission: Permission.DeleteNetworkDeviceOidTemplate,
12456
+ title: "Delete OID Collection Template",
12457
+ description:
12458
+ "This permission can delete OID Collection Templates of this project.",
12459
+ isAssignableToTenant: true,
12460
+ isAccessControlPermission: false,
12461
+ isRolePermission: false,
12462
+ group: PermissionGroup.Telemetry,
12463
+ },
12464
+ {
12465
+ permission: Permission.EditNetworkDeviceOidTemplate,
12466
+ title: "Edit OID Collection Template",
12467
+ description:
12468
+ "This permission can edit OID Collection Templates of this project. Editing a template changes what every linked device collects on its next poll.",
12469
+ isAssignableToTenant: true,
12470
+ isAccessControlPermission: false,
12471
+ isRolePermission: false,
12472
+ group: PermissionGroup.Telemetry,
12473
+ },
12474
+ {
12475
+ permission: Permission.ReadNetworkDeviceOidTemplate,
12476
+ title: "Read OID Collection Template",
12477
+ description:
12478
+ "This permission can read OID Collection Templates of this project.",
12479
+ isAssignableToTenant: true,
12480
+ isAccessControlPermission: false,
12481
+ isRolePermission: false,
12482
+ group: PermissionGroup.Telemetry,
12483
+ },
12484
+
12344
12485
  // Podman Host Label Rule Permissions
12345
12486
  {
12346
12487
  permission: Permission.CreatePodmanHostLabelRule,
@@ -35,6 +35,27 @@ export const MAX_SESSION_REPLAY_CHUNK_BYTES: number = 2 * 1024 * 1024;
35
35
  /* Frames a single catch-up request may concatenate. */
36
36
  export const MAX_SESSION_REPLAY_CHUNKS_PER_REQUEST: number = 8;
37
37
 
38
+ /*
39
+ * Largest DECOMPRESSED payload the ingest worker will inflate for one frame,
40
+ * and therefore the largest single indivisible rrweb event the recorder may
41
+ * put on the wire.
42
+ *
43
+ * The two numbers have to be the same number, which is why this lives in
44
+ * Common rather than in either side. A FullSnapshot is one rrweb event: it
45
+ * cannot be cut in half and still parse, so when it is bigger than the flush
46
+ * threshold the recorder posts it whole in a chunk of its own rather than
47
+ * cutting it. That is only safe while the recorder's ceiling is exactly the
48
+ * worker's — a recorder willing to send more than the worker will inflate
49
+ * produces a chunk that is accepted, queued, and then dropped at decode time,
50
+ * leaving a hole in the chunk sequence with nothing anywhere reporting it.
51
+ *
52
+ * Compression is what makes the number affordable: a snapshot this size gzips
53
+ * to a small fraction of MAX_SESSION_REPLAY_CHUNK_BYTES, which is the cap on
54
+ * the bytes actually posted.
55
+ */
56
+ export const SESSION_REPLAY_MAX_DECOMPRESSED_FRAME_BYTES: number =
57
+ 8 * 1024 * 1024;
58
+
38
59
  /*
39
60
  * Hard stop per session. At the 15s flush cadence this is ~2 hours of
40
61
  * continuous recording, comfortably past the 4-hour session cap once
@@ -53,4 +53,12 @@ export interface ResolveStackTraceResult {
53
53
  resolvedCount: number;
54
54
  /** Number of source maps found for the (service, release) pair. */
55
55
  sourceMapCount: number;
56
+ /**
57
+ * Maps that a frame matched but that were not loaded, because loading them
58
+ * would have exceeded the resolver's per-request byte budget
59
+ * (SOURCE_MAP_MAX_BYTES_PER_RESOLVE). Non-zero means symbols are missing
60
+ * for a reason an operator can fix by raising the budget — as opposed to
61
+ * the maps simply never having been uploaded.
62
+ */
63
+ sourceMapsSkippedForSize: number;
56
64
  }