@oneuptime/common 11.5.9 → 11.5.11

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 (379) hide show
  1. package/Models/AnalyticsModels/Index.ts +13 -0
  2. package/Models/AnalyticsModels/MetricItemAggMV1mByContainer.ts +178 -0
  3. package/Models/AnalyticsModels/MetricItemAggMV1mByK8sCluster.ts +179 -0
  4. package/Models/AnalyticsModels/MetricItemAggMV1mByService.ts +179 -0
  5. package/Models/AnalyticsModels/NetworkFlow.ts +397 -0
  6. package/Models/DatabaseModels/EnterpriseLicenseInstance.ts +18 -0
  7. package/Models/DatabaseModels/GlobalConfig.ts +36 -0
  8. package/Models/DatabaseModels/Index.ts +2 -0
  9. package/Models/DatabaseModels/MarketingConversion.ts +198 -0
  10. package/Models/DatabaseModels/MetricSavedView.ts +34 -0
  11. package/Models/DatabaseModels/MetricType.ts +74 -0
  12. package/Models/DatabaseModels/NetworkDevice.ts +332 -0
  13. package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +113 -0
  14. package/Models/DatabaseModels/NetworkInterface.ts +58 -0
  15. package/Models/DatabaseModels/Project.ts +37 -0
  16. package/Models/DatabaseModels/User.ts +37 -0
  17. package/Server/API/BaseAnalyticsAPI.ts +23 -0
  18. package/Server/API/EnterpriseLicenseAPI.ts +14 -0
  19. package/Server/EnvironmentConfig.ts +84 -0
  20. package/Server/Infrastructure/Postgres/SchemaMigrations/1784191414522-AddCounterSemanticsToMetricType.ts +38 -0
  21. package/Server/Infrastructure/Postgres/SchemaMigrations/1784191414600-AddViewTypeToMetricSavedView.ts +28 -0
  22. package/Server/Infrastructure/Postgres/SchemaMigrations/1784211212164-AddNetworkDeviceInventoryAndDiscoverySchedule.ts +108 -0
  23. package/Server/Infrastructure/Postgres/SchemaMigrations/1784218257664-AddEnterpriseLicenseNotificationColumns.ts +31 -0
  24. package/Server/Infrastructure/Postgres/SchemaMigrations/1784293516000-AddAttributionColumnsToUserAndProject.ts +29 -0
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/1784298000000-AddMarketingConversionTable.ts +35 -0
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/1784401962564-MigrationName.ts +101 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +14 -0
  28. package/Server/Services/AnalyticsDatabaseService.ts +70 -1
  29. package/Server/Services/IncidentService.ts +13 -0
  30. package/Server/Services/Index.ts +10 -0
  31. package/Server/Services/MarketingConversionService.ts +10 -0
  32. package/Server/Services/MetricItemAggMV1mByContainerService.ts +31 -0
  33. package/Server/Services/MetricItemAggMV1mByK8sClusterService.ts +31 -0
  34. package/Server/Services/MetricItemAggMV1mByServiceService.ts +31 -0
  35. package/Server/Services/MetricService.ts +970 -122
  36. package/Server/Services/MonitorService.ts +14 -0
  37. package/Server/Services/NetworkDeviceOwnerTeamService.ts +42 -0
  38. package/Server/Services/NetworkDeviceOwnerUserService.ts +106 -0
  39. package/Server/Services/NetworkFlowService.ts +11 -0
  40. package/Server/Services/OnCallDutyPolicyService.ts +11 -1
  41. package/Server/Services/ProjectService.ts +136 -0
  42. package/Server/Services/SpanService.ts +13 -9
  43. package/Server/Services/StatusPageService.ts +10 -0
  44. package/Server/Services/TeamMemberService.ts +11 -0
  45. package/Server/Services/UserService.ts +59 -0
  46. package/Server/Types/AnalyticsDatabase/AggregateBy.ts +37 -7
  47. package/Server/Utils/Attribution.ts +99 -0
  48. package/Server/Utils/Marketing/ConversionUploadProvider.ts +103 -0
  49. package/Server/Utils/Marketing/ConversionUploadProviders.ts +22 -0
  50. package/Server/Utils/Marketing/Providers/GoogleAds.ts +270 -0
  51. package/Server/Utils/Marketing/Providers/LinkedIn.ts +147 -0
  52. package/Server/Utils/Marketing/Providers/Meta.ts +148 -0
  53. package/Server/Utils/Marketing/Providers/MicrosoftAds.ts +196 -0
  54. package/Server/Utils/Marketing/Providers/Reddit.ts +178 -0
  55. package/Server/Utils/Monitor/MonitorAlert.ts +71 -7
  56. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +31 -19
  57. package/Server/Utils/Monitor/MonitorIncident.ts +71 -7
  58. package/Server/Utils/Monitor/MonitorMetricUtil.ts +57 -0
  59. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +94 -0
  60. package/Server/Utils/Monitor/NetworkDeviceHydrationUtil.ts +15 -0
  61. package/Server/Utils/Monitor/NetworkInventoryUtil.ts +125 -14
  62. package/Server/Utils/ProductAnalytics.ts +133 -0
  63. package/Server/Utils/Telemetry/Telemetry.ts +39 -0
  64. package/Server/Utils/Telemetry/TelemetryEntity.ts +21 -0
  65. package/Tests/Server/API/BaseAnalyticsAPI.test.ts +72 -0
  66. package/Tests/Server/Infrastructure/SemaphorePermit.test.ts +9 -1
  67. package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +21 -2
  68. package/Tests/Server/Services/MetricEntityMVKeyParity.test.ts +173 -0
  69. package/Tests/Server/Services/MetricServiceAggregate.test.ts +1391 -0
  70. package/Tests/Server/Services/NetworkDeviceOwnerServices.test.ts +260 -0
  71. package/Tests/Server/Utils/Monitor/MonitorTemplateUtilNetworkDevice.test.ts +389 -0
  72. package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +764 -0
  73. package/Tests/Types/BaseDatabase/AggregationIntervalUtil.test.ts +111 -2
  74. package/Tests/Types/Database/EndsWith.test.ts +64 -0
  75. package/Tests/Types/Database/GreaterThan.test.ts +62 -0
  76. package/Tests/Types/Database/GreaterThanOrEqual.test.ts +65 -0
  77. package/Tests/Types/Database/GreaterThanOrNull.test.ts +63 -0
  78. package/Tests/Types/Database/Includes.test.ts +65 -0
  79. package/Tests/Types/Database/IncludesAll.test.ts +65 -0
  80. package/Tests/Types/Database/IncludesNone.test.ts +65 -0
  81. package/Tests/Types/Database/IsNull.test.ts +44 -0
  82. package/Tests/Types/Database/LessThan.test.ts +62 -0
  83. package/Tests/Types/Database/LessThanOrEqual.test.ts +62 -0
  84. package/Tests/Types/Database/LessThanOrNull.test.ts +62 -0
  85. package/Tests/Types/Database/MultiSearch.test.ts +81 -0
  86. package/Tests/Types/Database/NotContains.test.ts +64 -0
  87. package/Tests/Types/Database/NotNull.test.ts +44 -0
  88. package/Tests/Types/Database/StartsWith.test.ts +64 -0
  89. package/Tests/Types/Monitor/MonitorStepSqlMonitor.test.ts +83 -1
  90. package/Tests/Types/Monitor/SnmpV3EnumParsing.test.ts +247 -0
  91. package/Tests/Types/Monitor/SnmpVendorTemplate.test.ts +263 -0
  92. package/Tests/UI/Components/XAxis.test.ts +5 -3
  93. package/Tests/Utils/EnterpriseLicenseUsage.test.ts +76 -0
  94. package/Tests/Utils/Metrics/MetricExplorerUrl.test.ts +622 -0
  95. package/Tests/Utils/Metrics/MetricFormulaEvaluator.test.ts +474 -0
  96. package/Tests/Utils/Telemetry/HeartbeatAvailability.test.ts +52 -4
  97. package/Types/AnalyticsDatabase/AnalyticsTableName.ts +11 -0
  98. package/Types/BaseDatabase/AggregateBy.ts +31 -2
  99. package/Types/BaseDatabase/AggregatedResult.ts +22 -0
  100. package/Types/BaseDatabase/AggregationInterval.ts +11 -0
  101. package/Types/BaseDatabase/AggregationIntervalUtil.ts +30 -5
  102. package/Types/Dashboard/DashboardComponents/DashboardTraceChartComponent.ts +16 -0
  103. package/Types/Email/EmailTemplateType.ts +3 -0
  104. package/Types/Marketing/MarketingConversion.ts +11 -0
  105. package/Types/Metrics/MetricQueryConfigData.ts +21 -0
  106. package/Types/Metrics/MetricQueryData.ts +8 -0
  107. package/Types/Metrics/MetricViewData.ts +8 -0
  108. package/Types/Monitor/MonitorMetricType.ts +8 -0
  109. package/Types/Monitor/MonitorStep.ts +9 -0
  110. package/Types/Monitor/MonitorStepSqlMonitor.ts +12 -0
  111. package/Types/Monitor/MonitorType.ts +2 -1
  112. package/Types/Monitor/SSLMonitor/SslMonitorResponse.ts +17 -12
  113. package/Types/Monitor/SnmpMonitor/CdpNeighbor.ts +13 -0
  114. package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +37 -3
  115. package/Types/Monitor/SnmpMonitor/SnmpAuthProtocol.ts +46 -0
  116. package/Types/Monitor/SnmpMonitor/SnmpEntityInfo.ts +15 -0
  117. package/Types/Monitor/SnmpMonitor/SnmpInterface.ts +8 -0
  118. package/Types/Monitor/SnmpMonitor/SnmpMonitorResponse.ts +17 -8
  119. package/Types/Monitor/SnmpMonitor/SnmpPrivProtocol.ts +53 -0
  120. package/Types/Monitor/SnmpMonitor/SnmpSecurityLevel.ts +43 -0
  121. package/Types/Monitor/SnmpMonitor/SnmpSystemInfo.ts +16 -0
  122. package/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.ts +119 -3
  123. package/Types/NetFlow/NetworkFlowRecord.ts +25 -0
  124. package/Types/Syslog/SyslogMessage.ts +18 -0
  125. package/Types/Telemetry/TelemetrySavedViewState.ts +9 -0
  126. package/Types/Telemetry/TelemetrySavedViewType.ts +12 -0
  127. package/UI/Components/Charts/Area/AreaChart.tsx +51 -0
  128. package/UI/Components/Charts/Bar/BarChart.tsx +51 -1
  129. package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +97 -26
  130. package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +328 -1
  131. package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +115 -0
  132. package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +328 -1
  133. package/UI/Components/Charts/ChartLibrary/Types/ChartDataPoint.ts +7 -0
  134. package/UI/Components/Charts/ChartLibrary/Types/FormattedReferenceRegion.ts +15 -0
  135. package/UI/Components/Charts/ChartLibrary/Types/FormattedTimeReferenceLine.ts +13 -0
  136. package/UI/Components/Charts/Line/LineChart.tsx +51 -0
  137. package/UI/Components/Charts/Types/ReferenceRegionProps.ts +12 -0
  138. package/UI/Components/Charts/Types/TimeReferenceLineProps.ts +12 -0
  139. package/UI/Components/Charts/Types/XAxis/XAxisPrecision.ts +1 -0
  140. package/UI/Components/Charts/Utils/DataPoint.ts +0 -0
  141. package/UI/Components/Charts/Utils/TimeAnnotation.ts +169 -0
  142. package/UI/Components/Charts/Utils/XAxis.ts +28 -4
  143. package/UI/Components/Icon/Icon.tsx +33 -13
  144. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +9 -0
  145. package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +67 -0
  146. package/UI/Components/Page/ModelPage.tsx +6 -1
  147. package/UI/Components/TelemetryViewer/components/SavedViewsDropdown.tsx +33 -4
  148. package/UI/Styles/Theme.css +10 -0
  149. package/UI/Utils/User.ts +41 -2
  150. package/Utils/Analytics.ts +8 -6
  151. package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +74 -0
  152. package/Utils/Metrics/MetricExplorerUrl.ts +771 -0
  153. package/Utils/Metrics/MetricFormulaEvaluator.ts +410 -46
  154. package/Utils/Monitor/NetworkTopologyUtil.ts +261 -49
  155. package/Utils/ValueFormatter.ts +22 -1
  156. package/build/dist/Models/AnalyticsModels/Index.js +13 -0
  157. package/build/dist/Models/AnalyticsModels/Index.js.map +1 -1
  158. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByContainer.js +159 -0
  159. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByContainer.js.map +1 -0
  160. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByK8sCluster.js +158 -0
  161. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByK8sCluster.js.map +1 -0
  162. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByService.js +160 -0
  163. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByService.js.map +1 -0
  164. package/build/dist/Models/AnalyticsModels/NetworkFlow.js +351 -0
  165. package/build/dist/Models/AnalyticsModels/NetworkFlow.js.map +1 -0
  166. package/build/dist/Models/DatabaseModels/EnterpriseLicenseInstance.js +19 -0
  167. package/build/dist/Models/DatabaseModels/EnterpriseLicenseInstance.js.map +1 -1
  168. package/build/dist/Models/DatabaseModels/GlobalConfig.js +38 -0
  169. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  170. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  171. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  172. package/build/dist/Models/DatabaseModels/MarketingConversion.js +219 -0
  173. package/build/dist/Models/DatabaseModels/MarketingConversion.js.map +1 -0
  174. package/build/dist/Models/DatabaseModels/MetricSavedView.js +35 -0
  175. package/build/dist/Models/DatabaseModels/MetricSavedView.js.map +1 -1
  176. package/build/dist/Models/DatabaseModels/MetricType.js +76 -0
  177. package/build/dist/Models/DatabaseModels/MetricType.js.map +1 -1
  178. package/build/dist/Models/DatabaseModels/NetworkDevice.js +341 -0
  179. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  180. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +116 -0
  181. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
  182. package/build/dist/Models/DatabaseModels/NetworkInterface.js +60 -0
  183. package/build/dist/Models/DatabaseModels/NetworkInterface.js.map +1 -1
  184. package/build/dist/Models/DatabaseModels/Project.js +38 -0
  185. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  186. package/build/dist/Models/DatabaseModels/User.js +38 -0
  187. package/build/dist/Models/DatabaseModels/User.js.map +1 -1
  188. package/build/dist/Server/API/BaseAnalyticsAPI.js +19 -0
  189. package/build/dist/Server/API/BaseAnalyticsAPI.js.map +1 -1
  190. package/build/dist/Server/API/EnterpriseLicenseAPI.js +8 -0
  191. package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +1 -1
  192. package/build/dist/Server/EnvironmentConfig.js +51 -0
  193. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  194. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784191414522-AddCounterSemanticsToMetricType.js +27 -0
  195. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784191414522-AddCounterSemanticsToMetricType.js.map +1 -0
  196. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784191414600-AddViewTypeToMetricSavedView.js +21 -0
  197. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784191414600-AddViewTypeToMetricSavedView.js.map +1 -0
  198. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784211212164-AddNetworkDeviceInventoryAndDiscoverySchedule.js +47 -0
  199. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784211212164-AddNetworkDeviceInventoryAndDiscoverySchedule.js.map +1 -0
  200. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784218257664-AddEnterpriseLicenseNotificationColumns.js +16 -0
  201. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784218257664-AddEnterpriseLicenseNotificationColumns.js.map +1 -0
  202. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784293516000-AddAttributionColumnsToUserAndProject.js +18 -0
  203. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784293516000-AddAttributionColumnsToUserAndProject.js.map +1 -0
  204. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784298000000-AddMarketingConversionTable.js +20 -0
  205. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784298000000-AddMarketingConversionTable.js.map +1 -0
  206. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784401962564-MigrationName.js +40 -0
  207. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784401962564-MigrationName.js.map +1 -0
  208. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +14 -0
  209. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  210. package/build/dist/Server/Services/AnalyticsDatabaseService.js +58 -4
  211. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  212. package/build/dist/Server/Services/IncidentService.js +12 -0
  213. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  214. package/build/dist/Server/Services/Index.js +10 -0
  215. package/build/dist/Server/Services/Index.js.map +1 -1
  216. package/build/dist/Server/Services/MarketingConversionService.js +9 -0
  217. package/build/dist/Server/Services/MarketingConversionService.js.map +1 -0
  218. package/build/dist/Server/Services/MetricItemAggMV1mByContainerService.js +29 -0
  219. package/build/dist/Server/Services/MetricItemAggMV1mByContainerService.js.map +1 -0
  220. package/build/dist/Server/Services/MetricItemAggMV1mByK8sClusterService.js +29 -0
  221. package/build/dist/Server/Services/MetricItemAggMV1mByK8sClusterService.js.map +1 -0
  222. package/build/dist/Server/Services/MetricItemAggMV1mByServiceService.js +29 -0
  223. package/build/dist/Server/Services/MetricItemAggMV1mByServiceService.js.map +1 -0
  224. package/build/dist/Server/Services/MetricService.js +761 -125
  225. package/build/dist/Server/Services/MetricService.js.map +1 -1
  226. package/build/dist/Server/Services/MonitorService.js +18 -5
  227. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  228. package/build/dist/Server/Services/NetworkDeviceOwnerTeamService.js +44 -0
  229. package/build/dist/Server/Services/NetworkDeviceOwnerTeamService.js.map +1 -1
  230. package/build/dist/Server/Services/NetworkDeviceOwnerUserService.js +88 -0
  231. package/build/dist/Server/Services/NetworkDeviceOwnerUserService.js.map +1 -1
  232. package/build/dist/Server/Services/NetworkFlowService.js +9 -0
  233. package/build/dist/Server/Services/NetworkFlowService.js.map +1 -0
  234. package/build/dist/Server/Services/OnCallDutyPolicyService.js +15 -6
  235. package/build/dist/Server/Services/OnCallDutyPolicyService.js.map +1 -1
  236. package/build/dist/Server/Services/ProjectService.js +107 -6
  237. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  238. package/build/dist/Server/Services/SpanService.js +8 -6
  239. package/build/dist/Server/Services/SpanService.js.map +1 -1
  240. package/build/dist/Server/Services/StatusPageService.js +10 -0
  241. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  242. package/build/dist/Server/Services/TeamMemberService.js +11 -0
  243. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  244. package/build/dist/Server/Services/UserService.js +52 -0
  245. package/build/dist/Server/Services/UserService.js.map +1 -1
  246. package/build/dist/Server/Types/AnalyticsDatabase/AggregateBy.js +33 -7
  247. package/build/dist/Server/Types/AnalyticsDatabase/AggregateBy.js.map +1 -1
  248. package/build/dist/Server/Utils/Attribution.js +74 -0
  249. package/build/dist/Server/Utils/Attribution.js.map +1 -0
  250. package/build/dist/Server/Utils/Marketing/ConversionUploadProvider.js +40 -0
  251. package/build/dist/Server/Utils/Marketing/ConversionUploadProvider.js.map +1 -0
  252. package/build/dist/Server/Utils/Marketing/ConversionUploadProviders.js +20 -0
  253. package/build/dist/Server/Utils/Marketing/ConversionUploadProviders.js.map +1 -0
  254. package/build/dist/Server/Utils/Marketing/Providers/GoogleAds.js +177 -0
  255. package/build/dist/Server/Utils/Marketing/Providers/GoogleAds.js.map +1 -0
  256. package/build/dist/Server/Utils/Marketing/Providers/LinkedIn.js +113 -0
  257. package/build/dist/Server/Utils/Marketing/Providers/LinkedIn.js.map +1 -0
  258. package/build/dist/Server/Utils/Marketing/Providers/Meta.js +109 -0
  259. package/build/dist/Server/Utils/Marketing/Providers/Meta.js.map +1 -0
  260. package/build/dist/Server/Utils/Marketing/Providers/MicrosoftAds.js +130 -0
  261. package/build/dist/Server/Utils/Marketing/Providers/MicrosoftAds.js.map +1 -0
  262. package/build/dist/Server/Utils/Marketing/Providers/Reddit.js +126 -0
  263. package/build/dist/Server/Utils/Marketing/Providers/Reddit.js.map +1 -0
  264. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +53 -9
  265. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  266. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +21 -10
  267. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  268. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +54 -11
  269. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  270. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +43 -3
  271. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
  272. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +68 -0
  273. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  274. package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js +15 -0
  275. package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js.map +1 -1
  276. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +100 -15
  277. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
  278. package/build/dist/Server/Utils/ProductAnalytics.js +111 -0
  279. package/build/dist/Server/Utils/ProductAnalytics.js.map +1 -0
  280. package/build/dist/Server/Utils/Telemetry/Telemetry.js +32 -5
  281. package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
  282. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +17 -0
  283. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
  284. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +11 -0
  285. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js.map +1 -1
  286. package/build/dist/Types/BaseDatabase/AggregationInterval.js +11 -0
  287. package/build/dist/Types/BaseDatabase/AggregationInterval.js.map +1 -1
  288. package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js +33 -5
  289. package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js.map +1 -1
  290. package/build/dist/Types/Email/EmailTemplateType.js +2 -0
  291. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  292. package/build/dist/Types/Marketing/MarketingConversion.js +13 -0
  293. package/build/dist/Types/Marketing/MarketingConversion.js.map +1 -0
  294. package/build/dist/Types/Monitor/MonitorMetricType.js +7 -0
  295. package/build/dist/Types/Monitor/MonitorMetricType.js.map +1 -1
  296. package/build/dist/Types/Monitor/MonitorStep.js +6 -0
  297. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  298. package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js +3 -0
  299. package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js.map +1 -1
  300. package/build/dist/Types/Monitor/MonitorType.js +2 -1
  301. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  302. package/build/dist/Types/Monitor/SnmpMonitor/CdpNeighbor.js +2 -0
  303. package/build/dist/Types/Monitor/SnmpMonitor/CdpNeighbor.js.map +1 -0
  304. package/build/dist/Types/Monitor/SnmpMonitor/SnmpAuthProtocol.js +41 -0
  305. package/build/dist/Types/Monitor/SnmpMonitor/SnmpAuthProtocol.js.map +1 -1
  306. package/build/dist/Types/Monitor/SnmpMonitor/SnmpEntityInfo.js +2 -0
  307. package/build/dist/Types/Monitor/SnmpMonitor/SnmpEntityInfo.js.map +1 -0
  308. package/build/dist/Types/Monitor/SnmpMonitor/SnmpPrivProtocol.js +48 -0
  309. package/build/dist/Types/Monitor/SnmpMonitor/SnmpPrivProtocol.js.map +1 -1
  310. package/build/dist/Types/Monitor/SnmpMonitor/SnmpSecurityLevel.js +38 -0
  311. package/build/dist/Types/Monitor/SnmpMonitor/SnmpSecurityLevel.js.map +1 -1
  312. package/build/dist/Types/Monitor/SnmpMonitor/SnmpSystemInfo.js +2 -0
  313. package/build/dist/Types/Monitor/SnmpMonitor/SnmpSystemInfo.js.map +1 -0
  314. package/build/dist/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.js +96 -3
  315. package/build/dist/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.js.map +1 -1
  316. package/build/dist/Types/NetFlow/NetworkFlowRecord.js +2 -0
  317. package/build/dist/Types/NetFlow/NetworkFlowRecord.js.map +1 -0
  318. package/build/dist/Types/Syslog/SyslogMessage.js +2 -0
  319. package/build/dist/Types/Syslog/SyslogMessage.js.map +1 -0
  320. package/build/dist/Types/Telemetry/TelemetrySavedViewState.js +0 -7
  321. package/build/dist/Types/Telemetry/TelemetrySavedViewState.js.map +1 -1
  322. package/build/dist/Types/Telemetry/TelemetrySavedViewType.js +13 -0
  323. package/build/dist/Types/Telemetry/TelemetrySavedViewType.js.map +1 -0
  324. package/build/dist/UI/Components/Charts/Area/AreaChart.js +25 -1
  325. package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
  326. package/build/dist/UI/Components/Charts/Bar/BarChart.js +26 -2
  327. package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
  328. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +36 -12
  329. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
  330. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +208 -6
  331. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
  332. package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +52 -3
  333. package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
  334. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +208 -6
  335. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
  336. package/build/dist/UI/Components/Charts/ChartLibrary/Types/ChartDataPoint.js +6 -1
  337. package/build/dist/UI/Components/Charts/ChartLibrary/Types/ChartDataPoint.js.map +1 -1
  338. package/build/dist/UI/Components/Charts/ChartLibrary/Types/FormattedReferenceRegion.js +2 -0
  339. package/build/dist/UI/Components/Charts/ChartLibrary/Types/FormattedReferenceRegion.js.map +1 -0
  340. package/build/dist/UI/Components/Charts/ChartLibrary/Types/FormattedTimeReferenceLine.js +2 -0
  341. package/build/dist/UI/Components/Charts/ChartLibrary/Types/FormattedTimeReferenceLine.js.map +1 -0
  342. package/build/dist/UI/Components/Charts/Line/LineChart.js +25 -1
  343. package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
  344. package/build/dist/UI/Components/Charts/Types/ReferenceRegionProps.js +2 -0
  345. package/build/dist/UI/Components/Charts/Types/ReferenceRegionProps.js.map +1 -0
  346. package/build/dist/UI/Components/Charts/Types/TimeReferenceLineProps.js +2 -0
  347. package/build/dist/UI/Components/Charts/Types/TimeReferenceLineProps.js.map +1 -0
  348. package/build/dist/UI/Components/Charts/Types/XAxis/XAxisPrecision.js +1 -0
  349. package/build/dist/UI/Components/Charts/Types/XAxis/XAxisPrecision.js.map +1 -1
  350. package/build/dist/UI/Components/Charts/Utils/DataPoint.js +0 -0
  351. package/build/dist/UI/Components/Charts/Utils/DataPoint.js.map +1 -1
  352. package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js +121 -0
  353. package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js.map +1 -0
  354. package/build/dist/UI/Components/Charts/Utils/XAxis.js +27 -4
  355. package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
  356. package/build/dist/UI/Components/Icon/Icon.js +15 -8
  357. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  358. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  359. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +58 -0
  360. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
  361. package/build/dist/UI/Components/Page/ModelPage.js +7 -1
  362. package/build/dist/UI/Components/Page/ModelPage.js.map +1 -1
  363. package/build/dist/UI/Components/TelemetryViewer/components/SavedViewsDropdown.js +10 -4
  364. package/build/dist/UI/Components/TelemetryViewer/components/SavedViewsDropdown.js.map +1 -1
  365. package/build/dist/UI/Utils/User.js +35 -2
  366. package/build/dist/UI/Utils/User.js.map +1 -1
  367. package/build/dist/Utils/Analytics.js +8 -5
  368. package/build/dist/Utils/Analytics.js.map +1 -1
  369. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js +57 -0
  370. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js.map +1 -1
  371. package/build/dist/Utils/Metrics/MetricExplorerUrl.js +418 -0
  372. package/build/dist/Utils/Metrics/MetricExplorerUrl.js.map +1 -0
  373. package/build/dist/Utils/Metrics/MetricFormulaEvaluator.js +296 -37
  374. package/build/dist/Utils/Metrics/MetricFormulaEvaluator.js.map +1 -1
  375. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +176 -40
  376. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
  377. package/build/dist/Utils/ValueFormatter.js +20 -1
  378. package/build/dist/Utils/ValueFormatter.js.map +1 -1
  379. package/package.json +4 -3
