@oneuptime/common 11.6.1 → 11.7.0

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 (420) hide show
  1. package/Models/AnalyticsModels/Index.ts +4 -0
  2. package/Models/AnalyticsModels/KubernetesCostAllocation.ts +842 -0
  3. package/Models/AnalyticsModels/NetworkFlow.ts +54 -0
  4. package/Models/AnalyticsModels/SloHistory.ts +243 -0
  5. package/Models/DatabaseModels/Index.ts +20 -0
  6. package/Models/DatabaseModels/NetworkDevice.ts +453 -6
  7. package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +7 -6
  8. package/Models/DatabaseModels/NetworkEndpoint.ts +753 -0
  9. package/Models/DatabaseModels/NetworkSite.ts +1155 -0
  10. package/Models/DatabaseModels/NetworkSiteAssignmentRule.ts +517 -0
  11. package/Models/DatabaseModels/NetworkSiteLink.ts +611 -0
  12. package/Models/DatabaseModels/NetworkSiteStatusTimeline.ts +520 -0
  13. package/Models/DatabaseModels/NetworkSiteType.ts +499 -0
  14. package/Models/DatabaseModels/ServiceLevelObjective.ts +1115 -0
  15. package/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.ts +762 -0
  16. package/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.ts +444 -0
  17. package/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.ts +443 -0
  18. package/Server/Infrastructure/Postgres/SchemaMigrations/1784757142154-AddNetworkSiteHierarchyAndEndpoints.ts +359 -0
  19. package/Server/Infrastructure/Postgres/SchemaMigrations/1784897317860-AddNetworkSiteAlerting.ts +48 -0
  20. package/Server/Infrastructure/Postgres/SchemaMigrations/1784970388777-AddNetworkDevicePollingColumns.ts +65 -0
  21. package/Server/Infrastructure/Postgres/SchemaMigrations/1784986826214-AddNetworkSiteTypeTable.ts +88 -0
  22. package/Server/Infrastructure/Postgres/SchemaMigrations/1784987015619-AddServiceLevelObjective.ts +391 -0
  23. package/Server/Infrastructure/Postgres/SchemaMigrations/1785066759532-MigrationName.ts +30 -0
  24. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +12 -0
  25. package/Server/Services/AnalyticsDatabaseService.ts +25 -9
  26. package/Server/Services/Index.ts +24 -0
  27. package/Server/Services/KubernetesCostAllocationService.ts +14 -0
  28. package/Server/Services/MetricService.ts +21 -2
  29. package/Server/Services/MonitorService.ts +22 -0
  30. package/Server/Services/NetworkDeviceService.ts +438 -2
  31. package/Server/Services/NetworkEndpointService.ts +414 -0
  32. package/Server/Services/NetworkSiteAssignmentRuleService.ts +98 -0
  33. package/Server/Services/NetworkSiteLinkService.ts +10 -0
  34. package/Server/Services/NetworkSiteService.ts +1254 -0
  35. package/Server/Services/NetworkSiteStatusTimelineService.ts +10 -0
  36. package/Server/Services/NetworkSiteTypeService.ts +10 -0
  37. package/Server/Services/ProjectService.ts +122 -2
  38. package/Server/Services/ServiceLevelObjectiveBurnRateRuleService.ts +457 -0
  39. package/Server/Services/ServiceLevelObjectiveOwnerTeamService.ts +10 -0
  40. package/Server/Services/ServiceLevelObjectiveOwnerUserService.ts +10 -0
  41. package/Server/Services/ServiceLevelObjectiveService.ts +685 -0
  42. package/Server/Services/SloHistoryService.ts +101 -0
  43. package/Server/Services/UserNotificationSettingService.ts +37 -0
  44. package/Server/Types/AnalyticsDatabase/AggregateBy.ts +9 -0
  45. package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +15 -0
  46. package/Server/Utils/AnalyticsDatabase/Statement.ts +39 -3
  47. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +87 -48
  48. package/Server/Utils/Memory.ts +9 -1
  49. package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +190 -12
  50. package/Server/Utils/Monitor/Data/OuiVendors.json +6920 -0
  51. package/Server/Utils/Monitor/DnsResolutionCache.ts +129 -0
  52. package/Server/Utils/Monitor/MonitorResource.ts +4 -30
  53. package/Server/Utils/Monitor/NetworkDeviceHydrationUtil.ts +214 -39
  54. package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +343 -0
  55. package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +251 -0
  56. package/Server/Utils/Monitor/NetworkInventoryUtil.ts +176 -142
  57. package/Server/Utils/Monitor/OuiLookupUtil.ts +49 -0
  58. package/Server/Utils/Monitor/SnmpInterfaceRateUtil.ts +17 -13
  59. package/Server/Utils/WhatsAppTemplateUtil.ts +7 -3
  60. package/Tests/Models/AnalyticsModels/KubernetesCostAllocation.test.ts +135 -0
  61. package/Tests/Models/NetworkSiteHierarchy.test.ts +134 -0
  62. package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +239 -0
  63. package/Tests/Server/Services/KubernetesCostAllocationAggregate.test.ts +338 -0
  64. package/Tests/Server/Services/MetricServiceAggregate.test.ts +142 -0
  65. package/Tests/Server/Services/NetworkDeviceSiteAssignment.test.ts +484 -0
  66. package/Tests/Server/Services/NetworkEndpointServiceUpsert.test.ts +686 -0
  67. package/Tests/Server/Services/NetworkSiteAssignmentRuleService.test.ts +185 -0
  68. package/Tests/Server/Services/NetworkSiteService.test.ts +1354 -0
  69. package/Tests/Server/Services/ServiceLevelObjectiveBurnRateRuleService.test.ts +1313 -0
  70. package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +1988 -0
  71. package/Tests/Server/Utils/AnalyticsDatabase/Statement.test.ts +22 -0
  72. package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +404 -0
  73. package/Tests/Server/Utils/Encryption.test.ts +70 -0
  74. package/Tests/Server/Utils/FileAttachmentMarkdownUtil.test.ts +225 -0
  75. package/Tests/Server/Utils/JsonWebToken.test.ts +175 -0
  76. package/Tests/Server/Utils/LocalFile.test.ts +258 -0
  77. package/Tests/Server/Utils/Memory.test.ts +213 -0
  78. package/Tests/Server/Utils/Monitor/Criteria/LogMonitorCriteria.test.ts +30 -0
  79. package/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.ts +385 -0
  80. package/Tests/Server/Utils/Monitor/DnsResolutionCache.test.ts +194 -0
  81. package/Tests/Server/Utils/Monitor/NetworkDeviceHydrationUtil.test.ts +155 -0
  82. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +600 -0
  83. package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +151 -124
  84. package/Tests/Server/Utils/Monitor/SnmpInterfaceRateUtil.test.ts +496 -0
  85. package/Tests/Server/Utils/MonitorCriteriaDataExtractor.test.ts +175 -0
  86. package/Tests/Server/Utils/MonitorCriteriaMessageFormatter.test.ts +282 -0
  87. package/Tests/Server/Utils/OuiLookupUtil.test.ts +59 -0
  88. package/Tests/Server/Utils/SeriesResourceLabels.test.ts +117 -0
  89. package/Tests/Server/Utils/StackTraceParser.test.ts +370 -0
  90. package/Tests/Server/Utils/Stream.test.ts +87 -0
  91. package/Tests/Server/Utils/ValidateGlobalProviderProjectTeams.test.ts +221 -0
  92. package/Tests/Server/Utils/WhatsAppTemplateUtil.test.ts +199 -0
  93. package/Tests/Types/Database/CompareOperatorWireSerialization.test.ts +33 -0
  94. package/Tests/Types/Email.test.ts +198 -0
  95. package/Tests/Types/Kubernetes/KubernetesObjectParser.test.ts +177 -0
  96. package/Tests/Types/Log/LogQueryToFilter.test.ts +111 -0
  97. package/Tests/Types/Monitor/MonitorCriteria.test.ts +155 -0
  98. package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +465 -0
  99. package/Tests/Types/Monitor/MonitorStep.test.ts +183 -0
  100. package/Tests/Types/Monitor/MonitorStepNetworkDeviceMonitor.test.ts +141 -1
  101. package/Tests/Types/Monitor/MonitorSteps.test.ts +183 -0
  102. package/Tests/Types/Monitor/MonitorType.test.ts +59 -1
  103. package/Tests/Types/Monitor/NetworkDeviceAlertPack.test.ts +97 -0
  104. package/Tests/Types/Monitor/SnmpEndpointDiscovery.test.ts +151 -0
  105. package/Tests/Types/Monitor/SnmpVendorTemplate.test.ts +110 -6
  106. package/Tests/Types/NetworkSite/DefaultNetworkSiteType.test.ts +129 -0
  107. package/Tests/Types/SerializableObjectDictionary.test.ts +166 -0
  108. package/Tests/Types/Time/RangeStartAndEndDateTime.test.ts +98 -0
  109. package/Tests/Types/WebsiteRequest.test.ts +230 -0
  110. package/Tests/UI/Components/EntityFilterRoundTrip.test.tsx +103 -0
  111. package/Tests/UI/Components/ModelTable/BaseModelTableUrlState.test.tsx +612 -0
  112. package/Tests/UI/Components/ModelTable/FilterDataToQuery.test.ts +275 -0
  113. package/Tests/UI/Utils/LogExport.test.ts +159 -0
  114. package/Tests/UI/Utils/Navigation.test.ts +183 -0
  115. package/Tests/UI/Utils/TableFilterUrlState.test.ts +539 -0
  116. package/Tests/UI/Utils/TableViewUrlState.test.ts +272 -0
  117. package/Tests/Utils/Base64.test.ts +51 -0
  118. package/Tests/Utils/Boolean.test.ts +76 -0
  119. package/Tests/Utils/Crypto.test.ts +48 -0
  120. package/Tests/Utils/Dashboard/DashboardSloComponent.test.ts +259 -0
  121. package/Tests/Utils/Dashboard/ModelQueryVariableInterpolation.test.ts +162 -0
  122. package/Tests/Utils/Enum.test.ts +54 -0
  123. package/Tests/Utils/IpCanonicalUtil.test.ts +85 -0
  124. package/Tests/Utils/Memory.test.ts +44 -0
  125. package/Tests/Utils/Metrics/MetricSeriesFingerprint.test.ts +160 -0
  126. package/Tests/Utils/Monitor/EndpointAttachmentUtil.test.ts +836 -0
  127. package/Tests/Utils/Monitor/MonitorMetricType.test.ts +218 -0
  128. package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +447 -0
  129. package/Tests/Utils/NetworkSite/CidrMatchUtil.test.ts +440 -0
  130. package/Tests/Utils/NetworkSite/MaterializedPathUtil.test.ts +205 -0
  131. package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +221 -0
  132. package/Tests/Utils/NetworkSite/SiteUptimeUtil.test.ts +283 -0
  133. package/Tests/Utils/ObjectUtil.test.ts +30 -0
  134. package/Tests/Utils/Slo/SloBurnRateRuleState.test.ts +124 -0
  135. package/Tests/Utils/Slo/SloDuration.test.ts +148 -0
  136. package/Tests/Utils/Slo/SloHealth.test.ts +334 -0
  137. package/Tests/Utils/Slo/SloStatusColor.test.ts +89 -0
  138. package/Tests/Utils/Slo/SloUtil.test.ts +1980 -0
  139. package/Tests/Utils/Slo/SloWidgetFormat.test.ts +605 -0
  140. package/Tests/Utils/TechStack.test.ts +50 -0
  141. package/Tests/Utils/Traces/CriticalPath.test.ts +178 -0
  142. package/Types/AnalyticsDatabase/AnalyticsTableName.ts +10 -0
  143. package/Types/BaseDatabase/EqualTo.ts +9 -1
  144. package/Types/BaseDatabase/EqualToOrNull.ts +9 -1
  145. package/Types/BaseDatabase/NotEqual.ts +9 -1
  146. package/Types/Dashboard/DashboardComponentType.ts +1 -0
  147. package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +1 -0
  148. package/Types/Dashboard/DashboardComponents/DashboardSloComponent.ts +42 -0
  149. package/Types/Dashboard/DashboardTemplates.ts +214 -0
  150. package/Types/Email/EmailTemplateType.ts +2 -0
  151. package/Types/Kubernetes/KubernetesCostIngest.ts +79 -0
  152. package/Types/Monitor/CriteriaFilter.ts +9 -0
  153. package/Types/Monitor/MonitorStep.ts +5 -8
  154. package/Types/Monitor/MonitorStepNetworkDeviceMonitor.ts +27 -5
  155. package/Types/Monitor/MonitorType.ts +15 -5
  156. package/Types/Monitor/SnmpMonitor/ArpEntry.ts +14 -0
  157. package/Types/Monitor/SnmpMonitor/FdbEntry.ts +18 -0
  158. package/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.ts +10 -3
  159. package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +31 -5
  160. package/Types/Monitor/SnmpMonitor/SnmpMonitorResponse.ts +12 -0
  161. package/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.ts +231 -3
  162. package/Types/NetworkSite/DefaultNetworkSiteType.ts +20 -0
  163. package/Types/NotificationSetting/NotificationSettingEventType.ts +4 -0
  164. package/Types/Permission.ts +449 -0
  165. package/Types/ServiceLevelObjective/SliType.ts +6 -0
  166. package/Types/ServiceLevelObjective/SloMultiMonitorMode.ts +6 -0
  167. package/Types/ServiceLevelObjective/SloStatus.ts +9 -0
  168. package/Types/ServiceLevelObjective/SloWindowType.ts +6 -0
  169. package/Types/Telemetry/ServiceType.ts +1 -0
  170. package/UI/Components/Filters/EntityFilter.tsx +16 -0
  171. package/UI/Components/Filters/FilterViewer.tsx +22 -5
  172. package/UI/Components/List/List.tsx +8 -0
  173. package/UI/Components/ModelTable/BaseModelTable.tsx +309 -106
  174. package/UI/Components/ModelTable/FilterDataToQuery.ts +172 -0
  175. package/UI/Components/Navbar/NavBar.tsx +16 -2
  176. package/UI/Components/Navbar/NavBarMenuModal.tsx +3 -3
  177. package/UI/Utils/Navigation.ts +10 -0
  178. package/UI/Utils/TableFilterUrlState.ts +204 -17
  179. package/UI/Utils/TableViewUrlState.ts +165 -0
  180. package/Utils/Dashboard/Components/DashboardSloComponent.ts +114 -0
  181. package/Utils/Dashboard/Components/Index.ts +7 -0
  182. package/Utils/IpCanonicalUtil.ts +134 -0
  183. package/Utils/Monitor/EndpointAttachmentUtil.ts +508 -0
  184. package/Utils/Monitor/NetworkTopologyUtil.ts +157 -5
  185. package/Utils/NetworkSite/CidrMatchUtil.ts +296 -0
  186. package/Utils/NetworkSite/MaterializedPathUtil.ts +115 -0
  187. package/Utils/NetworkSite/SiteStatusRollupUtil.ts +97 -0
  188. package/Utils/NetworkSite/SiteUptimeUtil.ts +111 -0
  189. package/Utils/Slo/SloBurnRateRuleState.ts +91 -0
  190. package/Utils/Slo/SloDuration.ts +165 -0
  191. package/Utils/Slo/SloEvaluation.ts +22 -0
  192. package/Utils/Slo/SloHealth.ts +302 -0
  193. package/Utils/Slo/SloStatusColor.ts +54 -0
  194. package/Utils/Slo/SloUtil.ts +637 -0
  195. package/Utils/Slo/SloWidgetFormat.ts +383 -0
  196. package/build/dist/Models/AnalyticsModels/Index.js +4 -0
  197. package/build/dist/Models/AnalyticsModels/Index.js.map +1 -1
  198. package/build/dist/Models/AnalyticsModels/KubernetesCostAllocation.js +713 -0
  199. package/build/dist/Models/AnalyticsModels/KubernetesCostAllocation.js.map +1 -0
  200. package/build/dist/Models/AnalyticsModels/NetworkFlow.js +44 -0
  201. package/build/dist/Models/AnalyticsModels/NetworkFlow.js.map +1 -1
  202. package/build/dist/Models/AnalyticsModels/SloHistory.js +218 -0
  203. package/build/dist/Models/AnalyticsModels/SloHistory.js.map +1 -0
  204. package/build/dist/Models/DatabaseModels/Index.js +20 -0
  205. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  206. package/build/dist/Models/DatabaseModels/NetworkDevice.js +458 -6
  207. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  208. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +0 -6
  209. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
  210. package/build/dist/Models/DatabaseModels/NetworkEndpoint.js +779 -0
  211. package/build/dist/Models/DatabaseModels/NetworkEndpoint.js.map +1 -0
  212. package/build/dist/Models/DatabaseModels/NetworkSite.js +1180 -0
  213. package/build/dist/Models/DatabaseModels/NetworkSite.js.map +1 -0
  214. package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js +534 -0
  215. package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js.map +1 -0
  216. package/build/dist/Models/DatabaseModels/NetworkSiteLink.js +629 -0
  217. package/build/dist/Models/DatabaseModels/NetworkSiteLink.js.map +1 -0
  218. package/build/dist/Models/DatabaseModels/NetworkSiteStatusTimeline.js +538 -0
  219. package/build/dist/Models/DatabaseModels/NetworkSiteStatusTimeline.js.map +1 -0
  220. package/build/dist/Models/DatabaseModels/NetworkSiteType.js +522 -0
  221. package/build/dist/Models/DatabaseModels/NetworkSiteType.js.map +1 -0
  222. package/build/dist/Models/DatabaseModels/ServiceLevelObjective.js +1134 -0
  223. package/build/dist/Models/DatabaseModels/ServiceLevelObjective.js.map +1 -0
  224. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.js +769 -0
  225. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.js.map +1 -0
  226. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.js +460 -0
  227. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.js.map +1 -0
  228. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js +459 -0
  229. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js.map +1 -0
  230. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784757142154-AddNetworkSiteHierarchyAndEndpoints.js +130 -0
  231. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784757142154-AddNetworkSiteHierarchyAndEndpoints.js.map +1 -0
  232. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784897317860-AddNetworkSiteAlerting.js +31 -0
  233. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784897317860-AddNetworkSiteAlerting.js.map +1 -0
  234. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784970388777-AddNetworkDevicePollingColumns.js +36 -0
  235. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784970388777-AddNetworkDevicePollingColumns.js.map +1 -0
  236. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784986826214-AddNetworkSiteTypeTable.js +49 -0
  237. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784986826214-AddNetworkSiteTypeTable.js.map +1 -0
  238. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784987015619-AddServiceLevelObjective.js +140 -0
  239. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784987015619-AddServiceLevelObjective.js.map +1 -0
  240. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785066759532-MigrationName.js +21 -0
  241. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785066759532-MigrationName.js.map +1 -0
  242. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +12 -0
  243. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  244. package/build/dist/Server/Services/AnalyticsDatabaseService.js +23 -6
  245. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  246. package/build/dist/Server/Services/Index.js +24 -0
  247. package/build/dist/Server/Services/Index.js.map +1 -1
  248. package/build/dist/Server/Services/KubernetesCostAllocationService.js +12 -0
  249. package/build/dist/Server/Services/KubernetesCostAllocationService.js.map +1 -0
  250. package/build/dist/Server/Services/MetricService.js +21 -3
  251. package/build/dist/Server/Services/MetricService.js.map +1 -1
  252. package/build/dist/Server/Services/MonitorService.js +19 -0
  253. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  254. package/build/dist/Server/Services/NetworkDeviceService.js +351 -1
  255. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  256. package/build/dist/Server/Services/NetworkEndpointService.js +319 -0
  257. package/build/dist/Server/Services/NetworkEndpointService.js.map +1 -0
  258. package/build/dist/Server/Services/NetworkSiteAssignmentRuleService.js +90 -0
  259. package/build/dist/Server/Services/NetworkSiteAssignmentRuleService.js.map +1 -0
  260. package/build/dist/Server/Services/NetworkSiteLinkService.js +9 -0
  261. package/build/dist/Server/Services/NetworkSiteLinkService.js.map +1 -0
  262. package/build/dist/Server/Services/NetworkSiteService.js +1038 -0
  263. package/build/dist/Server/Services/NetworkSiteService.js.map +1 -0
  264. package/build/dist/Server/Services/NetworkSiteStatusTimelineService.js +9 -0
  265. package/build/dist/Server/Services/NetworkSiteStatusTimelineService.js.map +1 -0
  266. package/build/dist/Server/Services/NetworkSiteTypeService.js +9 -0
  267. package/build/dist/Server/Services/NetworkSiteTypeService.js.map +1 -0
  268. package/build/dist/Server/Services/ProjectService.js +98 -2
  269. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  270. package/build/dist/Server/Services/ServiceLevelObjectiveBurnRateRuleService.js +358 -0
  271. package/build/dist/Server/Services/ServiceLevelObjectiveBurnRateRuleService.js.map +1 -0
  272. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerTeamService.js +9 -0
  273. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerTeamService.js.map +1 -0
  274. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerUserService.js +9 -0
  275. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerUserService.js.map +1 -0
  276. package/build/dist/Server/Services/ServiceLevelObjectiveService.js +588 -0
  277. package/build/dist/Server/Services/ServiceLevelObjectiveService.js.map +1 -0
  278. package/build/dist/Server/Services/SloHistoryService.js +77 -0
  279. package/build/dist/Server/Services/SloHistoryService.js.map +1 -0
  280. package/build/dist/Server/Services/UserNotificationSettingService.js +20 -0
  281. package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
  282. package/build/dist/Server/Types/AnalyticsDatabase/AggregateBy.js +9 -0
  283. package/build/dist/Server/Types/AnalyticsDatabase/AggregateBy.js.map +1 -1
  284. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +15 -0
  285. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
  286. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js +31 -0
  287. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js.map +1 -1
  288. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +76 -48
  289. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  290. package/build/dist/Server/Utils/Memory.js +9 -1
  291. package/build/dist/Server/Utils/Memory.js.map +1 -1
  292. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +132 -10
  293. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
  294. package/build/dist/Server/Utils/Monitor/Data/OuiVendors.json +6920 -0
  295. package/build/dist/Server/Utils/Monitor/DnsResolutionCache.js +77 -0
  296. package/build/dist/Server/Utils/Monitor/DnsResolutionCache.js.map +1 -0
  297. package/build/dist/Server/Utils/Monitor/MonitorResource.js +21 -41
  298. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  299. package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js +152 -40
  300. package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js.map +1 -1
  301. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +262 -0
  302. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -0
  303. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +201 -0
  304. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -0
  305. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +152 -120
  306. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
  307. package/build/dist/Server/Utils/Monitor/OuiLookupUtil.js +44 -0
  308. package/build/dist/Server/Utils/Monitor/OuiLookupUtil.js.map +1 -0
  309. package/build/dist/Server/Utils/Monitor/SnmpInterfaceRateUtil.js +10 -10
  310. package/build/dist/Server/Utils/Monitor/SnmpInterfaceRateUtil.js.map +1 -1
  311. package/build/dist/Server/Utils/WhatsAppTemplateUtil.js +5 -0
  312. package/build/dist/Server/Utils/WhatsAppTemplateUtil.js.map +1 -1
  313. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +10 -0
  314. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js.map +1 -1
  315. package/build/dist/Types/BaseDatabase/EqualTo.js +9 -1
  316. package/build/dist/Types/BaseDatabase/EqualTo.js.map +1 -1
  317. package/build/dist/Types/BaseDatabase/EqualToOrNull.js +9 -1
  318. package/build/dist/Types/BaseDatabase/EqualToOrNull.js.map +1 -1
  319. package/build/dist/Types/BaseDatabase/NotEqual.js +9 -1
  320. package/build/dist/Types/BaseDatabase/NotEqual.js.map +1 -1
  321. package/build/dist/Types/Dashboard/DashboardComponentType.js +1 -0
  322. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  323. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +1 -0
  324. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
  325. package/build/dist/Types/Dashboard/DashboardComponents/DashboardSloComponent.js +23 -0
  326. package/build/dist/Types/Dashboard/DashboardComponents/DashboardSloComponent.js.map +1 -0
  327. package/build/dist/Types/Dashboard/DashboardTemplates.js +205 -0
  328. package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
  329. package/build/dist/Types/Email/EmailTemplateType.js +1 -0
  330. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  331. package/build/dist/Types/Kubernetes/KubernetesCostIngest.js +21 -0
  332. package/build/dist/Types/Kubernetes/KubernetesCostIngest.js.map +1 -0
  333. package/build/dist/Types/Monitor/CriteriaFilter.js +1 -0
  334. package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
  335. package/build/dist/Types/Monitor/MonitorStep.js +5 -5
  336. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  337. package/build/dist/Types/Monitor/MonitorStepNetworkDeviceMonitor.js +8 -0
  338. package/build/dist/Types/Monitor/MonitorStepNetworkDeviceMonitor.js.map +1 -1
  339. package/build/dist/Types/Monitor/MonitorType.js +15 -5
  340. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  341. package/build/dist/Types/Monitor/SnmpMonitor/ArpEntry.js +2 -0
  342. package/build/dist/Types/Monitor/SnmpMonitor/ArpEntry.js.map +1 -0
  343. package/build/dist/Types/Monitor/SnmpMonitor/FdbEntry.js +2 -0
  344. package/build/dist/Types/Monitor/SnmpMonitor/FdbEntry.js.map +1 -0
  345. package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js +9 -3
  346. package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js.map +1 -1
  347. package/build/dist/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.js +217 -3
  348. package/build/dist/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.js.map +1 -1
  349. package/build/dist/Types/NetworkSite/DefaultNetworkSiteType.js +21 -0
  350. package/build/dist/Types/NetworkSite/DefaultNetworkSiteType.js.map +1 -0
  351. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js +3 -0
  352. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js.map +1 -1
  353. package/build/dist/Types/Permission.js +409 -0
  354. package/build/dist/Types/Permission.js.map +1 -1
  355. package/build/dist/Types/ServiceLevelObjective/SliType.js +7 -0
  356. package/build/dist/Types/ServiceLevelObjective/SliType.js.map +1 -0
  357. package/build/dist/Types/ServiceLevelObjective/SloMultiMonitorMode.js +7 -0
  358. package/build/dist/Types/ServiceLevelObjective/SloMultiMonitorMode.js.map +1 -0
  359. package/build/dist/Types/ServiceLevelObjective/SloStatus.js +10 -0
  360. package/build/dist/Types/ServiceLevelObjective/SloStatus.js.map +1 -0
  361. package/build/dist/Types/ServiceLevelObjective/SloWindowType.js +7 -0
  362. package/build/dist/Types/ServiceLevelObjective/SloWindowType.js.map +1 -0
  363. package/build/dist/Types/Telemetry/ServiceType.js +1 -0
  364. package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
  365. package/build/dist/UI/Components/Filters/EntityFilter.js +15 -0
  366. package/build/dist/UI/Components/Filters/EntityFilter.js.map +1 -1
  367. package/build/dist/UI/Components/Filters/FilterViewer.js +19 -4
  368. package/build/dist/UI/Components/Filters/FilterViewer.js.map +1 -1
  369. package/build/dist/UI/Components/List/List.js +1 -1
  370. package/build/dist/UI/Components/List/List.js.map +1 -1
  371. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +235 -89
  372. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  373. package/build/dist/UI/Components/ModelTable/FilterDataToQuery.js +96 -0
  374. package/build/dist/UI/Components/ModelTable/FilterDataToQuery.js.map +1 -0
  375. package/build/dist/UI/Components/Navbar/NavBar.js +14 -2
  376. package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
  377. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +3 -2
  378. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
  379. package/build/dist/UI/Utils/Navigation.js +9 -0
  380. package/build/dist/UI/Utils/Navigation.js.map +1 -1
  381. package/build/dist/UI/Utils/TableFilterUrlState.js +159 -15
  382. package/build/dist/UI/Utils/TableFilterUrlState.js.map +1 -1
  383. package/build/dist/UI/Utils/TableViewUrlState.js +103 -0
  384. package/build/dist/UI/Utils/TableViewUrlState.js.map +1 -0
  385. package/build/dist/Utils/Dashboard/Components/DashboardSloComponent.js +93 -0
  386. package/build/dist/Utils/Dashboard/Components/DashboardSloComponent.js.map +1 -0
  387. package/build/dist/Utils/Dashboard/Components/Index.js +4 -0
  388. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  389. package/build/dist/Utils/IpCanonicalUtil.js +110 -0
  390. package/build/dist/Utils/IpCanonicalUtil.js.map +1 -0
  391. package/build/dist/Utils/Monitor/EndpointAttachmentUtil.js +311 -0
  392. package/build/dist/Utils/Monitor/EndpointAttachmentUtil.js.map +1 -0
  393. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +98 -5
  394. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
  395. package/build/dist/Utils/NetworkSite/CidrMatchUtil.js +222 -0
  396. package/build/dist/Utils/NetworkSite/CidrMatchUtil.js.map +1 -0
  397. package/build/dist/Utils/NetworkSite/MaterializedPathUtil.js +89 -0
  398. package/build/dist/Utils/NetworkSite/MaterializedPathUtil.js.map +1 -0
  399. package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +60 -0
  400. package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -0
  401. package/build/dist/Utils/NetworkSite/SiteUptimeUtil.js +76 -0
  402. package/build/dist/Utils/NetworkSite/SiteUptimeUtil.js.map +1 -0
  403. package/build/dist/Utils/Slo/SloBurnRateRuleState.js +35 -0
  404. package/build/dist/Utils/Slo/SloBurnRateRuleState.js.map +1 -0
  405. package/build/dist/Utils/Slo/SloDuration.js +87 -0
  406. package/build/dist/Utils/Slo/SloDuration.js.map +1 -0
  407. package/build/dist/Utils/Slo/SloEvaluation.js +21 -0
  408. package/build/dist/Utils/Slo/SloEvaluation.js.map +1 -0
  409. package/build/dist/Utils/Slo/SloHealth.js +179 -0
  410. package/build/dist/Utils/Slo/SloHealth.js.map +1 -0
  411. package/build/dist/Utils/Slo/SloStatusColor.js +18 -0
  412. package/build/dist/Utils/Slo/SloStatusColor.js.map +1 -0
  413. package/build/dist/Utils/Slo/SloUtil.js +393 -0
  414. package/build/dist/Utils/Slo/SloUtil.js.map +1 -0
  415. package/build/dist/Utils/Slo/SloWidgetFormat.js +174 -0
  416. package/build/dist/Utils/Slo/SloWidgetFormat.js.map +1 -0
  417. package/package.json +2 -2
  418. package/Types/Dashboard/DashboardComponents/Index.ts +0 -7
  419. package/build/dist/Types/Dashboard/DashboardComponents/Index.js +0 -8
  420. package/build/dist/Types/Dashboard/DashboardComponents/Index.js.map +0 -1
