@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
@@ -18,6 +18,7 @@ import TableMetadata from "../../Types/Database/TableMetadata";
18
18
  import Email from "../../Types/Email";
19
19
  import HashedString from "../../Types/HashedString";
20
20
  import IconProp from "../../Types/Icon/IconProp";
21
+ import { JSONObject } from "../../Types/JSON";
21
22
  import Name from "../../Types/Name";
22
23
  import ObjectID from "../../Types/ObjectID";
23
24
  import Permission from "../../Types/Permission";
@@ -618,6 +619,42 @@ class User extends UserModel {
618
619
  })
619
620
  public utmUrl?: string = undefined;
620
621
 
622
+ @ColumnAccessControl({
623
+ create: [Permission.Public],
624
+ read: [],
625
+ update: [],
626
+ })
627
+ @TableColumn({
628
+ type: TableColumnType.JSON,
629
+ hideColumnInDocumentation: true,
630
+ title: "Ad Click IDs",
631
+ description:
632
+ "Ad platform click identifiers (gclid, fbclid, msclkid, etc.) captured on the visit that led to signup. Used for offline conversion uploads to ad platforms.",
633
+ })
634
+ @Column({
635
+ type: ColumnType.JSON,
636
+ nullable: true,
637
+ })
638
+ public clickIds?: JSONObject = undefined;
639
+
640
+ @ColumnAccessControl({
641
+ create: [Permission.Public],
642
+ read: [],
643
+ update: [],
644
+ })
645
+ @TableColumn({
646
+ type: TableColumnType.JSON,
647
+ hideColumnInDocumentation: true,
648
+ title: "First Touch Attribution",
649
+ description:
650
+ "UTM parameters, click IDs, landing URL and referrer from the visitor's first attributed visit. The utm* columns hold last-touch values.",
651
+ })
652
+ @Column({
653
+ type: ColumnType.JSON,
654
+ nullable: true,
655
+ })
656
+ public firstTouchAttribution?: JSONObject = undefined;
657
+
621
658
  @ColumnAccessControl({
622
659
  create: [],
623
660
  read: [],
@@ -327,6 +327,23 @@ export default class BaseAnalyticsAPI<
327
327
  );
328
328
  }
329
329
 
330
+ /*
331
+ * Server-side clamp on the client-sent aggregate limit — nothing else
332
+ * bounds it, so an arbitrary client could request limit=999999999
333
+ * rows. Clamped to LIMIT_PER_PROJECT (never lower): grouped chart
334
+ * queries legitimately use the full 10k (groups × buckets).
335
+ * Non-numeric/absent limits are left untouched for the service layer's
336
+ * own defaulting.
337
+ */
338
+ public static clampAggregateLimit(
339
+ aggregateBy: AggregateBy<AnalyticsDataModel>,
340
+ ): void {
341
+ const requestedLimit: number = Number(aggregateBy.limit);
342
+ if (Number.isFinite(requestedLimit) && requestedLimit > LIMIT_PER_PROJECT) {
343
+ aggregateBy.limit = LIMIT_PER_PROJECT;
344
+ }
345
+ }
346
+
330
347
  @CaptureSpan()
331
348
  public async getAggregate(
332
349
  req: ExpressRequest,
@@ -357,6 +374,12 @@ export default class BaseAnalyticsAPI<
357
374
  throw new BadRequestException("AggregateBy is required");
358
375
  }
359
376
 
377
+ /*
378
+ * Applied before the cache key is computed so an over-limit request
379
+ * shares the cache slot of its clamped equivalent.
380
+ */
381
+ BaseAnalyticsAPI.clampAggregateLimit(aggregateBy);
382
+
360
383
  const databaseProps: DatabaseCommonInteractionProps =
361
384
  await CommonAPI.getDatabaseCommonInteractionProps(req);
362
385
 
@@ -32,6 +32,7 @@ export interface LicenseInstanceUpsert {
32
32
  // Usage fields are only set on report-user-count, not on validate.
33
33
  userCount?: number | undefined;
34
34
  userEmailHashes?: Array<string> | undefined;
35
+ masterAdminEmails?: Array<string> | undefined;
35
36
  lastReportedAt?: Date | undefined;
36
37
  }
37
38
 
@@ -215,6 +216,10 @@ export default class EnterpriseLicenseAPI extends BaseAPI<
215
216
  EnterpriseLicenseUsageUtil.sanitizeUserEmailHashes(
216
217
  req.body["userEmailHashes"],
217
218
  );
