@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,397 @@
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 ObjectID from "../../Types/ObjectID";
8
+ import Permission from "../../Types/Permission";
9
+
10
+ /*
11
+ * One NetFlow v5 flow record exported by a network device, received by a
12
+ * probe's NetFlow receiver and correlated to a NetworkDevice on ingest.
13
+ * Powers top-talker / bandwidth-attribution queries: who talked to whom,
14
+ * over which protocol/port, and how many bytes/packets, per device.
15
+ *
16
+ * Access control mirrors the NetworkDevice database model — flows are an
17
+ * attribute of the device that exported them.
18
+ */
19
+
20
+ const readPermissions: Array<Permission> = [
21
+ Permission.ProjectOwner,
22
+ Permission.ProjectAdmin,
23
+ Permission.ProjectMember,
24
+ Permission.Viewer,
25
+ Permission.SettingsAdmin,
26
+ Permission.SettingsMember,
27
+ Permission.SettingsViewer,
28
+ Permission.ReadNetworkDevice,
29
+ ];
30
+
31
+ const createPermissions: Array<Permission> = [
32
+ Permission.ProjectOwner,
33
+ Permission.ProjectAdmin,
34
+ Permission.ProjectMember,
35
+ Permission.SettingsAdmin,
36
+ Permission.SettingsMember,
37
+ Permission.CreateNetworkDevice,
38
+ ];
39
+
40
+ export default class NetworkFlow extends AnalyticsBaseModel {
41
+ public constructor() {
42
+ const projectIdColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
43
+ key: "projectId",
44
+ title: "Project ID",
45
+ description: "ID of project",
46
+ required: true,
47
+ type: TableColumnType.ObjectID,
48
+ isTenantId: true,
49
+ accessControl: {
50
+ read: readPermissions,
51
+ create: createPermissions,
52
+ update: [],
53
+ },
54
+ });
55
+
56
+ /*
57
+ * Required (not Nullable) even though a flow could in principle lack a
58
+ * device: the ingest path DROPS flows whose exporter matches no
59
+ * NetworkDevice (there is no project to attribute them to), so every
60
+ * stored row has one — and the column sits in the sort key, where
61
+ * ClickHouse rejects Nullable columns.
62
+ */
63
+ const networkDeviceIdColumn: AnalyticsTableColumn =
64
+ new AnalyticsTableColumn({
65
+ key: "networkDeviceId",
66
+ title: "Network Device ID",
67
+ description:
68
+ "ID of the NetworkDevice that exported this flow (correlated from the exporter IP on ingest)",
69
+ required: true,
70
+ type: TableColumnType.ObjectID,
71
+ accessControl: {
72
+ read: readPermissions,
73
+ create: createPermissions,
74
+ update: [],
75
+ },
76
+ });
77
+
78
+ const exporterIpColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
79
+ key: "exporterIp",
80
+ isLowCardinality: true,
81
+ title: "Exporter IP",
82
+ description:
83
+ "Source IP of the NetFlow export datagram — the router/switch that observed the flow",
84
+ required: true,
85
+ type: TableColumnType.Text,
86
+ accessControl: {
87
+ read: readPermissions,
88
+ create: createPermissions,
89
+ update: [],
90
+ },
91
+ });
92
+
93
+ const srcIpColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
94
+ key: "srcIp",
95
+ codec: { codec: "ZSTD", level: 1 },
96
+ title: "Source IP",
97
+ description: "Source IP address of the flow's traffic",
98
+ required: true,
99
+ type: TableColumnType.Text,
100
+ accessControl: {
101
+ read: readPermissions,
102
+ create: createPermissions,
103
+ update: [],
104
+ },
105
+ });
106
+
107
+ const dstIpColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
108
+ key: "dstIp",
109
+ codec: { codec: "ZSTD", level: 1 },
110
+ title: "Destination IP",
111
+ description: "Destination IP address of the flow's traffic",
112
+ required: true,
113
+ type: TableColumnType.Text,
114
+ accessControl: {
115
+ read: readPermissions,
116
+ create: createPermissions,
117
+ update: [],
118
+ },
119
+ });
120
+
121
+ const srcPortColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
122
+ key: "srcPort",
123
+ title: "Source Port",
124
+ description: "TCP/UDP source port (0 when not applicable)",
125
+ required: true,
126
+ type: TableColumnType.Number,
127
+ accessControl: {
128
+ read: readPermissions,
129
+ create: createPermissions,
130
+ update: [],
131
+ },
132
+ });
133
+
134
+ const dstPortColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
135
+ key: "dstPort",
136
+ title: "Destination Port",
137
+ description: "TCP/UDP destination port (0 when not applicable)",
138
+ required: true,
139
+ type: TableColumnType.Number,
140
+ accessControl: {
141
+ read: readPermissions,
142
+ create: createPermissions,
143
+ update: [],
144
+ },
145
+ });
146
+
147
+ const protocolColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
148
+ key: "protocol",
149
+ title: "Protocol",
150
+ description: "IP protocol number (6 = TCP, 17 = UDP, 1 = ICMP, ...)",
151
+ required: true,
152
+ type: TableColumnType.Number,
153
+ accessControl: {
154
+ read: readPermissions,
155
+ create: createPermissions,
156
+ update: [],
157
+ },
158
+ });
159
+
160
+ const octetsColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
161
+ key: "octets",
162
+ title: "Octets",
163
+ description: "Total bytes in the flow",
164
+ required: true,
165
+ type: TableColumnType.UInt64,
166
+ accessControl: {
167
+ read: readPermissions,
168
+ create: createPermissions,
169
+ update: [],
170
+ },
171
+ });
172
+
173
+ const packetsColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
174
+ key: "packets",
175
+ title: "Packets",
176
+ description: "Total packets in the flow",
177
+ required: true,
178
+ type: TableColumnType.UInt64,
179
+ accessControl: {
180
+ read: readPermissions,
181
+ create: createPermissions,
182
+ update: [],
183
+ },
184
+ });
185
+
186
+ const flowStartAtColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
187
+ key: "flowStartAt",
188
+ codec: [{ codec: "DoubleDelta" }, { codec: "ZSTD", level: 1 }],
189
+ title: "Flow Start",
190
+ description: "Wall-clock time the flow started",
191
+ required: true,
192
+ type: TableColumnType.DateTime64,
193
+ accessControl: {
194
+ read: readPermissions,
195
+ create: createPermissions,
196
+ update: [],
197
+ },
198
+ });
199
+
200
+ const flowEndAtColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
201
+ key: "flowEndAt",
202
+ codec: [{ codec: "DoubleDelta" }, { codec: "ZSTD", level: 1 }],
203
+ title: "Flow End",
204
+ description: "Wall-clock time the flow ended",
205
+ required: true,
206
+ type: TableColumnType.DateTime64,
207
+ accessControl: {
208
+ read: readPermissions,
209
+ create: createPermissions,
210
+ update: [],
211
+ },
212
+ });
213
+
214
+ const ingestedAtColumn: AnalyticsTableColumn = new AnalyticsTableColumn({
215
+ key: "ingestedAt",
216
+ codec: [{ codec: "DoubleDelta" }, { codec: "ZSTD", level: 1 }],
217
+ title: "Ingested At",
218
+ description: "When the server ingested this flow record",
219
+ required: true,
220
+ type: TableColumnType.DateTime64,
221
+ accessControl: {
222
+ read: readPermissions,
223
+ create: createPermissions,
224
+ update: [],
225
+ },
226
+ });
227
+
228
+ super({
229
+ tableName: AnalyticsTableName.NetworkFlow,
230
+ tableEngine: AnalyticsTableEngine.MergeTree,
231
+ singularName: "Network Flow",
232
+ accessControl: {
233
+ read: readPermissions,
234
+ create: createPermissions,
235
+ update: [
236
+ Permission.ProjectOwner,
237
+ Permission.ProjectAdmin,
238
+ Permission.ProjectMember,
239
+ Permission.SettingsAdmin,
240
+ Permission.SettingsMember,
241
+ Permission.EditNetworkDevice,
242
+ ],
243
+ delete: [
244
+ Permission.ProjectOwner,
245
+ Permission.ProjectAdmin,
246
+ Permission.ProjectMember,
247
+ Permission.SettingsAdmin,
248
+ Permission.SettingsMember,
249
+ Permission.DeleteNetworkDevice,
250
+ ],
251
+ },
252
+ pluralName: "Network Flows",
253
+ crudApiPath: new Route("/network-flow"),
254
+ tableColumns: [
255
+ projectIdColumn,
256
+ networkDeviceIdColumn,
257
+ exporterIpColumn,
258
+ srcIpColumn,
259
+ dstIpColumn,
260
+ srcPortColumn,
261
+ dstPortColumn,
262
+ protocolColumn,
263
+ octetsColumn,
264
+ packetsColumn,
265
+ flowStartAtColumn,
266
+ flowEndAtColumn,
267
+ ingestedAtColumn,
268
+ ],
269
+ projections: [],
270
+ sortKeys: ["projectId", "networkDeviceId", "flowStartAt"],
271
+ primaryKeys: ["projectId", "networkDeviceId", "flowStartAt"],
272
+ partitionKey: "toYYYYMMDD(flowStartAt)",
273
+ /*
274
+ * Shard by (projectId, networkDeviceId, flowStartAt) — mirrors how
275
+ * Log shards on its always-present sort-key columns: the
276
+ * high-entropy time component spreads even a single very busy
277
+ * exporter across all shards.
278
+ */
279
+ shardingKey: "cityHash64(projectId, networkDeviceId, flowStartAt)",
280
+ tableSettings: "non_replicated_deduplication_window = 10000",
281
+ /*
282
+ * Flows are the highest-volume rows in the product (a single busy
283
+ * router can export thousands per second), so the table must never
284
+ * grow unboundedly. Fixed-window TTL for now; per-project retention
285
+ * (a retentionDate column computed at ingest, like Log/Metric) is
286
+ * the phase-2 follow-up. Keyed on server-assigned ingestedAt so a
287
+ * device with a wrong clock cannot make rows expire early.
288
+ */
289
+ ttlExpression: "ingestedAt + INTERVAL 30 DAY DELETE",
290
+ defaultSortColumn: "flowStartAt",
291
+ });
292
+ }
293
+
294
+ public get projectId(): ObjectID | undefined {
295
+ return this.getColumnValue("projectId") as ObjectID | undefined;
296
+ }
297
+
298
+ public set projectId(v: ObjectID | undefined) {
299
+ this.setColumnValue("projectId", v);
300
+ }
301
+
302
+ public get networkDeviceId(): ObjectID | undefined {
303
+ return this.getColumnValue("networkDeviceId") as ObjectID | undefined;
304
+ }
305
+
306
+ public set networkDeviceId(v: ObjectID | undefined) {
307
+ this.setColumnValue("networkDeviceId", v);
308
+ }
309
+
310
+ public get exporterIp(): string | undefined {
311
+ return this.getColumnValue("exporterIp") as string | undefined;
312
+ }
313
+
314
+ public set exporterIp(v: string | undefined) {
315
+ this.setColumnValue("exporterIp", v);
316
+ }
317
+
318
+ public get srcIp(): string | undefined {
319
+ return this.getColumnValue("srcIp") as string | undefined;
320
+ }
321
+
322
+ public set srcIp(v: string | undefined) {
323
+ this.setColumnValue("srcIp", v);
324
+ }
325
+
326
+ public get dstIp(): string | undefined {
327
+ return this.getColumnValue("dstIp") as string | undefined;
328
+ }
329
+
330
+ public set dstIp(v: string | undefined) {
331
+ this.setColumnValue("dstIp", v);
332
+ }
333
+
334
+ public get srcPort(): number | undefined {
335
+ return this.getColumnValue("srcPort") as number | undefined;
336
+ }
337
+
338
+ public set srcPort(v: number | undefined) {
339
+ this.setColumnValue("srcPort", v);
340
+ }
341
+
342
+ public get dstPort(): number | undefined {
343
+ return this.getColumnValue("dstPort") as number | undefined;
344
+ }
345
+
346
+ public set dstPort(v: number | undefined) {
347
+ this.setColumnValue("dstPort", v);
348
+ }
349
+
350
+ public get protocol(): number | undefined {
351
+ return this.getColumnValue("protocol") as number | undefined;
352
+ }
353
+
354
+ public set protocol(v: number | undefined) {
355
+ this.setColumnValue("protocol", v);
356
+ }
357
+
358
+ public get octets(): number | undefined {
359
+ return this.getColumnValue("octets") as number | undefined;
360
+ }
361
+
362
+ public set octets(v: number | undefined) {
363
+ this.setColumnValue("octets", v);
364
+ }
365
+
366
+ public get packets(): number | undefined {
367
+ return this.getColumnValue("packets") as number | undefined;
368
+ }
369
+
370
+ public set packets(v: number | undefined) {
371
+ this.setColumnValue("packets", v);
372
+ }
373
+
374
+ public get flowStartAt(): Date | undefined {
375
+ return this.getColumnValue("flowStartAt") as Date | undefined;
376
+ }
377
+
378
+ public set flowStartAt(v: Date | undefined) {
379
+ this.setColumnValue("flowStartAt", v);
380
+ }
381
+
382
+ public get flowEndAt(): Date | undefined {
383
+ return this.getColumnValue("flowEndAt") as Date | undefined;
384
+ }
385
+
386
+ public set flowEndAt(v: Date | undefined) {
387
+ this.setColumnValue("flowEndAt", v);
388
+ }
389
+
390
+ public get ingestedAt(): Date | undefined {
391
+ return this.getColumnValue("ingestedAt") as Date | undefined;
392
+ }
393
+
394
+ public set ingestedAt(v: Date | undefined) {
395
+ this.setColumnValue("ingestedAt", v);
396
+ }
397
+ }
@@ -170,4 +170,22 @@ export default class EnterpriseLicenseInstance extends BaseModel {
170
170
  type: ColumnType.Date,
171
171
  })
