@oneuptime/common 12.0.30 → 12.0.31

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 (489) 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/DetectionRule.ts +16 -5
  5. package/Models/DatabaseModels/GoogleSecOpsConnection.ts +14 -5
  6. package/Models/DatabaseModels/IncidentSeverity.ts +44 -0
  7. package/Models/DatabaseModels/Index.ts +2 -0
  8. package/Models/DatabaseModels/NetworkDevice.ts +113 -3
  9. package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +88 -0
  10. package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +22 -0
  11. package/Models/DatabaseModels/NetworkDeviceOidTemplate.ts +499 -0
  12. package/Models/DatabaseModels/ThreatIntelFeed.ts +16 -5
  13. package/Server/API/GlobalConfigAPI.ts +362 -183
  14. package/Server/API/TelemetryAPI.ts +42 -4
  15. package/Server/EnvironmentConfig.ts +112 -0
  16. package/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.ts +59 -0
  17. package/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.ts +25 -0
  18. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -0
  19. package/Server/Middleware/MultipartFormData.ts +118 -32
  20. package/Server/Services/AlertEpisodeLabelRuleEngineService.ts +9 -1
  21. package/Server/Services/AlertEpisodeOnCallRuleEngineService.ts +9 -1
  22. package/Server/Services/AlertEpisodeOwnerRuleEngineService.ts +9 -1
  23. package/Server/Services/AlertEpisodePrivacyRuleEngineService.ts +9 -1
  24. package/Server/Services/AlertGroupingEngineService.ts +9 -1
  25. package/Server/Services/AlertLabelRuleEngineService.ts +9 -1
  26. package/Server/Services/AlertOnCallRuleEngineService.ts +9 -1
  27. package/Server/Services/AlertOwnerRuleEngineService.ts +9 -1
  28. package/Server/Services/AlertPrivacyRuleEngineService.ts +9 -1
  29. package/Server/Services/AlertReminderRuleService.ts +9 -1
  30. package/Server/Services/AutoRemediationRuleEngineService.ts +9 -1
  31. package/Server/Services/CephClusterLabelRuleEngineService.ts +9 -1
  32. package/Server/Services/CephClusterOwnerRuleEngineService.ts +9 -1
  33. package/Server/Services/CloudResourceLabelRuleEngineService.ts +9 -1
  34. package/Server/Services/CloudResourceOwnerRuleEngineService.ts +9 -1
  35. package/Server/Services/DashboardLabelRuleEngineService.ts +9 -1
  36. package/Server/Services/DashboardOwnerRuleEngineService.ts +9 -1
  37. package/Server/Services/DockerHostLabelRuleEngineService.ts +9 -1
  38. package/Server/Services/DockerHostOwnerRuleEngineService.ts +9 -1
  39. package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +9 -1
  40. package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +9 -1
  41. package/Server/Services/HostLabelRuleEngineService.ts +9 -1
  42. package/Server/Services/HostOwnerRuleEngineService.ts +9 -1
  43. package/Server/Services/IncidentEpisodeLabelRuleEngineService.ts +9 -1
  44. package/Server/Services/IncidentEpisodeOnCallRuleEngineService.ts +9 -1
  45. package/Server/Services/IncidentEpisodeOwnerRuleEngineService.ts +9 -1
  46. package/Server/Services/IncidentEpisodePrivacyRuleEngineService.ts +9 -1
  47. package/Server/Services/IncidentGroupingEngineService.ts +9 -1
  48. package/Server/Services/IncidentLabelRuleEngineService.ts +9 -1
  49. package/Server/Services/IncidentOnCallRuleEngineService.ts +9 -1
  50. package/Server/Services/IncidentOwnerRuleEngineService.ts +9 -1
  51. package/Server/Services/IncidentPrivacyRuleEngineService.ts +9 -1
  52. package/Server/Services/IncidentReminderRuleService.ts +9 -1
  53. package/Server/Services/IncidentSlaRuleService.ts +9 -1
  54. package/Server/Services/IncomingCallPolicyLabelRuleEngineService.ts +9 -1
  55. package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +9 -1
  56. package/Server/Services/Index.ts +2 -0
  57. package/Server/Services/IoTFleetLabelRuleEngineService.ts +9 -1
  58. package/Server/Services/IoTFleetOwnerRuleEngineService.ts +9 -1
  59. package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +9 -1
  60. package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +9 -1
  61. package/Server/Services/KubernetesResourceService.ts +5 -1
  62. package/Server/Services/MonitorLabelRuleEngineService.ts +9 -1
  63. package/Server/Services/MonitorOwnerRuleEngineService.ts +9 -1
  64. package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +35 -0
  65. package/Server/Services/NetworkDeviceAutoImportRuleService.ts +96 -0
  66. package/Server/Services/NetworkDeviceLabelRuleEngineService.ts +9 -1
  67. package/Server/Services/NetworkDeviceOidTemplateService.ts +201 -0
  68. package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +9 -1
  69. package/Server/Services/NetworkDeviceService.ts +209 -1
  70. package/Server/Services/OnCallDutyPolicyLabelRuleEngineService.ts +9 -1
  71. package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +9 -1
  72. package/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.ts +9 -1
  73. package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +9 -1
  74. package/Server/Services/PodmanHostLabelRuleEngineService.ts +9 -1
  75. package/Server/Services/PodmanHostOwnerRuleEngineService.ts +9 -1
  76. package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +9 -1
  77. package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +9 -1
  78. package/Server/Services/RumApplicationLabelRuleEngineService.ts +9 -1
  79. package/Server/Services/RumApplicationOwnerRuleEngineService.ts +9 -1
  80. package/Server/Services/RunbookLabelRuleEngineService.ts +9 -1
  81. package/Server/Services/RunbookOwnerRuleEngineService.ts +9 -1
  82. package/Server/Services/RunbookRuleEngineService.ts +9 -1
  83. package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +9 -1
  84. package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +9 -1
  85. package/Server/Services/ScheduledMaintenanceReminderRuleService.ts +9 -1
  86. package/Server/Services/ServerlessFunctionLabelRuleEngineService.ts +9 -1
  87. package/Server/Services/ServerlessFunctionOwnerRuleEngineService.ts +9 -1
  88. package/Server/Services/ServiceLabelRuleEngineService.ts +9 -1
  89. package/Server/Services/ServiceOwnerRuleEngineService.ts +9 -1
  90. package/Server/Services/StatusPageLabelRuleEngineService.ts +9 -1
  91. package/Server/Services/StatusPageMonitorRuleEngineService.ts +7 -0
  92. package/Server/Services/StatusPageOwnerRuleEngineService.ts +9 -1
  93. package/Server/Services/TelemetrySourceMapService.ts +266 -23
  94. package/Server/Services/UserService.ts +27 -0
  95. package/Server/Services/WorkflowLabelRuleEngineService.ts +9 -1
  96. package/Server/Services/WorkflowOwnerRuleEngineService.ts +9 -1
  97. package/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.ts +186 -0
  98. package/Server/Utils/Monitor/CapturedMetricAttributeUtil.ts +245 -0
  99. package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +21 -2
  100. package/Server/Utils/Monitor/MonitorMetricUtil.ts +55 -21
  101. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +32 -0
  102. package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +15 -2
  103. package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +18 -1
  104. package/Server/Utils/Monitor/NetworkInventoryUtil.ts +10 -0
  105. package/Server/Utils/Monitor/SeriesResourceLabels.ts +34 -0
  106. package/Server/Utils/Rules/RuleEngineRuleRead.ts +48 -0
  107. package/Server/Utils/Telemetry/ExceptionSanitizer.ts +14 -1
  108. package/Server/Utils/Telemetry/LogExceptionExtractor.ts +14 -2
  109. package/Server/Utils/Telemetry/SourceMapResolver.ts +16 -5
  110. package/Server/Utils/Telemetry/StackTraceParser.ts +399 -0
  111. package/Tests/App/Dashboard/EventOverlayHook.test.tsx +125 -0
  112. package/Tests/App/Dashboard/HeaderImageAssets.test.tsx +93 -0
  113. package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +3 -3
  114. package/Tests/App/Dashboard/UserElementEmail.test.tsx +12 -4
  115. package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +1 -1
  116. package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +14 -0
  117. package/Tests/Models/DatabaseModels/ModelRegistryInvariants.test.ts +469 -0
  118. package/Tests/Models/SecurityDomainAccessControl.test.ts +429 -0
  119. package/Tests/Server/API/GlobalConfigLicense.test.ts +657 -0
  120. package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +84 -6
  121. package/Tests/Server/API/TelemetryResolveStackTraceAPI.test.ts +805 -0
  122. package/Tests/Server/Infrastructure/Postgres/AddOnCallCalendarFeedsMigration.test.ts +32 -7
  123. package/Tests/Server/Middleware/IdentityRateLimit.test.ts +1144 -0
  124. package/Tests/Server/Middleware/MultipartFormData.test.ts +618 -3
  125. package/Tests/Server/Services/MonitorLabelRuleEngineScale.test.ts +520 -0
  126. package/Tests/Server/Services/NetworkDeviceOidTemplateService.test.ts +332 -0
  127. package/Tests/Server/Services/NetworkDeviceOidTemplateWriteGuards.test.ts +409 -0
  128. package/Tests/Server/Services/RuleEngineRuleFetchLimit.test.ts +239 -0
  129. package/Tests/Server/Services/TelemetrySourceMapService.test.ts +1210 -2
  130. package/Tests/Server/Services/UserServiceSeatLimit.test.ts +182 -0
  131. package/Tests/Server/Types/AnalyticsDatabase/SecurityEventModelPermission.test.ts +255 -0
  132. package/Tests/Server/Types/Database/Permissions/ReadBlockPermission.test.ts +212 -0
  133. package/Tests/Server/Types/Database/Permissions/SecurityRoleAccess.test.ts +413 -0
  134. package/Tests/Server/Utils/CodeRepository.test.ts +689 -0
  135. package/Tests/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.test.ts +495 -0
  136. package/Tests/Server/Utils/ExceptionSanitizer.test.ts +77 -0
  137. package/Tests/Server/Utils/Monitor/CapturedMetricAttributeUtil.test.ts +284 -0
  138. package/Tests/Server/Utils/Monitor/MonitorCustomMetricAttributes.test.ts +503 -0
  139. package/Tests/Server/Utils/Monitor/MonitorTemplatePrototypePollution.test.ts +106 -0
  140. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkLogWritePath.test.ts +33 -4
  141. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +14 -4
  142. package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +44 -0
  143. package/Tests/Server/Utils/OpenAPISpec.test.ts +536 -0
  144. package/Tests/Server/Utils/Rules/RuleEngineRuleRead.test.ts +115 -0
  145. package/Tests/Server/Utils/StackTraceParser.test.ts +610 -0
  146. package/Tests/Server/Utils/Telemetry/LogExceptionExtractor.test.ts +0 -0
  147. package/Tests/Server/Utils/Telemetry/SourceMapLimits.test.ts +656 -0
  148. package/Tests/Server/Utils/Telemetry/SourceMapResolver.test.ts +100 -0
  149. package/Tests/Types/Monitor/SnmpMonitor/SnmpOidListUtil.test.ts +454 -0
  150. package/Tests/Types/SecurityRolePermissions.test.ts +193 -0
  151. package/Tests/UI/Components/Charts/AnnotationLayout.test.ts +773 -0
  152. package/Tests/UI/Components/Charts/ChartAnnotationRail.test.tsx +789 -0
  153. package/Tests/UI/Components/Charts/ChartBucketIdentity.test.ts +254 -0
  154. package/Tests/UI/Components/Charts/TimeAnnotation.test.ts +471 -0
  155. package/Tests/UI/Components/EditionLabelLicenseRefresh.test.tsx +405 -0
  156. package/Tests/UI/Components/ErrorMessageRefreshControl.test.tsx +83 -0
  157. package/Tests/UI/Components/MarkdownConverters.test.ts +686 -0
  158. package/Tests/UI/Components/ModelTable/BaseModelTableDeleteAndEmptyStates.test.tsx +341 -0
  159. package/Tests/UI/Components/OrderedStatesList.test.tsx +5 -5
  160. package/Tests/UI/Components/PendingProjectInvitations.test.tsx +1 -1
  161. package/Tests/UI/Components/TableSortAndMobileColumns.test.tsx +195 -0
  162. package/Tests/UI/Components/XAxis.test.ts +270 -5
  163. package/Tests/UI/Components/XAxisDaylightSaving.test.ts +113 -0
  164. package/Tests/UI/Styles/ChartFocusRing.test.ts +153 -0
  165. package/Tests/UI/Styles/ChartFocusRingCoverage.test.tsx +377 -0
  166. package/Tests/UI/Styles/ThemeStylesheet.ts +162 -0
  167. package/Tests/Utils/EnterpriseLicenseSeats.test.ts +507 -0
  168. package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +951 -1
  169. package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +238 -0
  170. package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +1056 -0
  171. package/Tests/Utils/NetworkDiscovery/ReverseDnsNameUtil.test.ts +882 -0
  172. package/Types/Date.ts +39 -0
  173. package/Types/Monitor/SnmpMonitor/SnmpOidListUtil.ts +333 -0
  174. package/Types/Permission.ts +96 -0
  175. package/Types/Rum/SessionReplay.ts +21 -0
  176. package/Types/Telemetry/SourceMap.ts +8 -0
  177. package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.tsx +176 -0
  178. package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.ts +745 -0
  179. package/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.tsx +576 -0
  180. package/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.tsx +204 -0
  181. package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +491 -544
  182. package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +324 -372
  183. package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +487 -540
  184. package/UI/Components/Charts/ChartLibrary/Types/FormattedReferenceRegion.ts +7 -3
  185. package/UI/Components/Charts/ChartLibrary/Types/FormattedTimeReferenceLine.ts +14 -3
  186. package/UI/Components/Charts/Types/ChartEventKind.ts +13 -0
  187. package/UI/Components/Charts/Types/ReferenceRegionProps.ts +6 -0
  188. package/UI/Components/Charts/Types/TimeReferenceLineProps.ts +20 -3
  189. package/UI/Components/Charts/Utils/TimeAnnotation.ts +69 -35
  190. package/UI/Components/Charts/Utils/XAxis.ts +125 -18
  191. package/UI/Components/EditionLabel/EditionLabel.tsx +280 -26
  192. package/UI/Components/ErrorMessage/ErrorMessage.tsx +21 -10
  193. package/UI/Components/Feed/FeedItem.tsx +4 -5
  194. package/UI/Components/Header/HeaderIconDropdownButton.tsx +1 -2
  195. package/UI/Components/Header/UserProfile/UserProfile.tsx +1 -2
  196. package/UI/Components/Image/Image.tsx +20 -3
  197. package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
  198. package/UI/Components/MemberRoleAssignment/MemberRoleAssignment.tsx +1 -2
  199. package/UI/Components/ModelTable/BaseModelTable.tsx +150 -24
  200. package/UI/Components/Table/TableHeader.tsx +64 -48
  201. package/UI/Components/Table/TableRow.tsx +13 -3
  202. package/UI/Styles/Theme.css +38 -0
  203. package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +271 -0
  204. package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +6 -0
  205. package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +141 -10
  206. package/Utils/NetworkDiscovery/DiscoveredHostUtil.ts +55 -3
  207. package/Utils/NetworkDiscovery/ReverseDnsNameUtil.ts +151 -0
  208. package/Utils/Rules/RuleEngineLimits.ts +32 -0
  209. package/build/dist/Models/AnalyticsModels/SecurityEvent.js +48 -16
  210. package/build/dist/Models/AnalyticsModels/SecurityEvent.js.map +1 -1
  211. package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js +10 -5
  212. package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js.map +1 -1
  213. package/build/dist/Models/DatabaseModels/AlertSeverity.js +46 -1
  214. package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
  215. package/build/dist/Models/DatabaseModels/DetectionRule.js +16 -5
  216. package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
  217. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +14 -5
  218. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
  219. package/build/dist/Models/DatabaseModels/IncidentSeverity.js +46 -1
  220. package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
  221. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  222. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  223. package/build/dist/Models/DatabaseModels/NetworkDevice.js +115 -3
  224. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  225. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +88 -0
  226. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
  227. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
  228. package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js +519 -0
  229. package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js.map +1 -0
  230. package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js +16 -5
  231. package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js.map +1 -1
  232. package/build/dist/Server/API/GlobalConfigAPI.js +293 -176
  233. package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
  234. package/build/dist/Server/API/TelemetryAPI.js +31 -3
  235. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  236. package/build/dist/Server/EnvironmentConfig.js +83 -0
  237. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  238. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js +26 -0
  239. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js.map +1 -0
  240. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js +14 -0
  241. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js.map +1 -0
  242. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +4 -0
  243. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  244. package/build/dist/Server/Middleware/MultipartFormData.js +93 -28
  245. package/build/dist/Server/Middleware/MultipartFormData.js.map +1 -1
  246. package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js +8 -1
  247. package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js.map +1 -1
  248. package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js +8 -1
  249. package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js.map +1 -1
  250. package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js +8 -1
  251. package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js.map +1 -1
  252. package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js +8 -1
  253. package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js.map +1 -1
  254. package/build/dist/Server/Services/AlertGroupingEngineService.js +8 -1
  255. package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -1
  256. package/build/dist/Server/Services/AlertLabelRuleEngineService.js +8 -1
  257. package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
  258. package/build/dist/Server/Services/AlertOnCallRuleEngineService.js +8 -1
  259. package/build/dist/Server/Services/AlertOnCallRuleEngineService.js.map +1 -1
  260. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +8 -1
  261. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
  262. package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js +8 -1
  263. package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js.map +1 -1
  264. package/build/dist/Server/Services/AlertReminderRuleService.js +8 -1
  265. package/build/dist/Server/Services/AlertReminderRuleService.js.map +1 -1
  266. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +8 -1
  267. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
  268. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +8 -1
  269. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
  270. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +8 -1
  271. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
  272. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +8 -1
  273. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
  274. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +8 -1
  275. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
  276. package/build/dist/Server/Services/DashboardLabelRuleEngineService.js +8 -1
  277. package/build/dist/Server/Services/DashboardLabelRuleEngineService.js.map +1 -1
  278. package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js +8 -1
  279. package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js.map +1 -1
  280. package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +8 -1
  281. package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
  282. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +8 -1
  283. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
  284. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +8 -1
  285. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
  286. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +8 -1
  287. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
  288. package/build/dist/Server/Services/HostLabelRuleEngineService.js +8 -1
  289. package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
  290. package/build/dist/Server/Services/HostOwnerRuleEngineService.js +8 -1
  291. package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
  292. package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js +8 -1
  293. package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js.map +1 -1
  294. package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js +8 -1
  295. package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js.map +1 -1
  296. package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js +8 -1
  297. package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js.map +1 -1
  298. package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js +8 -1
  299. package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js.map +1 -1
  300. package/build/dist/Server/Services/IncidentGroupingEngineService.js +8 -1
  301. package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
  302. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +8 -1
  303. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
  304. package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js +8 -1
  305. package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js.map +1 -1
  306. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +8 -1
  307. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
  308. package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js +8 -1
  309. package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js.map +1 -1
  310. package/build/dist/Server/Services/IncidentReminderRuleService.js +8 -1
  311. package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -1
  312. package/build/dist/Server/Services/IncidentSlaRuleService.js +8 -1
  313. package/build/dist/Server/Services/IncidentSlaRuleService.js.map +1 -1
  314. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js +8 -1
  315. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js.map +1 -1
  316. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +8 -1
  317. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -1
  318. package/build/dist/Server/Services/Index.js +2 -0
  319. package/build/dist/Server/Services/Index.js.map +1 -1
  320. package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js +8 -1
  321. package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js.map +1 -1
  322. package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js +8 -1
  323. package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js.map +1 -1
  324. package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +8 -1
  325. package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
  326. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +8 -1
  327. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
  328. package/build/dist/Server/Services/KubernetesResourceService.js +5 -1
  329. package/build/dist/Server/Services/KubernetesResourceService.js.map +1 -1
  330. package/build/dist/Server/Services/MonitorLabelRuleEngineService.js +8 -1
  331. package/build/dist/Server/Services/MonitorLabelRuleEngineService.js.map +1 -1
  332. package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js +8 -1
  333. package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js.map +1 -1
  334. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +30 -21
  335. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
  336. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +64 -0
  337. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
  338. package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js +8 -1
  339. package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js.map +1 -1
  340. package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js +180 -0
  341. package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js.map +1 -0
  342. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +8 -1
  343. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
  344. package/build/dist/Server/Services/NetworkDeviceService.js +154 -1
  345. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  346. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js +8 -1
  347. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js.map +1 -1
  348. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js +8 -1
  349. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js.map +1 -1
  350. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js +8 -1
  351. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js.map +1 -1
  352. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js +8 -1
  353. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js.map +1 -1
  354. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +8 -1
  355. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -1
  356. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +8 -1
  357. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
  358. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +8 -1
  359. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -1
  360. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +8 -1
  361. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
  362. package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js +8 -1
  363. package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js.map +1 -1
  364. package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js +8 -1
  365. package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js.map +1 -1
  366. package/build/dist/Server/Services/RunbookLabelRuleEngineService.js +8 -1
  367. package/build/dist/Server/Services/RunbookLabelRuleEngineService.js.map +1 -1
  368. package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js +8 -1
  369. package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js.map +1 -1
  370. package/build/dist/Server/Services/RunbookRuleEngineService.js +8 -1
  371. package/build/dist/Server/Services/RunbookRuleEngineService.js.map +1 -1
  372. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +8 -1
  373. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
  374. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +8 -1
  375. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
  376. package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js +8 -1
  377. package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js.map +1 -1
  378. package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js +8 -1
  379. package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js.map +1 -1
  380. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js +8 -1
  381. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js.map +1 -1
  382. package/build/dist/Server/Services/ServiceLabelRuleEngineService.js +8 -1
  383. package/build/dist/Server/Services/ServiceLabelRuleEngineService.js.map +1 -1
  384. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +8 -1
  385. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
  386. package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js +8 -1
  387. package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js.map +1 -1
  388. package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js +6 -0
  389. package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js.map +1 -1
  390. package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js +8 -1
  391. package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js.map +1 -1
  392. package/build/dist/Server/Services/TelemetrySourceMapService.js +213 -19
  393. package/build/dist/Server/Services/TelemetrySourceMapService.js.map +1 -1
  394. package/build/dist/Server/Services/UserService.js +25 -0
  395. package/build/dist/Server/Services/UserService.js.map +1 -1
  396. package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js +8 -1
  397. package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js.map +1 -1
  398. package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js +8 -1
  399. package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js.map +1 -1
  400. package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js +145 -0
  401. package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js.map +1 -0
  402. package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js +201 -0
  403. package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js.map +1 -0
  404. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +19 -2
  405. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
  406. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +42 -23
  407. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
  408. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +29 -0
  409. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  410. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +11 -2
  411. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
  412. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +16 -1
  413. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
  414. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +10 -0
  415. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
  416. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +33 -0
  417. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
  418. package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js +37 -0
  419. package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js.map +1 -0
  420. package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js +12 -1
  421. package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js.map +1 -1
  422. package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js +14 -2
  423. package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js.map +1 -1
  424. package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js +15 -5
  425. package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js.map +1 -1
  426. package/build/dist/Server/Utils/Telemetry/StackTraceParser.js +307 -0
  427. package/build/dist/Server/Utils/Telemetry/StackTraceParser.js.map +1 -1
  428. package/build/dist/Types/Date.js +27 -0
  429. package/build/dist/Types/Date.js.map +1 -1
  430. package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js +253 -0
  431. package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js.map +1 -0
  432. package/build/dist/Types/Permission.js +86 -0
  433. package/build/dist/Types/Permission.js.map +1 -1
  434. package/build/dist/Types/Rum/SessionReplay.js +19 -0
  435. package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
  436. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js +83 -0
  437. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js.map +1 -0
  438. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js +531 -0
  439. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js.map +1 -0
  440. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js +264 -0
  441. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js.map +1 -0
  442. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js +122 -0
  443. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js.map +1 -0
  444. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +213 -233
  445. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
  446. package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +139 -152
  447. package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
  448. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +212 -232
  449. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
  450. package/build/dist/UI/Components/Charts/Types/ChartEventKind.js +14 -0
  451. package/build/dist/UI/Components/Charts/Types/ChartEventKind.js.map +1 -0
  452. package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js +57 -28
  453. package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js.map +1 -1
  454. package/build/dist/UI/Components/Charts/Utils/XAxis.js +103 -17
  455. package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
  456. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +198 -23
  457. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  458. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js +15 -5
  459. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js.map +1 -1
  460. package/build/dist/UI/Components/Feed/FeedItem.js +4 -5
  461. package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
  462. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +1 -2
  463. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
  464. package/build/dist/UI/Components/Header/UserProfile/UserProfile.js.map +1 -1
  465. package/build/dist/UI/Components/Image/Image.js +6 -1
  466. package/build/dist/UI/Components/Image/Image.js.map +1 -1
  467. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
  468. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
  469. package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js +1 -2
  470. package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js.map +1 -1
  471. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +104 -23
  472. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  473. package/build/dist/UI/Components/Table/TableHeader.js +20 -22
  474. package/build/dist/UI/Components/Table/TableHeader.js.map +1 -1
  475. package/build/dist/UI/Components/Table/TableRow.js +13 -4
  476. package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
  477. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +153 -0
  478. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +1 -0
  479. package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
  480. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +127 -7
  481. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
  482. package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js +50 -3
  483. package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js.map +1 -1
  484. package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js +132 -0
  485. package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js.map +1 -0
  486. package/build/dist/Utils/Rules/RuleEngineLimits.js +31 -0
  487. package/build/dist/Utils/Rules/RuleEngineLimits.js.map +1 -0
  488. package/jest.config.json +1 -0
  489. package/package.json +2 -2
