@oneuptime/common 10.8.2 → 11.0.1

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 (740) hide show
  1. package/Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel.ts +16 -18
  2. package/Models/AnalyticsModels/AuditLog.ts +3 -1
  3. package/Models/AnalyticsModels/ExceptionInstance.ts +200 -82
  4. package/Models/AnalyticsModels/Index.ts +7 -2
  5. package/Models/AnalyticsModels/Log.ts +197 -81
  6. package/Models/AnalyticsModels/Metric.ts +199 -86
  7. package/Models/AnalyticsModels/MetricBaselineHourly.ts +44 -25
  8. package/Models/AnalyticsModels/MetricItemAggMV1m.ts +23 -20
  9. package/Models/AnalyticsModels/{MetricItemAggMV1mByHost.ts → MetricItemAggMV1mByHostV2.ts} +58 -47
  10. package/Models/AnalyticsModels/MonitorLog.ts +5 -1
  11. package/Models/AnalyticsModels/Profile.ts +206 -85
  12. package/Models/AnalyticsModels/ProfileSample.ts +196 -83
  13. package/Models/AnalyticsModels/Span.ts +218 -85
  14. package/Models/DatabaseModels/Index.ts +4 -0
  15. package/Models/DatabaseModels/Service.ts +29 -0
  16. package/Models/DatabaseModels/TelemetryEntity.ts +393 -0
  17. package/Models/DatabaseModels/TelemetryEntityRelationship.ts +294 -0
  18. package/Models/DatabaseModels/TelemetryException.ts +10 -10
  19. package/Models/DatabaseModels/TelemetryUsageBilling.ts +5 -5
  20. package/Server/API/AIAgentDataAPI.ts +13 -12
  21. package/Server/API/DashboardAPI.ts +2 -2
  22. package/Server/API/TelemetryAPI.ts +656 -141
  23. package/Server/API/TelemetryExceptionAPI.ts +2 -2
  24. package/Server/Infrastructure/ClickhouseConfig.ts +12 -0
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/1781100000001-RenameTelemetryServiceIdToPrimaryEntityId.ts +48 -0
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/1781200000000-AddTelemetryEntityTable.ts +70 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/1781200000001-AddTelemetryEntityRelationshipTable.ts +57 -0
  28. package/Server/Infrastructure/Postgres/SchemaMigrations/1781250074195-MigrationName.ts +207 -0
  29. package/Server/Infrastructure/Postgres/SchemaMigrations/1781300000000-AddTelemetryEntityLabels.ts +24 -0
  30. package/Server/Infrastructure/Postgres/SchemaMigrations/1781400000000-AddServiceTelemetrySdkLanguage.ts +25 -0
  31. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +12 -0
  32. package/Server/Infrastructure/Queue.ts +36 -3
  33. package/Server/Middleware/TelemetryIngest.ts +27 -22
  34. package/Server/Services/AlertService.ts +9 -9
  35. package/Server/Services/AnalyticsDatabaseService.ts +204 -35
  36. package/Server/Services/ExceptionAggregationService.ts +41 -18
  37. package/Server/Services/HostService.ts +2 -1
  38. package/Server/Services/IncidentService.ts +19 -19
  39. package/Server/Services/Index.ts +6 -2
  40. package/Server/Services/LogAggregationService.ts +116 -43
  41. package/Server/Services/MetricAggregationService.ts +29 -14
  42. package/Server/Services/MetricBaselineService.ts +34 -34
  43. package/Server/Services/MetricItemAggMV1mByHostV2Service.ts +30 -0
  44. package/Server/Services/MetricService.ts +119 -31
  45. package/Server/Services/OpenTelemetryIngestService.ts +186 -50
  46. package/Server/Services/ProfileAggregationService.ts +904 -126
  47. package/Server/Services/ServiceService.ts +6 -0
  48. package/Server/Services/SpanService.ts +274 -14
  49. package/Server/Services/TelemetryEntityRelationshipService.ts +71 -0
  50. package/Server/Services/TelemetryEntityService.ts +246 -0
  51. package/Server/Services/TelemetryExceptionService.ts +27 -23
  52. package/Server/Services/TelemetryUsageBillingService.ts +38 -31
  53. package/Server/Services/TraceAggregationService.ts +875 -43
  54. package/Server/Types/AnalyticsDatabase/ModelPermission.ts +43 -2
  55. package/Server/Types/Database/Permissions/AccessControlPermission.ts +47 -2
  56. package/Server/Types/Database/Permissions/BasePermission.ts +37 -1
  57. package/Server/Types/Database/Permissions/OwnedScopePermission.ts +21 -3
  58. package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +1 -0
  59. package/Server/Types/Database/QueryHelper.ts +41 -0
  60. package/Server/Utils/Alert/AlertPrivacyFilter.ts +9 -2
  61. package/Server/Utils/AlertEpisode/AlertEpisodePrivacyFilter.ts +9 -2
  62. package/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.ts +95 -0
  63. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +133 -0
  64. package/Server/Utils/Incident/IncidentPrivacyFilter.ts +9 -2
  65. package/Server/Utils/IncidentEpisode/IncidentEpisodePrivacyFilter.ts +9 -2
  66. package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +1 -1
  67. package/Server/Utils/Monitor/MonitorLogUtil.ts +1 -2
  68. package/Server/Utils/Monitor/MonitorMetricUtil.ts +3 -4
  69. package/Server/Utils/PrivacyFilterUtil.ts +72 -0
  70. package/Server/Utils/Profile/PprofEncoder.ts +135 -11
  71. package/Server/Utils/Telemetry/EntityRegistry.ts +316 -0
  72. package/Server/Utils/Telemetry/ResourceFacetResolver.ts +5 -0
  73. package/Server/Utils/Telemetry/TelemetryEntity.ts +783 -0
  74. package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +79 -4
  75. package/Tests/Server/Services/LogAggregationService.test.ts +7 -2
  76. package/Tests/Server/Services/ProfileAggregationService.test.ts +280 -0
  77. package/Tests/Server/Services/ProfileBreakdown.test.ts +161 -0
  78. package/Tests/Server/Services/ProfileFunctionFocus.test.ts +349 -0
  79. package/Tests/Server/Services/TelemetryAttributeService.test.ts +1 -1
  80. package/Tests/Server/Services/TraceAggregationService.test.ts +403 -0
  81. package/Tests/Server/Types/AnalyticsDatabase/ModelPermissionOwnedScope.test.ts +114 -0
  82. package/Tests/Server/Types/Database/Permissions/AccessControlPermission.test.ts +189 -0
  83. package/Tests/Server/Types/Database/Permissions/BasePermission.test.ts +118 -0
  84. package/Tests/Server/Types/Database/Permissions/OwnedScopePermission.test.ts +159 -0
  85. package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +275 -8
  86. package/Tests/Server/Utils/PrivacyFilterUtil.test.ts +177 -0
  87. package/Tests/Server/Utils/Profile/PprofEncoder.test.ts +276 -0
  88. package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +761 -0
  89. package/Tests/Types/Monitor/MonitorStepEntityScope.test.ts +275 -0
  90. package/Tests/Types/Text.test.ts +52 -0
  91. package/Tests/Utils/ModelImportExport.test.ts +366 -0
  92. package/Tests/Utils/Telemetry/EntityKey.test.ts +150 -0
  93. package/Tests/Utils/Telemetry/EntityKeySqlParity.test.ts +40 -0
  94. package/Tests/Utils/Telemetry/EntityRelationship.test.ts +150 -0
  95. package/Tests/Utils/UUID.test.ts +47 -0
  96. package/Types/AnalyticsDatabase/AnalyticsTableName.ts +14 -9
  97. package/Types/AnalyticsDatabase/TableColumnType.ts +1 -0
  98. package/Types/Dashboard/DashboardComponentType.ts +1 -0
  99. package/Types/Dashboard/DashboardComponents/DashboardTraceChartComponent.ts +37 -0
  100. package/Types/Dashboard/DashboardTemplates.ts +4 -5
  101. package/Types/Log/LogQueryParser.ts +2 -2
  102. package/Types/Log/LogQueryToFilter.ts +2 -2
  103. package/Types/Monitor/MonitorStepExceptionMonitor.ts +19 -1
  104. package/Types/Monitor/MonitorStepLogMonitor.ts +20 -1
  105. package/Types/Monitor/MonitorStepMetricMonitor.ts +27 -0
  106. package/Types/Monitor/MonitorStepProfileMonitor.ts +19 -1
  107. package/Types/Monitor/MonitorStepTraceMonitor.ts +18 -1
  108. package/Types/Monitor/MonitorType.ts +8 -1
  109. package/Types/ObjectID.ts +10 -0
  110. package/Types/Telemetry/EntityRelationshipType.ts +31 -0
  111. package/Types/Telemetry/EntityType.ts +33 -0
  112. package/Types/Telemetry/TelemetrySavedViewState.ts +2 -0
  113. package/Types/Text.ts +34 -0
  114. package/Types/Trace/TraceAggregationType.ts +1 -0
  115. package/Types/Trace/TraceRecordingRuleDefinition.ts +74 -0
  116. package/UI/Components/ImportExport/ExportModelCard.tsx +90 -0
  117. package/UI/Components/ImportExport/ImportModelsModal.tsx +239 -0
  118. package/UI/Components/LogsViewer/LogsViewer.tsx +12 -9
  119. package/UI/Components/LogsViewer/components/LogDetailsPanel.tsx +10 -9
  120. package/UI/Components/LogsViewer/components/LogSearchBar.tsx +1 -1
  121. package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +2 -2
  122. package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +4 -4
  123. package/UI/Components/LogsViewer/components/LogsTable.tsx +5 -3
  124. package/UI/Components/ModelTable/ModelTable.tsx +294 -143
  125. package/UI/Components/Navbar/NavBarMenuModal.tsx +81 -44
  126. package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +33 -10
  127. package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +18 -3
  128. package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +91 -68
  129. package/UI/Components/TelemetryViewer/components/TelemetryHistogramTooltip.tsx +9 -2
  130. package/UI/Utils/LogExport.ts +2 -2
  131. package/UI/Utils/ModelImportExport.ts +207 -0
  132. package/UI/Utils/TelemetryService.ts +20 -20
  133. package/Utils/Dashboard/Components/DashboardTraceChartComponent.ts +134 -0
  134. package/Utils/Dashboard/Components/Index.ts +7 -0
  135. package/Utils/ModelImportExport.ts +369 -0
  136. package/Utils/Telemetry/EntityKey.ts +151 -0
  137. package/Utils/Telemetry/EntityRelationship.ts +113 -0
  138. package/Utils/Traces/CriticalPath.ts +7 -7
  139. package/Utils/UUID.ts +57 -0
  140. package/build/dist/Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel.js +14 -13
  141. package/build/dist/Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel.js.map +1 -1
  142. package/build/dist/Models/AnalyticsModels/AuditLog.js +2 -1
  143. package/build/dist/Models/AnalyticsModels/AuditLog.js.map +1 -1
  144. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js +125 -22
  145. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js.map +1 -1
  146. package/build/dist/Models/AnalyticsModels/Index.js +7 -2
  147. package/build/dist/Models/AnalyticsModels/Index.js.map +1 -1
  148. package/build/dist/Models/AnalyticsModels/Log.js +123 -22
  149. package/build/dist/Models/AnalyticsModels/Log.js.map +1 -1
  150. package/build/dist/Models/AnalyticsModels/Metric.js +125 -27
  151. package/build/dist/Models/AnalyticsModels/Metric.js.map +1 -1
  152. package/build/dist/Models/AnalyticsModels/MetricBaselineHourly.js +38 -21
  153. package/build/dist/Models/AnalyticsModels/MetricBaselineHourly.js.map +1 -1
  154. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1m.js +17 -16
  155. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1m.js.map +1 -1
  156. package/build/dist/Models/AnalyticsModels/{MetricItemAggMV1mByHost.js → MetricItemAggMV1mByHostV2.js} +54 -42
  157. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByHostV2.js.map +1 -0
  158. package/build/dist/Models/AnalyticsModels/MonitorLog.js +4 -1
  159. package/build/dist/Models/AnalyticsModels/MonitorLog.js.map +1 -1
  160. package/build/dist/Models/AnalyticsModels/Profile.js +132 -26
  161. package/build/dist/Models/AnalyticsModels/Profile.js.map +1 -1
  162. package/build/dist/Models/AnalyticsModels/ProfileSample.js +121 -23
  163. package/build/dist/Models/AnalyticsModels/ProfileSample.js.map +1 -1
  164. package/build/dist/Models/AnalyticsModels/Span.js +144 -26
  165. package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
  166. package/build/dist/Models/DatabaseModels/Index.js +4 -0
  167. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  168. package/build/dist/Models/DatabaseModels/Service.js +30 -0
  169. package/build/dist/Models/DatabaseModels/Service.js.map +1 -1
  170. package/build/dist/Models/DatabaseModels/TelemetryEntity.js +419 -0
  171. package/build/dist/Models/DatabaseModels/TelemetryEntity.js.map +1 -0
  172. package/build/dist/Models/DatabaseModels/TelemetryEntityRelationship.js +317 -0
  173. package/build/dist/Models/DatabaseModels/TelemetryEntityRelationship.js.map +1 -0
  174. package/build/dist/Models/DatabaseModels/TelemetryException.js +12 -12
  175. package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
  176. package/build/dist/Models/DatabaseModels/TelemetryUsageBilling.js +7 -7
  177. package/build/dist/Models/DatabaseModels/TelemetryUsageBilling.js.map +1 -1
  178. package/build/dist/Server/API/AIAgentDataAPI.js +14 -13
  179. package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
  180. package/build/dist/Server/API/DashboardAPI.js +2 -2
  181. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  182. package/build/dist/Server/API/TelemetryAPI.js +425 -129
  183. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  184. package/build/dist/Server/API/TelemetryExceptionAPI.js +2 -2
  185. package/build/dist/Server/API/TelemetryExceptionAPI.js.map +1 -1
  186. package/build/dist/Server/Infrastructure/ClickhouseConfig.js +12 -0
  187. package/build/dist/Server/Infrastructure/ClickhouseConfig.js.map +1 -1
  188. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781100000001-RenameTelemetryServiceIdToPrimaryEntityId.js +29 -0
  189. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781100000001-RenameTelemetryServiceIdToPrimaryEntityId.js.map +1 -0
  190. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781200000000-AddTelemetryEntityTable.js +38 -0
  191. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781200000000-AddTelemetryEntityTable.js.map +1 -0
  192. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781200000001-AddTelemetryEntityRelationshipTable.js +33 -0
  193. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781200000001-AddTelemetryEntityRelationshipTable.js.map +1 -0
  194. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781250074195-MigrationName.js +78 -0
  195. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781250074195-MigrationName.js.map +1 -0
  196. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781300000000-AddTelemetryEntityLabels.js +19 -0
  197. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781300000000-AddTelemetryEntityLabels.js.map +1 -0
  198. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781400000000-AddServiceTelemetrySdkLanguage.js +18 -0
  199. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781400000000-AddServiceTelemetrySdkLanguage.js.map +1 -0
  200. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +12 -0
  201. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  202. package/build/dist/Server/Infrastructure/Queue.js +14 -3
  203. package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
  204. package/build/dist/Server/Middleware/TelemetryIngest.js +16 -18
  205. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  206. package/build/dist/Server/Services/AlertService.js +9 -9
  207. package/build/dist/Server/Services/AlertService.js.map +1 -1
  208. package/build/dist/Server/Services/AnalyticsDatabaseService.js +115 -40
  209. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  210. package/build/dist/Server/Services/ExceptionAggregationService.js +38 -18
  211. package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
  212. package/build/dist/Server/Services/HostService.js +2 -1
  213. package/build/dist/Server/Services/HostService.js.map +1 -1
  214. package/build/dist/Server/Services/IncidentService.js +19 -19
  215. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  216. package/build/dist/Server/Services/Index.js +6 -2
  217. package/build/dist/Server/Services/Index.js.map +1 -1
  218. package/build/dist/Server/Services/LogAggregationService.js +100 -42
  219. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  220. package/build/dist/Server/Services/MetricAggregationService.js +27 -14
  221. package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
  222. package/build/dist/Server/Services/MetricBaselineService.js +28 -28
  223. package/build/dist/Server/Services/MetricBaselineService.js.map +1 -1
  224. package/build/dist/Server/Services/MetricItemAggMV1mByHostV2Service.js +28 -0
  225. package/build/dist/Server/Services/MetricItemAggMV1mByHostV2Service.js.map +1 -0
  226. package/build/dist/Server/Services/MetricService.js +116 -31
  227. package/build/dist/Server/Services/MetricService.js.map +1 -1
  228. package/build/dist/Server/Services/OpenTelemetryIngestService.js +103 -36
  229. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  230. package/build/dist/Server/Services/ProfileAggregationService.js +613 -105
  231. package/build/dist/Server/Services/ProfileAggregationService.js.map +1 -1
  232. package/build/dist/Server/Services/ServiceService.js +9 -5
  233. package/build/dist/Server/Services/ServiceService.js.map +1 -1
  234. package/build/dist/Server/Services/SpanService.js +217 -15
  235. package/build/dist/Server/Services/SpanService.js.map +1 -1
  236. package/build/dist/Server/Services/TelemetryEntityRelationshipService.js +72 -0
  237. package/build/dist/Server/Services/TelemetryEntityRelationshipService.js.map +1 -0
  238. package/build/dist/Server/Services/TelemetryEntityService.js +201 -0
  239. package/build/dist/Server/Services/TelemetryEntityService.js.map +1 -0
  240. package/build/dist/Server/Services/TelemetryExceptionService.js +18 -18
  241. package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
  242. package/build/dist/Server/Services/TelemetryUsageBillingService.js +27 -21
  243. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  244. package/build/dist/Server/Services/TraceAggregationService.js +568 -43
  245. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  246. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js +38 -2
  247. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js.map +1 -1
  248. package/build/dist/Server/Types/Database/Permissions/AccessControlPermission.js +36 -2
  249. package/build/dist/Server/Types/Database/Permissions/AccessControlPermission.js.map +1 -1
  250. package/build/dist/Server/Types/Database/Permissions/BasePermission.js +25 -1
  251. package/build/dist/Server/Types/Database/Permissions/BasePermission.js.map +1 -1
  252. package/build/dist/Server/Types/Database/Permissions/OwnedScopePermission.js +17 -3
  253. package/build/dist/Server/Types/Database/Permissions/OwnedScopePermission.js.map +1 -1
  254. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +1 -0
  255. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
  256. package/build/dist/Server/Types/Database/QueryHelper.js +31 -0
  257. package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
  258. package/build/dist/Server/Utils/Alert/AlertPrivacyFilter.js +3 -2
  259. package/build/dist/Server/Utils/Alert/AlertPrivacyFilter.js.map +1 -1
  260. package/build/dist/Server/Utils/AlertEpisode/AlertEpisodePrivacyFilter.js +3 -2
  261. package/build/dist/Server/Utils/AlertEpisode/AlertEpisodePrivacyFilter.js.map +1 -1
  262. package/build/dist/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.js +46 -0
  263. package/build/dist/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.js.map +1 -0
  264. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +97 -3
  265. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  266. package/build/dist/Server/Utils/Incident/IncidentPrivacyFilter.js +3 -2
  267. package/build/dist/Server/Utils/Incident/IncidentPrivacyFilter.js.map +1 -1
  268. package/build/dist/Server/Utils/IncidentEpisode/IncidentEpisodePrivacyFilter.js +3 -2
  269. package/build/dist/Server/Utils/IncidentEpisode/IncidentEpisodePrivacyFilter.js.map +1 -1
  270. package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +1 -1
  271. package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
  272. package/build/dist/Server/Utils/Monitor/MonitorLogUtil.js +1 -2
  273. package/build/dist/Server/Utils/Monitor/MonitorLogUtil.js.map +1 -1
  274. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +3 -4
  275. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
  276. package/build/dist/Server/Utils/PrivacyFilterUtil.js +47 -0
  277. package/build/dist/Server/Utils/PrivacyFilterUtil.js.map +1 -0
  278. package/build/dist/Server/Utils/Profile/PprofEncoder.js +132 -4
  279. package/build/dist/Server/Utils/Profile/PprofEncoder.js.map +1 -1
  280. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +228 -0
  281. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -0
  282. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js +5 -0
  283. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js.map +1 -1
  284. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +569 -0
  285. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -0
  286. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +14 -9
  287. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js.map +1 -1
  288. package/build/dist/Types/AnalyticsDatabase/TableColumnType.js +1 -0
  289. package/build/dist/Types/AnalyticsDatabase/TableColumnType.js.map +1 -1
  290. package/build/dist/Types/Dashboard/DashboardComponentType.js +1 -0
  291. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  292. package/build/dist/Types/Dashboard/DashboardComponents/DashboardTraceChartComponent.js +2 -0
  293. package/build/dist/Types/Dashboard/DashboardComponents/DashboardTraceChartComponent.js.map +1 -0
  294. package/build/dist/Types/Dashboard/DashboardTemplates.js +4 -5
  295. package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
  296. package/build/dist/Types/Log/LogQueryParser.js +2 -2
  297. package/build/dist/Types/Log/LogQueryParser.js.map +1 -1
  298. package/build/dist/Types/Log/LogQueryToFilter.js +1 -1
  299. package/build/dist/Types/Log/LogQueryToFilter.js.map +1 -1
  300. package/build/dist/Types/Monitor/MonitorStepExceptionMonitor.js +9 -1
  301. package/build/dist/Types/Monitor/MonitorStepExceptionMonitor.js.map +1 -1
  302. package/build/dist/Types/Monitor/MonitorStepLogMonitor.js +9 -1
  303. package/build/dist/Types/Monitor/MonitorStepLogMonitor.js.map +1 -1
  304. package/build/dist/Types/Monitor/MonitorStepMetricMonitor.js +13 -0
  305. package/build/dist/Types/Monitor/MonitorStepMetricMonitor.js.map +1 -1
  306. package/build/dist/Types/Monitor/MonitorStepProfileMonitor.js +9 -1
  307. package/build/dist/Types/Monitor/MonitorStepProfileMonitor.js.map +1 -1
  308. package/build/dist/Types/Monitor/MonitorStepTraceMonitor.js +9 -1
  309. package/build/dist/Types/Monitor/MonitorStepTraceMonitor.js.map +1 -1
  310. package/build/dist/Types/Monitor/MonitorType.js +8 -1
  311. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  312. package/build/dist/Types/ObjectID.js +9 -0
  313. package/build/dist/Types/ObjectID.js.map +1 -1
  314. package/build/dist/Types/Telemetry/EntityRelationshipType.js +32 -0
  315. package/build/dist/Types/Telemetry/EntityRelationshipType.js.map +1 -0
  316. package/build/dist/Types/Telemetry/EntityType.js +34 -0
  317. package/build/dist/Types/Telemetry/EntityType.js.map +1 -0
  318. package/build/dist/Types/Text.js +32 -1
  319. package/build/dist/Types/Text.js.map +1 -1
  320. package/build/dist/Types/Trace/TraceAggregationType.js +1 -0
  321. package/build/dist/Types/Trace/TraceAggregationType.js.map +1 -1
  322. package/build/dist/Types/Trace/TraceRecordingRuleDefinition.js +50 -1
  323. package/build/dist/Types/Trace/TraceRecordingRuleDefinition.js.map +1 -1
  324. package/build/dist/UI/Components/ImportExport/ExportModelCard.js +50 -0
  325. package/build/dist/UI/Components/ImportExport/ExportModelCard.js.map +1 -0
  326. package/build/dist/UI/Components/ImportExport/ImportModelsModal.js +115 -0
  327. package/build/dist/UI/Components/ImportExport/ImportModelsModal.js.map +1 -0
  328. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +10 -9
  329. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  330. package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js +8 -8
  331. package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js.map +1 -1
  332. package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js +1 -1
  333. package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js.map +1 -1
  334. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +2 -2
  335. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
  336. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +4 -4
  337. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
  338. package/build/dist/UI/Components/LogsViewer/components/LogsTable.js +3 -3
  339. package/build/dist/UI/Components/LogsViewer/components/LogsTable.js.map +1 -1
  340. package/build/dist/UI/Components/ModelTable/ModelTable.js +166 -74
  341. package/build/dist/UI/Components/ModelTable/ModelTable.js.map +1 -1
  342. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +43 -30
  343. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
  344. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +6 -2
  345. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
  346. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js +14 -3
  347. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js.map +1 -1
  348. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +18 -10
  349. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js.map +1 -1
  350. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogramTooltip.js +4 -2
  351. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogramTooltip.js.map +1 -1
  352. package/build/dist/UI/Utils/LogExport.js +2 -2
  353. package/build/dist/UI/Utils/LogExport.js.map +1 -1
  354. package/build/dist/UI/Utils/ModelImportExport.js +142 -0
  355. package/build/dist/UI/Utils/ModelImportExport.js.map +1 -0
  356. package/build/dist/UI/Utils/TelemetryService.js +16 -16
  357. package/build/dist/UI/Utils/TelemetryService.js.map +1 -1
  358. package/build/dist/Utils/Dashboard/Components/DashboardTraceChartComponent.js +110 -0
  359. package/build/dist/Utils/Dashboard/Components/DashboardTraceChartComponent.js.map +1 -0
  360. package/build/dist/Utils/Dashboard/Components/Index.js +4 -0
  361. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  362. package/build/dist/Utils/ModelImportExport.js +257 -0
  363. package/build/dist/Utils/ModelImportExport.js.map +1 -0
  364. package/build/dist/Utils/Telemetry/EntityKey.js +115 -0
  365. package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -0
  366. package/build/dist/Utils/Telemetry/EntityRelationship.js +71 -0
  367. package/build/dist/Utils/Telemetry/EntityRelationship.js.map +1 -0
  368. package/build/dist/Utils/Traces/CriticalPath.js +5 -5
  369. package/build/dist/Utils/Traces/CriticalPath.js.map +1 -1
  370. package/build/dist/Utils/UUID.js +50 -0
  371. package/build/dist/Utils/UUID.js.map +1 -1
  372. package/package.json +2 -1
  373. package/tsconfig.json +10 -1
  374. package/Server/Services/MetricItemAggMV1mByHostService.ts +0 -30
  375. package/Types/Profile/ProfileMetricType.ts +0 -16
  376. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByHost.js.map +0 -1
  377. package/build/dist/Server/Services/MetricItemAggMV1mByHostService.js +0 -28
  378. package/build/dist/Server/Services/MetricItemAggMV1mByHostService.js.map +0 -1
  379. package/build/dist/Tests/MockType.js +0 -5
  380. package/build/dist/Tests/MockType.js.map +0 -1
  381. package/build/dist/Tests/Models/AnalyticsModels/Log.test.js +0 -12
  382. package/build/dist/Tests/Models/AnalyticsModels/Log.test.js.map +0 -1
  383. package/build/dist/Tests/Models/File.test.js +0 -10
  384. package/build/dist/Tests/Models/File.test.js.map +0 -1
  385. package/build/dist/Tests/Server/API/BaseAPI.test.js +0 -590
  386. package/build/dist/Tests/Server/API/BaseAPI.test.js.map +0 -1
  387. package/build/dist/Tests/Server/API/Helpers.js +0 -27
  388. package/build/dist/Tests/Server/API/Helpers.js.map +0 -1
  389. package/build/dist/Tests/Server/API/ProbeAPI.test.js +0 -84
  390. package/build/dist/Tests/Server/API/ProbeAPI.test.js.map +0 -1
  391. package/build/dist/Tests/Server/API/ProjectAPI.test.js +0 -170
  392. package/build/dist/Tests/Server/API/ProjectAPI.test.js.map +0 -1
  393. package/build/dist/Tests/Server/API/UserSmsApi.test.js +0 -177
  394. package/build/dist/Tests/Server/API/UserSmsApi.test.js.map +0 -1
  395. package/build/dist/Tests/Server/Middleware/BearerTokenAuthorization.test.js +0 -63
  396. package/build/dist/Tests/Server/Middleware/BearerTokenAuthorization.test.js.map +0 -1
  397. package/build/dist/Tests/Server/Middleware/ClusterKeyAuthorization.test.js +0 -58
  398. package/build/dist/Tests/Server/Middleware/ClusterKeyAuthorization.test.js.map +0 -1
  399. package/build/dist/Tests/Server/Middleware/NotificationMiddleware.test.js +0 -101
  400. package/build/dist/Tests/Server/Middleware/NotificationMiddleware.test.js.map +0 -1
  401. package/build/dist/Tests/Server/Middleware/ProjectAuthorization.test.js +0 -160
  402. package/build/dist/Tests/Server/Middleware/ProjectAuthorization.test.js.map +0 -1
  403. package/build/dist/Tests/Server/Middleware/UserAuthorization.test.js +0 -410
  404. package/build/dist/Tests/Server/Middleware/UserAuthorization.test.js.map +0 -1
  405. package/build/dist/Tests/Server/Services/AlertEpisodeMemberService.test.js +0 -165
  406. package/build/dist/Tests/Server/Services/AlertEpisodeMemberService.test.js.map +0 -1
  407. package/build/dist/Tests/Server/Services/AlertEpisodeService.test.js +0 -193
  408. package/build/dist/Tests/Server/Services/AlertEpisodeService.test.js.map +0 -1
  409. package/build/dist/Tests/Server/Services/AlertGroupingEngineService.test.js +0 -435
  410. package/build/dist/Tests/Server/Services/AlertGroupingEngineService.test.js.map +0 -1
  411. package/build/dist/Tests/Server/Services/AlertGroupingRuleService.test.js +0 -320
  412. package/build/dist/Tests/Server/Services/AlertGroupingRuleService.test.js.map +0 -1
  413. package/build/dist/Tests/Server/Services/AnalyticsDatabaseService.test.js +0 -266
  414. package/build/dist/Tests/Server/Services/AnalyticsDatabaseService.test.js.map +0 -1
  415. package/build/dist/Tests/Server/Services/BillingService.test.js +0 -910
  416. package/build/dist/Tests/Server/Services/BillingService.test.js.map +0 -1
  417. package/build/dist/Tests/Server/Services/LogAggregationService.test.js +0 -75
  418. package/build/dist/Tests/Server/Services/LogAggregationService.test.js.map +0 -1
  419. package/build/dist/Tests/Server/Services/ProbeService.test.js +0 -127
  420. package/build/dist/Tests/Server/Services/ProbeService.test.js.map +0 -1
  421. package/build/dist/Tests/Server/Services/ScheduledMaintenanceService.test.js +0 -114
  422. package/build/dist/Tests/Server/Services/ScheduledMaintenanceService.test.js.map +0 -1
  423. package/build/dist/Tests/Server/Services/TeamMemberService.test.js +0 -106
  424. package/build/dist/Tests/Server/Services/TeamMemberService.test.js.map +0 -1
  425. package/build/dist/Tests/Server/Services/TelemetryAttributeService.test.js +0 -50
  426. package/build/dist/Tests/Server/Services/TelemetryAttributeService.test.js.map +0 -1
  427. package/build/dist/Tests/Server/TestingUtils/Init.js +0 -4
  428. package/build/dist/Tests/Server/TestingUtils/Init.js.map +0 -1
  429. package/build/dist/Tests/Server/TestingUtils/Postgres/TestDataSourceOptions.js +0 -9
  430. package/build/dist/Tests/Server/TestingUtils/Postgres/TestDataSourceOptions.js.map +0 -1
  431. package/build/dist/Tests/Server/TestingUtils/Redis/TestRedisOptions.js +0 -16
  432. package/build/dist/Tests/Server/TestingUtils/Redis/TestRedisOptions.js.map +0 -1
  433. package/build/dist/Tests/Server/TestingUtils/Services/BillingServiceHelper.js +0 -125
  434. package/build/dist/Tests/Server/TestingUtils/Services/BillingServiceHelper.js.map +0 -1
  435. package/build/dist/Tests/Server/TestingUtils/Services/ProjectServiceHelper.js +0 -39
  436. package/build/dist/Tests/Server/TestingUtils/Services/ProjectServiceHelper.js.map +0 -1
  437. package/build/dist/Tests/Server/TestingUtils/Services/ScheduledMaintenanceServiceHelper.js +0 -20
  438. package/build/dist/Tests/Server/TestingUtils/Services/ScheduledMaintenanceServiceHelper.js.map +0 -1
  439. package/build/dist/Tests/Server/TestingUtils/Services/ScheduledMaintenanceStateServiceHelper.js +0 -31
  440. package/build/dist/Tests/Server/TestingUtils/Services/ScheduledMaintenanceStateServiceHelper.js.map +0 -1
  441. package/build/dist/Tests/Server/TestingUtils/Services/TeamMemberServiceHelper.js +0 -14
  442. package/build/dist/Tests/Server/TestingUtils/Services/TeamMemberServiceHelper.js.map +0 -1
  443. package/build/dist/Tests/Server/TestingUtils/Services/TeamServiceHelper.js +0 -21
  444. package/build/dist/Tests/Server/TestingUtils/Services/TeamServiceHelper.js.map +0 -1
  445. package/build/dist/Tests/Server/TestingUtils/Services/Types.js +0 -2
  446. package/build/dist/Tests/Server/TestingUtils/Services/Types.js.map +0 -1
  447. package/build/dist/Tests/Server/TestingUtils/Services/UserServiceHelper.js +0 -37
  448. package/build/dist/Tests/Server/TestingUtils/Services/UserServiceHelper.js.map +0 -1
  449. package/build/dist/Tests/Server/TestingUtils/__mocks__/Stripe.mock.js +0 -13
  450. package/build/dist/Tests/Server/TestingUtils/__mocks__/Stripe.mock.js.map +0 -1
  451. package/build/dist/Tests/Server/TestingUtils/__mocks__/TestDatabase.mock.js +0 -22
  452. package/build/dist/Tests/Server/TestingUtils/__mocks__/TestDatabase.mock.js.map +0 -1
  453. package/build/dist/Tests/Server/Types/Domain.test.js +0 -78
  454. package/build/dist/Tests/Server/Types/Domain.test.js.map +0 -1
  455. package/build/dist/Tests/Server/Utils/AnalyticsDatabase/Statement.test.js +0 -94
  456. package/build/dist/Tests/Server/Utils/AnalyticsDatabase/Statement.test.js.map +0 -1
  457. package/build/dist/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.js +0 -459
  458. package/build/dist/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.js.map +0 -1
  459. package/build/dist/Tests/Server/Utils/Cookie.test.js +0 -83
  460. package/build/dist/Tests/Server/Utils/Cookie.test.js.map +0 -1
  461. package/build/dist/Tests/Server/Utils/CronTab.test.js +0 -29
  462. package/build/dist/Tests/Server/Utils/CronTab.test.js.map +0 -1
  463. package/build/dist/Tests/Server/Utils/JsonToCsv.test.js +0 -114
  464. package/build/dist/Tests/Server/Utils/JsonToCsv.test.js.map +0 -1
  465. package/build/dist/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.test.js +0 -606
  466. package/build/dist/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.test.js.map +0 -1
  467. package/build/dist/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.js +0 -255
  468. package/build/dist/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.js.map +0 -1
  469. package/build/dist/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.js +0 -142
  470. package/build/dist/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.js.map +0 -1
  471. package/build/dist/Tests/Server/Utils/StatusPageResource.test.js +0 -122
  472. package/build/dist/Tests/Server/Utils/StatusPageResource.test.js.map +0 -1
  473. package/build/dist/Tests/Server/Utils/Telemetry/LogExceptionExtractor.test.js +0 -0
  474. package/build/dist/Tests/Server/Utils/Telemetry/LogExceptionExtractor.test.js.map +0 -1
  475. package/build/dist/Tests/Server/Utils/VM/VMAPI.test.js +0 -205
  476. package/build/dist/Tests/Server/Utils/VM/VMAPI.test.js.map +0 -1
  477. package/build/dist/Tests/Spy.js +0 -4
  478. package/build/dist/Tests/Spy.js.map +0 -1
  479. package/build/dist/Tests/Types/API/ErrorResponse.test.js +0 -13
  480. package/build/dist/Tests/Types/API/ErrorResponse.test.js.map +0 -1
  481. package/build/dist/Tests/Types/API/HTTPErrorResponse.test.js +0 -33
  482. package/build/dist/Tests/Types/API/HTTPErrorResponse.test.js.map +0 -1
  483. package/build/dist/Tests/Types/API/HTTPMethod.test.js +0 -16
  484. package/build/dist/Tests/Types/API/HTTPMethod.test.js.map +0 -1
  485. package/build/dist/Tests/Types/API/Headers.test.js +0 -14
  486. package/build/dist/Tests/Types/API/Headers.test.js.map +0 -1
  487. package/build/dist/Tests/Types/API/Hostname.test.js +0 -22
  488. package/build/dist/Tests/Types/API/Hostname.test.js.map +0 -1
  489. package/build/dist/Tests/Types/API/Protocal.test.js +0 -19
  490. package/build/dist/Tests/Types/API/Protocal.test.js.map +0 -1
  491. package/build/dist/Tests/Types/API/Response.test.js +0 -14
  492. package/build/dist/Tests/Types/API/Response.test.js.map +0 -1
  493. package/build/dist/Tests/Types/API/ResponseType.test.js +0 -13
  494. package/build/dist/Tests/Types/API/ResponseType.test.js.map +0 -1
  495. package/build/dist/Tests/Types/API/Route.test.js +0 -30
  496. package/build/dist/Tests/Types/API/Route.test.js.map +0 -1
  497. package/build/dist/Tests/Types/API/StatusCode.test.js +0 -26
  498. package/build/dist/Tests/Types/API/StatusCode.test.js.map +0 -1
  499. package/build/dist/Tests/Types/API/URL.test.js +0 -33
  500. package/build/dist/Tests/Types/API/URL.test.js.map +0 -1
  501. package/build/dist/Tests/Types/Alerts/AlertEventType.test.js +0 -34
  502. package/build/dist/Tests/Types/Alerts/AlertEventType.test.js.map +0 -1
  503. package/build/dist/Tests/Types/Alerts/AlertType.test.js +0 -19
  504. package/build/dist/Tests/Types/Alerts/AlertType.test.js.map +0 -1
  505. package/build/dist/Tests/Types/AppEnvironment.test.js +0 -13
  506. package/build/dist/Tests/Types/AppEnvironment.test.js.map +0 -1
  507. package/build/dist/Tests/Types/ApplicationLog/ApplicationLogType.test.js +0 -13
  508. package/build/dist/Tests/Types/ApplicationLog/ApplicationLogType.test.js.map +0 -1
  509. package/build/dist/Tests/Types/ArrayUtil.test.js +0 -71
  510. package/build/dist/Tests/Types/ArrayUtil.test.js.map +0 -1
  511. package/build/dist/Tests/Types/Billing/SubscriptionPlan.test.js +0 -181
  512. package/build/dist/Tests/Types/Billing/SubscriptionPlan.test.js.map +0 -1
  513. package/build/dist/Tests/Types/BrandColors.test.js +0 -124
  514. package/build/dist/Tests/Types/BrandColors.test.js.map +0 -1
  515. package/build/dist/Tests/Types/Char.test.js +0 -82
  516. package/build/dist/Tests/Types/Char.test.js.map +0 -1
  517. package/build/dist/Tests/Types/Code/CodeType.test.js +0 -13
  518. package/build/dist/Tests/Types/Code/CodeType.test.js.map +0 -1
  519. package/build/dist/Tests/Types/Color.test.js +0 -44
  520. package/build/dist/Tests/Types/Color.test.js.map +0 -1
  521. package/build/dist/Tests/Types/Company/CompanySize.test.js +0 -20
  522. package/build/dist/Tests/Types/Company/CompanySize.test.js.map +0 -1
  523. package/build/dist/Tests/Types/Company/JobRole.test.js +0 -22
  524. package/build/dist/Tests/Types/Company/JobRole.test.js.map +0 -1
  525. package/build/dist/Tests/Types/Countries.test.js +0 -249
  526. package/build/dist/Tests/Types/Countries.test.js.map +0 -1
  527. package/build/dist/Tests/Types/Database/ColumnLength.test.js +0 -43
  528. package/build/dist/Tests/Types/Database/ColumnLength.test.js.map +0 -1
  529. package/build/dist/Tests/Types/Database/ColumnType.test.js +0 -79
  530. package/build/dist/Tests/Types/Database/ColumnType.test.js.map +0 -1
  531. package/build/dist/Tests/Types/Database/Columns.test.js +0 -20
  532. package/build/dist/Tests/Types/Database/Columns.test.js.map +0 -1
  533. package/build/dist/Tests/Types/Database/CompareBase.test.js +0 -37
  534. package/build/dist/Tests/Types/Database/CompareBase.test.js.map +0 -1
  535. package/build/dist/Tests/Types/Database/Date.test.js +0 -62
  536. package/build/dist/Tests/Types/Database/Date.test.js.map +0 -1
  537. package/build/dist/Tests/Types/Database/EqualTo.test.js +0 -65
  538. package/build/dist/Tests/Types/Database/EqualTo.test.js.map +0 -1
  539. package/build/dist/Tests/Types/Database/EqualToOrNull.test.js +0 -62
  540. package/build/dist/Tests/Types/Database/EqualToOrNull.test.js.map +0 -1
  541. package/build/dist/Tests/Types/Database/InBetween.test.js +0 -72
  542. package/build/dist/Tests/Types/Database/InBetween.test.js.map +0 -1
  543. package/build/dist/Tests/Types/Database/LimitMax.test.js +0 -18
  544. package/build/dist/Tests/Types/Database/LimitMax.test.js.map +0 -1
  545. package/build/dist/Tests/Types/Database/NotEqual.test.js +0 -19
  546. package/build/dist/Tests/Types/Database/NotEqual.test.js.map +0 -1
  547. package/build/dist/Tests/Types/Database/Search.test.js +0 -10
  548. package/build/dist/Tests/Types/Database/Search.test.js.map +0 -1
  549. package/build/dist/Tests/Types/DatabaseType.test.js +0 -7
  550. package/build/dist/Tests/Types/DatabaseType.test.js.map +0 -1
  551. package/build/dist/Tests/Types/Date.test.js +0 -194
  552. package/build/dist/Tests/Types/Date.test.js.map +0 -1
  553. package/build/dist/Tests/Types/Dictionary.test.js +0 -25
  554. package/build/dist/Tests/Types/Dictionary.test.js.map +0 -1
  555. package/build/dist/Tests/Types/Domain.test.js +0 -54
  556. package/build/dist/Tests/Types/Domain.test.js.map +0 -1
  557. package/build/dist/Tests/Types/Email/Email.test.js +0 -51
  558. package/build/dist/Tests/Types/Email/Email.test.js.map +0 -1
  559. package/build/dist/Tests/Types/EmailWithName.test.js +0 -36
  560. package/build/dist/Tests/Types/EmailWithName.test.js.map +0 -1
  561. package/build/dist/Tests/Types/EncryptionAlgorithm.test.js +0 -7
  562. package/build/dist/Tests/Types/EncryptionAlgorithm.test.js.map +0 -1
  563. package/build/dist/Tests/Types/Exception/ApiException.test.js +0 -10
  564. package/build/dist/Tests/Types/Exception/ApiException.test.js.map +0 -1
  565. package/build/dist/Tests/Types/Exception/BadDataException.test.js +0 -12
  566. package/build/dist/Tests/Types/Exception/BadDataException.test.js.map +0 -1
  567. package/build/dist/Tests/Types/Exception/BadOperationException.test.js +0 -10
  568. package/build/dist/Tests/Types/Exception/BadOperationException.test.js.map +0 -1
  569. package/build/dist/Tests/Types/Exception/BadRequestException.test.js +0 -12
  570. package/build/dist/Tests/Types/Exception/BadRequestException.test.js.map +0 -1
  571. package/build/dist/Tests/Types/Exception/DatabaseNotConnectedException.test.js +0 -10
  572. package/build/dist/Tests/Types/Exception/DatabaseNotConnectedException.test.js.map +0 -1
  573. package/build/dist/Tests/Types/Exception/Exception.test.js +0 -15
  574. package/build/dist/Tests/Types/Exception/Exception.test.js.map +0 -1
  575. package/build/dist/Tests/Types/Exception/NotImplementedException.test.js +0 -12
  576. package/build/dist/Tests/Types/Exception/NotImplementedException.test.js.map +0 -1
  577. package/build/dist/Tests/Types/File.test.js +0 -22
  578. package/build/dist/Tests/Types/File.test.js.map +0 -1
  579. package/build/dist/Tests/Types/HashedString.test.js +0 -51
  580. package/build/dist/Tests/Types/HashedString.test.js.map +0 -1
  581. package/build/dist/Tests/Types/Html.test.js +0 -8
  582. package/build/dist/Tests/Types/Html.test.js.map +0 -1
  583. package/build/dist/Tests/Types/IP/IP.test.js +0 -65
  584. package/build/dist/Tests/Types/IP/IP.test.js.map +0 -1
  585. package/build/dist/Tests/Types/IP/IPType.test.js +0 -10
  586. package/build/dist/Tests/Types/IP/IPType.test.js.map +0 -1
  587. package/build/dist/Tests/Types/IP/IPv4.test.js +0 -17
  588. package/build/dist/Tests/Types/IP/IPv4.test.js.map +0 -1
  589. package/build/dist/Tests/Types/IP/IPv6.test.js +0 -17
  590. package/build/dist/Tests/Types/IP/IPv6.test.js.map +0 -1
  591. package/build/dist/Tests/Types/JSON.test.js +0 -37
  592. package/build/dist/Tests/Types/JSON.test.js.map +0 -1
  593. package/build/dist/Tests/Types/JSONFunctions.test.js +0 -38
  594. package/build/dist/Tests/Types/JSONFunctions.test.js.map +0 -1
  595. package/build/dist/Tests/Types/ListData.test.js +0 -34
  596. package/build/dist/Tests/Types/ListData.test.js.map +0 -1
  597. package/build/dist/Tests/Types/Monitor/KubernetesAlertTemplates.test.js +0 -121
  598. package/build/dist/Tests/Types/Monitor/KubernetesAlertTemplates.test.js.map +0 -1
  599. package/build/dist/Tests/Types/Name.test.js +0 -26
  600. package/build/dist/Tests/Types/Name.test.js.map +0 -1
  601. package/build/dist/Tests/Types/ObjectID.test.js +0 -12
  602. package/build/dist/Tests/Types/ObjectID.test.js.map +0 -1
  603. package/build/dist/Tests/Types/OnCallDutyPolicy/LayerUtil.test.js +0 -530
  604. package/build/dist/Tests/Types/OnCallDutyPolicy/LayerUtil.test.js.map +0 -1
  605. package/build/dist/Tests/Types/Permission.test.js +0 -99
  606. package/build/dist/Tests/Types/Permission.test.js.map +0 -1
  607. package/build/dist/Tests/Types/Phone.test.js +0 -37
  608. package/build/dist/Tests/Types/Phone.test.js.map +0 -1
  609. package/build/dist/Tests/Types/Port.test.js +0 -35
  610. package/build/dist/Tests/Types/Port.test.js.map +0 -1
  611. package/build/dist/Tests/Types/PositiveNumber.test.js +0 -101
  612. package/build/dist/Tests/Types/PositiveNumber.test.js.map +0 -1
  613. package/build/dist/Tests/Types/SecuritySeverity.test.js +0 -16
  614. package/build/dist/Tests/Types/SecuritySeverity.test.js.map +0 -1
  615. package/build/dist/Tests/Types/SerializableObject.test.js +0 -37
  616. package/build/dist/Tests/Types/SerializableObject.test.js.map +0 -1
  617. package/build/dist/Tests/Types/Sleep.test.js +0 -14
  618. package/build/dist/Tests/Types/Sleep.test.js.map +0 -1
  619. package/build/dist/Tests/Types/Text.test.js +0 -8
  620. package/build/dist/Tests/Types/Text.test.js.map +0 -1
  621. package/build/dist/Tests/Types/Timezone.test.js +0 -596
  622. package/build/dist/Tests/Types/Timezone.test.js.map +0 -1
  623. package/build/dist/Tests/Types/Typeof.test.js +0 -16
  624. package/build/dist/Tests/Types/Typeof.test.js.map +0 -1
  625. package/build/dist/Tests/Types/UserType.test.js +0 -16
  626. package/build/dist/Tests/Types/UserType.test.js.map +0 -1
  627. package/build/dist/Tests/Types/Version.test.js +0 -35
  628. package/build/dist/Tests/Types/Version.test.js.map +0 -1
  629. package/build/dist/Tests/Types/XML.test.js +0 -35
  630. package/build/dist/Tests/Types/XML.test.js.map +0 -1
  631. package/build/dist/Tests/UI/Components/404.test.js +0 -59
  632. package/build/dist/Tests/UI/Components/404.test.js.map +0 -1
  633. package/build/dist/Tests/UI/Components/Alert.test.js +0 -83
  634. package/build/dist/Tests/UI/Components/Alert.test.js.map +0 -1
  635. package/build/dist/Tests/UI/Components/Badge.test.js +0 -59
  636. package/build/dist/Tests/UI/Components/Badge.test.js.map +0 -1
  637. package/build/dist/Tests/UI/Components/BasicForm.test.js +0 -92
  638. package/build/dist/Tests/UI/Components/BasicForm.test.js.map +0 -1
  639. package/build/dist/Tests/UI/Components/Breadcrumbs.test.js +0 -69
  640. package/build/dist/Tests/UI/Components/Breadcrumbs.test.js.map +0 -1
  641. package/build/dist/Tests/UI/Components/Button.test.js +0 -104
  642. package/build/dist/Tests/UI/Components/Button.test.js.map +0 -1
  643. package/build/dist/Tests/UI/Components/Card.test.js +0 -81
  644. package/build/dist/Tests/UI/Components/Card.test.js.map +0 -1
  645. package/build/dist/Tests/UI/Components/ColorViewer.test.js +0 -42
  646. package/build/dist/Tests/UI/Components/ColorViewer.test.js.map +0 -1
  647. package/build/dist/Tests/UI/Components/ComponentsModal.test.js +0 -233
  648. package/build/dist/Tests/UI/Components/ComponentsModal.test.js.map +0 -1
  649. package/build/dist/Tests/UI/Components/ConfirmModal.test.js +0 -57
  650. package/build/dist/Tests/UI/Components/ConfirmModal.test.js.map +0 -1
  651. package/build/dist/Tests/UI/Components/DictionaryOfStrings.test.js +0 -84
  652. package/build/dist/Tests/UI/Components/DictionaryOfStrings.test.js.map +0 -1
  653. package/build/dist/Tests/UI/Components/Dropdown.test.js +0 -146
  654. package/build/dist/Tests/UI/Components/Dropdown.test.js.map +0 -1
  655. package/build/dist/Tests/UI/Components/DuplicateModel.test.js +0 -229
  656. package/build/dist/Tests/UI/Components/DuplicateModel.test.js.map +0 -1
  657. package/build/dist/Tests/UI/Components/EmptyState/EmptyState.test.js +0 -26
  658. package/build/dist/Tests/UI/Components/EmptyState/EmptyState.test.js.map +0 -1
  659. package/build/dist/Tests/UI/Components/ErrorBoundary.test.js +0 -32
  660. package/build/dist/Tests/UI/Components/ErrorBoundary.test.js.map +0 -1
  661. package/build/dist/Tests/UI/Components/FilePicker.test.js +0 -342
  662. package/build/dist/Tests/UI/Components/FilePicker.test.js.map +0 -1
  663. package/build/dist/Tests/UI/Components/HiddenText.test.js +0 -50
  664. package/build/dist/Tests/UI/Components/HiddenText.test.js.map +0 -1
  665. package/build/dist/Tests/UI/Components/Input.test.js +0 -223
  666. package/build/dist/Tests/UI/Components/Input.test.js.map +0 -1
  667. package/build/dist/Tests/UI/Components/Item.test.js +0 -58
  668. package/build/dist/Tests/UI/Components/Item.test.js.map +0 -1
  669. package/build/dist/Tests/UI/Components/List.test.js +0 -83
  670. package/build/dist/Tests/UI/Components/List.test.js.map +0 -1
  671. package/build/dist/Tests/UI/Components/Loader.test.js +0 -19
  672. package/build/dist/Tests/UI/Components/Loader.test.js.map +0 -1
  673. package/build/dist/Tests/UI/Components/MarkdownEditor.test.js +0 -85
  674. package/build/dist/Tests/UI/Components/MarkdownEditor.test.js.map +0 -1
  675. package/build/dist/Tests/UI/Components/MasterPage.test.js +0 -46
  676. package/build/dist/Tests/UI/Components/MasterPage.test.js.map +0 -1
  677. package/build/dist/Tests/UI/Components/Modal.test.js +0 -127
  678. package/build/dist/Tests/UI/Components/Modal.test.js.map +0 -1
  679. package/build/dist/Tests/UI/Components/NavBar.test.js +0 -52
  680. package/build/dist/Tests/UI/Components/NavBar.test.js.map +0 -1
  681. package/build/dist/Tests/UI/Components/OrderedStatesList.test.js +0 -86
  682. package/build/dist/Tests/UI/Components/OrderedStatesList.test.js.map +0 -1
  683. package/build/dist/Tests/UI/Components/Pagination.test.js +0 -137
  684. package/build/dist/Tests/UI/Components/Pagination.test.js.map +0 -1
  685. package/build/dist/Tests/UI/Components/Pill.test.js +0 -55
  686. package/build/dist/Tests/UI/Components/Pill.test.js.map +0 -1
  687. package/build/dist/Tests/UI/Components/Probe.test.js +0 -52
  688. package/build/dist/Tests/UI/Components/Probe.test.js.map +0 -1
  689. package/build/dist/Tests/UI/Components/ProgressBar.test.js +0 -41
  690. package/build/dist/Tests/UI/Components/ProgressBar.test.js.map +0 -1
  691. package/build/dist/Tests/UI/Components/RadioButtons.test.js +0 -66
  692. package/build/dist/Tests/UI/Components/RadioButtons.test.js.map +0 -1
  693. package/build/dist/Tests/UI/Components/SideMenuItem.test.js +0 -99
  694. package/build/dist/Tests/UI/Components/SideMenuItem.test.js.map +0 -1
  695. package/build/dist/Tests/UI/Components/SideOver.test.js +0 -77
  696. package/build/dist/Tests/UI/Components/SideOver.test.js.map +0 -1
  697. package/build/dist/Tests/UI/Components/Tabs.test.js +0 -56
  698. package/build/dist/Tests/UI/Components/Tabs.test.js.map +0 -1
  699. package/build/dist/Tests/UI/Components/Template/Template.test.js +0 -15
  700. package/build/dist/Tests/UI/Components/Template/Template.test.js.map +0 -1
  701. package/build/dist/Tests/UI/Components/TextArea.test.js +0 -112
  702. package/build/dist/Tests/UI/Components/TextArea.test.js.map +0 -1
  703. package/build/dist/Tests/UI/Components/TimePicker/TimePicker.test.js +0 -352
  704. package/build/dist/Tests/UI/Components/TimePicker/TimePicker.test.js.map +0 -1
  705. package/build/dist/Tests/UI/Components/Toast.test.js +0 -48
  706. package/build/dist/Tests/UI/Components/Toast.test.js.map +0 -1
  707. package/build/dist/Tests/UI/Components/Toggle.test.js +0 -95
  708. package/build/dist/Tests/UI/Components/Toggle.test.js.map +0 -1
  709. package/build/dist/Tests/UI/Components/TopSection.test.js +0 -33
  710. package/build/dist/Tests/UI/Components/TopSection.test.js.map +0 -1
  711. package/build/dist/Tests/UI/Components/XAxis.test.js +0 -21
  712. package/build/dist/Tests/UI/Components/XAxis.test.js.map +0 -1
  713. package/build/dist/Tests/UI/Index.js +0 -2
  714. package/build/dist/Tests/UI/Index.js.map +0 -1
  715. package/build/dist/Tests/UI/Mocks/FileMock.js +0 -3
  716. package/build/dist/Tests/UI/Mocks/FileMock.js.map +0 -1
  717. package/build/dist/Tests/Utils/API.test.js +0 -399
  718. package/build/dist/Tests/Utils/API.test.js.map +0 -1
  719. package/build/dist/Tests/Utils/Analytics.test.js +0 -67
  720. package/build/dist/Tests/Utils/Analytics.test.js.map +0 -1
  721. package/build/dist/Tests/Utils/CronTime.test.js +0 -22
  722. package/build/dist/Tests/Utils/CronTime.test.js.map +0 -1
  723. package/build/dist/Tests/Utils/Faker.test.js +0 -27
  724. package/build/dist/Tests/Utils/Faker.test.js.map +0 -1
  725. package/build/dist/Tests/Utils/MetricUnitUtil.test.js +0 -187
  726. package/build/dist/Tests/Utils/MetricUnitUtil.test.js.map +0 -1
  727. package/build/dist/Tests/Utils/Metrics/MetricFormulaEvaluator.test.js +0 -224
  728. package/build/dist/Tests/Utils/Metrics/MetricFormulaEvaluator.test.js.map +0 -1
  729. package/build/dist/Tests/Utils/Metrics/MetricResultUnitConverter.test.js +0 -180
  730. package/build/dist/Tests/Utils/Metrics/MetricResultUnitConverter.test.js.map +0 -1
  731. package/build/dist/Tests/Utils/RecordingRuleExpression.test.js +0 -142
  732. package/build/dist/Tests/Utils/RecordingRuleExpression.test.js.map +0 -1
  733. package/build/dist/Tests/Utils/Slug.test.js +0 -20
  734. package/build/dist/Tests/Utils/Slug.test.js.map +0 -1
  735. package/build/dist/Tests/Utils/UUID.test.js +0 -48
  736. package/build/dist/Tests/Utils/UUID.test.js.map +0 -1
  737. package/build/dist/Tests/jest.setup.js +0 -30
  738. package/build/dist/Tests/jest.setup.js.map +0 -1
  739. package/build/dist/Types/Profile/ProfileMetricType.js +0 -17
  740. package/build/dist/Types/Profile/ProfileMetricType.js.map +0 -1
