@oneuptime/common 11.6.0 → 11.6.2

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 (427) hide show
  1. package/Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel.ts +41 -24
  2. package/Models/AnalyticsModels/Index.ts +4 -0
  3. package/Models/AnalyticsModels/KubernetesCostAllocation.ts +842 -0
  4. package/Models/AnalyticsModels/MetricBaselineHourly.ts +2 -0
  5. package/Models/AnalyticsModels/MetricItemAggMV1m.ts +5 -2
  6. package/Models/AnalyticsModels/MetricItemAggMV1mByContainer.ts +5 -2
  7. package/Models/AnalyticsModels/MetricItemAggMV1mByHostV2.ts +5 -2
  8. package/Models/AnalyticsModels/MetricItemAggMV1mByK8sCluster.ts +5 -2
  9. package/Models/AnalyticsModels/MetricItemAggMV1mByService.ts +5 -2
  10. package/Models/AnalyticsModels/NetworkFlow.ts +54 -0
  11. package/Models/AnalyticsModels/SloHistory.ts +240 -0
  12. package/Models/DatabaseModels/Index.ts +20 -0
  13. package/Models/DatabaseModels/NetworkDevice.ts +453 -6
  14. package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +7 -6
  15. package/Models/DatabaseModels/NetworkEndpoint.ts +753 -0
  16. package/Models/DatabaseModels/NetworkSite.ts +1155 -0
  17. package/Models/DatabaseModels/NetworkSiteAssignmentRule.ts +517 -0
  18. package/Models/DatabaseModels/NetworkSiteLink.ts +611 -0
  19. package/Models/DatabaseModels/NetworkSiteStatusTimeline.ts +520 -0
  20. package/Models/DatabaseModels/NetworkSiteType.ts +499 -0
  21. package/Models/DatabaseModels/ServiceLevelObjective.ts +1106 -0
  22. package/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.ts +762 -0
  23. package/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.ts +444 -0
  24. package/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.ts +443 -0
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/1784757142154-AddNetworkSiteHierarchyAndEndpoints.ts +359 -0
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/1784897317860-AddNetworkSiteAlerting.ts +48 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/1784970388777-AddNetworkDevicePollingColumns.ts +65 -0
  28. package/Server/Infrastructure/Postgres/SchemaMigrations/1784986826214-AddNetworkSiteTypeTable.ts +88 -0
  29. package/Server/Infrastructure/Postgres/SchemaMigrations/1784987015619-AddServiceLevelObjective.ts +391 -0
  30. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
  31. package/Server/Services/AnalyticsDatabaseService.ts +38 -10
  32. package/Server/Services/Index.ts +24 -0
  33. package/Server/Services/KubernetesCostAllocationService.ts +14 -0
  34. package/Server/Services/MetricService.ts +21 -2
  35. package/Server/Services/MonitorService.ts +22 -0
  36. package/Server/Services/NetworkDeviceService.ts +438 -2
  37. package/Server/Services/NetworkEndpointService.ts +414 -0
  38. package/Server/Services/NetworkSiteAssignmentRuleService.ts +98 -0
  39. package/Server/Services/NetworkSiteLinkService.ts +10 -0
  40. package/Server/Services/NetworkSiteService.ts +1254 -0
  41. package/Server/Services/NetworkSiteStatusTimelineService.ts +10 -0
  42. package/Server/Services/NetworkSiteTypeService.ts +10 -0
  43. package/Server/Services/ProjectService.ts +122 -2
  44. package/Server/Services/ServiceLevelObjectiveBurnRateRuleService.ts +457 -0
  45. package/Server/Services/ServiceLevelObjectiveOwnerTeamService.ts +10 -0
  46. package/Server/Services/ServiceLevelObjectiveOwnerUserService.ts +10 -0
  47. package/Server/Services/ServiceLevelObjectiveService.ts +677 -0
  48. package/Server/Services/SloHistoryService.ts +101 -0
  49. package/Server/Services/UserNotificationSettingService.ts +37 -0
  50. package/Server/Types/AnalyticsDatabase/AggregateBy.ts +9 -0
  51. package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +15 -0
  52. package/Server/Utils/AnalyticsDatabase/Statement.ts +39 -3
  53. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +128 -52
  54. package/Server/Utils/Memory.ts +9 -1
  55. package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +190 -12
  56. package/Server/Utils/Monitor/Data/OuiVendors.json +6920 -0
  57. package/Server/Utils/Monitor/DnsResolutionCache.ts +129 -0
  58. package/Server/Utils/Monitor/MonitorResource.ts +4 -30
  59. package/Server/Utils/Monitor/NetworkDeviceHydrationUtil.ts +214 -39
  60. package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +343 -0
  61. package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +251 -0
  62. package/Server/Utils/Monitor/NetworkInventoryUtil.ts +176 -142
  63. package/Server/Utils/Monitor/OuiLookupUtil.ts +49 -0
  64. package/Server/Utils/Monitor/SnmpInterfaceRateUtil.ts +17 -13
  65. package/Server/Utils/WhatsAppTemplateUtil.ts +7 -3
  66. package/Tests/Models/AnalyticsModels/AnalyticsBaseModel.test.ts +122 -0
  67. package/Tests/Models/AnalyticsModels/KubernetesCostAllocation.test.ts +135 -0
  68. package/Tests/Models/NetworkSiteHierarchy.test.ts +134 -0
  69. package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +239 -0
  70. package/Tests/Server/Services/KubernetesCostAllocationAggregate.test.ts +338 -0
  71. package/Tests/Server/Services/MetricServiceAggregate.test.ts +142 -0
  72. package/Tests/Server/Services/NetworkDeviceSiteAssignment.test.ts +484 -0
  73. package/Tests/Server/Services/NetworkEndpointServiceUpsert.test.ts +686 -0
  74. package/Tests/Server/Services/NetworkSiteAssignmentRuleService.test.ts +185 -0
  75. package/Tests/Server/Services/NetworkSiteService.test.ts +1354 -0
  76. package/Tests/Server/Services/ServiceLevelObjectiveBurnRateRuleService.test.ts +1313 -0
  77. package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +1988 -0
  78. package/Tests/Server/Utils/AnalyticsDatabase/ClusterAwareSchema.test.ts +164 -3
  79. package/Tests/Server/Utils/AnalyticsDatabase/Statement.test.ts +22 -0
  80. package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +503 -0
  81. package/Tests/Server/Utils/Encryption.test.ts +70 -0
  82. package/Tests/Server/Utils/FileAttachmentMarkdownUtil.test.ts +225 -0
  83. package/Tests/Server/Utils/JsonWebToken.test.ts +175 -0
  84. package/Tests/Server/Utils/LocalFile.test.ts +258 -0
  85. package/Tests/Server/Utils/Memory.test.ts +213 -0
  86. package/Tests/Server/Utils/Monitor/Criteria/LogMonitorCriteria.test.ts +30 -0
  87. package/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.ts +385 -0
  88. package/Tests/Server/Utils/Monitor/DnsResolutionCache.test.ts +194 -0
  89. package/Tests/Server/Utils/Monitor/NetworkDeviceHydrationUtil.test.ts +155 -0
  90. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +600 -0
  91. package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +151 -124
  92. package/Tests/Server/Utils/Monitor/SnmpInterfaceRateUtil.test.ts +496 -0
  93. package/Tests/Server/Utils/MonitorCriteriaDataExtractor.test.ts +175 -0
  94. package/Tests/Server/Utils/MonitorCriteriaMessageFormatter.test.ts +282 -0
  95. package/Tests/Server/Utils/OuiLookupUtil.test.ts +59 -0
  96. package/Tests/Server/Utils/SeriesResourceLabels.test.ts +117 -0
  97. package/Tests/Server/Utils/StackTraceParser.test.ts +370 -0
  98. package/Tests/Server/Utils/Stream.test.ts +87 -0
  99. package/Tests/Server/Utils/ValidateGlobalProviderProjectTeams.test.ts +221 -0
  100. package/Tests/Server/Utils/WhatsAppTemplateUtil.test.ts +199 -0
  101. package/Tests/Types/Database/CompareOperatorWireSerialization.test.ts +33 -0
  102. package/Tests/Types/Email.test.ts +198 -0
  103. package/Tests/Types/HashCode.test.ts +41 -0
  104. package/Tests/Types/Kubernetes/KubernetesObjectParser.test.ts +177 -0
  105. package/Tests/Types/Log/LogQueryParser.test.ts +186 -0
  106. package/Tests/Types/Log/LogQueryToFilter.test.ts +111 -0
  107. package/Tests/Types/Monitor/MonitorStepNetworkDeviceMonitor.test.ts +141 -1
  108. package/Tests/Types/Monitor/MonitorType.test.ts +59 -1
  109. package/Tests/Types/Monitor/NetworkDeviceAlertPack.test.ts +97 -0
  110. package/Tests/Types/Monitor/SnmpEndpointDiscovery.test.ts +151 -0
  111. package/Tests/Types/Monitor/SnmpVendorTemplate.test.ts +110 -6
  112. package/Tests/Types/NetworkSite/DefaultNetworkSiteType.test.ts +129 -0
  113. package/Tests/Types/SerializableObjectDictionary.test.ts +166 -0
  114. package/Tests/Types/Time/RangeStartAndEndDateTime.test.ts +98 -0
  115. package/Tests/Types/WebsiteRequest.test.ts +230 -0
  116. package/Tests/UI/Components/EntityFilterRoundTrip.test.tsx +103 -0
  117. package/Tests/UI/Components/ModelTable/BaseModelTableUrlState.test.tsx +612 -0
  118. package/Tests/UI/Components/ModelTable/FilterDataToQuery.test.ts +275 -0
  119. package/Tests/UI/Utils/LogExport.test.ts +159 -0
  120. package/Tests/UI/Utils/Navigation.test.ts +183 -0
  121. package/Tests/UI/Utils/TableFilterUrlState.test.ts +539 -0
  122. package/Tests/UI/Utils/TableViewUrlState.test.ts +272 -0
  123. package/Tests/Utils/Base64.test.ts +51 -0
  124. package/Tests/Utils/Boolean.test.ts +76 -0
  125. package/Tests/Utils/Crypto.test.ts +48 -0
  126. package/Tests/Utils/Dashboard/DashboardSloComponent.test.ts +259 -0
  127. package/Tests/Utils/Dashboard/ModelQueryVariableInterpolation.test.ts +162 -0
  128. package/Tests/Utils/Dashboard/VariableInterpolation.test.ts +197 -0
  129. package/Tests/Utils/Enum.test.ts +54 -0
  130. package/Tests/Utils/IpCanonicalUtil.test.ts +85 -0
  131. package/Tests/Utils/Metrics/MetricSeriesFingerprint.test.ts +160 -0
  132. package/Tests/Utils/Monitor/EndpointAttachmentUtil.test.ts +836 -0
  133. package/Tests/Utils/Monitor/MonitorMetricType.test.ts +218 -0
  134. package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +447 -0
  135. package/Tests/Utils/NetworkSite/CidrMatchUtil.test.ts +440 -0
  136. package/Tests/Utils/NetworkSite/MaterializedPathUtil.test.ts +205 -0
  137. package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +221 -0
  138. package/Tests/Utils/NetworkSite/SiteUptimeUtil.test.ts +283 -0
  139. package/Tests/Utils/ObjectUtil.test.ts +30 -0
  140. package/Tests/Utils/Slo/SloStatusColor.test.ts +89 -0
  141. package/Tests/Utils/Slo/SloUtil.test.ts +1980 -0
  142. package/Tests/Utils/Slo/SloWidgetFormat.test.ts +605 -0
  143. package/Tests/Utils/TechStack.test.ts +50 -0
  144. package/Tests/Utils/Traces/CriticalPath.test.ts +178 -0
  145. package/Tests/Utils/ValueFormatter.test.ts +305 -0
  146. package/Types/AnalyticsDatabase/AnalyticsTableName.ts +10 -0
  147. package/Types/AnalyticsDatabase/TableColumn.ts +23 -0
  148. package/Types/BaseDatabase/EqualTo.ts +9 -1
  149. package/Types/BaseDatabase/EqualToOrNull.ts +9 -1
  150. package/Types/BaseDatabase/NotEqual.ts +9 -1
  151. package/Types/Dashboard/DashboardComponentType.ts +1 -0
  152. package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +1 -0
  153. package/Types/Dashboard/DashboardComponents/DashboardSloComponent.ts +42 -0
  154. package/Types/Dashboard/DashboardTemplates.ts +214 -0
  155. package/Types/Email/EmailTemplateType.ts +2 -0
  156. package/Types/Kubernetes/KubernetesCostIngest.ts +79 -0
  157. package/Types/Monitor/CriteriaFilter.ts +9 -0
  158. package/Types/Monitor/MonitorStep.ts +5 -8
  159. package/Types/Monitor/MonitorStepNetworkDeviceMonitor.ts +27 -5
  160. package/Types/Monitor/MonitorType.ts +15 -5
  161. package/Types/Monitor/SnmpMonitor/ArpEntry.ts +14 -0
  162. package/Types/Monitor/SnmpMonitor/FdbEntry.ts +18 -0
  163. package/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.ts +10 -3
  164. package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +31 -5
  165. package/Types/Monitor/SnmpMonitor/SnmpMonitorResponse.ts +12 -0
  166. package/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.ts +231 -3
  167. package/Types/NetworkSite/DefaultNetworkSiteType.ts +20 -0
  168. package/Types/NotificationSetting/NotificationSettingEventType.ts +4 -0
  169. package/Types/Permission.ts +449 -0
  170. package/Types/ServiceLevelObjective/SliType.ts +6 -0
  171. package/Types/ServiceLevelObjective/SloMultiMonitorMode.ts +6 -0
  172. package/Types/ServiceLevelObjective/SloStatus.ts +9 -0
  173. package/Types/ServiceLevelObjective/SloWindowType.ts +6 -0
  174. package/Types/Telemetry/ServiceType.ts +1 -0
  175. package/UI/Components/Filters/EntityFilter.tsx +16 -0
  176. package/UI/Components/Filters/FilterViewer.tsx +22 -5
  177. package/UI/Components/List/List.tsx +8 -0
  178. package/UI/Components/ModelTable/BaseModelTable.tsx +309 -106
  179. package/UI/Components/ModelTable/FilterDataToQuery.ts +172 -0
  180. package/UI/Components/Navbar/NavBar.tsx +16 -2
  181. package/UI/Components/Navbar/NavBarMenuModal.tsx +3 -3
  182. package/UI/Utils/Navigation.ts +10 -0
  183. package/UI/Utils/TableFilterUrlState.ts +204 -17
  184. package/UI/Utils/TableViewUrlState.ts +165 -0
  185. package/Utils/Dashboard/Components/DashboardSloComponent.ts +114 -0
  186. package/Utils/Dashboard/Components/Index.ts +7 -0
  187. package/Utils/IpCanonicalUtil.ts +134 -0
  188. package/Utils/Monitor/EndpointAttachmentUtil.ts +508 -0
  189. package/Utils/Monitor/NetworkTopologyUtil.ts +157 -5
  190. package/Utils/NetworkSite/CidrMatchUtil.ts +296 -0
  191. package/Utils/NetworkSite/MaterializedPathUtil.ts +115 -0
  192. package/Utils/NetworkSite/SiteStatusRollupUtil.ts +97 -0
  193. package/Utils/NetworkSite/SiteUptimeUtil.ts +111 -0
  194. package/Utils/Slo/SloStatusColor.ts +54 -0
  195. package/Utils/Slo/SloUtil.ts +637 -0
  196. package/Utils/Slo/SloWidgetFormat.ts +383 -0
  197. package/build/dist/Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel.js +25 -20
  198. package/build/dist/Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel.js.map +1 -1
  199. package/build/dist/Models/AnalyticsModels/Index.js +4 -0
  200. package/build/dist/Models/AnalyticsModels/Index.js.map +1 -1
  201. package/build/dist/Models/AnalyticsModels/KubernetesCostAllocation.js +713 -0
  202. package/build/dist/Models/AnalyticsModels/KubernetesCostAllocation.js.map +1 -0
  203. package/build/dist/Models/AnalyticsModels/MetricBaselineHourly.js +2 -0
  204. package/build/dist/Models/AnalyticsModels/MetricBaselineHourly.js.map +1 -1
  205. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1m.js +5 -2
  206. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1m.js.map +1 -1
  207. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByContainer.js +5 -2
  208. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByContainer.js.map +1 -1
  209. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByHostV2.js +5 -2
  210. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByHostV2.js.map +1 -1
  211. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByK8sCluster.js +5 -2
  212. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByK8sCluster.js.map +1 -1
  213. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByService.js +5 -2
  214. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByService.js.map +1 -1
  215. package/build/dist/Models/AnalyticsModels/NetworkFlow.js +44 -0
  216. package/build/dist/Models/AnalyticsModels/NetworkFlow.js.map +1 -1
  217. package/build/dist/Models/AnalyticsModels/SloHistory.js +215 -0
  218. package/build/dist/Models/AnalyticsModels/SloHistory.js.map +1 -0
  219. package/build/dist/Models/DatabaseModels/Index.js +20 -0
  220. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  221. package/build/dist/Models/DatabaseModels/NetworkDevice.js +458 -6
  222. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  223. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +0 -6
  224. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
  225. package/build/dist/Models/DatabaseModels/NetworkEndpoint.js +779 -0
  226. package/build/dist/Models/DatabaseModels/NetworkEndpoint.js.map +1 -0
  227. package/build/dist/Models/DatabaseModels/NetworkSite.js +1180 -0
  228. package/build/dist/Models/DatabaseModels/NetworkSite.js.map +1 -0
  229. package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js +534 -0
  230. package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js.map +1 -0
  231. package/build/dist/Models/DatabaseModels/NetworkSiteLink.js +629 -0
  232. package/build/dist/Models/DatabaseModels/NetworkSiteLink.js.map +1 -0
  233. package/build/dist/Models/DatabaseModels/NetworkSiteStatusTimeline.js +538 -0
  234. package/build/dist/Models/DatabaseModels/NetworkSiteStatusTimeline.js.map +1 -0
  235. package/build/dist/Models/DatabaseModels/NetworkSiteType.js +522 -0
  236. package/build/dist/Models/DatabaseModels/NetworkSiteType.js.map +1 -0
  237. package/build/dist/Models/DatabaseModels/ServiceLevelObjective.js +1124 -0
  238. package/build/dist/Models/DatabaseModels/ServiceLevelObjective.js.map +1 -0
  239. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.js +769 -0
  240. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.js.map +1 -0
  241. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.js +460 -0
  242. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.js.map +1 -0
  243. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js +459 -0
  244. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js.map +1 -0
  245. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784757142154-AddNetworkSiteHierarchyAndEndpoints.js +130 -0
  246. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784757142154-AddNetworkSiteHierarchyAndEndpoints.js.map +1 -0
  247. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784897317860-AddNetworkSiteAlerting.js +31 -0
  248. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784897317860-AddNetworkSiteAlerting.js.map +1 -0
  249. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784970388777-AddNetworkDevicePollingColumns.js +36 -0
  250. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784970388777-AddNetworkDevicePollingColumns.js.map +1 -0
  251. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784986826214-AddNetworkSiteTypeTable.js +49 -0
  252. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784986826214-AddNetworkSiteTypeTable.js.map +1 -0
  253. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784987015619-AddServiceLevelObjective.js +140 -0
  254. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784987015619-AddServiceLevelObjective.js.map +1 -0
  255. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
  256. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  257. package/build/dist/Server/Services/AnalyticsDatabaseService.js +32 -7
  258. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  259. package/build/dist/Server/Services/Index.js +24 -0
  260. package/build/dist/Server/Services/Index.js.map +1 -1
  261. package/build/dist/Server/Services/KubernetesCostAllocationService.js +12 -0
  262. package/build/dist/Server/Services/KubernetesCostAllocationService.js.map +1 -0
  263. package/build/dist/Server/Services/MetricService.js +21 -3
  264. package/build/dist/Server/Services/MetricService.js.map +1 -1
  265. package/build/dist/Server/Services/MonitorService.js +19 -0
  266. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  267. package/build/dist/Server/Services/NetworkDeviceService.js +351 -1
  268. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  269. package/build/dist/Server/Services/NetworkEndpointService.js +319 -0
  270. package/build/dist/Server/Services/NetworkEndpointService.js.map +1 -0
  271. package/build/dist/Server/Services/NetworkSiteAssignmentRuleService.js +90 -0
  272. package/build/dist/Server/Services/NetworkSiteAssignmentRuleService.js.map +1 -0
  273. package/build/dist/Server/Services/NetworkSiteLinkService.js +9 -0
  274. package/build/dist/Server/Services/NetworkSiteLinkService.js.map +1 -0
  275. package/build/dist/Server/Services/NetworkSiteService.js +1038 -0
  276. package/build/dist/Server/Services/NetworkSiteService.js.map +1 -0
  277. package/build/dist/Server/Services/NetworkSiteStatusTimelineService.js +9 -0
  278. package/build/dist/Server/Services/NetworkSiteStatusTimelineService.js.map +1 -0
  279. package/build/dist/Server/Services/NetworkSiteTypeService.js +9 -0
  280. package/build/dist/Server/Services/NetworkSiteTypeService.js.map +1 -0
  281. package/build/dist/Server/Services/ProjectService.js +98 -2
  282. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  283. package/build/dist/Server/Services/ServiceLevelObjectiveBurnRateRuleService.js +358 -0
  284. package/build/dist/Server/Services/ServiceLevelObjectiveBurnRateRuleService.js.map +1 -0
  285. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerTeamService.js +9 -0
  286. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerTeamService.js.map +1 -0
  287. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerUserService.js +9 -0
  288. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerUserService.js.map +1 -0
  289. package/build/dist/Server/Services/ServiceLevelObjectiveService.js +582 -0
  290. package/build/dist/Server/Services/ServiceLevelObjectiveService.js.map +1 -0
  291. package/build/dist/Server/Services/SloHistoryService.js +77 -0
  292. package/build/dist/Server/Services/SloHistoryService.js.map +1 -0
  293. package/build/dist/Server/Services/UserNotificationSettingService.js +20 -0
  294. package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
  295. package/build/dist/Server/Types/AnalyticsDatabase/AggregateBy.js +9 -0
  296. package/build/dist/Server/Types/AnalyticsDatabase/AggregateBy.js.map +1 -1
  297. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +15 -0
  298. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
  299. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js +31 -0
  300. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js.map +1 -1
  301. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +105 -52
  302. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  303. package/build/dist/Server/Utils/Memory.js +9 -1
  304. package/build/dist/Server/Utils/Memory.js.map +1 -1
  305. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +132 -10
  306. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
  307. package/build/dist/Server/Utils/Monitor/Data/OuiVendors.json +6920 -0
  308. package/build/dist/Server/Utils/Monitor/DnsResolutionCache.js +77 -0
  309. package/build/dist/Server/Utils/Monitor/DnsResolutionCache.js.map +1 -0
  310. package/build/dist/Server/Utils/Monitor/MonitorResource.js +21 -41
  311. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  312. package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js +152 -40
  313. package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js.map +1 -1
  314. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +262 -0
  315. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -0
  316. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +201 -0
  317. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -0
  318. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +152 -120
  319. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
  320. package/build/dist/Server/Utils/Monitor/OuiLookupUtil.js +44 -0
  321. package/build/dist/Server/Utils/Monitor/OuiLookupUtil.js.map +1 -0
  322. package/build/dist/Server/Utils/Monitor/SnmpInterfaceRateUtil.js +10 -10
  323. package/build/dist/Server/Utils/Monitor/SnmpInterfaceRateUtil.js.map +1 -1
  324. package/build/dist/Server/Utils/WhatsAppTemplateUtil.js +5 -0
  325. package/build/dist/Server/Utils/WhatsAppTemplateUtil.js.map +1 -1
  326. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +10 -0
  327. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js.map +1 -1
  328. package/build/dist/Types/AnalyticsDatabase/TableColumn.js +7 -0
  329. package/build/dist/Types/AnalyticsDatabase/TableColumn.js.map +1 -1
  330. package/build/dist/Types/BaseDatabase/EqualTo.js +9 -1
  331. package/build/dist/Types/BaseDatabase/EqualTo.js.map +1 -1
  332. package/build/dist/Types/BaseDatabase/EqualToOrNull.js +9 -1
  333. package/build/dist/Types/BaseDatabase/EqualToOrNull.js.map +1 -1
  334. package/build/dist/Types/BaseDatabase/NotEqual.js +9 -1
  335. package/build/dist/Types/BaseDatabase/NotEqual.js.map +1 -1
  336. package/build/dist/Types/Dashboard/DashboardComponentType.js +1 -0
  337. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  338. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +1 -0
  339. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
  340. package/build/dist/Types/Dashboard/DashboardComponents/DashboardSloComponent.js +23 -0
  341. package/build/dist/Types/Dashboard/DashboardComponents/DashboardSloComponent.js.map +1 -0
  342. package/build/dist/Types/Dashboard/DashboardTemplates.js +205 -0
  343. package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
  344. package/build/dist/Types/Email/EmailTemplateType.js +1 -0
  345. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  346. package/build/dist/Types/Kubernetes/KubernetesCostIngest.js +21 -0
  347. package/build/dist/Types/Kubernetes/KubernetesCostIngest.js.map +1 -0
  348. package/build/dist/Types/Monitor/CriteriaFilter.js +1 -0
  349. package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
  350. package/build/dist/Types/Monitor/MonitorStep.js +5 -5
  351. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  352. package/build/dist/Types/Monitor/MonitorStepNetworkDeviceMonitor.js +8 -0
  353. package/build/dist/Types/Monitor/MonitorStepNetworkDeviceMonitor.js.map +1 -1
  354. package/build/dist/Types/Monitor/MonitorType.js +15 -5
  355. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  356. package/build/dist/Types/Monitor/SnmpMonitor/ArpEntry.js +2 -0
  357. package/build/dist/Types/Monitor/SnmpMonitor/ArpEntry.js.map +1 -0
  358. package/build/dist/Types/Monitor/SnmpMonitor/FdbEntry.js +2 -0
  359. package/build/dist/Types/Monitor/SnmpMonitor/FdbEntry.js.map +1 -0
  360. package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js +9 -3
  361. package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js.map +1 -1
  362. package/build/dist/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.js +217 -3
  363. package/build/dist/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.js.map +1 -1
  364. package/build/dist/Types/NetworkSite/DefaultNetworkSiteType.js +21 -0
  365. package/build/dist/Types/NetworkSite/DefaultNetworkSiteType.js.map +1 -0
  366. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js +3 -0
  367. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js.map +1 -1
  368. package/build/dist/Types/Permission.js +409 -0
  369. package/build/dist/Types/Permission.js.map +1 -1
  370. package/build/dist/Types/ServiceLevelObjective/SliType.js +7 -0
  371. package/build/dist/Types/ServiceLevelObjective/SliType.js.map +1 -0
  372. package/build/dist/Types/ServiceLevelObjective/SloMultiMonitorMode.js +7 -0
  373. package/build/dist/Types/ServiceLevelObjective/SloMultiMonitorMode.js.map +1 -0
  374. package/build/dist/Types/ServiceLevelObjective/SloStatus.js +10 -0
  375. package/build/dist/Types/ServiceLevelObjective/SloStatus.js.map +1 -0
  376. package/build/dist/Types/ServiceLevelObjective/SloWindowType.js +7 -0
  377. package/build/dist/Types/ServiceLevelObjective/SloWindowType.js.map +1 -0
  378. package/build/dist/Types/Telemetry/ServiceType.js +1 -0
  379. package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
  380. package/build/dist/UI/Components/Filters/EntityFilter.js +15 -0
  381. package/build/dist/UI/Components/Filters/EntityFilter.js.map +1 -1
  382. package/build/dist/UI/Components/Filters/FilterViewer.js +19 -4
  383. package/build/dist/UI/Components/Filters/FilterViewer.js.map +1 -1
  384. package/build/dist/UI/Components/List/List.js +1 -1
  385. package/build/dist/UI/Components/List/List.js.map +1 -1
  386. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +235 -89
  387. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  388. package/build/dist/UI/Components/ModelTable/FilterDataToQuery.js +96 -0
  389. package/build/dist/UI/Components/ModelTable/FilterDataToQuery.js.map +1 -0
  390. package/build/dist/UI/Components/Navbar/NavBar.js +14 -2
  391. package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
  392. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +3 -2
  393. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
  394. package/build/dist/UI/Utils/Navigation.js +9 -0
  395. package/build/dist/UI/Utils/Navigation.js.map +1 -1
  396. package/build/dist/UI/Utils/TableFilterUrlState.js +159 -15
  397. package/build/dist/UI/Utils/TableFilterUrlState.js.map +1 -1
  398. package/build/dist/UI/Utils/TableViewUrlState.js +103 -0
  399. package/build/dist/UI/Utils/TableViewUrlState.js.map +1 -0
  400. package/build/dist/Utils/Dashboard/Components/DashboardSloComponent.js +93 -0
  401. package/build/dist/Utils/Dashboard/Components/DashboardSloComponent.js.map +1 -0
  402. package/build/dist/Utils/Dashboard/Components/Index.js +4 -0
  403. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  404. package/build/dist/Utils/IpCanonicalUtil.js +110 -0
  405. package/build/dist/Utils/IpCanonicalUtil.js.map +1 -0
  406. package/build/dist/Utils/Monitor/EndpointAttachmentUtil.js +311 -0
  407. package/build/dist/Utils/Monitor/EndpointAttachmentUtil.js.map +1 -0
  408. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +98 -5
  409. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
  410. package/build/dist/Utils/NetworkSite/CidrMatchUtil.js +222 -0
  411. package/build/dist/Utils/NetworkSite/CidrMatchUtil.js.map +1 -0
  412. package/build/dist/Utils/NetworkSite/MaterializedPathUtil.js +89 -0
  413. package/build/dist/Utils/NetworkSite/MaterializedPathUtil.js.map +1 -0
  414. package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +60 -0
  415. package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -0
  416. package/build/dist/Utils/NetworkSite/SiteUptimeUtil.js +76 -0
  417. package/build/dist/Utils/NetworkSite/SiteUptimeUtil.js.map +1 -0
  418. package/build/dist/Utils/Slo/SloStatusColor.js +18 -0
  419. package/build/dist/Utils/Slo/SloStatusColor.js.map +1 -0
  420. package/build/dist/Utils/Slo/SloUtil.js +393 -0
  421. package/build/dist/Utils/Slo/SloUtil.js.map +1 -0
  422. package/build/dist/Utils/Slo/SloWidgetFormat.js +174 -0
  423. package/build/dist/Utils/Slo/SloWidgetFormat.js.map +1 -0
  424. package/package.json +2 -2
  425. package/Types/Dashboard/DashboardComponents/Index.ts +0 -7
  426. package/build/dist/Types/Dashboard/DashboardComponents/Index.js +0 -8
  427. package/build/dist/Types/Dashboard/DashboardComponents/Index.js.map +0 -1