219
+ const masterAdminEmails: Array<string> =
220
+ EnterpriseLicenseUsageUtil.sanitizeMasterAdminEmails(
221
+ req.body["masterAdminEmails"],
222
+ );
218
223
 
219
224
  if (instanceId) {
220
225
  /*
@@ -227,6 +232,7 @@ export default class EnterpriseLicenseAPI extends BaseAPI<
227
232
  host: instanceHost || undefined,
228
233
  userCount: userCount,
229
234
  userEmailHashes: userEmailHashes,
235
+ masterAdminEmails: masterAdminEmails,
230
236
  lastReportedAt: reportedAt,
231
237
  });
232
238
  }
@@ -372,6 +378,10 @@ export default class EnterpriseLicenseAPI extends BaseAPI<
372
378
  newInstance.userEmailHashes = data.userEmailHashes;
373
379
  }
374
380
 
381
+ if (data.masterAdminEmails !== undefined) {
382
+ newInstance.masterAdminEmails = data.masterAdminEmails;
383
+ }
384
+
375
385
  if (data.lastReportedAt !== undefined) {
376
386
  newInstance.lastReportedAt = data.lastReportedAt;
377
387
  }
@@ -432,6 +442,10 @@ export default class EnterpriseLicenseAPI extends BaseAPI<
432
442
  updateData.userEmailHashes = data.userEmailHashes;
433
443
  }
434
444
 
445
+ if (data.masterAdminEmails !== undefined) {
446
+ updateData.masterAdminEmails = data.masterAdminEmails;
447
+ }
448
+
435
449
  if (data.lastReportedAt !== undefined) {
436
450
  updateData.lastReportedAt = data.lastReportedAt;
437
451
  }
@@ -337,6 +337,90 @@ export const SubscriptionPlans: Array<SubscriptionPlan> =
337
337
  export const AnalyticsKey: string = process.env["ANALYTICS_KEY"] || "";
338
338
  export const AnalyticsHost: string = process.env["ANALYTICS_HOST"] || "";
339
339
 
340
+ /*
341
+ * Google Ads offline conversion uploads (MarketingConversions worker job).
342
+ * Server-only secrets — must never be added to FRONTEND_ENV_ALLOW_LIST.
343
+ */
344
+ export const GoogleAdsDeveloperToken: string =
345
+ process.env["GOOGLE_ADS_DEVELOPER_TOKEN"] || "";
346
+ export const GoogleAdsOAuthClientId: string =
347
+ process.env["GOOGLE_ADS_OAUTH_CLIENT_ID"] || "";
348
+ export const GoogleAdsOAuthClientSecret: string =
349
+ process.env["GOOGLE_ADS_OAUTH_CLIENT_SECRET"] || "";
350
+ export const GoogleAdsOAuthRefreshToken: string =
351
+ process.env["GOOGLE_ADS_OAUTH_REFRESH_TOKEN"] || "";
352
+ // Digits only, no dashes (e.g. 1234567890).
353
+ export const GoogleAdsCustomerId: string =
354
+ process.env["GOOGLE_ADS_CUSTOMER_ID"] || "";
355
+ // Manager (MCC) account id when the OAuth user accesses the account via a manager.
356
+ export const GoogleAdsLoginCustomerId: string =
357
+ process.env["GOOGLE_ADS_LOGIN_CUSTOMER_ID"] || "";
358
+ /*
359
+ * Google sunsets Ads API versions roughly yearly (v20 died 2026-06-10) —
360
+ * keep this default on a currently supported version and prefer setting
361
+ * GOOGLE_ADS_API_VERSION explicitly in production.
362
+ */
363
+ export const GoogleAdsApiVersion: string =
364
+ process.env["GOOGLE_ADS_API_VERSION"] || "v23";
365
+ // Numeric conversion action ids from Google Ads (Goals -> Conversions).
366
+ export const GoogleAdsSignUpConversionActionId: string =
367
+ process.env["GOOGLE_ADS_SIGNUP_CONVERSION_ACTION_ID"] || "";
368
+ export const GoogleAdsPaidSubscriptionConversionActionId: string =
369
+ process.env["GOOGLE_ADS_PAID_SUBSCRIPTION_CONVERSION_ACTION_ID"] || "";
370
+
371
+ // Meta (Facebook) Conversions API. Server-only secrets.
372
+ export const MetaConversionsPixelId: string =
373
+ process.env["META_CONVERSIONS_PIXEL_ID"] || "";
374
+ export const MetaConversionsAccessToken: string =
375
+ process.env["META_CONVERSIONS_ACCESS_TOKEN"] || "";
376
+ export const MetaGraphApiVersion: string =
377
+ process.env["META_GRAPH_API_VERSION"] || "v22.0";
378
+
379
+ // Microsoft Advertising (Bing Ads) offline conversions. Server-only secrets.
380
+ export const MicrosoftAdsDeveloperToken: string =
381
+ process.env["MICROSOFT_ADS_DEVELOPER_TOKEN"] || "";
382
+ export const MicrosoftAdsOAuthClientId: string =
383
+ process.env["MICROSOFT_ADS_OAUTH_CLIENT_ID"] || "";
384
+ export const MicrosoftAdsOAuthClientSecret: string =
385
+ process.env["MICROSOFT_ADS_OAUTH_CLIENT_SECRET"] || "";
386
+ export const MicrosoftAdsOAuthRefreshToken: string =
387
+ process.env["MICROSOFT_ADS_OAUTH_REFRESH_TOKEN"] || "";
388
+ export const MicrosoftAdsCustomerId: string =
389
+ process.env["MICROSOFT_ADS_CUSTOMER_ID"] || "";
390
+ export const MicrosoftAdsAccountId: string =
391
+ process.env["MICROSOFT_ADS_ACCOUNT_ID"] || "";
392
+ // Offline conversion goals are matched by NAME in Microsoft Advertising.
393
+ export const MicrosoftAdsSignUpConversionName: string =
394
+ process.env["MICROSOFT_ADS_SIGNUP_CONVERSION_NAME"] || "";
395
+ export const MicrosoftAdsPaidSubscriptionConversionName: string =
396
+ process.env["MICROSOFT_ADS_PAID_SUBSCRIPTION_CONVERSION_NAME"] || "";
397
+
398
+ // LinkedIn Conversions API. Server-only secrets.
399
+ export const LinkedInConversionsAccessToken: string =
400
+ process.env["LINKEDIN_CONVERSIONS_ACCESS_TOKEN"] || "";
401
+ /*
402
+ * LinkedIn publishes a new Marketing API version monthly and supports each
403
+ * for ~12 months — keep this default recent and prefer setting
404
+ * LINKEDIN_API_VERSION explicitly in production.
405
+ */
406
+ export const LinkedInApiVersion: string =
407
+ process.env["LINKEDIN_API_VERSION"] || "202606";
408
+ // Numeric conversion rule ids (urn:lla:llaPartnerConversion:{id}).
409
+ export const LinkedInSignUpConversionId: string =
410
+ process.env["LINKEDIN_SIGNUP_CONVERSION_ID"] || "";
411
+ export const LinkedInPaidSubscriptionConversionId: string =
412
+ process.env["LINKEDIN_PAID_SUBSCRIPTION_CONVERSION_ID"] || "";
413
+
414
+ // Reddit Conversions API. Server-only secrets.
415
+ export const RedditAdsOAuthClientId: string =
416
+ process.env["REDDIT_ADS_OAUTH_CLIENT_ID"] || "";
417
+ export const RedditAdsOAuthClientSecret: string =
418
+ process.env["REDDIT_ADS_OAUTH_CLIENT_SECRET"] || "";
419
+ export const RedditAdsOAuthRefreshToken: string =
420
+ process.env["REDDIT_ADS_OAUTH_REFRESH_TOKEN"] || "";
421
+ export const RedditAdsAccountId: string =
422
+ process.env["REDDIT_ADS_ACCOUNT_ID"] || "";
423
+
340
424
  export const DisableAutomaticIncidentCreation: boolean =
341
425
  process.env["DISABLE_AUTOMATIC_INCIDENT_CREATION"] === "true";
342
426
 
@@ -0,0 +1,38 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ /*
4
+ * OpenTelemetry stamps isMonotonic / aggregationTemporality on every
5
+ * ClickHouse metric row at ingest, but the browser only ever reads the
6
+ * Postgres MetricType catalog (name/description/unit). Denormalize both
7
+ * counter-semantics fields onto the catalog so the metric explorer can
8
+ * auto-suggest a rate view for cumulative monotonic counters.
9
+ *
10
+ * Both columns are nullable: NULL means "not reported yet" (rows created
11
+ * before this migration, or metrics whose instrument type carries no
12
+ * monotonicity — e.g. gauges). The ingest upsert only writes the fields
13
+ * when OTel actually reported them, so NULLs are never clobbered with
14
+ * fabricated values.
15
+ */
16
+ export class AddCounterSemanticsToMetricType1784191414522
17
+ implements MigrationInterface
18
+ {
19
+ public name = "AddCounterSemanticsToMetricType1784191414522";
20
+
21
+ public async up(queryRunner: QueryRunner): Promise<void> {
22
+ await queryRunner.query(
23
+ `ALTER TABLE "MetricType" ADD "isMonotonic" boolean`,
24
+ );
25
+ await queryRunner.query(
26
+ `ALTER TABLE "MetricType" ADD "aggregationTemporality" character varying(100)`,
27
+ );
28
+ }
29
+
30
+ public async down(queryRunner: QueryRunner): Promise<void> {
31
+ await queryRunner.query(
32
+ `ALTER TABLE "MetricType" DROP COLUMN "aggregationTemporality"`,
33
+ );
34
+ await queryRunner.query(
35
+ `ALTER TABLE "MetricType" DROP COLUMN "isMonotonic"`,
36
+ );
37
+ }
38
+ }
@@ -0,0 +1,28 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ /*
4
+ * MetricSavedView historically served only the metric LIST page. The
5
+ * metrics EXPLORER page now mounts its own saved-views control on the
6
+ * same table, so each row needs to say which surface it belongs to —
7
+ * otherwise the two controls would cross-list each other's views.
8
+ *
9
+ * The column is nullable on purpose: every pre-existing row was created
10
+ * by the list page, and readers treat NULL as "list". No backfill needed.
11
+ */
12
+ export class AddViewTypeToMetricSavedView1784191414600
13
+ implements MigrationInterface
14
+ {
15
+ public name = "AddViewTypeToMetricSavedView1784191414600";
16
+
17
+ public async up(queryRunner: QueryRunner): Promise<void> {
18
+ await queryRunner.query(
19
+ `ALTER TABLE "MetricSavedView" ADD "viewType" character varying(100)`,
20
+ );
21
+ }
22
+
23
+ public async down(queryRunner: QueryRunner): Promise<void> {
24
+ await queryRunner.query(
25
+ `ALTER TABLE "MetricSavedView" DROP COLUMN "viewType"`,
26
+ );
27
+ }
28
+ }
@@ -0,0 +1,108 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ /*
4
+ * Generated with generate-postgres-migration, then pruned: the generator
5
+ * also emitted a DROP + re-ADD of NetworkDeviceDiscoveryScan.snmpV3AuthKey /
6
+ * snmpV3PrivKey (text -> varchar type churn that would destroy stored keys)
7
+ * and unrelated OnCallDutyPolicyScheduleLayer default churn. Only the
8
+ * statements for the new inventory/discovery columns were kept.
9
+ */
10
+ export class AddNetworkDeviceInventoryAndDiscoverySchedule1784211212164
11
+ implements MigrationInterface
12
+ {
13
+ public name = "AddNetworkDeviceInventoryAndDiscoverySchedule1784211212164";
14
+
15
+ public async up(queryRunner: QueryRunner): Promise<void> {
16
+ await queryRunner.query(
17
+ `ALTER TABLE "NetworkDevice" ADD "sysObjectId" character varying(100)`,
18
+ );
19
+ await queryRunner.query(
20
+ `ALTER TABLE "NetworkDevice" ADD "sysLocation" character varying(100)`,
21
+ );
22
+ await queryRunner.query(
23
+ `ALTER TABLE "NetworkDevice" ADD "sysContact" character varying(100)`,
24
+ );
25
+ await queryRunner.query(
26
+ `ALTER TABLE "NetworkDevice" ADD "vendor" character varying(100)`,
27
+ );
28
+ await queryRunner.query(
29
+ `ALTER TABLE "NetworkDevice" ADD "deviceModel" character varying(100)`,
30
+ );
31
+ await queryRunner.query(
32
+ `ALTER TABLE "NetworkDevice" ADD "serialNumber" character varying(100)`,
33
+ );
34
+ await queryRunner.query(
35
+ `ALTER TABLE "NetworkDevice" ADD "firmwareVersion" character varying(100)`,
36
+ );
37
+ await queryRunner.query(
38
+ `ALTER TABLE "NetworkDevice" ADD "softwareVersion" character varying(100)`,
39
+ );
40
+ await queryRunner.query(
41
+ `ALTER TABLE "NetworkDevice" ADD "lastRebootedAt" TIMESTAMP WITH TIME ZONE`,
42
+ );
43
+ await queryRunner.query(
44
+ `ALTER TABLE "NetworkDevice" ADD "cdpNeighbors" jsonb`,
45
+ );
46
+ await queryRunner.query(
47
+ `ALTER TABLE "NetworkDeviceDiscoveryScan" ADD "isRecurring" boolean NOT NULL DEFAULT false`,
48
+ );
49
+ await queryRunner.query(
50
+ `ALTER TABLE "NetworkDeviceDiscoveryScan" ADD "rescanIntervalInMinutes" integer`,
51
+ );
52
+ await queryRunner.query(
53
+ `ALTER TABLE "NetworkDeviceDiscoveryScan" ADD "nextScanAt" TIMESTAMP WITH TIME ZONE`,
54
+ );
55
+ await queryRunner.query(
56
+ `ALTER TABLE "NetworkInterface" ADD "macAddress" character varying(100)`,
57
+ );
58
+ await queryRunner.query(
59
+ `ALTER TABLE "NetworkInterface" ADD "interfaceType" integer`,
60
+ );
61
+ }
62
+
63
+ public async down(queryRunner: QueryRunner): Promise<void> {
64
+ await queryRunner.query(
65
+ `ALTER TABLE "NetworkInterface" DROP COLUMN "interfaceType"`,
66
+ );
67
+ await queryRunner.query(
68
+ `ALTER TABLE "NetworkInterface" DROP COLUMN "macAddress"`,
69
+ );
70
+ await queryRunner.query(
71
+ `ALTER TABLE "NetworkDeviceDiscoveryScan" DROP COLUMN "nextScanAt"`,
72
+ );
73
+ await queryRunner.query(
74
+ `ALTER TABLE "NetworkDeviceDiscoveryScan" DROP COLUMN "rescanIntervalInMinutes"`,
75
+ );
76
+ await queryRunner.query(
77
+ `ALTER TABLE "NetworkDeviceDiscoveryScan" DROP COLUMN "isRecurring"`,
78
+ );
79
+ await queryRunner.query(
80
+ `ALTER TABLE "NetworkDevice" DROP COLUMN "cdpNeighbors"`,
81
+ );
82
+ await queryRunner.query(
83
+ `ALTER TABLE "NetworkDevice" DROP COLUMN "lastRebootedAt"`,
84
+ );
85
+ await queryRunner.query(
86
+ `ALTER TABLE "NetworkDevice" DROP COLUMN "softwareVersion"`,
87
+ );
88
+ await queryRunner.query(
89
+ `ALTER TABLE "NetworkDevice" DROP COLUMN "firmwareVersion"`,
90
+ );
91
+ await queryRunner.query(
92
+ `ALTER TABLE "NetworkDevice" DROP COLUMN "serialNumber"`,
93
+ );
94
+ await queryRunner.query(
95
+ `ALTER TABLE "NetworkDevice" DROP COLUMN "deviceModel"`,
96
+ );
97
+ await queryRunner.query(`ALTER TABLE "NetworkDevice" DROP COLUMN "vendor"`);
98
+ await queryRunner.query(
99
+ `ALTER TABLE "NetworkDevice" DROP COLUMN "sysContact"`,
100
+ );
101
+ await queryRunner.query(
102
+ `ALTER TABLE "NetworkDevice" DROP COLUMN "sysLocation"`,
103
+ );
104
+ await queryRunner.query(
105
+ `ALTER TABLE "NetworkDevice" DROP COLUMN "sysObjectId"`,
106
+ );
107
+ }
108
+ }
@@ -0,0 +1,31 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ export class AddEnterpriseLicenseNotificationColumns1784218257664
4
+ implements MigrationInterface
5
+ {
6
+ public name: string = "AddEnterpriseLicenseNotificationColumns1784218257664";
7
+
8
+ public async up(queryRunner: QueryRunner): Promise<void> {
9
+ await queryRunner.query(
10
+ `ALTER TABLE "GlobalConfig" ADD "enterpriseLicenseNotificationEmail" character varying(100)`,
11
+ );
12
+ await queryRunner.query(
13
+ `ALTER TABLE "GlobalConfig" ADD "enterpriseLicenseExpiryReminderDays" integer`,
14
+ );
15
+ await queryRunner.query(
16
+ `ALTER TABLE "EnterpriseLicenseInstance" ADD "masterAdminEmails" jsonb`,
17
+ );
18
+ }
19
+
20
+ public async down(queryRunner: QueryRunner): Promise<void> {
21
+ await queryRunner.query(
22
+ `ALTER TABLE "EnterpriseLicenseInstance" DROP COLUMN "masterAdminEmails"`,
23
+ );
24
+ await queryRunner.query(
25
+ `ALTER TABLE "GlobalConfig" DROP COLUMN "enterpriseLicenseExpiryReminderDays"`,
26
+ );
27
+ await queryRunner.query(
28
+ `ALTER TABLE "GlobalConfig" DROP COLUMN "enterpriseLicenseNotificationEmail"`,
29
+ );
30
+ }
31
+ }
@@ -0,0 +1,29 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ export class AddAttributionColumnsToUserAndProject1784293516000
4
+ implements MigrationInterface
5
+ {
6
+ public name: string = "AddAttributionColumnsToUserAndProject1784293516000";
7
+
8
+ public async up(queryRunner: QueryRunner): Promise<void> {
9
+ await queryRunner.query(`ALTER TABLE "User" ADD "clickIds" jsonb`);
10
+ await queryRunner.query(
11
+ `ALTER TABLE "User" ADD "firstTouchAttribution" jsonb`,
12
+ );
13
+ await queryRunner.query(`ALTER TABLE "Project" ADD "clickIds" jsonb`);
14
+ await queryRunner.query(
15
+ `ALTER TABLE "Project" ADD "firstTouchAttribution" jsonb`,
16
+ );
17
+ }
18
+
19
+ public async down(queryRunner: QueryRunner): Promise<void> {
20
+ await queryRunner.query(
21
+ `ALTER TABLE "Project" DROP COLUMN "firstTouchAttribution"`,
22
+ );
23
+ await queryRunner.query(`ALTER TABLE "Project" DROP COLUMN "clickIds"`);
24
+ await queryRunner.query(
25
+ `ALTER TABLE "User" DROP COLUMN "firstTouchAttribution"`,
26
+ );
27
+ await queryRunner.query(`ALTER TABLE "User" DROP COLUMN "clickIds"`);
28
+ }
29
+ }
@@ -0,0 +1,35 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ export class AddMarketingConversionTable1784298000000
4
+ implements MigrationInterface
5
+ {
6
+ public name: string = "AddMarketingConversionTable1784298000000";
7
+
8
+ public async up(queryRunner: QueryRunner): Promise<void> {
9
+ await queryRunner.query(
10
+ `CREATE TABLE "MarketingConversion" ("_id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "version" integer NOT NULL, "conversionType" character varying(100) NOT NULL, "userId" uuid, "projectId" uuid, "email" character varying(100), "clickIds" jsonb NOT NULL, "conversionAt" TIMESTAMP WITH TIME ZONE NOT NULL, "conversionValueInUSDCents" integer, "uploadState" jsonb, CONSTRAINT "PK_MarketingConversion_id" PRIMARY KEY ("_id"))`,
11
+ );
12
+ await queryRunner.query(
13
+ `CREATE INDEX "idx_marketing_conversion_user_id" ON "MarketingConversion" ("userId")`,
14
+ );
15
+ await queryRunner.query(
16
+ `CREATE INDEX "idx_marketing_conversion_project_id" ON "MarketingConversion" ("projectId")`,
17
+ );
18
+ await queryRunner.query(
19
+ `CREATE UNIQUE INDEX "uq_marketing_conversion_type_user" ON "MarketingConversion" ("conversionType", "userId")`,
20
+ );
21
+ await queryRunner.query(
22
+ `CREATE UNIQUE INDEX "uq_marketing_conversion_type_project" ON "MarketingConversion" ("conversionType", "projectId")`,
23
+ );
24
+ }
25
+
26
+ public async down(queryRunner: QueryRunner): Promise<void> {
27
+ await queryRunner.query(
28
+ `DROP INDEX "uq_marketing_conversion_type_project"`,
29
+ );
30
+ await queryRunner.query(`DROP INDEX "uq_marketing_conversion_type_user"`);
31
+ await queryRunner.query(`DROP INDEX "idx_marketing_conversion_project_id"`);
32
+ await queryRunner.query(`DROP INDEX "idx_marketing_conversion_user_id"`);
33
+ await queryRunner.query(`DROP TABLE "MarketingConversion"`);
34
+ }
35
+ }
@@ -0,0 +1,101 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ export class MigrationName1784401962564 implements MigrationInterface {
4
+ public name = "MigrationName1784401962564";
5
+
6
+ public async up(queryRunner: QueryRunner): Promise<void> {
7
+ await queryRunner.query(
8
+ `ALTER TABLE "MarketingConversion" DROP COLUMN "googleUploadStatus"`,
9
+ );
10
+ await queryRunner.query(
11
+ `ALTER TABLE "MarketingConversion" DROP COLUMN "googleUploadedAt"`,
12
+ );
13
+ await queryRunner.query(
14
+ `ALTER TABLE "MarketingConversion" DROP COLUMN "googleUploadError"`,
15
+ );
16
+ await queryRunner.query(
17
+ `ALTER TABLE "MarketingConversion" DROP COLUMN "googleUploadAttempts"`,
18
+ );
19
+ await queryRunner.query(
20
+ `ALTER TABLE "MarketingConversion" DROP COLUMN "metaUploadStatus"`,
21
+ );
22
+ await queryRunner.query(
23
+ `ALTER TABLE "MarketingConversion" DROP COLUMN "metaUploadedAt"`,
24
+ );
25
+ await queryRunner.query(
26
+ `ALTER TABLE "MarketingConversion" DROP COLUMN "metaUploadError"`,
27
+ );
28
+ await queryRunner.query(
29
+ `ALTER TABLE "MarketingConversion" DROP COLUMN "metaUploadAttempts"`,
30
+ );
31
+ await queryRunner.query(
32
+ `ALTER TABLE "MarketingConversion" ADD "uploadState" jsonb`,
33
+ );
34
+ await queryRunner.query(
35
+ `ALTER TABLE "NetworkDeviceDiscoveryScan" DROP COLUMN "snmpV3AuthKey"`,
36
+ );
37
+ await queryRunner.query(
38
+ `ALTER TABLE "NetworkDeviceDiscoveryScan" ADD "snmpV3AuthKey" character varying`,
39
+ );
40
+ await queryRunner.query(
41
+ `ALTER TABLE "NetworkDeviceDiscoveryScan" DROP COLUMN "snmpV3PrivKey"`,
42
+ );
43
+ await queryRunner.query(
44
+ `ALTER TABLE "NetworkDeviceDiscoveryScan" ADD "snmpV3PrivKey" character varying`,
45
+ );
46
+ await queryRunner.query(
47
+ `ALTER TABLE "OnCallDutyPolicyScheduleLayer" ALTER COLUMN "rotation" SET DEFAULT '{"_type":"Recurring","value":{"intervalType":"Day","intervalCount":{"_type":"PositiveNumber","value":1}}}'`,
48
+ );
49
+ await queryRunner.query(
50
+ `ALTER TABLE "OnCallDutyPolicyScheduleLayer" ALTER COLUMN "restrictionTimes" SET DEFAULT '{"_type":"RestrictionTimes","value":{"restictionType":"None","dayRestrictionTimes":null,"weeklyRestrictionTimes":[]}}'`,
51
+ );
52
+ }
53
+
54
+ public async down(queryRunner: QueryRunner): Promise<void> {
55
+ await queryRunner.query(
56
+ `ALTER TABLE "OnCallDutyPolicyScheduleLayer" ALTER COLUMN "restrictionTimes" SET DEFAULT '{"_type": "RestrictionTimes", "value": {"restictionType": "None", "dayRestrictionTimes": null, "weeklyRestrictionTimes": []}}'`,
57
+ );
58
+ await queryRunner.query(
59
+ `ALTER TABLE "OnCallDutyPolicyScheduleLayer" ALTER COLUMN "rotation" SET DEFAULT '{"_type": "Recurring", "value": {"intervalType": "Day", "intervalCount": {"_type": "PositiveNumber", "value": 1}}}'`,
60
+ );
61
+ await queryRunner.query(
62
+ `ALTER TABLE "NetworkDeviceDiscoveryScan" DROP COLUMN "snmpV3PrivKey"`,
63
+ );
64
+ await queryRunner.query(
65
+ `ALTER TABLE "NetworkDeviceDiscoveryScan" ADD "snmpV3PrivKey" text`,
66
+ );
67
+ await queryRunner.query(
68
+ `ALTER TABLE "NetworkDeviceDiscoveryScan" DROP COLUMN "snmpV3AuthKey"`,
69
+ );
70
+ await queryRunner.query(
71
+ `ALTER TABLE "NetworkDeviceDiscoveryScan" ADD "snmpV3AuthKey" text`,
72
+ );
73
+ await queryRunner.query(
74
+ `ALTER TABLE "MarketingConversion" DROP COLUMN "uploadState"`,
75
+ );
76
+ await queryRunner.query(
77
+ `ALTER TABLE "MarketingConversion" ADD "metaUploadAttempts" integer`,
78
+ );
79
+ await queryRunner.query(
80
+ `ALTER TABLE "MarketingConversion" ADD "metaUploadError" text`,
81
+ );
82
+ await queryRunner.query(
83
+ `ALTER TABLE "MarketingConversion" ADD "metaUploadedAt" TIMESTAMP WITH TIME ZONE`,
84
+ );
85
+ await queryRunner.query(
86
+ `ALTER TABLE "MarketingConversion" ADD "metaUploadStatus" character varying(100)`,
87
+ );
88
+ await queryRunner.query(
89
+ `ALTER TABLE "MarketingConversion" ADD "googleUploadAttempts" integer`,
90
+ );
91
+ await queryRunner.query(
92
+ `ALTER TABLE "MarketingConversion" ADD "googleUploadError" text`,
93
+ );
94
+ await queryRunner.query(
95
+ `ALTER TABLE "MarketingConversion" ADD "googleUploadedAt" TIMESTAMP WITH TIME ZONE`,
96
+ );
97
+ await queryRunner.query(
98
+ `ALTER TABLE "MarketingConversion" ADD "googleUploadStatus" character varying(100)`,
99
+ );
100
+ }
101
+ }
@@ -454,7 +454,14 @@ import { BackfillCodeFixTaskType1784105912819 } from "./1784105912819-BackfillCo
454
454
  import { AddAITaskNumberAndRunTranscript1784124919694 } from "./1784124919694-AddAITaskNumberAndRunTranscript";
455
455
  import { AllowNullAiAgentOnPullRequest1784135099754 } from "./1784135099754-AllowNullAiAgentOnPullRequest";
456
456
  import { AddEnableMcpServerToStatusPage1784137457184 } from "./1784137457184-AddEnableMcpServerToStatusPage";
457
+ import { AddCounterSemanticsToMetricType1784191414522 } from "./1784191414522-AddCounterSemanticsToMetricType";
458
+ import { AddViewTypeToMetricSavedView1784191414600 } from "./1784191414600-AddViewTypeToMetricSavedView";
457
459
  import { AddSnmpV3ColumnsToNetworkDeviceDiscoveryScan1784200000000 } from "./1784200000000-AddSnmpV3ColumnsToNetworkDeviceDiscoveryScan";
460
+ import { AddNetworkDeviceInventoryAndDiscoverySchedule1784211212164 } from "./1784211212164-AddNetworkDeviceInventoryAndDiscoverySchedule";
461
+ import { AddEnterpriseLicenseNotificationColumns1784218257664 } from "./1784218257664-AddEnterpriseLicenseNotificationColumns";
462
+ import { AddAttributionColumnsToUserAndProject1784293516000 } from "./1784293516000-AddAttributionColumnsToUserAndProject";
463
+ import { AddMarketingConversionTable1784298000000 } from "./1784298000000-AddMarketingConversionTable";
464
+ import { MigrationName1784401962564 } from "./1784401962564-MigrationName";
458
465
 
459
466
  export default [
460
467
  InitialMigration,
@@ -913,5 +920,12 @@ export default [
913
920
  AddAITaskNumberAndRunTranscript1784124919694,
914
921
  AllowNullAiAgentOnPullRequest1784135099754,
915
922
  AddEnableMcpServerToStatusPage1784137457184,
923
+ AddCounterSemanticsToMetricType1784191414522,
924
+ AddViewTypeToMetricSavedView1784191414600,
916
925
  AddSnmpV3ColumnsToNetworkDeviceDiscoveryScan1784200000000,
926
+ AddNetworkDeviceInventoryAndDiscoverySchedule1784211212164,
927
+ AddEnterpriseLicenseNotificationColumns1784218257664,
928
+ AddAttributionColumnsToUserAndProject1784293516000,
929
+ AddMarketingConversionTable1784298000000,
930
+ MigrationName1784401962564,
917
931
  ];