@@ -8,6 +8,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
10
  import { SQL, Statement } from "../Utils/AnalyticsDatabase/Statement";
11
+ import { getQuerySettings } from "../Utils/AnalyticsDatabase/QuerySettingsHelper";
11
12
  import SpanService from "./SpanService";
12
13
  import TableColumnType from "../../Types/AnalyticsDatabase/TableColumnType";
13
14
  import BadDataException from "../../Types/Exception/BadDataException";
@@ -89,11 +90,14 @@ export class TraceAggregationService {
89
90
  selectColumns.push(...topLevelKeys);
90
91
  }
91
92
  if (resourceKeys.length > 0) {
92
- // Virtual facets read out of serviceId disambiguated by serviceType.
93
- if (!selectColumns.includes("serviceId")) {
94
- selectColumns.push("serviceId");
93
+ /*
94
+ * Virtual facets read out of primaryEntityId disambiguated by
95
+ * primaryEntityType.
96
+ */
97
+ if (!selectColumns.includes("primaryEntityId")) {
98
+ selectColumns.push("primaryEntityId");
95
99
  }
96
- selectColumns.push("serviceType");
100
+ selectColumns.push("primaryEntityType");
97
101
  }
98
102
  if (attributeKeys.length > 0) {
99
103
  selectColumns.push("attributes");
@@ -118,6 +122,7 @@ export class TraceAggregationService {
118
122
  type: TableColumnType.Date,
119
123
  value: request.endTime,
120
124
  }}`);
125
+ statement.append(TraceAggregationService.RETENTION_FILTER);
121
126
  TraceAggregationService.appendCommonFilters(statement, request);
122
127
  statement.append(SQL ` ORDER BY startTime DESC LIMIT ${{
123
128
  type: TableColumnType.Number,
@@ -128,7 +133,10 @@ export class TraceAggregationService {
128
133
  * return in well under a second, but cap runtime below nginx's 60s
129
134
  * proxy_read_timeout regardless.
130
135
  */
131
- statement.append(" SETTINGS max_execution_time = 45, timeout_overflow_mode = 'break'");
136
+ statement.append(getQuerySettings({
137
+ maxExecutionTimeInSeconds: 45,
138
+ timeoutOverflowMode: "break",
139
+ }));
132
140
  const dbResult = await SpanService.executeQuery(statement);
133
141
  const response = await dbResult.json();
134
142
  const rows = response.data || [];
@@ -150,10 +158,11 @@ export class TraceAggregationService {
150
158
  map.set(value, (map.get(value) || 0) + 1);
151
159
  }
152
160
  if (resourceKeys.length > 0) {
153
- const rowServiceType = row["serviceType"] === undefined || row["serviceType"] === null
161
+ const rowServiceType = row["primaryEntityType"] === undefined ||
162
+ row["primaryEntityType"] === null
154
163
  ? ""
155
- : String(row["serviceType"]);
156
- const rowServiceId = row["serviceId"];
164
+ : String(row["primaryEntityType"]);
165
+ const rowServiceId = row["primaryEntityId"];
157
166
  if (rowServiceId !== undefined && rowServiceId !== null) {
158
167
  const value = String(rowServiceId);
159
168
  if (value.length > 0) {
@@ -218,31 +227,34 @@ export class TraceAggregationService {
218
227
  * exact regardless of skew.
219
228
  *
220
229
  * It is cheap because it rides the proj_hist_by_minute aggregate projection
221
- * (projectId, minute, serviceId, statusCode, isRootSpan -> count): a 1-month
222
- * window reads a few thousand pre-aggregated minute rows in single-digit ms
223
- * instead of scanning tens of millions of raw spans. Two things are required
224
- * for ClickHouse to actually pick that projection, both load-bearing:
230
+ * (projectId, minute, primaryEntityId, statusCode, isRootSpan -> count): a
231
+ * 1-month window reads a few thousand pre-aggregated minute rows in
232
+ * single-digit ms instead of scanning tens of millions of raw spans. Two
233
+ * things are required for ClickHouse to actually pick that projection, both
234
+ * load-bearing:
225
235
  * 1. The time predicate must be on toStartOfMinute(startTime) — the
226
236
  * projection's key expression — NOT raw startTime. A raw startTime
227
237
  * filter references a column the aggregate projection does not store, so
228
238
  * ClickHouse rejects the projection and full-scans. (Window edges land
229
239
  * on minute boundaries, consistent with the minute-bucketed histogram.)
230
240
  * 2. Every other predicate must be on a projection column. isRootSpan,
231
- * serviceId and statusCode all are, so the default sidebar load and
232
- * drill-down-by-service stay on the projection. A non-projection filter
233
- * (kind / name / traceId / attributes) transparently falls back to a
234
- * base-table scan — still correct, still bounded by max_execution_time.
241
+ * primaryEntityId and statusCode all are, so the default sidebar load
242
+ * and drill-down-by-service stay on the projection. A non-projection
243
+ * filter (kind / name / traceId / entityKeys / attributes)
244
+ * transparently falls back to a base-table scan — still correct, still
245
+ * bounded by max_execution_time.
235
246
  *
236
- * serviceId is intentionally NOT disambiguated by serviceType here. Resource
237
- * IDs are globally unique, so a single serviceId -> count map correctly
238
- * serves the service / host / docker host / k8s cluster facets once merged
239
- * against each Postgres source-of-truth list (a host id never collides with
240
- * a service id, so an unrelated entry is simply never looked up). Omitting
241
- * the serviceType predicate keeps the query projection-eligible.
247
+ * primaryEntityId is intentionally NOT disambiguated by primaryEntityType
248
+ * here. Resource IDs are globally unique, so a single primaryEntityId ->
249
+ * count map correctly serves the service / host / docker host / k8s cluster
250
+ * facets once merged against each Postgres source-of-truth list (a host id
251
+ * never collides with a service id, so an unrelated entry is simply never
252
+ * looked up). Omitting the primaryEntityType predicate keeps the query
253
+ * projection-eligible.
242
254
  */
243
255
  static async getResourceFacetCounts(request) {
244
256
  const statement = new Statement();
245
- statement.append(`SELECT serviceId, statusCode, count() AS cnt FROM ${TraceAggregationService.TABLE_NAME}`);
257
+ statement.append(`SELECT primaryEntityId, statusCode, count() AS cnt FROM ${TraceAggregationService.TABLE_NAME}`);
246
258
  statement.append(SQL ` WHERE projectId = ${{
247
259
  type: TableColumnType.ObjectID,
248
260
  value: request.projectId,
@@ -254,13 +266,17 @@ export class TraceAggregationService {
254
266
  value: request.endTime,
255
267
  }})`);
256
268
  TraceAggregationService.appendCommonFilters(statement, request);
257
- statement.append(" GROUP BY serviceId, statusCode");
269
+ statement.append(" GROUP BY primaryEntityId, statusCode");
258
270
  /*
259
271
  * Cap runtime below nginx's 60s proxy_read_timeout and explicitly allow
260
272
  * projection use so proj_hist_by_minute is read when eligible (see the
261
273
  * toStartOfMinute note above).
262
274
  */
263
- statement.append(" SETTINGS max_execution_time = 45, timeout_overflow_mode = 'break', optimize_use_projections = 1");
275
+ statement.append(getQuerySettings({
276
+ maxExecutionTimeInSeconds: 45,
277
+ timeoutOverflowMode: "break",
278
+ additionalSettings: { optimize_use_projections: 1 },
279
+ }));
264
280
  const serviceCounts = new Map();
265
281
  const statusCounts = new Map();
266
282
  const dbResult = await SpanService.executeQuery(statement);
@@ -280,7 +296,7 @@ export class TraceAggregationService {
280
296
  }
281
297
  for (const row of rows) {
282
298
  const cnt = Number(row["cnt"] || 0);
283
- const rawServiceId = row["serviceId"];
299
+ const rawServiceId = row["primaryEntityId"];
284
300
  if (rawServiceId !== undefined && rawServiceId !== null) {
285
301
  const serviceId = String(rawServiceId);
286
302
  if (serviceId.length > 0) {
@@ -323,9 +339,13 @@ export class TraceAggregationService {
323
339
  * minute-bucketed output and only shifts the first/last bucket by the
324
340
  * partial boundary minute when the range is not minute-aligned.
325
341
  *
326
- * If any non-projection filter (kind, name, traceId, nameSearchText,
327
- * attributes) is active, ClickHouse transparently falls back to
328
- * scanning the main table for the inner query — same cost as before.
342
+ * If any non-projection filter (kind, name, traceId, spanId,
343
+ * nameSearchText, spanNameSearches, statusMessageSearchText,
344
+ * hasException, duration bounds, entityKeys, attributes) is active,
345
+ * ClickHouse transparently falls back to scanning the main table for the
346
+ * inner query — same cost as before.
347
+ * The retention read-filter is omitted for the same reason (see
348
+ * RETENTION_FILTER).
329
349
  */
330
350
  const statement = SQL `
331
351
  SELECT
@@ -362,11 +382,19 @@ export class TraceAggregationService {
362
382
  * with 'break' mode rather than throwing, which is acceptable for
363
383
  * a density visualization. Explicitly enable projection use.
364
384
  */
365
- statement.append(" SETTINGS max_execution_time = 45, timeout_overflow_mode = 'break', optimize_use_projections = 1");
385
+ statement.append(getQuerySettings({
386
+ maxExecutionTimeInSeconds: 45,
387
+ timeoutOverflowMode: "break",
388
+ additionalSettings: { optimize_use_projections: 1 },
389
+ }));
366
390
  return statement;
367
391
  }
368
392
  static buildFacetStatement(request) {
369
393
  var _a;
394
+ // Pre-rename alias from stale clients; the V3 column is primaryEntityId.
395
+ if (request.facetKey === "serviceId") {
396
+ request.facetKey = "primaryEntityId";
397
+ }
370
398
  const limit = (_a = request.limit) !== null && _a !== void 0 ? _a : TraceAggregationService.DEFAULT_FACET_LIMIT;
371
399
  TraceAggregationService.validateFacetKey(request.facetKey);
372
400
  const resourceServiceType = TraceAggregationService.RESOURCE_FACET_KEYS.get(request.facetKey);
@@ -375,16 +403,16 @@ export class TraceAggregationService {
375
403
  TraceAggregationService.isTopLevelColumn(request.facetKey);
376
404
  const statement = new Statement();
377
405
  if (isResourceFacet) {
378
- statement.append(SQL `SELECT toString(serviceId) AS val, count() AS cnt FROM ${TraceAggregationService.TABLE_NAME}`);
406
+ statement.append(SQL `SELECT toString(primaryEntityId) AS val, count() AS cnt FROM ${TraceAggregationService.TABLE_NAME}`);
379
407
  }
380
408
  else if (isTopLevelColumn) {
381
409
  statement.append(SQL `SELECT toString(${request.facetKey}) AS val, count() AS cnt FROM ${TraceAggregationService.TABLE_NAME}`);
382
410
  }
383
411
  else {
384
- statement.append(SQL `SELECT JSONExtractRaw(attributes, ${{
412
+ statement.append(SQL `SELECT attributes[${{
385
413
  type: TableColumnType.Text,
386
414
  value: request.facetKey,
387
- }}) AS val, count() AS cnt FROM ${TraceAggregationService.TABLE_NAME}`);
415
+ }}] AS val, count() AS cnt FROM ${TraceAggregationService.TABLE_NAME}`);
388
416
  }
389
417
  statement.append(SQL ` WHERE projectId = ${{
390
418
  type: TableColumnType.ObjectID,
@@ -397,23 +425,24 @@ export class TraceAggregationService {
397
425
  value: request.endTime,
398
426
  }}`);
399
427
  if (isResourceFacet) {
400
- statement.append(SQL ` AND serviceType = ${{
428
+ statement.append(SQL ` AND primaryEntityType = ${{
401
429
  type: TableColumnType.Text,
402
430
  value: resourceServiceType,
403
431
  }}`);
404
432
  }
405
- else if (request.facetKey === "serviceId") {
406
- statement.append(SQL ` AND (serviceType = '' OR serviceType = ${{
433
+ else if (request.facetKey === "primaryEntityId") {
434
+ statement.append(SQL ` AND (primaryEntityType = '' OR primaryEntityType = ${{
407
435
  type: TableColumnType.Text,
408
436
  value: ServiceType.OpenTelemetry,
409
437
  }})`);
410
438
  }
411
439
  else if (!isTopLevelColumn) {
412
- statement.append(SQL ` AND JSONHas(attributes, ${{
440
+ statement.append(SQL ` AND mapContains(attributes, ${{
413
441
  type: TableColumnType.Text,
414
442
  value: request.facetKey,
415
- }}) = 1`);
443
+ }})`);
416
444
  }
445
+ statement.append(TraceAggregationService.RETENTION_FILTER);
417
446
  TraceAggregationService.appendCommonFilters(statement, request);
418
447
  statement.append(SQL ` GROUP BY val ORDER BY cnt DESC LIMIT ${{
419
448
  type: TableColumnType.Number,
@@ -423,7 +452,10 @@ export class TraceAggregationService {
423
452
  * Defense in depth: cap individual facet query runtime below nginx's
424
453
  * 60s proxy_read_timeout so a slow facet never starves the endpoint.
425
454
  */
426
- statement.append(" SETTINGS max_execution_time = 45, timeout_overflow_mode = 'break'");
455
+ statement.append(getQuerySettings({
456
+ maxExecutionTimeInSeconds: 45,
457
+ timeoutOverflowMode: "break",
458
+ }));
427
459
  return statement;
428
460
  }
429
461
  static appendCommonFilters(statement, request) {
@@ -431,13 +463,19 @@ export class TraceAggregationService {
431
463
  statement.append(" AND isRootSpan = 1");
432
464
  }
433
465
  if (request.serviceIds && request.serviceIds.length > 0) {
434
- statement.append(SQL ` AND serviceId IN (${{
466
+ statement.append(SQL ` AND primaryEntityId IN (${{
435
467
  type: TableColumnType.ObjectID,
436
468
  value: new Includes(request.serviceIds.map((id) => {
437
469
  return id.toString();
438
470
  })),
439
471
  }})`);
440
472
  }
473
+ if (request.entityKeys && request.entityKeys.length > 0) {
474
+ statement.append(SQL ` AND hasAny(entityKeys, ${{
475
+ type: TableColumnType.ArrayText,
476
+ value: request.entityKeys,
477
+ }})`);
478
+ }
441
479
  if (request.statusCodes && request.statusCodes.length > 0) {
442
480
  statement.append(SQL ` AND statusCode IN (${{
443
481
  type: TableColumnType.Number,
@@ -458,6 +496,28 @@ export class TraceAggregationService {
458
496
  value: new Includes(request.spanNames),
459
497
  }})`);
460
498
  }
499
+ /*
500
+ * Values are kept verbatim (no trim) — the list-side Search serialization
501
+ * wraps the raw value in %...%, and quoted search values deliberately
502
+ * preserve whitespace. Only blank entries are skipped.
503
+ */
504
+ if (request.spanNameSearches && request.spanNameSearches.length > 0) {
505
+ for (const search of request.spanNameSearches) {
506
+ if (search.trim().length === 0) {
507
+ continue;
508
+ }
509
+ statement.append(SQL ` AND name ILIKE ${{
510
+ type: TableColumnType.Text,
511
+ value: `%${search}%`,
512
+ }}`);
513
+ }
514
+ }
515
+ if (request.spanIds && request.spanIds.length > 0) {
516
+ statement.append(SQL ` AND spanId IN (${{
517
+ type: TableColumnType.Text,
518
+ value: new Includes(request.spanIds),
519
+ }})`);
520
+ }
461
521
  if (request.traceIds && request.traceIds.length > 0) {
462
522
  statement.append(SQL ` AND traceId IN (${{
463
523
  type: TableColumnType.Text,
@@ -470,6 +530,49 @@ export class TraceAggregationService {
470
530
  value: `%${request.nameSearchText.trim()}%`,
471
531
  }}`);
472
532
  }
533
+ if (request.statusMessageSearchText &&
534
+ request.statusMessageSearchText.trim().length > 0) {
535
+ statement.append(SQL ` AND statusMessage ILIKE ${{
536
+ type: TableColumnType.Text,
537
+ value: `%${request.statusMessageSearchText}%`,
538
+ }}`);
539
+ }
540
+ if (request.statusMessages && request.statusMessages.length > 0) {
541
+ statement.append(SQL ` AND statusMessage IN (${{
542
+ type: TableColumnType.Text,
543
+ value: new Includes(request.statusMessages),
544
+ }})`);
545
+ }
546
+ if (request.hasException !== undefined) {
547
+ statement.append(request.hasException
548
+ ? " AND hasException = 1"
549
+ : " AND hasException = 0");
550
+ }
551
+ /*
552
+ * durationUnixNano is LongNumber (Int128) — a Number (Int32) param would
553
+ * overflow for spans longer than ~2.1 seconds.
554
+ */
555
+ if (request.minDurationNano !== undefined &&
556
+ !isNaN(request.minDurationNano)) {
557
+ statement.append(SQL ` AND durationUnixNano > ${{
558
+ type: TableColumnType.LongNumber,
559
+ value: request.minDurationNano,
560
+ }}`);
561
+ }
562
+ if (request.maxDurationNano !== undefined &&
563
+ !isNaN(request.maxDurationNano)) {
564
+ statement.append(SQL ` AND durationUnixNano < ${{
565
+ type: TableColumnType.LongNumber,
566
+ value: request.maxDurationNano,
567
+ }}`);
568
+ }
569
+ if (request.exactDurationNano !== undefined &&
570
+ !isNaN(request.exactDurationNano)) {
571
+ statement.append(SQL ` AND durationUnixNano = ${{
572
+ type: TableColumnType.LongNumber,
573
+ value: request.exactDurationNano,
574
+ }}`);
575
+ }
473
576
  if (request.attributes && Object.keys(request.attributes).length > 0) {
474
577
  for (const [attrKey, attrValue] of Object.entries(request.attributes)) {
475
578
  TraceAggregationService.validateFacetKey(attrKey);
@@ -487,6 +590,382 @@ export class TraceAggregationService {
487
590
  }}, mapKeys(attributes), mapValues(attributes))`);
488
591
  }
489
592
  }
593
+ if (request.attributeSearches &&
594
+ Object.keys(request.attributeSearches).length > 0) {
595
+ for (const [attrKey, attrValue] of Object.entries(request.attributeSearches)) {
596
+ TraceAggregationService.validateFacetKey(attrKey);
597
+ if (attrValue.trim().length === 0) {
598
+ continue;
599
+ }
600
+ // Same key matching as `attributes`, contains-match on the value.
601
+ statement.append(SQL ` AND arrayExists((k, v) -> lowerUTF8(k) = lowerUTF8(${{
602
+ type: TableColumnType.Text,
603
+ value: attrKey,
604
+ }}) AND v ILIKE ${{
605
+ type: TableColumnType.Text,
606
+ value: `%${attrValue}%`,
607
+ }}, mapKeys(attributes), mapValues(attributes))`);
608
+ }
609
+ }
610
+ }
611
+ static isValidAnalyticsMetric(metric) {
612
+ return Object.prototype.hasOwnProperty.call(TraceAggregationService.METRIC_EXPRESSIONS, metric);
613
+ }
614
+ /*
615
+ * Multidimensional span analytics — the interactive "split by dimension"
616
+ * path (count / duration percentiles grouped by a span column or
617
+ * attribute). Mirrors the logs analytics architecture
618
+ * (LogAggregationService.getAnalyticsTimeseries and friends) and shares
619
+ * appendCommonFilters with the histogram/facets, so every explorer filter
620
+ * applies identically.
621
+ */
622
+ static async getAnalyticsTimeseries(request) {
623
+ const groupByKeys = request.groupBy || [];
624
+ /*
625
+ * Cap the series count: a high-cardinality dimension (e.g. url.host
626
+ * across hundreds of tenants) would otherwise return one series per
627
+ * value. Pre-resolve the top values of the first dimension — ranked by
628
+ * the SELECTED metric (so duration metrics chart the slowest dimension
629
+ * values, counts chart the busiest) — and constrain the timeseries to
630
+ * them. The full groupBy is passed so the ranking applies the same
631
+ * dimension-implied predicates (e.g. mapContains on the second
632
+ * dimension) as the final query.
633
+ */
634
+ let topValues = undefined;
635
+ if (groupByKeys.length > 0) {
636
+ const topItems = await TraceAggregationService.getAnalyticsTopList(request);
637
+ topValues = topItems.map((item) => {
638
+ return item.value;
639
+ });
640
+ /*
641
+ * No non-empty values → skip the cap rather than returning nothing:
642
+ * spans whose dimension value is an empty string still chart (as one
643
+ * "(empty)" series), consistent with the table view.
644
+ */
645
+ if (topValues.length === 0) {
646
+ topValues = undefined;
647
+ }
648
+ }
649
+ const statement = TraceAggregationService.buildAnalyticsTimeseriesStatement(request, topValues);
650
+ const dbResult = await SpanService.executeQuery(statement);
651
+ let rows = [];
652
+ try {
653
+ const response = await dbResult.json();
654
+ rows = response.data || [];
655
+ }
656
+ catch (_a) {
657
+ logger.warn("Trace analytics timeseries query returned unparseable response, returning empty result");
658
+ }
659
+ return rows.map((row) => {
660
+ var _a;
661
+ const groupValues = {};
662
+ for (const [index, key] of groupByKeys.entries()) {
663
+ const alias = TraceAggregationService.groupByAlias(key, index);
664
+ groupValues[key] = String((_a = row[alias]) !== null && _a !== void 0 ? _a : "");
665
+ }
666
+ return {
667
+ time: String(row["bucket"] || ""),
668
+ value: Number(row["val"] || 0),
669
+ groupValues,
670
+ };
671
+ });
672
+ }
673
+ static async getAnalyticsTopList(request) {
674
+ if (!request.groupBy || request.groupBy.length === 0) {
675
+ throw new BadDataException("groupBy with at least one dimension is required for top list");
676
+ }
677
+ const statement = TraceAggregationService.buildAnalyticsTopListStatement(request);
678
+ const dbResult = await SpanService.executeQuery(statement);
679
+ let rows = [];
680
+ try {
681
+ const response = await dbResult.json();
682
+ rows = response.data || [];
683
+ }
684
+ catch (_a) {
685
+ logger.warn("Trace analytics top list query returned unparseable response, returning empty result");
686
+ }
687
+ return rows
688
+ .map((row) => {
689
+ var _a;
690
+ return {
691
+ value: String((_a = row["dim"]) !== null && _a !== void 0 ? _a : ""),
692
+ metricValue: Number(row["val"] || 0),
693
+ count: Number(row["cnt"] || 0),
694
+ };
695
+ })
696
+ .filter((item) => {
697
+ return item.value.length > 0;
698
+ });
699
+ }
700
+ static async getAnalyticsTable(request) {
701
+ if (!request.groupBy || request.groupBy.length === 0) {
702
+ throw new BadDataException("groupBy with at least one dimension is required for table");
703
+ }
704
+ const statement = TraceAggregationService.buildAnalyticsTableStatement(request);
705
+ const dbResult = await SpanService.executeQuery(statement);
706
+ let rows = [];
707
+ try {
708
+ const response = await dbResult.json();
709
+ rows = response.data || [];
710
+ }
711
+ catch (_a) {
712
+ logger.warn("Trace analytics table query returned unparseable response, returning empty result");
713
+ }
714
+ const groupByKeys = request.groupBy;
715
+ return rows.map((row) => {
716
+ var _a;
717
+ const groupValues = {};
718
+ for (const [index, key] of groupByKeys.entries()) {
719
+ const alias = TraceAggregationService.groupByAlias(key, index);
720
+ groupValues[key] = String((_a = row[alias]) !== null && _a !== void 0 ? _a : "");
721
+ }
722
+ return {
723
+ groupValues,
724
+ count: Number(row["cnt"] || 0),
725
+ avgDurationMs: Number(row["avg_ms"] || 0),
726
+ p50DurationMs: Number(row["p50_ms"] || 0),
727
+ minDurationMs: Number(row["min_ms"] || 0),
728
+ maxDurationMs: Number(row["max_ms"] || 0),
729
+ };
730
+ });
731
+ }
732
+ static groupByAlias(key, index) {
733
+ if (TraceAggregationService.isTopLevelColumn(key) ||
734
+ TraceAggregationService.RESOURCE_FACET_KEYS.has(key)) {
735
+ return key;
736
+ }
737
+ /*
738
+ * Attribute keys get a sanitized alias. The dimension index is included
739
+ * so two distinct keys that sanitize identically (url.host vs url:host)
740
+ * never collide into one alias (ClickHouse rejects duplicate aliases).
741
+ */
742
+ return `attr_${index}_${key.replace(/[^a-zA-Z0-9_]/g, "_")}`;
743
+ }
744
+ /*
745
+ * Append the SELECT expression for one group-by dimension. Resource facet
746
+ * keys (hostId / dockerHostId / ...) read out of primaryEntityId — the
747
+ * matching primaryEntityType predicate is added by
748
+ * appendGroupByDimensionFilters.
749
+ */
750
+ static appendGroupBySelect(statement, groupByKeys) {
751
+ for (const [index, key] of groupByKeys.entries()) {
752
+ TraceAggregationService.validateFacetKey(key);
753
+ if (TraceAggregationService.RESOURCE_FACET_KEYS.has(key)) {
754
+ statement.append(`, toString(primaryEntityId) AS ${key}`);
755
+ }
756
+ else if (TraceAggregationService.isTopLevelColumn(key)) {
757
+ statement.append(`, toString(${key}) AS ${key}`);
758
+ }
759
+ else {
760
+ const alias = TraceAggregationService.groupByAlias(key, index);
761
+ statement.append(SQL `, attributes[${{
762
+ type: TableColumnType.Text,
763
+ value: key,
764
+ }}] AS ${alias}`);
765
+ }
766
+ }
767
+ }
768
+ static appendGroupByClause(statement, groupByKeys) {
769
+ for (const [index, key] of groupByKeys.entries()) {
770
+ statement.append(`, ${TraceAggregationService.groupByAlias(key, index)}`);
771
+ }
772
+ }
773
+ /*
774
+ * Dimension-implied WHERE predicates: attribute dimensions only count
775
+ * spans that carry the attribute (matching buildFacetStatement); resource
776
+ * dimensions constrain primaryEntityType to the matching resource type.
777
+ */
778
+ static appendGroupByDimensionFilters(statement, groupByKeys) {
779
+ for (const key of groupByKeys) {
780
+ const resourceType = TraceAggregationService.RESOURCE_FACET_KEYS.get(key);
781
+ if (resourceType !== undefined) {
782
+ statement.append(SQL ` AND primaryEntityType = ${{
783
+ type: TableColumnType.Text,
784
+ value: resourceType,
785
+ }}`);
786
+ continue;
787
+ }
788
+ if (key === "primaryEntityId") {
789
+ /*
790
+ * Same restriction as the Service facet: keep host/docker/k8s
791
+ * entity ids out of the "Service" dimension (they reuse the
792
+ * primaryEntityId slot, disambiguated by primaryEntityType).
793
+ */
794
+ statement.append(SQL ` AND (primaryEntityType = '' OR primaryEntityType = ${{
795
+ type: TableColumnType.Text,
796
+ value: ServiceType.OpenTelemetry,
797
+ }})`);
798
+ continue;
799
+ }
800
+ if (TraceAggregationService.isTopLevelColumn(key)) {
801
+ continue;
802
+ }
803
+ statement.append(SQL ` AND mapContains(attributes, ${{
804
+ type: TableColumnType.Text,
805
+ value: key,
806
+ }})`);
807
+ }
808
+ }
809
+ static validateGroupBy(groupBy) {
810
+ if (!groupBy) {
811
+ return;
812
+ }
813
+ if (groupBy.length > TraceAggregationService.MAX_GROUP_BY_DIMENSIONS) {
814
+ throw new BadDataException(`groupBy supports at most ${TraceAggregationService.MAX_GROUP_BY_DIMENSIONS} dimensions`);
815
+ }
816
+ for (const key of groupBy) {
817
+ TraceAggregationService.validateFacetKey(key);
818
+ }
819
+ }
820
+ static getMetricExpression(metric) {
821
+ const expression = TraceAggregationService.METRIC_EXPRESSIONS[metric];
822
+ if (!expression) {
823
+ throw new BadDataException("Invalid analytics metric");
824
+ }
825
+ return expression;
826
+ }
827
+ static appendAnalyticsTimeWindow(statement, request) {
828
+ statement.append(SQL ` WHERE projectId = ${{
829
+ type: TableColumnType.ObjectID,
830
+ value: request.projectId,
831
+ }} AND startTime >= ${{
832
+ type: TableColumnType.Date,
833
+ value: request.startTime,
834
+ }} AND startTime <= ${{
835
+ type: TableColumnType.Date,
836
+ value: request.endTime,
837
+ }}`);
838
+ }
839
+ static buildAnalyticsTimeseriesStatement(request, topDimensionValues) {
840
+ TraceAggregationService.validateGroupBy(request.groupBy);
841
+ const groupByKeys = request.groupBy || [];
842
+ const intervalSeconds = request.bucketSizeInMinutes * 60;
843
+ const metricExpr = TraceAggregationService.getMetricExpression(request.metric);
844
+ const statement = SQL `SELECT toStartOfInterval(startTime, INTERVAL ${{
845
+ type: TableColumnType.Number,
846
+ value: intervalSeconds,
847
+ }} SECOND) AS bucket`;
848
+ statement.append(`, ${metricExpr} AS val`);
849
+ TraceAggregationService.appendGroupBySelect(statement, groupByKeys);
850
+ statement.append(` FROM ${TraceAggregationService.TABLE_NAME}`);
851
+ TraceAggregationService.appendAnalyticsTimeWindow(statement, request);
852
+ statement.append(TraceAggregationService.RETENTION_FILTER);
853
+ TraceAggregationService.appendGroupByDimensionFilters(statement, groupByKeys);
854
+ /*
855
+ * Series cap: constrain the first dimension to the pre-resolved top
856
+ * values (see getAnalyticsTimeseries).
857
+ */
858
+ if (topDimensionValues &&
859
+ topDimensionValues.length > 0 &&
860
+ groupByKeys.length > 0) {
861
+ TraceAggregationService.appendDimensionExpression(statement, groupByKeys[0], " AND ");
862
+ statement.append(SQL ` IN (${{
863
+ type: TableColumnType.Text,
864
+ value: new Includes(topDimensionValues),
865
+ }})`);
866
+ }
867
+ TraceAggregationService.appendCommonFilters(statement, request);
868
+ statement.append(" GROUP BY bucket");
869
+ TraceAggregationService.appendGroupByClause(statement, groupByKeys);
870
+ statement.append(" ORDER BY bucket ASC");
871
+ statement.append(getQuerySettings({
872
+ maxExecutionTimeInSeconds: 45,
873
+ timeoutOverflowMode: "break",
874
+ }));
875
+ return statement;
876
+ }
877
+ /*
878
+ * Append the bare dimension expression (no alias) prefixed by `prefix` —
879
+ * used in WHERE clauses where SELECT aliases are not yet visible.
880
+ */
881
+ static appendDimensionExpression(statement, key, prefix) {
882
+ TraceAggregationService.validateFacetKey(key);
883
+ if (TraceAggregationService.RESOURCE_FACET_KEYS.has(key) ||
884
+ key === "primaryEntityId") {
885
+ statement.append(`${prefix}toString(primaryEntityId)`);
886
+ return;
887
+ }
888
+ if (TraceAggregationService.isTopLevelColumn(key)) {
889
+ statement.append(`${prefix}toString(${key})`);
890
+ return;
891
+ }
892
+ statement.append(`${prefix}attributes[`);
893
+ statement.append(SQL `${{
894
+ type: TableColumnType.Text,
895
+ value: key,
896
+ }}`);
897
+ statement.append("]");
898
+ }
899
+ static buildAnalyticsTopListStatement(request) {
900
+ var _a;
901
+ const groupByKey = request.groupBy[0];
902
+ TraceAggregationService.validateFacetKey(groupByKey);
903
+ const limit = (_a = request.limit) !== null && _a !== void 0 ? _a : TraceAggregationService.DEFAULT_ANALYTICS_LIMIT;
904
+ const metricExpr = TraceAggregationService.getMetricExpression(request.metric);
905
+ const statement = new Statement();
906
+ statement.append("SELECT");
907
+ TraceAggregationService.appendDimensionExpression(statement, groupByKey, " ");
908
+ statement.append(` AS dim, ${metricExpr} AS val, count() AS cnt FROM ${TraceAggregationService.TABLE_NAME}`);
909
+ TraceAggregationService.appendAnalyticsTimeWindow(statement, request);
910
+ statement.append(TraceAggregationService.RETENTION_FILTER);
911
+ /*
912
+ * Dimension-implied predicates for EVERY groupBy key — when this query
913
+ * pre-resolves the series cap for a two-dimension timeseries, the
914
+ * ranking must count the same span set the final chart counts.
915
+ */
916
+ TraceAggregationService.appendGroupByDimensionFilters(statement, request.groupBy);
917
+ TraceAggregationService.appendCommonFilters(statement, request);
918
+ /*
919
+ * Duration metrics rank by the metric itself (slowest first); count-like
920
+ * metrics rank by volume. Either way `cnt` is returned for context.
921
+ */
922
+ statement.append(SQL ` GROUP BY dim ORDER BY val DESC LIMIT ${{
923
+ type: TableColumnType.Number,
924
+ value: limit,
925
+ }}`);
926
+ statement.append(getQuerySettings({
927
+ maxExecutionTimeInSeconds: 45,
928
+ timeoutOverflowMode: "break",
929
+ }));
930
+ return statement;
931
+ }
932
+ static buildAnalyticsTableStatement(request) {
933
+ var _a;
934
+ TraceAggregationService.validateGroupBy(request.groupBy);
935
+ const groupByKeys = request.groupBy;
936
+ const limit = (_a = request.limit) !== null && _a !== void 0 ? _a : TraceAggregationService.DEFAULT_ANALYTICS_LIMIT;
937
+ /*
938
+ * The "top dimensions" table always carries the full duration stat set
939
+ * (count, avg, median, min, max) — one query answers "requests and
940
+ * median response time per tenant" without a follow-up.
941
+ */
942
+ const statement = new Statement();
943
+ statement.append("SELECT count() AS cnt" +
944
+ ", avg(durationUnixNano) / 1000000 AS avg_ms" +
945
+ ", quantile(0.5)(durationUnixNano) / 1000000 AS p50_ms" +
946
+ ", min(durationUnixNano) / 1000000 AS min_ms" +
947
+ ", max(durationUnixNano) / 1000000 AS max_ms");
948
+ TraceAggregationService.appendGroupBySelect(statement, groupByKeys);
949
+ statement.append(` FROM ${TraceAggregationService.TABLE_NAME}`);
950
+ TraceAggregationService.appendAnalyticsTimeWindow(statement, request);
951
+ statement.append(TraceAggregationService.RETENTION_FILTER);
952
+ TraceAggregationService.appendGroupByDimensionFilters(statement, groupByKeys);
953
+ TraceAggregationService.appendCommonFilters(statement, request);
954
+ statement.append(" GROUP BY");
955
+ let first = true;
956
+ for (const [index, key] of groupByKeys.entries()) {
957
+ statement.append(`${first ? " " : ", "}${TraceAggregationService.groupByAlias(key, index)}`);
958
+ first = false;
959
+ }
960
+ statement.append(SQL ` ORDER BY cnt DESC LIMIT ${{
961
+ type: TableColumnType.Number,
962
+ value: limit,
963
+ }}`);
964
+ statement.append(getQuerySettings({
965
+ maxExecutionTimeInSeconds: 45,
966
+ timeoutOverflowMode: "break",
967
+ }));
968
+ return statement;
490
969
  }
491
970
  static isTopLevelColumn(key) {
492
971
  return TraceAggregationService.TOP_LEVEL_COLUMNS.has(key);
@@ -511,7 +990,7 @@ export class TraceAggregationService {
511
990
  TraceAggregationService.DEFAULT_FACET_LIMIT = 500;
512
991
  TraceAggregationService.TABLE_NAME = AnalyticsTableName.Span;
513
992
  TraceAggregationService.TOP_LEVEL_COLUMNS = new Set([
514
- "serviceId",
993
+ "primaryEntityId",
515
994
  "traceId",
516
995
  "spanId",
517
996
  "parentSpanId",
@@ -522,8 +1001,8 @@ TraceAggregationService.TOP_LEVEL_COLUMNS = new Set([
522
1001
  ]);
523
1002
  /*
524
1003
  * Virtual facet keys — same scheme as LogAggregationService. The
525
- * `serviceId` slot is reused for host / docker host / k8s cluster ids,
526
- * disambiguated by the `serviceType` discriminator.
1004
+ * `primaryEntityId` slot is reused for host / docker host / k8s cluster
1005
+ * ids, disambiguated by the `primaryEntityType` discriminator.
527
1006
  */
528
1007
  TraceAggregationService.RESOURCE_FACET_KEYS = new Map([
529
1008
  ["hostId", ServiceType.Host],
@@ -535,6 +1014,34 @@ TraceAggregationService.RESOURCE_FACET_KEYS = new Map([
535
1014
  ]);
536
1015
  TraceAggregationService.ATTRIBUTE_KEY_PATTERN = /^[a-zA-Z0-9._:/-]+$/;
537
1016
  TraceAggregationService.MAX_FACET_KEY_LENGTH = 256;
1017
+ /*
1018
+ * Read-side retention filter for raw-table queries (rows past their
1019
+ * per-service retention stay in their part until the whole part drops
1020
+ * — ttl_only_drop_parts). Deliberately NOT applied to the
1021
+ * projection-shaped queries (histogram / resource facet counts): the
1022
+ * proj_hist_by_minute aggregate projection does not store
1023
+ * retentionDate, so the predicate would silently force a full
1024
+ * base-table scan.
1025
+ */
1026
+ TraceAggregationService.RETENTION_FILTER = " AND retentionDate >= now()";
1027
+ TraceAggregationService.DEFAULT_ANALYTICS_LIMIT = 10;
1028
+ TraceAggregationService.MAX_GROUP_BY_DIMENSIONS = 2;
1029
+ /*
1030
+ * Metric → ClickHouse aggregate expression. Values are an allowlist — the
1031
+ * expression is interpolated into SQL, so it must never come from user
1032
+ * input directly. Durations are converted to milliseconds.
1033
+ */
1034
+ TraceAggregationService.METRIC_EXPRESSIONS = {
1035
+ count: "count()",
1036
+ errorCount: "countIf(statusCode = 2)",
1037
+ avgDuration: "avg(durationUnixNano) / 1000000",
1038
+ minDuration: "min(durationUnixNano) / 1000000",
1039
+ maxDuration: "max(durationUnixNano) / 1000000",
1040
+ p50Duration: "quantile(0.5)(durationUnixNano) / 1000000",
1041
+ p90Duration: "quantile(0.9)(durationUnixNano) / 1000000",
1042
+ p95Duration: "quantile(0.95)(durationUnixNano) / 1000000",
1043
+ p99Duration: "quantile(0.99)(durationUnixNano) / 1000000",
1044
+ };
538
1045
  __decorate([
539
1046
  CaptureSpan(),
540
1047
  __metadata("design:type", Function),
@@ -559,5 +1066,23 @@ __decorate([
559
1066
  __metadata("design:paramtypes", [Object]),
560
1067
  __metadata("design:returntype", Promise)
561
1068
  ], TraceAggregationService, "getResourceFacetCounts", null);
1069
+ __decorate([
1070
+ CaptureSpan(),
1071
+ __metadata("design:type", Function),
1072
+ __metadata("design:paramtypes", [Object]),
1073
+ __metadata("design:returntype", Promise)
1074
+ ], TraceAggregationService, "getAnalyticsTimeseries", null);
1075
+ __decorate([
1076
+ CaptureSpan(),
1077
+ __metadata("design:type", Function),
1078
+ __metadata("design:paramtypes", [Object]),
1079
+ __metadata("design:returntype", Promise)
1080
+ ], TraceAggregationService, "getAnalyticsTopList", null);
1081
+ __decorate([
1082
+ CaptureSpan(),
1083
+ __metadata("design:type", Function),
1084
+ __metadata("design:paramtypes", [Object]),
1085
+ __metadata("design:returntype", Promise)
1086
+ ], TraceAggregationService, "getAnalyticsTable", null);
562
1087
  export default TraceAggregationService;
563
1088
  //# sourceMappingURL=TraceAggregationService.js.map