@@ -5,7 +5,7 @@ import Select from "../../Types/AnalyticsDatabase/Select";
5
5
  import Sort from "../../Types/AnalyticsDatabase/Sort";
6
6
  import UpdateBy from "../../Types/AnalyticsDatabase/UpdateBy";
7
7
  import logger from "../Logger";
8
- import { SQL, Statement } from "./Statement";
8
+ import { QualifiedColumn, SQL, Statement } from "./Statement";
9
9
  import {
10
10
  adaptTableSettingsForStorage,
11
11
  getDistributedEngine,
@@ -69,6 +69,8 @@ export interface EntityScopeQueryValue {
69
69
  attributeValue: string;
70
70
  }
71
71
 
72
+ const SIMPLE_AGGREGATE_FUNCTION_NAME_REGEX: RegExp = /^[A-Za-z_][A-Za-z0-9_]*$/;
73
+
72
74
  export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
73
75
  public model!: TBaseModel;
74
76
  public modelType!: { new (): TBaseModel };
@@ -88,6 +90,7 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
88
90
  mapColumn: AnalyticsTableColumn;
89
91
  mapKey: string;
90
92
  skip?: boolean;
93
+ tableAlias?: string | undefined;
91
94
  }): void {
92
95
  const mapKeysColumnName: string | undefined = input.mapColumn.mapKeysColumn;
93
96
 
@@ -102,13 +105,17 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
102
105
  return;
103
106
  }