@@ -0,0 +1,158 @@
1
+ import AnalyticsBaseModel from "./AnalyticsBaseModel/AnalyticsBaseModel";
2
+ import AnalyticsTableEngine from "../../Types/AnalyticsDatabase/AnalyticsTableEngine";
3
+ import AnalyticsTableName from "../../Types/AnalyticsDatabase/AnalyticsTableName";
4
+ import AnalyticsTableColumn from "../../Types/AnalyticsDatabase/TableColumn";
5
+ import TableColumnType from "../../Types/AnalyticsDatabase/TableColumnType";
6
+ /**
7
+ * Per-(k8s cluster, minute) pre-aggregated rollup of `MetricItemV3` value
8
+ * samples — sibling of `MetricItemAggMV1mByHostV2`, keyed by the stable
9
+ * 16-hex `k8sClusterEntityKey` the ingest pipeline stamps on every row
10
+ * whose resource carries a Kubernetes cluster identity. Cluster identity
11
+ * is `k8s.cluster.name` ONLY (see `TelemetryEntity.k8sClusterIdentity`),
12
+ * so the read side can derive the key directly from the incoming
13
+ * `resource.k8s.cluster.name` filter via
14
+ * `EntityKey.keyForKubernetesCluster` — no registry lookup needed.
15
+ *
16
+ * Populated by `MetricItemAggMV1mByK8sCluster_mv` (declared below;
17
+ * created idempotently by boot schema-sync — the service is registered
18
+ * in AnalyticsServices — and backfilled from `MetricItemV3` by the
19
+ * AddMetricEntityMinuteAggregateMaterializedViews migration). Rows whose
20
+ * resource carries no cluster entity (`k8sClusterEntityKey = ''`) are
21
+ * filtered out so the rollup stays small.
22
+ *
23
+ * Read access goes through
24
+ * `MetricService.tryBuildEntityAggregateMVStatement` — the dominant path
25
+ * for the Kubernetes cluster detail page's Metrics tab.
26
+ *
27
+ * No CRUD API; read-only infrastructure populated entirely by the MV.
28
+ */
29
+ export default class MetricItemAggMV1mByK8sCluster extends AnalyticsBaseModel {
30
+ constructor() {
31
+ const projectIdColumn = new AnalyticsTableColumn({
32
+ key: "projectId",
33
+ title: "Project ID",
34
+ description: "ID of project (tenant key, replicated from MetricItemV3)",
35
+ required: true,
36
+ type: TableColumnType.Text,
37
+ isTenantId: true,
38
+ });
39
+ const nameColumn = new AnalyticsTableColumn({
40
+ key: "name",
41
+ title: "Metric Name",
42
+ description: "Metric name (replicated from MetricItemV3)",
43
+ required: true,
44
+ type: TableColumnType.Text,
45
+ });
46
+ const k8sClusterEntityKeyColumn = new AnalyticsTableColumn({
47
+ key: "k8sClusterEntityKey",
48
+ title: "Kubernetes Cluster Entity Key",
49
+ description: "Stable 16-hex k8s cluster entity key (EntityKey.keyForKubernetesCluster) replicated from MetricItemV3.k8sClusterEntityKey at insert time. Rows without one are filtered out by the MV's WHERE clause so this column is always populated for rows that exist.",
50
+ required: true,
51
+ type: TableColumnType.Text,
52
+ });
53
+ const bucketTimeColumn = new AnalyticsTableColumn({
54
+ key: "bucketTime",
55
+ title: "Bucket Time",
56
+ description: "Start of the 1-minute bucket this row aggregates. Computed by the MV as toStartOfMinute(time).",
57
+ required: true,
58
+ type: TableColumnType.Date,
59
+ });
60
+ const valueSumStateColumn = new AnalyticsTableColumn({
61
+ key: "valueSumState",
62
+ title: "Sum (state)",
63
+ description: "AggregateFunction(sum, Float64) state for valueSum. Read via sumMerge(valueSumState).",
64
+ required: true,
65
+ type: TableColumnType.AggregateFunction,
66
+ aggregateFunctionDefinition: "sum, Float64",
67
+ });
68
+ const valueCountStateColumn = new AnalyticsTableColumn({
69
+ key: "valueCountState",
70
+ title: "Count (state)",
71
+ description: "AggregateFunction(count, Float64) state for valueCount. Read via countMerge(valueCountState).",
72
+ required: true,
73
+ type: TableColumnType.AggregateFunction,
74
+ aggregateFunctionDefinition: "count, Float64",
75
+ });
76
+ const valueMinStateColumn = new AnalyticsTableColumn({
77
+ key: "valueMinState",
78
+ title: "Min (state)",
79
+ description: "AggregateFunction(min, Float64) state. Read via minMerge(valueMinState).",
80
+ required: true,
81
+ type: TableColumnType.AggregateFunction,
82
+ aggregateFunctionDefinition: "min, Float64",
83
+ });
84
+ const valueMaxStateColumn = new AnalyticsTableColumn({
85
+ key: "valueMaxState",
86
+ title: "Max (state)",
87
+ description: "AggregateFunction(max, Float64) state. Read via maxMerge(valueMaxState).",
88
+ required: true,
89
+ type: TableColumnType.AggregateFunction,
90
+ aggregateFunctionDefinition: "max, Float64",
91
+ });
92
+ const retentionDateColumn = new AnalyticsTableColumn({
93
+ key: "retentionDate",
94
+ title: "Retention Date",
95
+ description: "Date after which this row is eligible for TTL deletion. Computed by the MV as max(retentionDate) per bucket — inherits from the source MetricItemV3 rows.",
96
+ required: true,
97
+ type: TableColumnType.Date,
98
+ });
99
+ super({
100
+ tableName: AnalyticsTableName.MetricItemAggMV1mByK8sCluster,
101
+ tableEngine: AnalyticsTableEngine.AggregatingMergeTree,
102
+ singularName: "Metric 1-Minute Aggregate (By Kubernetes Cluster Entity Key)",
103
+ pluralName: "Metric 1-Minute Aggregates (By Kubernetes Cluster Entity Key)",
104
+ tableColumns: [
105
+ projectIdColumn,
106
+ nameColumn,
107
+ k8sClusterEntityKeyColumn,
108
+ bucketTimeColumn,
109
+ valueSumStateColumn,
110
+ valueCountStateColumn,
111
+ valueMinStateColumn,
112
+ valueMaxStateColumn,
113
+ retentionDateColumn,
114
+ ],
115
+ projections: [],
116
+ /*
117
+ * Per-cluster materialized view, reading the ingest-stamped
118
+ * `k8sClusterEntityKey` scalar column (contract C3) rather than the
119
+ * raw attributes map. Canonical definition; created idempotently by
120
+ * the analytics schema-sync on boot
121
+ * (MetricItemAggMV1mByK8sClusterService is registered in
122
+ * AnalyticsServices, so a wiped ClickHouse volume self-heals) and
123
+ * backfilled by the AddMetricEntityMinuteAggregateMaterializedViews
124
+ * migration. Rows without a cluster entity are filtered out so the
125
+ * per-cluster MV stays small.
126
+ */
127
+ materializedViews: [
128
+ {
129
+ name: "MetricItemAggMV1mByK8sCluster_mv",
130
+ query: `CREATE MATERIALIZED VIEW IF NOT EXISTS MetricItemAggMV1mByK8sCluster_mv
131
+ TO MetricItemAggMV1mByK8sCluster
132
+ AS
133
+ SELECT
134
+ projectId,
135
+ name,
136
+ k8sClusterEntityKey,
137
+ toStartOfMinute(time) AS bucketTime,
138
+ sumState(toFloat64(coalesce(value, sum, 0))) AS valueSumState,
139
+ countState(toFloat64(coalesce(value, sum, 0))) AS valueCountState,
140
+ minState(toFloat64(coalesce(value, sum, 0))) AS valueMinState,
141
+ maxState(toFloat64(coalesce(value, sum, 0))) AS valueMaxState,
142
+ max(retentionDate) AS retentionDate
143
+ FROM MetricItemV3
144
+ WHERE k8sClusterEntityKey != ''
145
+ GROUP BY projectId, name, k8sClusterEntityKey, bucketTime`,
146
+ },
147
+ ],
148
+ sortKeys: ["projectId", "name", "k8sClusterEntityKey", "bucketTime"],
149
+ primaryKeys: ["projectId", "name", "k8sClusterEntityKey", "bucketTime"],
150
+ partitionKey: "toYYYYMM(bucketTime)",
151
+ // Align with this MV's GROUP BY (projectId, name, k8sClusterEntityKey).
152
+ shardingKey: "cityHash64(projectId, name, k8sClusterEntityKey)",
153
+ tableSettings: "ttl_only_drop_parts = 1, non_replicated_deduplication_window = 10000",
154
+ ttlExpression: "retentionDate DELETE",
155
+ });
156
+ }
157
+ }
158
+ //# sourceMappingURL=MetricItemAggMV1mByK8sCluster.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetricItemAggMV1mByK8sCluster.js","sourceRoot":"","sources":["../../../../Models/AnalyticsModels/MetricItemAggMV1mByK8sCluster.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,160 @@
1
+ import AnalyticsBaseModel from "./AnalyticsBaseModel/AnalyticsBaseModel";
2
+ import AnalyticsTableEngine from "../../Types/AnalyticsDatabase/AnalyticsTableEngine";
3
+ import AnalyticsTableName from "../../Types/AnalyticsDatabase/AnalyticsTableName";
4
+ import AnalyticsTableColumn from "../../Types/AnalyticsDatabase/TableColumn";
5
+ import TableColumnType from "../../Types/AnalyticsDatabase/TableColumnType";
6
+ /**
7
+ * Per-(service, minute) pre-aggregated rollup of `MetricItemV3` value
8
+ * samples — sibling of `MetricItemAggMV1mByHostV2`, keyed by the stable
9
+ * 16-hex `serviceEntityKey` the ingest pipeline stamps on every row whose
10
+ * resource carries a service identity (service.name, plus
11
+ * service.namespace when present — see the service resolver in
12
+ * Common/Server/Utils/Telemetry/TelemetryEntity).
13
+ *
14
+ * Because the namespace is folded into the key at ingest, ONE
15
+ * `service.name` can map to SEVERAL serviceEntityKeys (one per
16
+ * namespace variant). The read side therefore never derives a single
17
+ * key from the name: `MetricService.tryBuildEntityAggregateMVStatement`
18
+ * resolves the full key set from the Postgres TelemetryEntity registry
19
+ * and compiles `serviceEntityKey IN (<keys>)`, falling back to the raw
20
+ * table when the registry has no rows for the name.
21
+ *
22
+ * Populated by `MetricItemAggMV1mByService_mv` (declared below; created
23
+ * idempotently by boot schema-sync — the service is registered in
24
+ * AnalyticsServices — and backfilled from `MetricItemV3` by the
25
+ * AddMetricEntityMinuteAggregateMaterializedViews migration). Rows whose
26
+ * resource carries no service entity (`serviceEntityKey = ''`) are
27
+ * filtered out.
28
+ *
29
+ * No CRUD API; read-only infrastructure populated entirely by the MV.
30
+ */
31
+ export default class MetricItemAggMV1mByService extends AnalyticsBaseModel {
32
+ constructor() {
33
+ const projectIdColumn = new AnalyticsTableColumn({
34
+ key: "projectId",
35
+ title: "Project ID",
36
+ description: "ID of project (tenant key, replicated from MetricItemV3)",
37
+ required: true,
38
+ type: TableColumnType.Text,
39
+ isTenantId: true,
40
+ });
41
+ const nameColumn = new AnalyticsTableColumn({
42
+ key: "name",
43
+ title: "Metric Name",
44
+ description: "Metric name (replicated from MetricItemV3)",
45
+ required: true,
46
+ type: TableColumnType.Text,
47
+ });
48
+ const serviceEntityKeyColumn = new AnalyticsTableColumn({
49
+ key: "serviceEntityKey",
50
+ title: "Service Entity Key",
51
+ description: "Stable 16-hex service entity key (EntityKey.keyForService — service.name + optional service.namespace) replicated from MetricItemV3.serviceEntityKey at insert time. Rows without one are filtered out by the MV's WHERE clause so this column is always populated for rows that exist.",
52
+ required: true,
53
+ type: TableColumnType.Text,
54
+ });
55
+ const bucketTimeColumn = new AnalyticsTableColumn({
56
+ key: "bucketTime",
57
+ title: "Bucket Time",
58
+ description: "Start of the 1-minute bucket this row aggregates. Computed by the MV as toStartOfMinute(time).",
59
+ required: true,
60
+ type: TableColumnType.Date,
61
+ });
62
+ const valueSumStateColumn = new AnalyticsTableColumn({
63
+ key: "valueSumState",
64
+ title: "Sum (state)",
65
+ description: "AggregateFunction(sum, Float64) state for valueSum. Read via sumMerge(valueSumState).",
66
+ required: true,
67
+ type: TableColumnType.AggregateFunction,
68
+ aggregateFunctionDefinition: "sum, Float64",
69
+ });
70
+ const valueCountStateColumn = new AnalyticsTableColumn({
71
+ key: "valueCountState",
72
+ title: "Count (state)",
73
+ description: "AggregateFunction(count, Float64) state for valueCount. Read via countMerge(valueCountState).",
74
+ required: true,
75
+ type: TableColumnType.AggregateFunction,
76
+ aggregateFunctionDefinition: "count, Float64",
77
+ });
78
+ const valueMinStateColumn = new AnalyticsTableColumn({
79
+ key: "valueMinState",
80
+ title: "Min (state)",
81
+ description: "AggregateFunction(min, Float64) state. Read via minMerge(valueMinState).",
82
+ required: true,
83
+ type: TableColumnType.AggregateFunction,
84
+ aggregateFunctionDefinition: "min, Float64",
85
+ });
86
+ const valueMaxStateColumn = new AnalyticsTableColumn({
87
+ key: "valueMaxState",
88
+ title: "Max (state)",
89
+ description: "AggregateFunction(max, Float64) state. Read via maxMerge(valueMaxState).",
90
+ required: true,
91
+ type: TableColumnType.AggregateFunction,
92
+ aggregateFunctionDefinition: "max, Float64",
93
+ });
94
+ const retentionDateColumn = new AnalyticsTableColumn({
95
+ key: "retentionDate",
96
+ title: "Retention Date",
97
+ description: "Date after which this row is eligible for TTL deletion. Computed by the MV as max(retentionDate) per bucket — inherits from the source MetricItemV3 rows.",
98
+ required: true,
99
+ type: TableColumnType.Date,
100
+ });
101
+ super({
102
+ tableName: AnalyticsTableName.MetricItemAggMV1mByService,
103
+ tableEngine: AnalyticsTableEngine.AggregatingMergeTree,
104
+ singularName: "Metric 1-Minute Aggregate (By Service Entity Key)",
105
+ pluralName: "Metric 1-Minute Aggregates (By Service Entity Key)",
106
+ tableColumns: [
107
+ projectIdColumn,
108
+ nameColumn,
109
+ serviceEntityKeyColumn,
110
+ bucketTimeColumn,
111
+ valueSumStateColumn,
112
+ valueCountStateColumn,
113
+ valueMinStateColumn,
114
+ valueMaxStateColumn,
115
+ retentionDateColumn,
116
+ ],
117
+ projections: [],
118
+ /*
119
+ * Per-service materialized view, reading the ingest-stamped
120
+ * `serviceEntityKey` scalar column (contract C3) rather than the
121
+ * raw attributes map. Canonical definition; created idempotently by
122
+ * the analytics schema-sync on boot (MetricItemAggMV1mByServiceService
123
+ * is registered in AnalyticsServices, so a wiped ClickHouse volume
124
+ * self-heals) and backfilled by the
125
+ * AddMetricEntityMinuteAggregateMaterializedViews migration. Rows
126
+ * without a service entity are filtered out so the per-service MV
127
+ * stays smaller than the raw table.
128
+ */
129
+ materializedViews: [
130
+ {
131
+ name: "MetricItemAggMV1mByService_mv",
132
+ query: `CREATE MATERIALIZED VIEW IF NOT EXISTS MetricItemAggMV1mByService_mv
133
+ TO MetricItemAggMV1mByService
134
+ AS
135
+ SELECT
136
+ projectId,
137
+ name,
138
+ serviceEntityKey,
139
+ toStartOfMinute(time) AS bucketTime,
140
+ sumState(toFloat64(coalesce(value, sum, 0))) AS valueSumState,
141
+ countState(toFloat64(coalesce(value, sum, 0))) AS valueCountState,
142
+ minState(toFloat64(coalesce(value, sum, 0))) AS valueMinState,
143
+ maxState(toFloat64(coalesce(value, sum, 0))) AS valueMaxState,
144
+ max(retentionDate) AS retentionDate
145
+ FROM MetricItemV3
146
+ WHERE serviceEntityKey != ''
147
+ GROUP BY projectId, name, serviceEntityKey, bucketTime`,
148
+ },
149
+ ],
150
+ sortKeys: ["projectId", "name", "serviceEntityKey", "bucketTime"],
151
+ primaryKeys: ["projectId", "name", "serviceEntityKey", "bucketTime"],
152
+ partitionKey: "toYYYYMM(bucketTime)",
153
+ // Align with this MV's GROUP BY (projectId, name, serviceEntityKey).
154
+ shardingKey: "cityHash64(projectId, name, serviceEntityKey)",
155
+ tableSettings: "ttl_only_drop_parts = 1, non_replicated_deduplication_window = 10000",
156
+ ttlExpression: "retentionDate DELETE",
157
+ });
158
+ }
159
+ }
160
+ //# sourceMappingURL=MetricItemAggMV1mByService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetricItemAggMV1mByService.js","sourceRoot":"","sources":["../../../../Models/AnalyticsModels/MetricItemAggMV1mByService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,351 @@
1
+ import AnalyticsBaseModel from "./AnalyticsBaseModel/AnalyticsBaseModel";
2
+ import Route from "../../Types/API/Route";
3
+ import AnalyticsTableEngine from "../../Types/AnalyticsDatabase/AnalyticsTableEngine";
4
+ import AnalyticsTableName from "../../Types/AnalyticsDatabase/AnalyticsTableName";
5
+ import AnalyticsTableColumn from "../../Types/AnalyticsDatabase/TableColumn";
6
+ import TableColumnType from "../../Types/AnalyticsDatabase/TableColumnType";
7
+ import Permission from "../../Types/Permission";
8
+ /*
9
+ * One NetFlow v5 flow record exported by a network device, received by a
10
+ * probe's NetFlow receiver and correlated to a NetworkDevice on ingest.
11
+ * Powers top-talker / bandwidth-attribution queries: who talked to whom,
12
+ * over which protocol/port, and how many bytes/packets, per device.
13
+ *
14
+ * Access control mirrors the NetworkDevice database model — flows are an
15
+ * attribute of the device that exported them.
16
+ */
17
+ const readPermissions = [
18
+ Permission.ProjectOwner,
19
+ Permission.ProjectAdmin,
20
+ Permission.ProjectMember,
21
+ Permission.Viewer,
22
+ Permission.SettingsAdmin,
23
+ Permission.SettingsMember,
24
+ Permission.SettingsViewer,
25
+ Permission.ReadNetworkDevice,
26
+ ];
27
+ const createPermissions = [
28
+ Permission.ProjectOwner,
29
+ Permission.ProjectAdmin,
30
+ Permission.ProjectMember,
31
+ Permission.SettingsAdmin,
32
+ Permission.SettingsMember,
33
+ Permission.CreateNetworkDevice,
34
+ ];
35
+ export default class NetworkFlow extends AnalyticsBaseModel {
36
+ constructor() {
37
+ const projectIdColumn = new AnalyticsTableColumn({
38
+ key: "projectId",
39
+ title: "Project ID",
40
+ description: "ID of project",
41
+ required: true,
42
+ type: TableColumnType.ObjectID,
43
+ isTenantId: true,
44
+ accessControl: {
45
+ read: readPermissions,
46
+ create: createPermissions,
47
+ update: [],
48
+ },
49
+ });
50
+ /*
51
+ * Required (not Nullable) even though a flow could in principle lack a
52
+ * device: the ingest path DROPS flows whose exporter matches no
53
+ * NetworkDevice (there is no project to attribute them to), so every
54
+ * stored row has one — and the column sits in the sort key, where
55
+ * ClickHouse rejects Nullable columns.
56
+ */
57
+ const networkDeviceIdColumn = new AnalyticsTableColumn({
58
+ key: "networkDeviceId",
59
+ title: "Network Device ID",
60
+ description: "ID of the NetworkDevice that exported this flow (correlated from the exporter IP on ingest)",
61
+ required: true,
62
+ type: TableColumnType.ObjectID,
63
+ accessControl: {
64
+ read: readPermissions,
65
+ create: createPermissions,
66
+ update: [],
67
+ },
68
+ });
69
+ const exporterIpColumn = new AnalyticsTableColumn({
70
+ key: "exporterIp",
71
+ isLowCardinality: true,
72
+ title: "Exporter IP",
73
+ description: "Source IP of the NetFlow export datagram — the router/switch that observed the flow",
74
+ required: true,
75
+ type: TableColumnType.Text,
76
+ accessControl: {
77
+ read: readPermissions,
78
+ create: createPermissions,
79
+ update: [],
80
+ },
81
+ });
82
+ const srcIpColumn = new AnalyticsTableColumn({
83
+ key: "srcIp",
84
+ codec: { codec: "ZSTD", level: 1 },
85
+ title: "Source IP",
86
+ description: "Source IP address of the flow's traffic",
87
+ required: true,
88
+ type: TableColumnType.Text,
89
+ accessControl: {
90
+ read: readPermissions,
91
+ create: createPermissions,
92
+ update: [],
93
+ },
94
+ });
95
+ const dstIpColumn = new AnalyticsTableColumn({
96
+ key: "dstIp",
97
+ codec: { codec: "ZSTD", level: 1 },
98
+ title: "Destination IP",
99
+ description: "Destination IP address of the flow's traffic",
100
+ required: true,
101
+ type: TableColumnType.Text,
102
+ accessControl: {
103
+ read: readPermissions,
104
+ create: createPermissions,
105
+ update: [],
106
+ },
107
+ });
108
+ const srcPortColumn = new AnalyticsTableColumn({
109
+ key: "srcPort",
110
+ title: "Source Port",
111
+ description: "TCP/UDP source port (0 when not applicable)",
112
+ required: true,
113
+ type: TableColumnType.Number,
114
+ accessControl: {
115
+ read: readPermissions,
116
+ create: createPermissions,
117
+ update: [],
118
+ },
119
+ });
120
+ const dstPortColumn = new AnalyticsTableColumn({
121
+ key: "dstPort",
122
+ title: "Destination Port",
123
+ description: "TCP/UDP destination port (0 when not applicable)",
124
+ required: true,
125
+ type: TableColumnType.Number,
126
+ accessControl: {
127
+ read: readPermissions,
128
+ create: createPermissions,
129
+ update: [],
130
+ },
131
+ });
132
+ const protocolColumn = new AnalyticsTableColumn({
133
+ key: "protocol",
134
+ title: "Protocol",
135
+ description: "IP protocol number (6 = TCP, 17 = UDP, 1 = ICMP, ...)",
136
+ required: true,
137
+ type: TableColumnType.Number,
138
+ accessControl: {
139
+ read: readPermissions,
140
+ create: createPermissions,
141
+ update: [],
142
+ },
143
+ });
144
+ const octetsColumn = new AnalyticsTableColumn({
145
+ key: "octets",
146
+ title: "Octets",
147
+ description: "Total bytes in the flow",
148
+ required: true,
149
+ type: TableColumnType.UInt64,
150
+ accessControl: {
151
+ read: readPermissions,
152
+ create: createPermissions,
153
+ update: [],
154
+ },
155
+ });
156
+ const packetsColumn = new AnalyticsTableColumn({
157
+ key: "packets",
158
+ title: "Packets",
159
+ description: "Total packets in the flow",
160
+ required: true,
161
+ type: TableColumnType.UInt64,
162
+ accessControl: {
163
+ read: readPermissions,
164
+ create: createPermissions,
165
+ update: [],
166
+ },
167
+ });
168
+ const flowStartAtColumn = new AnalyticsTableColumn({
169
+ key: "flowStartAt",
170
+ codec: [{ codec: "DoubleDelta" }, { codec: "ZSTD", level: 1 }],
171
+ title: "Flow Start",
172
+ description: "Wall-clock time the flow started",
173
+ required: true,
174
+ type: TableColumnType.DateTime64,
175
+ accessControl: {
176
+ read: readPermissions,
177
+ create: createPermissions,
178
+ update: [],
179
+ },
180
+ });
181
+ const flowEndAtColumn = new AnalyticsTableColumn({
182
+ key: "flowEndAt",
183
+ codec: [{ codec: "DoubleDelta" }, { codec: "ZSTD", level: 1 }],
184
+ title: "Flow End",
185
+ description: "Wall-clock time the flow ended",
186
+ required: true,
187
+ type: TableColumnType.DateTime64,
188
+ accessControl: {
189
+ read: readPermissions,
190
+ create: createPermissions,
191
+ update: [],
192
+ },
193
+ });
194
+ const ingestedAtColumn = new AnalyticsTableColumn({
195
+ key: "ingestedAt",
196
+ codec: [{ codec: "DoubleDelta" }, { codec: "ZSTD", level: 1 }],
197
+ title: "Ingested At",
198
+ description: "When the server ingested this flow record",
199
+ required: true,
200
+ type: TableColumnType.DateTime64,
201
+ accessControl: {
202
+ read: readPermissions,
203
+ create: createPermissions,
204
+ update: [],
205
+ },
206
+ });
207
+ super({
208
+ tableName: AnalyticsTableName.NetworkFlow,
209
+ tableEngine: AnalyticsTableEngine.MergeTree,
210
+ singularName: "Network Flow",
211
+ accessControl: {
212
+ read: readPermissions,
213
+ create: createPermissions,
214
+ update: [
215
+ Permission.ProjectOwner,
216
+ Permission.ProjectAdmin,
217
+ Permission.ProjectMember,
218
+ Permission.SettingsAdmin,
219
+ Permission.SettingsMember,
220
+ Permission.EditNetworkDevice,
221
+ ],
222
+ delete: [
223
+ Permission.ProjectOwner,
224
+ Permission.ProjectAdmin,
225
+ Permission.ProjectMember,
226
+ Permission.SettingsAdmin,
227
+ Permission.SettingsMember,
228
+ Permission.DeleteNetworkDevice,
229
+ ],
230
+ },
231
+ pluralName: "Network Flows",
232
+ crudApiPath: new Route("/network-flow"),
233
+ tableColumns: [
234
+ projectIdColumn,
235
+ networkDeviceIdColumn,
236
+ exporterIpColumn,
237
+ srcIpColumn,
238
+ dstIpColumn,
239
+ srcPortColumn,
240
+ dstPortColumn,
241
+ protocolColumn,
242
+ octetsColumn,
243
+ packetsColumn,
244
+ flowStartAtColumn,
245
+ flowEndAtColumn,
246
+ ingestedAtColumn,
247
+ ],
248
+ projections: [],
249
+ sortKeys: ["projectId", "networkDeviceId", "flowStartAt"],
250
+ primaryKeys: ["projectId", "networkDeviceId", "flowStartAt"],
251
+ partitionKey: "toYYYYMMDD(flowStartAt)",
252
+ /*
253
+ * Shard by (projectId, networkDeviceId, flowStartAt) — mirrors how
254
+ * Log shards on its always-present sort-key columns: the
255
+ * high-entropy time component spreads even a single very busy
256
+ * exporter across all shards.
257
+ */
258
+ shardingKey: "cityHash64(projectId, networkDeviceId, flowStartAt)",
259
+ tableSettings: "non_replicated_deduplication_window = 10000",
260
+ /*
261
+ * Flows are the highest-volume rows in the product (a single busy
262
+ * router can export thousands per second), so the table must never
263
+ * grow unboundedly. Fixed-window TTL for now; per-project retention
264
+ * (a retentionDate column computed at ingest, like Log/Metric) is
265
+ * the phase-2 follow-up. Keyed on server-assigned ingestedAt so a
266
+ * device with a wrong clock cannot make rows expire early.
267
+ */
268
+ ttlExpression: "ingestedAt + INTERVAL 30 DAY DELETE",
269
+ defaultSortColumn: "flowStartAt",
270
+ });
271
+ }
272
+ get projectId() {
273
+ return this.getColumnValue("projectId");
274
+ }
275
+ set projectId(v) {
276
+ this.setColumnValue("projectId", v);
277
+ }
278
+ get networkDeviceId() {
279
+ return this.getColumnValue("networkDeviceId");
280
+ }
281
+ set networkDeviceId(v) {
282
+ this.setColumnValue("networkDeviceId", v);
283
+ }
284
+ get exporterIp() {
285
+ return this.getColumnValue("exporterIp");
286
+ }
287
+ set exporterIp(v) {
288
+ this.setColumnValue("exporterIp", v);
289
+ }
290
+ get srcIp() {
291
+ return this.getColumnValue("srcIp");
292
+ }
293
+ set srcIp(v) {
294
+ this.setColumnValue("srcIp", v);
295
+ }
296
+ get dstIp() {
297
+ return this.getColumnValue("dstIp");
298
+ }
299
+ set dstIp(v) {
300
+ this.setColumnValue("dstIp", v);
301
+ }
302
+ get srcPort() {
303
+ return this.getColumnValue("srcPort");
304
+ }
305
+ set srcPort(v) {
306
+ this.setColumnValue("srcPort", v);
307
+ }
308
+ get dstPort() {
309
+ return this.getColumnValue("dstPort");
310
+ }
311
+ set dstPort(v) {
312
+ this.setColumnValue("dstPort", v);
313
+ }
314
+ get protocol() {
315
+ return this.getColumnValue("protocol");
316
+ }
317
+ set protocol(v) {
318
+ this.setColumnValue("protocol", v);
319
+ }
320
+ get octets() {
321
+ return this.getColumnValue("octets");
322
+ }
323
+ set octets(v) {
324
+ this.setColumnValue("octets", v);
325
+ }
326
+ get packets() {
327
+ return this.getColumnValue("packets");
328
+ }
329
+ set packets(v) {
330
+ this.setColumnValue("packets", v);
331
+ }
332
+ get flowStartAt() {
333
+ return this.getColumnValue("flowStartAt");
334
+ }
335
+ set flowStartAt(v) {
336
+ this.setColumnValue("flowStartAt", v);
337
+ }
338
+ get flowEndAt() {
339
+ return this.getColumnValue("flowEndAt");
340
+ }
341
+ set flowEndAt(v) {
342
+ this.setColumnValue("flowEndAt", v);
343
+ }
344
+ get ingestedAt() {
345
+ return this.getColumnValue("ingestedAt");
346
+ }
347
+ set ingestedAt(v) {
348
+ this.setColumnValue("ingestedAt", v);
349
+ }
350
+ }
351
+ //# sourceMappingURL=NetworkFlow.js.map