172
172
  public lastReportedAt?: Date = undefined;
173
+
174
+ @ColumnAccessControl({
175
+ create: [],
176
+ read: [],
177
+ update: [],
178
+ })
179
+ @TableColumn({
180
+ required: false,
181
+ type: TableColumnType.JSON,
182
+ title: "Master Admin Emails",
183
+ description:
184
+ "Emails of the master admins of this instance. Used to contact the customer about license expiry and seat-limit breaches.",
185
+ })
186
+ @Column({
187
+ type: ColumnType.JSON,
188
+ nullable: true,
189
+ })
190
+ public masterAdminEmails?: Array<string> = undefined;
173
191
  }
@@ -893,6 +893,42 @@ export default class GlobalConfig extends GlobalConfigModel {
893
893
  public enterpriseLicenseInstances?: Array<EnterpriseLicenseInstanceSummary> =
894
894
  undefined;
895
895
 
896
+ @ColumnAccessControl({
897
+ create: [],
898
+ read: [],
899
+ update: [],
900
+ })
901
+ @TableColumn({
902
+ type: TableColumnType.Email,
903
+ title: "Enterprise License Notification Email",
904
+ description:
905
+ "OneUptime email address CC'd on enterprise license notifications sent to customers (expiry reminders, seat-limit breaches). Only used on the hosted oneuptime.com (billing enabled).",
906
+ })
907
+ @Column({
908
+ type: ColumnType.Email,
909
+ length: ColumnLength.Email,
910
+ nullable: true,
911
+ transformer: Email.getDatabaseTransformer(),
912
+ })
913
+ public enterpriseLicenseNotificationEmail?: Email = undefined;
914
+
915
+ @ColumnAccessControl({
916
+ create: [],
917
+ read: [],
918
+ update: [],
919
+ })
920
+ @TableColumn({
921
+ type: TableColumnType.Number,
922
+ title: "Enterprise License Expiry Reminder Days",
923
+ description:
924
+ "How many days before an enterprise license expires that expiry reminder emails start going out to the customer's master admins. Defaults to 45. Only used on the hosted oneuptime.com (billing enabled).",
925
+ })
926
+ @Column({
927
+ type: ColumnType.Number,
928
+ nullable: true,
929
+ })
930
+ public enterpriseLicenseExpiryReminderDays?: number = undefined;
931
+
896
932
  @ColumnAccessControl({
897
933
  create: [],
898
934
  read: [],
@@ -401,6 +401,7 @@ import MetricType from "./MetricType";
401
401
  import ProjectSCIM from "./ProjectSCIM";
402
402
  import ProjectSCIMLog from "./ProjectSCIMLog";
403
403
  import StatusPageSCIMLog from "./StatusPageSCIMLog";
404
+ import MarketingConversion from "./MarketingConversion";
404
405
 
405
406
  const AllModelTypes: Array<{
406
407
  new (): BaseModel;
@@ -824,6 +825,7 @@ const AllModelTypes: Array<{
824
825
  ServerlessFunctionInstance,
825
826
  CloudResourceInstance,
826
827
  RumApplicationClient,
828
+ MarketingConversion,
827
829
  ];
828
830
 
829
831
  const modelTypeMap: { [key: string]: { new (): BaseModel } } = {};
@@ -0,0 +1,198 @@
1
+ import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
2
+ import Route from "../../Types/API/Route";
3
+ import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
4
+ import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
5
+ import ColumnLength from "../../Types/Database/ColumnLength";
6
+ import ColumnType from "../../Types/Database/ColumnType";
7
+ import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
8
+ import TableColumn from "../../Types/Database/TableColumn";
9
+ import TableColumnType from "../../Types/Database/TableColumnType";
10
+ import TableMetadata from "../../Types/Database/TableMetadata";
11
+ import IconProp from "../../Types/Icon/IconProp";
12
+ import { JSONObject } from "../../Types/JSON";
13
+ import ObjectID from "../../Types/ObjectID";
14
+ import { Column, Entity, Index } from "typeorm";
15
+
16
+ /*
17
+ * Internal table (no API access) recording ad-attributed conversions —
18
+ * signups and paid subscriptions from visitors that carried ad click IDs —
19
+ * and the status of uploading each of them to ad platforms (Google Ads
20
+ * offline click conversions, Meta Conversions API). Written and read only by
21
+ * the MarketingConversions worker job.
22
+ */
23
+ @TableAccessControl({
24
+ create: [],
25
+ read: [],
26
+ update: [],
27
+ delete: [],
28
+ })
29
+ @CrudApiEndpoint(new Route("/marketing-conversion"))
30
+ @TableMetadata({
31
+ tableName: "MarketingConversion",
32
+ singularName: "Marketing Conversion",
33
+ pluralName: "Marketing Conversions",
34
+ icon: IconProp.ChartBar,
35
+ tableDescription:
36
+ "Ad-attributed conversions (signups, paid subscriptions) and their upload status to ad platforms for offline conversion tracking.",
37
+ })
38
+ @Entity({
39
+ name: "MarketingConversion",
40
+ })
41
+ @Index("uq_marketing_conversion_type_user", ["conversionType", "userId"], {
42
+ unique: true,
43
+ })
44
+ @Index(
45
+ "uq_marketing_conversion_type_project",
46
+ ["conversionType", "projectId"],
47
+ {
48
+ unique: true,
49
+ },
50
+ )
51
+ export default class MarketingConversion extends BaseModel {
52
+ @ColumnAccessControl({
53
+ create: [],
54
+ read: [],
55
+ update: [],
56
+ })
57
+ @TableColumn({
58
+ type: TableColumnType.ShortText,
59
+ required: true,
60
+ title: "Conversion Type",
61
+ description: "SignUp or PaidSubscription.",
62
+ })
63
+ @Column({
64
+ type: ColumnType.ShortText,
65
+ length: ColumnLength.ShortText,
66
+ nullable: false,
67
+ })
68
+ public conversionType?: string = undefined;
69
+
70
+ @ColumnAccessControl({
71
+ create: [],
72
+ read: [],
73
+ update: [],
74
+ })
75
+ @Index("idx_marketing_conversion_user_id")
76
+ @TableColumn({
77
+ type: TableColumnType.ObjectID,
78
+ required: false,
79
+ title: "User ID",
80
+ description: "User this conversion belongs to (SignUp conversions).",
81
+ })
82
+ @Column({
83
+ type: ColumnType.ObjectID,
84
+ nullable: true,
85
+ transformer: ObjectID.getDatabaseTransformer(),
86
+ })
87
+ public userId?: ObjectID = undefined;
88
+
89
+ @ColumnAccessControl({
90
+ create: [],
91
+ read: [],
92
+ update: [],
93
+ })
94
+ @Index("idx_marketing_conversion_project_id")
95
+ @TableColumn({
96
+ type: TableColumnType.ObjectID,
97
+ required: false,
98
+ title: "Project ID",
99
+ description:
100
+ "Project this conversion belongs to (PaidSubscription conversions).",
101
+ })
102
+ @Column({
103
+ type: ColumnType.ObjectID,
104
+ nullable: true,
105
+ transformer: ObjectID.getDatabaseTransformer(),
106
+ })
107
+ public projectId?: ObjectID = undefined;
108
+
109
+ @ColumnAccessControl({
110
+ create: [],
111
+ read: [],
112
+ update: [],
113
+ })
114
+ @TableColumn({
115
+ type: TableColumnType.ShortText,
116
+ required: false,
117
+ title: "Email",
118
+ description:
119
+ "Email of the converting user. Hashed before being sent to ad platforms that support enhanced matching (Meta).",
120
+ })
121
+ @Column({
122
+ type: ColumnType.ShortText,
123
+ length: ColumnLength.ShortText,
124
+ nullable: true,
125
+ })
126
+ public email?: string | undefined = undefined;
127
+
128
+ @ColumnAccessControl({
129
+ create: [],
130
+ read: [],
131
+ update: [],
132
+ })
133
+ @TableColumn({
134
+ type: TableColumnType.JSON,
135
+ required: true,
136
+ title: "Click IDs",
137
+ description:
138
+ "Ad click identifiers (gclid, wbraid, gbraid, fbclid, ...) captured for this conversion.",
139
+ })
140
+ @Column({
141
+ type: ColumnType.JSON,
142
+ nullable: false,
143
+ })
144
+ public clickIds?: JSONObject = undefined;
145
+
146
+ @ColumnAccessControl({
147
+ create: [],
148
+ read: [],
149
+ update: [],
150
+ })
151
+ @TableColumn({
152
+ type: TableColumnType.Date,
153
+ required: true,
154
+ title: "Conversion At",
155
+ description: "When the conversion happened.",
156
+ })
157
+ @Column({
158
+ type: ColumnType.Date,
159
+ nullable: false,
160
+ })
161
+ public conversionAt?: Date = undefined;
162
+
163
+ @ColumnAccessControl({
164
+ create: [],
165
+ read: [],
166
+ update: [],
167
+ })
168
+ @TableColumn({
169
+ type: TableColumnType.Number,
170
+ required: false,
171
+ title: "Conversion Value (USD Cents)",
172
+ description:
173
+ "Conversion value in USD cents (monthly recurring revenue for paid subscriptions). Null when unknown (custom pricing) or not applicable (signups).",
174
+ })
175
+ @Column({
176
+ type: ColumnType.Number,
177
+ nullable: true,
178
+ })
179
+ public conversionValueInUSDCents?: number | undefined = undefined;
180
+
181
+ @ColumnAccessControl({
182
+ create: [],
183
+ read: [],
184
+ update: [],
185
+ })
186
+ @TableColumn({
187
+ type: TableColumnType.JSON,
188
+ required: false,
189
+ title: "Upload State",
190
+ description:
191
+ "Per-ad-platform upload state, keyed by provider (google, meta, microsoft, linkedin, reddit, ...): { status: Uploaded|Failed|Skipped, attempts, error, uploadedAt }. Absent key or absent status means pending.",
192
+ })
193
+ @Column({
194
+ type: ColumnType.JSON,
195
+ nullable: true,
196
+ })
197
+ public uploadState?: JSONObject = undefined;
198
+ }