104
107
 
108
+ const keysColumnRef: string | QualifiedColumn = input.tableAlias
109
+ ? new QualifiedColumn(input.tableAlias, mapKeysColumn.key)
110
+ : mapKeysColumn.key;
111
+
105
112
  /*
106
113
  * Keep empty key-array rows eligible so data written before the
107
114
  * denormalized column existed, or by a lagging ingest path, is still
108
115
  * checked by the canonical map['key'] predicate that follows.
109
116
  */
110
117
  input.whereStatement.append(
111
- SQL`AND (empty(${mapKeysColumn.key}) OR hasAny(${mapKeysColumn.key}, ${{
118
+ SQL`AND (empty(${keysColumnRef}) OR hasAny(${keysColumnRef}, ${{
112
119
  value: [input.mapKey],
113
120
  type: TableColumnType.ArrayText,
114
121
  }})) `,
@@ -426,11 +433,35 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
426
433
  }
427
434
 
428
435
  /**
429
- * Conditions to append to "WHERE TRUE"
436
+ * Conditions to append to "WHERE TRUE".
437
+ *
438
+ * Compiles a Query into an `AND col <op> ...` chain. When
439
+ * `options.tableAlias` is set, every column reference is emitted
440
+ * table-qualified (`alias.col`). Builders whose SELECT aliases an
441
+ * expression to a real column name (aggregate statements — see
442
+ * AggregateUtil.buildBucketTimestampSelect) MUST pass the alias of the
443
+ * table the WHERE executes against: ClickHouse substitutes SELECT
444
+ * aliases into same-level unqualified WHERE references, which turns a
445
+ * `Total` aggregation's `min(col) as col` into an ILLEGAL_AGGREGATION
446
+ * error and silently snaps bucketed time filters to bucket boundaries.
447
+ * Statements that embed this WHERE against a different table (MV
448
+ * paths, cascade deletes) must stay unqualified.
430
449
  */
431
- public toWhereStatement(query: Query<TBaseModel>): Statement {
450
+ public toWhereStatement(
451
+ query: Query<TBaseModel>,
452
+ options?: { tableAlias?: string | undefined },
453
+ ): Statement {
432
454
  const whereStatement: Statement = new Statement();
433
455
 
456
+ type ColumnRefFunction = (columnName: string) => string | QualifiedColumn;
457
+ const columnRef: ColumnRefFunction = (
458
+ columnName: string,
459
+ ): string | QualifiedColumn => {
460
+ return options?.tableAlias
461
+ ? new QualifiedColumn(options.tableAlias, columnName)
462
+ : columnName;
463
+ };
464
+
434
465
  let first: boolean = true;
435
466
  for (const key in query) {
436
467
  const value: any = query[key];
@@ -474,7 +505,7 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
474
505
  whereStatement.append(SQL` OR `);
475
506
  }
476
507
  whereStatement.append(
477
- SQL`${col.key} ILIKE ${{
508
+ SQL`${columnRef(col.key)} ILIKE ${{
478
509
  value: new Search<string>(ms.value),
479
510
  type: col.type,
480
511
  }}`,
@@ -534,10 +565,10 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
534
565
 
535
566
  if (scopeEntityKeys.length > 0 && hasAttributeFallback) {
536
567
  whereStatement.append(
537
- SQL`AND (hasAny(${entityKeysColumn.key}, ${{
568
+ SQL`AND (hasAny(${columnRef(entityKeysColumn.key)}, ${{
538
569
  value: scopeEntityKeys,
539
570
  type: TableColumnType.ArrayText,
540
- }}) OR ${attributesColumn!.key}[${{
571
+ }}) OR ${columnRef(attributesColumn!.key)}[${{
541
572
  value: scope.attributeKey,
542
573
  type: TableColumnType.Text,
543
574
  }}] = ${{
@@ -547,14 +578,14 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
547
578
  );
548
579
  } else if (scopeEntityKeys.length > 0) {
549
580
  whereStatement.append(
550
- SQL`AND hasAny(${entityKeysColumn.key}, ${{
581
+ SQL`AND hasAny(${columnRef(entityKeysColumn.key)}, ${{
551
582
  value: scopeEntityKeys,
552
583
  type: TableColumnType.ArrayText,
553
584
  }})`,
554
585
  );
555
586
  } else {
556
587
  whereStatement.append(
557
- SQL`AND ${attributesColumn!.key}[${{
588
+ SQL`AND ${columnRef(attributesColumn!.key)}[${{
558
589
  value: scope.attributeKey,
559
590
  type: TableColumnType.Text,
560
591
  }}] = ${{
@@ -582,66 +613,66 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
582
613
 
583
614
  if (value instanceof Search) {
584
615
  whereStatement.append(
585
- SQL`AND ${key} ILIKE ${{
616
+ SQL`AND ${columnRef(key)} ILIKE ${{
586
617
  value: value,
587
618
  type: tableColumn.type,
588
619
  }}`,
589
620
  );
590
621
  } else if (value instanceof NotEqual) {
591
622
  whereStatement.append(
592
- SQL`AND ${key} != ${{
623
+ SQL`AND ${columnRef(key)} != ${{
593
624
  value: value,
594
625
  type: tableColumn.type,
595
626
  }}`,
596
627
  );
597
628
  } else if (value instanceof GreaterThan) {
598
629
  whereStatement.append(
599
- SQL`AND ${key} > ${{
630
+ SQL`AND ${columnRef(key)} > ${{
600
631
  value: value,
601
632
  type: tableColumn.type,
602
633
  }}`,
603
634
  );
604
635
  } else if (value instanceof LessThan) {
605
636
  whereStatement.append(
606
- SQL`AND ${key} < ${{
637
+ SQL`AND ${columnRef(key)} < ${{
607
638
  value: value,
608
639
  type: tableColumn.type,
609
640
  }}`,
610
641
  );
611
642
  } else if (value instanceof LessThanOrEqual) {
612
643
  whereStatement.append(
613
- SQL`AND ${key} <= ${{
644
+ SQL`AND ${columnRef(key)} <= ${{
614
645
  value: value,
615
646
  type: tableColumn.type,
616
647
  }}`,
617
648
  );
618
649
  } else if (value instanceof LessThanOrNull) {
619
650
  whereStatement.append(
620
- SQL`AND (${key} <= ${{
651
+ SQL`AND (${columnRef(key)} <= ${{
621
652
  value: value,
622
653
  type: tableColumn.type,
623
- }} OR ${key} IS NULL)`,
654
+ }} OR ${columnRef(key)} IS NULL)`,
624
655
  );
625
656
  } else if (value instanceof GreaterThanOrNull) {
626
657
  whereStatement.append(
627
- SQL`AND (${key} >= ${{
658
+ SQL`AND (${columnRef(key)} >= ${{
628
659
  value: value,
629
660
  type: tableColumn.type,
630
- }} OR ${key} IS NULL)`,
661
+ }} OR ${columnRef(key)} IS NULL)`,
631
662
  );
632
663
  } else if (value instanceof GreaterThanOrEqual) {
633
664
  whereStatement.append(
634
- SQL`AND ${key} >= ${{
665
+ SQL`AND ${columnRef(key)} >= ${{
635
666
  value: value,
636
667
  type: tableColumn.type,
637
668
  }}`,
638
669
  );
639
670
  } else if (value instanceof InBetween) {
640
671
  whereStatement.append(
641
- SQL`AND ${key} >= ${{
672
+ SQL`AND ${columnRef(key)} >= ${{
642
673
  value: value.startValue,
643
674
  type: tableColumn.type,
644
- }} AND ${key} <= ${{
675
+ }} AND ${columnRef(key)} <= ${{
645
676
  value: value.endValue,
646
677
  type: tableColumn.type,
647
678
  }}`,
@@ -663,7 +694,7 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
663
694
  ((value as Includes).values as Array<string>) || [];
664
695
  if (arrayIncludeValues.length > 0) {
665
696
  whereStatement.append(
666
- SQL`AND hasAny(${key}, ${{
697
+ SQL`AND hasAny(${columnRef(key)}, ${{
667
698
  value: arrayIncludeValues,
668
699
  type: TableColumnType.ArrayText,
669
700
  }})`,
@@ -671,7 +702,7 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
671
702
  }
672
703
  } else if (value instanceof Includes) {
673
704
  whereStatement.append(
674
- SQL`AND ${key} IN ${{
705
+ SQL`AND ${columnRef(key)} IN ${{
675
706
  value: value,
676
707
  type: tableColumn.type,
677
708
  }}`,
@@ -689,7 +720,7 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
689
720
  ((value as IncludesNone).values as Array<string>) || [];
690
721
  if (arrayExcludeValues.length > 0) {
691
722
  whereStatement.append(
692
- SQL`AND NOT hasAny(${key}, ${{
723
+ SQL`AND NOT hasAny(${columnRef(key)}, ${{
693
724
  value: arrayExcludeValues,
694
725
  type: TableColumnType.ArrayText,
695
726
  }})`,
@@ -705,7 +736,7 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
705
736
  ((value as IncludesNone).values as Array<string | ObjectID>) || [];
706
737
  if (excludeValues.length > 0) {
707
738
  whereStatement.append(
708
- SQL`AND ${key} NOT IN ${{
739
+ SQL`AND ${columnRef(key)} NOT IN ${{
709
740
  value: value,
710
741
  type: tableColumn.type,
711
742
  }}`,
@@ -713,9 +744,11 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
713
744
  }
714
745
  } else if (value instanceof IsNull) {
715
746
  if (tableColumn.type === TableColumnType.Text) {
716
- whereStatement.append(SQL`AND (${key} IS NULL OR ${key} = '')`);
747
+ whereStatement.append(
748
+ SQL`AND (${columnRef(key)} IS NULL OR ${columnRef(key)} = '')`,
749
+ );
717
750
  } else {
718
- whereStatement.append(SQL`AND ${key} IS NULL`);
751
+ whereStatement.append(SQL`AND ${columnRef(key)} IS NULL`);
719
752
  }
720
753
  } else if (
721
754
  tableColumn.type === TableColumnType.MapStringString &&
@@ -764,10 +797,10 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
764
797
  */
765
798
  if (mapEntry instanceof IsNull) {
766
799
  whereStatement.append(
767
- SQL`AND ((NOT mapContains(${key}, ${{
800
+ SQL`AND ((NOT mapContains(${columnRef(key)}, ${{
768
801
  value: mapKey,
769
802
  type: TableColumnType.Text,
770
- }})) OR ${key}[${{
803
+ }})) OR ${columnRef(key)}[${{
771
804
  value: mapKey,
772
805
  type: TableColumnType.Text,
773
806
  }}] = '')`,
@@ -780,12 +813,13 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
780
813
  whereStatement,
781
814
  mapColumn: tableColumn,
782
815
  mapKey,
816
+ tableAlias: options?.tableAlias,
783
817
  });
784
818
  whereStatement.append(
785
- SQL`AND mapContains(${key}, ${{
819
+ SQL`AND mapContains(${columnRef(key)}, ${{
786
820
  value: mapKey,
787
821
  type: TableColumnType.Text,
788
- }}) AND ${key}[${{
822
+ }}) AND ${columnRef(key)}[${{
789
823
  value: mapKey,
790
824
  type: TableColumnType.Text,
791
825
  }}] != ''`,
@@ -801,7 +835,7 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
801
835
  }}) AND v ILIKE ${{
802
836
  value: mapEntry as Search<string>,
803
837
  type: TableColumnType.Text,
804
- }}, mapKeys(${key}), mapValues(${key}))`,
838
+ }}, mapKeys(${columnRef(key)}), mapValues(${columnRef(key)}))`,
805
839
  );
806
840
  continue;
807
841
  }
@@ -815,7 +849,7 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
815
849
  }}) AND v ILIKE ${{
816
850
  value: literalValue,
817
851
  type: TableColumnType.Text,
818
- }}, mapKeys(${key}), mapValues(${key}))`,
852
+ }}, mapKeys(${columnRef(key)}), mapValues(${columnRef(key)}))`,
819
853
  );
820
854
  continue;
821
855
  }
@@ -829,7 +863,7 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
829
863
  }}) AND v ILIKE ${{
830
864
  value: literalValue,
831
865
  type: TableColumnType.Text,
832
- }}, mapKeys(${key}), mapValues(${key}))`,
866
+ }}, mapKeys(${columnRef(key)}), mapValues(${columnRef(key)}))`,
833
867
  );
834
868
  continue;
835
869
  }
@@ -843,14 +877,14 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
843
877
  }}) AND v ILIKE ${{
844
878
  value: literalValue,
845
879
  type: TableColumnType.Text,
846
- }}, mapKeys(${key}), mapValues(${key}))`,
880
+ }}, mapKeys(${columnRef(key)}), mapValues(${columnRef(key)}))`,
847
881
  );
848
882
  continue;
849
883
  }
850
884
 
851
885
  if (mapEntry instanceof NotEqual) {
852
886
  whereStatement.append(
853
- SQL`AND ${key}[${{
887
+ SQL`AND ${columnRef(key)}[${{
854
888
  value: mapKey,
855
889
  type: TableColumnType.Text,
856
890
  }}] != ${{
@@ -870,9 +904,10 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
870
904
  mapColumn: tableColumn,
871
905
  mapKey,
872
906
  skip: equalityValue === "",
907
+ tableAlias: options?.tableAlias,
873
908
  });
874
909
  whereStatement.append(
875
- SQL`AND ${key}[${{
910
+ SQL`AND ${columnRef(key)}[${{
876
911
  value: mapKey,
877
912
  type: TableColumnType.Text,
878
913
  }}] = ${{
@@ -895,9 +930,10 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
895
930
  whereStatement,
896
931
  mapColumn: tableColumn,
897
932
  mapKey,
933
+ tableAlias: options?.tableAlias,
898
934
  });
899
935
  whereStatement.append(
900
- SQL`AND toFloat64OrNull(${key}[${{
936
+ SQL`AND toFloat64OrNull(${columnRef(key)}[${{
901
937
  value: mapKey,
902
938
  type: TableColumnType.Text,
903
939
  }}]) > ${{
@@ -913,9 +949,10 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
913
949
  whereStatement,
914
950
  mapColumn: tableColumn,
915
951
  mapKey,
952
+ tableAlias: options?.tableAlias,
916
953
  });
917
954
  whereStatement.append(
918
- SQL`AND toFloat64OrNull(${key}[${{
955
+ SQL`AND toFloat64OrNull(${columnRef(key)}[${{
919
956
  value: mapKey,
920
957
  type: TableColumnType.Text,
921
958
  }}]) >= ${{
@@ -931,9 +968,10 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
931
968
  whereStatement,
932
969
  mapColumn: tableColumn,
933
970
  mapKey,
971
+ tableAlias: options?.tableAlias,
934
972
  });
935
973
  whereStatement.append(
936
- SQL`AND toFloat64OrNull(${key}[${{
974
+ SQL`AND toFloat64OrNull(${columnRef(key)}[${{
937
975
  value: mapKey,
938
976
  type: TableColumnType.Text,
939
977
  }}]) < ${{
@@ -949,9 +987,10 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
949
987
  whereStatement,
950
988
  mapColumn: tableColumn,
951
989
  mapKey,
990
+ tableAlias: options?.tableAlias,
952
991
  });
953
992
  whereStatement.append(
954
- SQL`AND toFloat64OrNull(${key}[${{
993
+ SQL`AND toFloat64OrNull(${columnRef(key)}[${{
955
994
  value: mapKey,
956
995
  type: TableColumnType.Text,
957
996
  }}]) <= ${{
@@ -983,9 +1022,10 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
983
1022
  mapColumn: tableColumn,
984
1023
  mapKey,
985
1024
  skip: includesValues.includes(""),
1025
+ tableAlias: options?.tableAlias,
986
1026
  });
987
1027
  whereStatement.append(
988
- SQL`AND ${key}[${{
1028
+ SQL`AND ${columnRef(key)}[${{
989
1029
  value: mapKey,
990
1030
  type: TableColumnType.Text,
991
1031
  }}] IN ${{
@@ -1015,7 +1055,7 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
1015
1055
  continue;
1016
1056
  }
1017
1057
  whereStatement.append(
1018
- SQL`AND ${key}[${{
1058
+ SQL`AND ${columnRef(key)}[${{
1019
1059
  value: mapKey,
1020
1060
  type: TableColumnType.Text,
1021
1061
  }}] NOT IN ${{
@@ -1033,9 +1073,10 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
1033
1073
  mapColumn: tableColumn,
1034
1074
  mapKey,
1035
1075
  skip: equalityValue === "",
1076
+ tableAlias: options?.tableAlias,
1036
1077
  });
1037
1078
  whereStatement.append(
1038
- SQL`AND ${key}[${{
1079
+ SQL`AND ${columnRef(key)}[${{
1039
1080
  value: mapKey,
1040
1081
  type: TableColumnType.Text,
1041
1082
  }}] = ${{
@@ -1058,7 +1099,7 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
1058
1099
 
1059
1100
  if (flatValue[objKey] && typeof flatValue[objKey] === "string") {
1060
1101
  whereStatement.append(
1061
- SQL`AND JSONExtractString(${key}, ${{
1102
+ SQL`AND JSONExtractString(${columnRef(key)}, ${{
1062
1103
  value: objKey,
1063
1104
  type: TableColumnType.Text,
1064
1105
  }}) = ${{
@@ -1071,7 +1112,7 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
1071
1112
 
1072
1113
  if (flatValue[objKey] && typeof flatValue[objKey] === "number") {
1073
1114
  whereStatement.append(
1074
- SQL`AND JSONExtractInt(${key}, ${{
1115
+ SQL`AND JSONExtractInt(${columnRef(key)}, ${{
1075
1116
  value: objKey,
1076
1117
  type: TableColumnType.Text,
1077
1118
  }}) = ${{
@@ -1084,7 +1125,7 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
1084
1125
 
1085
1126
  if (flatValue[objKey] && typeof flatValue[objKey] === "boolean") {
1086
1127
  whereStatement.append(
1087
- SQL`AND JSONExtractBool(${key}, ${{
1128
+ SQL`AND JSONExtractBool(${columnRef(key)}, ${{
1088
1129
  value: objKey,
1089
1130
  type: TableColumnType.Text,
1090
1131
  }}) = ${{
@@ -1097,7 +1138,7 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
1097
1138
  }
1098
1139
  } else {
1099
1140
  whereStatement.append(
1100
- SQL`AND ${key} = ${{ value, type: tableColumn.type }}`,
1141
+ SQL`AND ${columnRef(key)} = ${{ value, type: tableColumn.type }}`,
1101
1142
  );
1102
1143
  }
1103
1144
  }
@@ -1361,6 +1402,32 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
1361
1402
  * column. Scalar types ignore the rest of the column.
1362
1403
  */
1363
1404
  public toColumnType(column: AnalyticsTableColumn): Statement {
1405
+ const simpleAggregateFunction: string | undefined =
1406
+ column.simpleAggregateFunction;
1407
+
1408
+ if (simpleAggregateFunction !== undefined) {
1409
+ if (column.type === TableColumnType.AggregateFunction) {
1410
+ throw new BadDataException(
1411
+ `Column ${column.key} cannot declare both AggregateFunction and SimpleAggregateFunction.`,
1412
+ );
1413
+ }
1414
+
1415
+ /*
1416
+ * The function name is emitted as raw ClickHouse DDL, so accept only a
1417
+ * plain function identifier. Besides catching accidental whitespace /
1418
+ * empty definitions, this prevents a model field from injecting another
1419
+ * type or table clause into generated schema SQL.
1420
+ */
1421
+ if (
1422
+ simpleAggregateFunction.trim() !== simpleAggregateFunction ||
1423
+ !SIMPLE_AGGREGATE_FUNCTION_NAME_REGEX.test(simpleAggregateFunction)
1424
+ ) {
1425
+ throw new BadDataException(
1426
+ `Column ${column.key} has invalid simpleAggregateFunction "${simpleAggregateFunction}".`,
1427
+ );
1428
+ }
1429
+ }
1430
+
1364
1431
  if (column.type === TableColumnType.AggregateFunction) {
1365
1432
  const def: string | undefined = column.aggregateFunctionDefinition;
1366
1433
  if (!def) {
@@ -1371,7 +1438,7 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
1371
1438
  return SQL`AggregateFunction(`.append(def).append(SQL`)`);
1372
1439
  }
1373
1440
 
1374
- const statement: Statement | undefined = {
1441
+ const scalarStatement: Statement | undefined = {
1375
1442
  [TableColumnType.Text]: SQL`String`,
1376
1443
  [TableColumnType.ObjectID]: SQL`String`,
1377
1444
  [TableColumnType.Boolean]: SQL`Bool`,
@@ -1394,13 +1461,21 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
1394
1461
  [TableColumnType.UInt64]: SQL`UInt64`,
1395
1462
  }[column.type];
1396
1463
 
1397
- if (!statement) {
1464
+ if (!scalarStatement) {
1398
1465
  throw new BadDataException(
1399
1466
  `Unknown column type: ${column.type}. Please add support for this column type.`,
1400
1467
  );
1401
1468
  }
1402
1469
 
1403
- return statement;
1470
+ if (simpleAggregateFunction) {
1471
+ return SQL`SimpleAggregateFunction(`
1472
+ .append(simpleAggregateFunction)
1473
+ .append(SQL`, `)
1474
+ .append(scalarStatement)
1475
+ .append(SQL`)`);
1476
+ }
1477
+
1478
+ return scalarStatement;
1404
1479
  }
1405
1480
 
1406
1481
  /**
@@ -1413,7 +1488,8 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
1413
1488
  */
1414
1489
  public toFullColumnType(column: AnalyticsTableColumn): Statement {
1415
1490
  const isAggregateFunction: boolean =
1416
- column.type === TableColumnType.AggregateFunction;
1491
+ column.type === TableColumnType.AggregateFunction ||
1492
+ Boolean(column.simpleAggregateFunction);
1417
1493
 
1418
1494
  let typeStatement: Statement = this.toColumnType(column);
1419
1495
 
@@ -1,7 +1,15 @@
1
1
  import fs from "fs";
2
2
  import os from "os";
3
3
 
4
- const UNLIMITED_CGROUP_THRESHOLD_BYTES: number = 1 << 60; // treat absurdly large cgroup limit as "unlimited"
4
+ /*
5
+ * Treat an absurdly large cgroup limit as "unlimited". Must be `2 ** 60`, not
6
+ * `1 << 60`: JavaScript's `<<` truncates to 32 bits and takes the shift count
7
+ * mod 32, so `1 << 60` is `1 << 28` = 256 MiB. That made every container with
8
+ * a limit of 256 MiB or more look unlimited, so getCgroupAvailableMemoryInBytes
9
+ * returned null and the container-aware helper silently fell back to the whole
10
+ * host's free memory — the exact OOM-kill case it exists to prevent.
11
+ */
12
+ const UNLIMITED_CGROUP_THRESHOLD_BYTES: number = 2 ** 60;
5
13
 
6
14
  export default class MemoryUtil {
7
15
  public static getHostFreeMemoryInBytes(): number {