@@ -0,0 +1,319 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/NetworkEndpoint";
3
+ import ColumnLength from "../../Types/Database/ColumnLength";
4
+ import LIMIT_MAX from "../../Types/Database/LimitMax";
5
+ import EndpointAttachmentUtil from "../../Utils/Monitor/EndpointAttachmentUtil";
6
+ import OuiLookupUtil from "../Utils/Monitor/OuiLookupUtil";
7
+ import QueryHelper from "../Types/Database/QueryHelper";
8
+ import logger from "../Utils/Logger";
9
+ /*
10
+ * Rows written per statement. Endpoint rows are narrow (12 params each),
11
+ * so 500 keeps a chunk well under Postgres' parameter ceiling while
12
+ * turning a 4096-MAC switch into 9 round trips instead of 4096.
13
+ */
14
+ const UPSERT_BATCH_SIZE = 500;
15
+ /*
16
+ * Hard ceiling on how many MACs one device walk may write. This is the
17
+ * findBy limit too — reading more than we can look up would silently
18
+ * treat known endpoints as new. A switch under a MAC-flood attack (or a
19
+ * misconfigured trunk dumping a whole campus into one FDB) is capped
20
+ * here and logged rather than allowed to monopolise the ingest thread.
21
+ */
22
+ const MAX_ENDPOINTS_PER_WALK = LIMIT_MAX;
23
+ /*
24
+ * Column order used by the INSERT in upsertDiscoveredEndpoints. Keep
25
+ * this and the generated parameter tuples in perfect sync.
26
+ */
27
+ const INSERT_COLUMNS = [
28
+ "projectId",
29
+ "macAddress",
30
+ "ipAddress",
31
+ "vendor",
32
+ "attachedNetworkDeviceId",
33
+ "attachedInterfaceIndex",
34
+ "attachedPortName",
35
+ "vlanId",
36
+ "siteId",
37
+ "firstSeenAt",
38
+ "lastSeenAt",
39
+ "version",
40
+ ];
41
+ /*
42
+ * ShortText columns are 100 chars. Truncating BEFORE the decision is
43
+ * made (rather than at write time) matters twice over: one over-long
44
+ * value can never fail the whole chunk it rides in, and the
45
+ * unchanged-since-last-poll comparison compares what we would store
46
+ * against what is stored, not against the untruncated observation.
47
+ */
48
+ function truncateShortText(value) {
49
+ if (!value) {
50
+ return undefined;
51
+ }
52
+ return value.length > ColumnLength.ShortText
53
+ ? value.substring(0, ColumnLength.ShortText)
54
+ : value;
55
+ }
56
+ export class Service extends DatabaseService {
57
+ constructor() {
58
+ super(Model);
59
+ }
60
+ /*
61
+ * Applies one device walk's endpoint observations to the per-project
62
+ * endpoint inventory. Precedence between switch-FDB attachments and
63
+ * router-ARP sightings lives in EndpointAttachmentUtil.decideUpsert (pure,
64
+ * exhaustively tested); this method only batches the reads and applies
65
+ * the decisions:
66
+ *
67
+ * - one findBy for every observed MAC, then ONE INSERT per 500 new
68
+ * MACs and ONE UPDATE per 500 changed MACs — this runs inline on
69
+ * the probe-ingest request path, so per-MAC round trips are not an
70
+ * option at restaurant-chain scale (thousands of sites x thousands
71
+ * of L2 endpoints),
72
+ * - endpoints that have not moved since the last poll produce no
73
+ * write at all (see ENDPOINT_LAST_SEEN_REFRESH_MS), so a stable
74
+ * switch costs one SELECT and nothing else,
75
+ * - vendor is stamped from the MAC OUI on create only (user-correctable),
76
+ * - siteId follows the attaching device's site whenever an attachment is
77
+ * (re)written and the caller knows the site,
78
+ * - firstSeenAt is set on create, lastSeenAt on every touch that writes.
79
+ */
80
+ async upsertDiscoveredEndpoints(data) {
81
+ var _a, _b, _c;
82
+ // Merge both observation kinds per MAC — an L3 switch yields both.
83
+ const incomingByMac = new Map();
84
+ for (const attachment of data.attachments) {
85
+ incomingByMac.set(attachment.macAddress, {
86
+ macAddress: attachment.macAddress,
87
+ deviceId: data.deviceId.toString(),
88
+ attachment: {
89
+ interfaceIndex: attachment.attachedInterfaceIndex,
90
+ portName: truncateShortText(attachment.attachedPortName),
91
+ vlanId: attachment.vlanId,
92
+ },
93
+ });
94
+ }
95
+ for (const binding of data.ipBindings) {
96
+ const existing = incomingByMac.get(binding.macAddress);
97
+ const ipAddress = truncateShortText(binding.ipAddress);
98
+ if (!ipAddress) {
99
+ continue;
100
+ }
101
+ if (existing) {
102
+ existing.ipBinding = {
103
+ ipAddress: ipAddress,
104
+ routerInterfaceIndex: binding.routerInterfaceIndex,
105
+ };
106
+ }
107
+ else {
108
+ incomingByMac.set(binding.macAddress, {
109
+ macAddress: binding.macAddress,
110
+ deviceId: data.deviceId.toString(),
111
+ ipBinding: {
112
+ ipAddress: ipAddress,
113
+ routerInterfaceIndex: binding.routerInterfaceIndex,
114
+ },
115
+ });
116
+ }
117
+ }
118
+ /*
119
+ * Deterministic order, capped so a pathological FDB dump (or a MAC
120
+ * flood attack on a customer switch) cannot write unbounded rows or
121
+ * exceed the findBy limit.
122
+ */
123
+ const allMacs = Array.from(incomingByMac.keys()).sort();
124
+ const macs = allMacs.slice(0, MAX_ENDPOINTS_PER_WALK);
125
+ if (macs.length === 0) {
126
+ return;
127
+ }
128
+ if (allMacs.length > macs.length) {
129
+ logger.warn(`NetworkEndpointService: device ${data.deviceId.toString()} reported ${allMacs.length} endpoint MACs; capping this walk at ${MAX_ENDPOINTS_PER_WALK}.`);
130
+ }
131
+ const existingRows = await this.findBy({
132
+ query: {
133
+ projectId: data.projectId,
134
+ macAddress: QueryHelper.any(macs),
135
+ },
136
+ select: {
137
+ _id: true,
138
+ macAddress: true,
139
+ attachedNetworkDeviceId: true,
140
+ attachedInterfaceIndex: true,
141
+ attachedPortName: true,
142
+ vlanId: true,
143
+ ipAddress: true,
144
+ siteId: true,
145
+ firstSeenAt: true,
146
+ lastSeenAt: true,
147
+ },
148
+ limit: LIMIT_MAX,
149
+ skip: 0,
150
+ props: {
151
+ isRoot: true,
152
+ },
153
+ });
154
+ const existingByMac = new Map();
155
+ for (const row of existingRows) {
156
+ if (row.macAddress) {
157
+ existingByMac.set(row.macAddress, row);
158
+ }
159
+ }
160
+ const context = {
161
+ now: data.now,
162
+ siteId: (_a = data.deviceSiteId) === null || _a === void 0 ? void 0 : _a.toString(),
163
+ };
164
+ const creates = [];
165
+ const updates = [];
166
+ for (const mac of macs) {
167
+ const incoming = incomingByMac.get(mac);
168
+ const existing = existingByMac.get(mac);
169
+ const decision = EndpointAttachmentUtil.decideUpsert(existing
170
+ ? {
171
+ attachedNetworkDeviceId: (_b = existing.attachedNetworkDeviceId) === null || _b === void 0 ? void 0 : _b.toString(),
172
+ attachedInterfaceIndex: existing.attachedInterfaceIndex,
173
+ attachedPortName: existing.attachedPortName,
174
+ vlanId: existing.vlanId,
175
+ ipAddress: existing.ipAddress,
176
+ siteId: (_c = existing.siteId) === null || _c === void 0 ? void 0 : _c.toString(),
177
+ firstSeenAt: existing.firstSeenAt,
178
+ lastSeenAt: existing.lastSeenAt,
179
+ }
180
+ : null, incoming, context);
181
+ if (decision.action === "create") {
182
+ creates.push({ mac, decision });
183
+ }
184
+ else if (decision.action === "update") {
185
+ updates.push({ mac, decision });
186
+ }
187
+ }
188
+ await this.bulkInsertEndpoints({
189
+ projectId: data.projectId,
190
+ deviceId: data.deviceId,
191
+ deviceSiteId: data.deviceSiteId,
192
+ now: data.now,
193
+ rows: creates,
194
+ });
195
+ await this.bulkUpdateEndpoints({
196
+ projectId: data.projectId,
197
+ deviceId: data.deviceId,
198
+ deviceSiteId: data.deviceSiteId,
199
+ now: data.now,
200
+ rows: updates,
201
+ });
202
+ }
203
+ /*
204
+ * New MACs. Every create-path decision has setAttachment === true (a
205
+ * row with no stored attachment can never be "attached elsewhere"), so
206
+ * the conflict branch can write the attachment unconditionally.
207
+ *
208
+ * ON CONFLICT names the partial unique index on
209
+ * (projectId, macAddress) WHERE "deletedAt" IS NULL — the predicate is
210
+ * required for index inference, and it is what keeps a soft-deleted
211
+ * row from colliding with a rediscovered MAC. The DO UPDATE branch
212
+ * only fires when a concurrent walk created the row between our findBy
213
+ * and this INSERT; it then applies the same semantics the UPDATE path
214
+ * would have, so the observation is never silently dropped.
215
+ *
216
+ * `vendor` is deliberately absent from DO UPDATE SET: it is stamped
217
+ * from the OUI on create and is user-correctable thereafter.
218
+ */
219
+ async bulkInsertEndpoints(data) {
220
+ var _a, _b, _c, _d, _e, _f;
221
+ if (data.rows.length === 0) {
222
+ return;
223
+ }
224
+ for (let i = 0; i < data.rows.length; i += UPSERT_BATCH_SIZE) {
225
+ const chunk = data.rows.slice(i, i + UPSERT_BATCH_SIZE);
226
+ const valueFragments = [];
227
+ const params = [];
228
+ let paramIndex = 1;
229
+ for (const row of chunk) {
230
+ const placeholders = [];
231
+ for (let c = 0; c < INSERT_COLUMNS.length; c++) {
232
+ placeholders.push(`$${paramIndex++}`);
233
+ }
234
+ valueFragments.push(`(${placeholders.join(", ")})`);
235
+ params.push(data.projectId.toString(), row.mac, row.decision.setIpAddress && row.decision.ipAddress
236
+ ? row.decision.ipAddress
237
+ : null, (_a = truncateShortText(OuiLookupUtil.lookupVendor(row.mac))) !== null && _a !== void 0 ? _a : null, data.deviceId.toString(), (_b = row.decision.attachedInterfaceIndex) !== null && _b !== void 0 ? _b : null, (_c = row.decision.attachedPortName) !== null && _c !== void 0 ? _c : null, (_d = row.decision.vlanId) !== null && _d !== void 0 ? _d : null, (_f = (_e = data.deviceSiteId) === null || _e === void 0 ? void 0 : _e.toString()) !== null && _f !== void 0 ? _f : null, data.now, data.now, 0);
238
+ }
239
+ const sql = `
240
+ INSERT INTO "NetworkEndpoint" (
241
+ "projectId", "macAddress", "ipAddress", "vendor",
242
+ "attachedNetworkDeviceId", "attachedInterfaceIndex",
243
+ "attachedPortName", "vlanId", "siteId",
244
+ "firstSeenAt", "lastSeenAt", "version"
245
+ )
246
+ VALUES ${valueFragments.join(", ")}
247
+ ON CONFLICT ("projectId", "macAddress") WHERE "deletedAt" IS NULL
248
+ DO UPDATE SET
249
+ "attachedNetworkDeviceId" = EXCLUDED."attachedNetworkDeviceId",
250
+ "attachedInterfaceIndex" = COALESCE(EXCLUDED."attachedInterfaceIndex", "NetworkEndpoint"."attachedInterfaceIndex"),
251
+ "attachedPortName" = COALESCE(EXCLUDED."attachedPortName", "NetworkEndpoint"."attachedPortName"),
252
+ "vlanId" = COALESCE(EXCLUDED."vlanId", "NetworkEndpoint"."vlanId"),
253
+ "siteId" = COALESCE(EXCLUDED."siteId", "NetworkEndpoint"."siteId"),
254
+ "ipAddress" = COALESCE(EXCLUDED."ipAddress", "NetworkEndpoint"."ipAddress"),
255
+ "firstSeenAt" = COALESCE("NetworkEndpoint"."firstSeenAt", EXCLUDED."firstSeenAt"),
256
+ "lastSeenAt" = EXCLUDED."lastSeenAt",
257
+ "updatedAt" = now()
258
+ `;
259
+ await this.getRepository().manager.query(sql, params);
260
+ }
261
+ }
262
+ /*
263
+ * Known MACs whose observation actually changed something. One
264
+ * UPDATE ... FROM (VALUES ...) per chunk, joined on the same
265
+ * (projectId, macAddress) key the unique index covers, with
266
+ * "deletedAt" IS NULL so a soft-deleted row is never resurrected.
267
+ *
268
+ * Per-row conditionality rides in the VALUES tuple: `setAttachment`
269
+ * gates the whole attachment group, and NULL means "the walk did not
270
+ * report one" — COALESCE keeps whatever is stored, which is the
271
+ * "undefined never clears a stored value" rule from decideUpsert.
272
+ */
273
+ async bulkUpdateEndpoints(data) {
274
+ var _a, _b, _c, _d, _e;
275
+ if (data.rows.length === 0) {
276
+ return;
277
+ }
278
+ for (let i = 0; i < data.rows.length; i += UPSERT_BATCH_SIZE) {
279
+ const chunk = data.rows.slice(i, i + UPSERT_BATCH_SIZE);
280
+ const valueFragments = [];
281
+ const params = [data.projectId.toString()];
282
+ let paramIndex = 2;
283
+ for (const row of chunk) {
284
+ valueFragments.push(`($${paramIndex++}::character varying, $${paramIndex++}::boolean, $${paramIndex++}::uuid, $${paramIndex++}::integer, $${paramIndex++}::character varying, $${paramIndex++}::integer, $${paramIndex++}::uuid, $${paramIndex++}::character varying, $${paramIndex++}::timestamptz)`);
285
+ params.push(row.mac, row.decision.setAttachment, row.decision.setAttachment ? data.deviceId.toString() : null, row.decision.setAttachment
286
+ ? (_a = row.decision.attachedInterfaceIndex) !== null && _a !== void 0 ? _a : null
287
+ : null, row.decision.setAttachment
288
+ ? (_b = row.decision.attachedPortName) !== null && _b !== void 0 ? _b : null
289
+ : null, row.decision.setAttachment ? (_c = row.decision.vlanId) !== null && _c !== void 0 ? _c : null : null, row.decision.setAttachment
290
+ ? (_e = (_d = data.deviceSiteId) === null || _d === void 0 ? void 0 : _d.toString()) !== null && _e !== void 0 ? _e : null
291
+ : null, row.decision.setIpAddress && row.decision.ipAddress
292
+ ? row.decision.ipAddress
293
+ : null, data.now);
294
+ }
295
+ const sql = `
296
+ UPDATE "NetworkEndpoint" AS e
297
+ SET
298
+ "attachedNetworkDeviceId" = CASE WHEN v."setAttachment" THEN v."deviceId" ELSE e."attachedNetworkDeviceId" END,
299
+ "attachedInterfaceIndex" = CASE WHEN v."setAttachment" THEN COALESCE(v."attachedInterfaceIndex", e."attachedInterfaceIndex") ELSE e."attachedInterfaceIndex" END,
300
+ "attachedPortName" = CASE WHEN v."setAttachment" THEN COALESCE(v."attachedPortName", e."attachedPortName") ELSE e."attachedPortName" END,
301
+ "vlanId" = CASE WHEN v."setAttachment" THEN COALESCE(v."vlanId", e."vlanId") ELSE e."vlanId" END,
302
+ "siteId" = CASE WHEN v."setAttachment" THEN COALESCE(v."siteId", e."siteId") ELSE e."siteId" END,
303
+ "ipAddress" = COALESCE(v."ipAddress", e."ipAddress"),
304
+ "firstSeenAt" = COALESCE(e."firstSeenAt", v."lastSeenAt"),
305
+ "lastSeenAt" = v."lastSeenAt",
306
+ "updatedAt" = now()
307
+ FROM (VALUES ${valueFragments.join(", ")})
308
+ AS v("macAddress", "setAttachment", "deviceId", "attachedInterfaceIndex", "attachedPortName", "vlanId", "siteId", "ipAddress", "lastSeenAt")
309
+ WHERE
310
+ e."projectId" = $1
311
+ AND e."macAddress" = v."macAddress"
312
+ AND e."deletedAt" IS NULL
313
+ `;
314
+ await this.getRepository().manager.query(sql, params);
315
+ }
316
+ }
317
+ }
318
+ export default new Service();
319
+ //# sourceMappingURL=NetworkEndpointService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetworkEndpointService.js","sourceRoot":"","sources":["../../../../Server/Services/NetworkEndpointService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import DatabaseService from "./DatabaseService";
11
+ import Model from "../../Models/DatabaseModels/NetworkSiteAssignmentRule";
12
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
13
+ import LIMIT_MAX from "../../Types/Database/LimitMax";
14
+ import BadDataException from "../../Types/Exception/BadDataException";
15
+ import CidrMatchUtil from "../../Utils/NetworkSite/CidrMatchUtil";
16
+ export class Service extends DatabaseService {
17
+ constructor() {
18
+ super(Model);
19
+ }
20
+ /*
21
+ * A rule with neither criterion would match nothing (or, worse, read as
22
+ * "match everything" to a future maintainer) - reject it at write time.
23
+ */
24
+ async onBeforeCreate(createBy) {
25
+ this.validateCriteria({
26
+ subnetCidr: createBy.data.subnetCidr,
27
+ hostnamePattern: createBy.data.hostnamePattern,
28
+ });
29
+ return { createBy, carryForward: null };
30
+ }
31
+ async onBeforeUpdate(updateBy) {
32
+ const dataKeys = Object.keys(updateBy.data || {});
33
+ if (!dataKeys.includes("subnetCidr") &&
34
+ !dataKeys.includes("hostnamePattern")) {
35
+ return { updateBy, carryForward: null };
36
+ }
37
+ /*
38
+ * The update may clear one criterion while the other only exists on the
39
+ * stored row, so validate the RESULTING state of every matched row.
40
+ */
41
+ const existingRules = await this.findBy({
42
+ query: updateBy.query,
43
+ select: {
44
+ _id: true,
45
+ subnetCidr: true,
46
+ hostnamePattern: true,
47
+ },
48
+ limit: LIMIT_MAX,
49
+ skip: 0,
50
+ props: {
51
+ isRoot: true,
52
+ },
53
+ });
54
+ for (const existingRule of existingRules) {
55
+ this.validateCriteria({
56
+ subnetCidr: dataKeys.includes("subnetCidr")
57
+ ? updateBy.data["subnetCidr"]
58
+ : existingRule.subnetCidr,
59
+ hostnamePattern: dataKeys.includes("hostnamePattern")
60
+ ? updateBy.data["hostnamePattern"]
61
+ : existingRule.hostnamePattern,
62
+ });
63
+ }
64
+ return { updateBy, carryForward: null };
65
+ }
66
+ validateCriteria(data) {
67
+ const subnetCidr = (data.subnetCidr || "").trim();
68
+ const hostnamePattern = (data.hostnamePattern || "").trim();
69
+ if (!subnetCidr && !hostnamePattern) {
70
+ throw new BadDataException("At least one of Subnet CIDR or Hostname Pattern is required.");
71
+ }
72
+ if (subnetCidr && !CidrMatchUtil.isValidCidr(subnetCidr)) {
73
+ throw new BadDataException(`${subnetCidr} is not a valid IPv4 CIDR (expected e.g. 10.0.0.0/24).`);
74
+ }
75
+ }
76
+ }
77
+ __decorate([
78
+ CaptureSpan(),
79
+ __metadata("design:type", Function),
80
+ __metadata("design:paramtypes", [Object]),
81
+ __metadata("design:returntype", Promise)
82
+ ], Service.prototype, "onBeforeCreate", null);
83
+ __decorate([
84
+ CaptureSpan(),
85
+ __metadata("design:type", Function),
86
+ __metadata("design:paramtypes", [Object]),
87
+ __metadata("design:returntype", Promise)
88
+ ], Service.prototype, "onBeforeUpdate", null);
89
+ export default new Service();
90
+ //# sourceMappingURL=NetworkSiteAssignmentRuleService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetworkSiteAssignmentRuleService.js","sourceRoot":"","sources":["../../../../Server/Services/NetworkSiteAssignmentRuleService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/NetworkSiteLink";
3
+ export class Service extends DatabaseService {
4
+ constructor() {
5
+ super(Model);
6
+ }
7
+ }
8
+ export default new Service();
9
+ //# sourceMappingURL=NetworkSiteLinkService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetworkSiteLinkService.js","sourceRoot":"","sources":["../../../../Server/Services/NetworkSiteLinkService.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,6CAA6C,CAAC;AAEhE,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IACjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;CACF;AAED,eAAe,IAAI,OAAO,EAAE,CAAC"}