package/Types/Date.ts CHANGED
@@ -253,6 +253,45 @@ export default class OneUptimeDate {
253
253
  return `${this.getDateAsLocalDayMonthString(date)}, ${this.getLocalTimeString(date, { includeMinutes: false })}:00`;
254
254
  }
255
255
 
256
+ /**
257
+ * "02 Mar, 14:30" — a day-qualified wall clock, for chart axes whose
258
+ * buckets are finer than an hour but whose window is long enough that a
259
+ * bare "14:30" would name more than one instant.
260
+ */
261
+ public static getDateAsLocalDayMonthTimeString(
262
+ date: Date | string,
263
+ options?: { includeSeconds?: boolean | undefined },
264
+ ): string {
265
+ date = this.fromString(date);
266
+
267
+ return `${this.getDateAsLocalDayMonthString(date)}, ${this.getLocalTimeString(
268
+ date,
269
+ { includeSeconds: options?.includeSeconds ?? false },
270
+ )}`;
271
+ }
272
+
273
+ /**
274
+ * Minutes `date` sits ahead of UTC in the current timezone. Callers use it
275
+ * to detect a DST transition inside a window: an offset that DROPS across
276
+ * the window means the clock went back, and a wall-clock reading in that
277
+ * hour names two different instants.
278
+ */
279
+ public static getTimezoneOffsetInMinutes(date: Date | string): number {
280
+ return this.inCurrentTimezone(date).utcOffset();
281
+ }
282
+
283
+ /**
284
+ * The current timezone's abbreviation AT `date` — "BST" in summer, "GMT"
285
+ * in winter. The only thing that separates the two 01:00s on the day the
286
+ * clocks go back, so chart axes append it when a window straddles one.
287
+ */
288
+ public static getLocalZoneAbbr(date: Date | string): string {
289
+ return this.getZoneAbbrByTimezone(
290
+ this.getCurrentTimezone(),
291
+ this.fromString(date),
292
+ );
293
+ }
294
+
256
295
  /**
257
296
  * A compact "Mar 1, 14:30" (or "Mar 1, 2:30 PM") label for one instant, used
258
297
  * where a whole window has to fit on a button - the time range picker above
@@ -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
+ }
@@ -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",
@@ -2371,6 +2395,36 @@ export class PermissionHelper {
2371
2395
  isRolePermission: true,
2372
2396
  group: PermissionGroup.Telemetry,
2373
2397
  },
2398
+ {
2399
+ permission: Permission.SecurityAdmin,
2400
+ title: "Security Admin",
2401
+ description:
2402
+ "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.",
2403
+ isAssignableToTenant: true,
2404
+ isAccessControlPermission: false,
2405
+ isRolePermission: true,
2406
+ group: PermissionGroup.Security,
2407
+ },
2408
+ {
2409
+ permission: Permission.SecurityMember,
2410
+ title: "Security Member",
2411
+ description:
2412
+ "Can read security events and threat intelligence, and create, edit, and delete detection rules and threat intel feeds. Cannot configure Google SecOps connections.",
2413
+ isAssignableToTenant: true,
2414
+ isAccessControlPermission: false,
2415
+ isRolePermission: true,
2416
+ group: PermissionGroup.Security,
2417
+ },
2418
+ {
2419
+ permission: Permission.SecurityViewer,
2420
+ title: "Security Viewer",
2421
+ description:
2422
+ "Read-only access to security events, detection rules, threat intelligence feeds, and indicators.",
2423
+ isAssignableToTenant: true,
2424
+ isAccessControlPermission: false,
2425
+ isRolePermission: true,
2426
+ group: PermissionGroup.Security,
2427
+ },
2374
2428
  {
2375
2429
  permission: Permission.SettingsAdmin,
2376
2430
  title: "Settings Admin",
@@ -12341,6 +12395,48 @@ export class PermissionHelper {
12341
12395
  group: PermissionGroup.Telemetry,
12342
12396
  },
12343
12397
 
12398
+ // OID Collection Template Permissions
12399
+ {
12400
+ permission: Permission.CreateNetworkDeviceOidTemplate,
12401
+ title: "Create OID Collection Template",
12402
+ description:
12403
+ "This permission can create OID Collection Templates in this project.",
12404
+ isAssignableToTenant: true,
12405
+ isAccessControlPermission: false,
12406
+ isRolePermission: false,
12407
+ group: PermissionGroup.Telemetry,
12408
+ },
12409
+ {
12410
+ permission: Permission.DeleteNetworkDeviceOidTemplate,
12411
+ title: "Delete OID Collection Template",
12412
+ description:
12413
+ "This permission can delete OID Collection Templates of this project.",
12414
+ isAssignableToTenant: true,
12415
+ isAccessControlPermission: false,
12416
+ isRolePermission: false,
12417
+ group: PermissionGroup.Telemetry,
12418
+ },
12419
+ {
12420
+ permission: Permission.EditNetworkDeviceOidTemplate,
12421
+ title: "Edit OID Collection Template",
12422
+ description:
12423
+ "This permission can edit OID Collection Templates of this project. Editing a template changes what every linked device collects on its next poll.",
12424
+ isAssignableToTenant: true,
12425
+ isAccessControlPermission: false,
12426
+ isRolePermission: false,
12427
+ group: PermissionGroup.Telemetry,
12428
+ },
12429
+ {
12430
+ permission: Permission.ReadNetworkDeviceOidTemplate,
12431
+ title: "Read OID Collection Template",
12432
+ description:
12433
+ "This permission can read OID Collection Templates of this project.",
12434
+ isAssignableToTenant: true,
12435
+ isAccessControlPermission: false,
12436
+ isRolePermission: false,
12437
+ group: PermissionGroup.Telemetry,
12438
+ },
12439
+
12344
12440
  // Podman Host Label Rule Permissions
12345
12441
  {
12346
12442
  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
  }