@oneuptime/common 10.8.2 → 11.0.0

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 (724) 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/Telemetry/EntityKey.test.ts +150 -0
  92. package/Tests/Utils/Telemetry/EntityKeySqlParity.test.ts +40 -0
  93. package/Tests/Utils/Telemetry/EntityRelationship.test.ts +150 -0
  94. package/Tests/Utils/UUID.test.ts +47 -0
  95. package/Types/AnalyticsDatabase/AnalyticsTableName.ts +14 -9
  96. package/Types/AnalyticsDatabase/TableColumnType.ts +1 -0
  97. package/Types/Dashboard/DashboardComponentType.ts +1 -0
  98. package/Types/Dashboard/DashboardComponents/DashboardTraceChartComponent.ts +37 -0
  99. package/Types/Dashboard/DashboardTemplates.ts +4 -5
  100. package/Types/Log/LogQueryParser.ts +2 -2
  101. package/Types/Log/LogQueryToFilter.ts +2 -2
  102. package/Types/Monitor/MonitorStepExceptionMonitor.ts +19 -1
  103. package/Types/Monitor/MonitorStepLogMonitor.ts +20 -1
  104. package/Types/Monitor/MonitorStepMetricMonitor.ts +27 -0
  105. package/Types/Monitor/MonitorStepProfileMonitor.ts +19 -1
  106. package/Types/Monitor/MonitorStepTraceMonitor.ts +18 -1
  107. package/Types/Monitor/MonitorType.ts +8 -1
  108. package/Types/ObjectID.ts +10 -0
  109. package/Types/Telemetry/EntityRelationshipType.ts +31 -0
  110. package/Types/Telemetry/EntityType.ts +33 -0
  111. package/Types/Telemetry/TelemetrySavedViewState.ts +2 -0
  112. package/Types/Text.ts +34 -0
  113. package/Types/Trace/TraceAggregationType.ts +1 -0
  114. package/Types/Trace/TraceRecordingRuleDefinition.ts +74 -0
  115. package/UI/Components/LogsViewer/LogsViewer.tsx +12 -9
  116. package/UI/Components/LogsViewer/components/LogDetailsPanel.tsx +10 -9
  117. package/UI/Components/LogsViewer/components/LogSearchBar.tsx +1 -1
  118. package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +2 -2
  119. package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +4 -4
  120. package/UI/Components/LogsViewer/components/LogsTable.tsx +5 -3
  121. package/UI/Components/Navbar/NavBarMenuModal.tsx +81 -44
  122. package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +33 -10
  123. package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +18 -3
  124. package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +91 -68
  125. package/UI/Components/TelemetryViewer/components/TelemetryHistogramTooltip.tsx +9 -2
  126. package/UI/Utils/LogExport.ts +2 -2
  127. package/UI/Utils/TelemetryService.ts +20 -20
  128. package/Utils/Dashboard/Components/DashboardTraceChartComponent.ts +134 -0
  129. package/Utils/Dashboard/Components/Index.ts +7 -0
  130. package/Utils/Telemetry/EntityKey.ts +151 -0
  131. package/Utils/Telemetry/EntityRelationship.ts +113 -0
  132. package/Utils/Traces/CriticalPath.ts +7 -7
  133. package/Utils/UUID.ts +57 -0
  134. package/build/dist/Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel.js +14 -13
  135. package/build/dist/Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel.js.map +1 -1
  136. package/build/dist/Models/AnalyticsModels/AuditLog.js +2 -1
  137. package/build/dist/Models/AnalyticsModels/AuditLog.js.map +1 -1
  138. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js +125 -22
  139. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js.map +1 -1
  140. package/build/dist/Models/AnalyticsModels/Index.js +7 -2
  141. package/build/dist/Models/AnalyticsModels/Index.js.map +1 -1
  142. package/build/dist/Models/AnalyticsModels/Log.js +123 -22
  143. package/build/dist/Models/AnalyticsModels/Log.js.map +1 -1
  144. package/build/dist/Models/AnalyticsModels/Metric.js +125 -27
  145. package/build/dist/Models/AnalyticsModels/Metric.js.map +1 -1
  146. package/build/dist/Models/AnalyticsModels/MetricBaselineHourly.js +38 -21
  147. package/build/dist/Models/AnalyticsModels/MetricBaselineHourly.js.map +1 -1
  148. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1m.js +17 -16
  149. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1m.js.map +1 -1
  150. package/build/dist/Models/AnalyticsModels/{MetricItemAggMV1mByHost.js → MetricItemAggMV1mByHostV2.js} +54 -42
  151. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByHostV2.js.map +1 -0
  152. package/build/dist/Models/AnalyticsModels/MonitorLog.js +4 -1
  153. package/build/dist/Models/AnalyticsModels/MonitorLog.js.map +1 -1
  154. package/build/dist/Models/AnalyticsModels/Profile.js +132 -26
  155. package/build/dist/Models/AnalyticsModels/Profile.js.map +1 -1
  156. package/build/dist/Models/AnalyticsModels/ProfileSample.js +121 -23
  157. package/build/dist/Models/AnalyticsModels/ProfileSample.js.map +1 -1
  158. package/build/dist/Models/AnalyticsModels/Span.js +144 -26
  159. package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
  160. package/build/dist/Models/DatabaseModels/Index.js +4 -0
  161. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  162. package/build/dist/Models/DatabaseModels/Service.js +30 -0
  163. package/build/dist/Models/DatabaseModels/Service.js.map +1 -1
  164. package/build/dist/Models/DatabaseModels/TelemetryEntity.js +419 -0
  165. package/build/dist/Models/DatabaseModels/TelemetryEntity.js.map +1 -0
  166. package/build/dist/Models/DatabaseModels/TelemetryEntityRelationship.js +317 -0
  167. package/build/dist/Models/DatabaseModels/TelemetryEntityRelationship.js.map +1 -0
  168. package/build/dist/Models/DatabaseModels/TelemetryException.js +12 -12
  169. package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
  170. package/build/dist/Models/DatabaseModels/TelemetryUsageBilling.js +7 -7
  171. package/build/dist/Models/DatabaseModels/TelemetryUsageBilling.js.map +1 -1
  172. package/build/dist/Server/API/AIAgentDataAPI.js +14 -13
  173. package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
  174. package/build/dist/Server/API/DashboardAPI.js +2 -2
  175. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  176. package/build/dist/Server/API/TelemetryAPI.js +425 -129
  177. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  178. package/build/dist/Server/API/TelemetryExceptionAPI.js +2 -2
  179. package/build/dist/Server/API/TelemetryExceptionAPI.js.map +1 -1
  180. package/build/dist/Server/Infrastructure/ClickhouseConfig.js +12 -0
  181. package/build/dist/Server/Infrastructure/ClickhouseConfig.js.map +1 -1
  182. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781100000001-RenameTelemetryServiceIdToPrimaryEntityId.js +29 -0
  183. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781100000001-RenameTelemetryServiceIdToPrimaryEntityId.js.map +1 -0
  184. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781200000000-AddTelemetryEntityTable.js +38 -0
  185. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781200000000-AddTelemetryEntityTable.js.map +1 -0
  186. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781200000001-AddTelemetryEntityRelationshipTable.js +33 -0
  187. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781200000001-AddTelemetryEntityRelationshipTable.js.map +1 -0
  188. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781250074195-MigrationName.js +78 -0
  189. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781250074195-MigrationName.js.map +1 -0
  190. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781300000000-AddTelemetryEntityLabels.js +19 -0
  191. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781300000000-AddTelemetryEntityLabels.js.map +1 -0
  192. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781400000000-AddServiceTelemetrySdkLanguage.js +18 -0
  193. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781400000000-AddServiceTelemetrySdkLanguage.js.map +1 -0
  194. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +12 -0
  195. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  196. package/build/dist/Server/Infrastructure/Queue.js +14 -3
  197. package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
  198. package/build/dist/Server/Middleware/TelemetryIngest.js +16 -18
  199. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  200. package/build/dist/Server/Services/AlertService.js +9 -9
  201. package/build/dist/Server/Services/AlertService.js.map +1 -1
  202. package/build/dist/Server/Services/AnalyticsDatabaseService.js +115 -40
  203. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  204. package/build/dist/Server/Services/ExceptionAggregationService.js +38 -18
  205. package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
  206. package/build/dist/Server/Services/HostService.js +2 -1
  207. package/build/dist/Server/Services/HostService.js.map +1 -1
  208. package/build/dist/Server/Services/IncidentService.js +19 -19
  209. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  210. package/build/dist/Server/Services/Index.js +6 -2
  211. package/build/dist/Server/Services/Index.js.map +1 -1
  212. package/build/dist/Server/Services/LogAggregationService.js +100 -42
  213. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  214. package/build/dist/Server/Services/MetricAggregationService.js +27 -14
  215. package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
  216. package/build/dist/Server/Services/MetricBaselineService.js +28 -28
  217. package/build/dist/Server/Services/MetricBaselineService.js.map +1 -1
  218. package/build/dist/Server/Services/MetricItemAggMV1mByHostV2Service.js +28 -0
  219. package/build/dist/Server/Services/MetricItemAggMV1mByHostV2Service.js.map +1 -0
  220. package/build/dist/Server/Services/MetricService.js +116 -31
  221. package/build/dist/Server/Services/MetricService.js.map +1 -1
  222. package/build/dist/Server/Services/OpenTelemetryIngestService.js +103 -36
  223. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  224. package/build/dist/Server/Services/ProfileAggregationService.js +613 -105
  225. package/build/dist/Server/Services/ProfileAggregationService.js.map +1 -1
  226. package/build/dist/Server/Services/ServiceService.js +9 -5
  227. package/build/dist/Server/Services/ServiceService.js.map +1 -1
  228. package/build/dist/Server/Services/SpanService.js +217 -15
  229. package/build/dist/Server/Services/SpanService.js.map +1 -1
  230. package/build/dist/Server/Services/TelemetryEntityRelationshipService.js +72 -0
  231. package/build/dist/Server/Services/TelemetryEntityRelationshipService.js.map +1 -0
  232. package/build/dist/Server/Services/TelemetryEntityService.js +201 -0
  233. package/build/dist/Server/Services/TelemetryEntityService.js.map +1 -0
  234. package/build/dist/Server/Services/TelemetryExceptionService.js +18 -18
  235. package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
  236. package/build/dist/Server/Services/TelemetryUsageBillingService.js +27 -21
  237. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  238. package/build/dist/Server/Services/TraceAggregationService.js +568 -43
  239. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  240. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js +38 -2
  241. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js.map +1 -1
  242. package/build/dist/Server/Types/Database/Permissions/AccessControlPermission.js +36 -2
  243. package/build/dist/Server/Types/Database/Permissions/AccessControlPermission.js.map +1 -1
  244. package/build/dist/Server/Types/Database/Permissions/BasePermission.js +25 -1
  245. package/build/dist/Server/Types/Database/Permissions/BasePermission.js.map +1 -1
  246. package/build/dist/Server/Types/Database/Permissions/OwnedScopePermission.js +17 -3
  247. package/build/dist/Server/Types/Database/Permissions/OwnedScopePermission.js.map +1 -1
  248. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +1 -0
  249. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
  250. package/build/dist/Server/Types/Database/QueryHelper.js +31 -0
  251. package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
  252. package/build/dist/Server/Utils/Alert/AlertPrivacyFilter.js +3 -2
  253. package/build/dist/Server/Utils/Alert/AlertPrivacyFilter.js.map +1 -1
  254. package/build/dist/Server/Utils/AlertEpisode/AlertEpisodePrivacyFilter.js +3 -2
  255. package/build/dist/Server/Utils/AlertEpisode/AlertEpisodePrivacyFilter.js.map +1 -1
  256. package/build/dist/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.js +46 -0
  257. package/build/dist/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.js.map +1 -0
  258. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +97 -3
  259. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  260. package/build/dist/Server/Utils/Incident/IncidentPrivacyFilter.js +3 -2
  261. package/build/dist/Server/Utils/Incident/IncidentPrivacyFilter.js.map +1 -1
  262. package/build/dist/Server/Utils/IncidentEpisode/IncidentEpisodePrivacyFilter.js +3 -2
  263. package/build/dist/Server/Utils/IncidentEpisode/IncidentEpisodePrivacyFilter.js.map +1 -1
  264. package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +1 -1
  265. package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
  266. package/build/dist/Server/Utils/Monitor/MonitorLogUtil.js +1 -2
  267. package/build/dist/Server/Utils/Monitor/MonitorLogUtil.js.map +1 -1
  268. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +3 -4
  269. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
  270. package/build/dist/Server/Utils/PrivacyFilterUtil.js +47 -0
  271. package/build/dist/Server/Utils/PrivacyFilterUtil.js.map +1 -0
  272. package/build/dist/Server/Utils/Profile/PprofEncoder.js +132 -4
  273. package/build/dist/Server/Utils/Profile/PprofEncoder.js.map +1 -1
  274. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +228 -0
  275. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -0
  276. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js +5 -0
  277. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js.map +1 -1
  278. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +569 -0
  279. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -0
  280. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +14 -9
  281. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js.map +1 -1
  282. package/build/dist/Types/AnalyticsDatabase/TableColumnType.js +1 -0
  283. package/build/dist/Types/AnalyticsDatabase/TableColumnType.js.map +1 -1
  284. package/build/dist/Types/Dashboard/DashboardComponentType.js +1 -0
  285. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  286. package/build/dist/Types/Dashboard/DashboardComponents/DashboardTraceChartComponent.js +2 -0
  287. package/build/dist/Types/Dashboard/DashboardComponents/DashboardTraceChartComponent.js.map +1 -0
  288. package/build/dist/Types/Dashboard/DashboardTemplates.js +4 -5
  289. package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
  290. package/build/dist/Types/Log/LogQueryParser.js +2 -2
  291. package/build/dist/Types/Log/LogQueryParser.js.map +1 -1
  292. package/build/dist/Types/Log/LogQueryToFilter.js +1 -1
  293. package/build/dist/Types/Log/LogQueryToFilter.js.map +1 -1
  294. package/build/dist/Types/Monitor/MonitorStepExceptionMonitor.js +9 -1
  295. package/build/dist/Types/Monitor/MonitorStepExceptionMonitor.js.map +1 -1
  296. package/build/dist/Types/Monitor/MonitorStepLogMonitor.js +9 -1
  297. package/build/dist/Types/Monitor/MonitorStepLogMonitor.js.map +1 -1
  298. package/build/dist/Types/Monitor/MonitorStepMetricMonitor.js +13 -0
  299. package/build/dist/Types/Monitor/MonitorStepMetricMonitor.js.map +1 -1
  300. package/build/dist/Types/Monitor/MonitorStepProfileMonitor.js +9 -1
  301. package/build/dist/Types/Monitor/MonitorStepProfileMonitor.js.map +1 -1
  302. package/build/dist/Types/Monitor/MonitorStepTraceMonitor.js +9 -1
  303. package/build/dist/Types/Monitor/MonitorStepTraceMonitor.js.map +1 -1
  304. package/build/dist/Types/Monitor/MonitorType.js +8 -1
  305. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  306. package/build/dist/Types/ObjectID.js +9 -0
  307. package/build/dist/Types/ObjectID.js.map +1 -1
  308. package/build/dist/Types/Telemetry/EntityRelationshipType.js +32 -0
  309. package/build/dist/Types/Telemetry/EntityRelationshipType.js.map +1 -0
  310. package/build/dist/Types/Telemetry/EntityType.js +34 -0
  311. package/build/dist/Types/Telemetry/EntityType.js.map +1 -0
  312. package/build/dist/Types/Text.js +32 -1
  313. package/build/dist/Types/Text.js.map +1 -1
  314. package/build/dist/Types/Trace/TraceAggregationType.js +1 -0
  315. package/build/dist/Types/Trace/TraceAggregationType.js.map +1 -1
  316. package/build/dist/Types/Trace/TraceRecordingRuleDefinition.js +50 -1
  317. package/build/dist/Types/Trace/TraceRecordingRuleDefinition.js.map +1 -1
  318. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +10 -9
  319. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  320. package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js +8 -8
  321. package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js.map +1 -1
  322. package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js +1 -1
  323. package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js.map +1 -1
  324. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +2 -2
  325. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
  326. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +4 -4
  327. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
  328. package/build/dist/UI/Components/LogsViewer/components/LogsTable.js +3 -3
  329. package/build/dist/UI/Components/LogsViewer/components/LogsTable.js.map +1 -1
  330. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +43 -30
  331. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
  332. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +6 -2
  333. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
  334. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js +14 -3
  335. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js.map +1 -1
  336. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +18 -10
  337. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js.map +1 -1
  338. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogramTooltip.js +4 -2
  339. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogramTooltip.js.map +1 -1
  340. package/build/dist/UI/Utils/LogExport.js +2 -2
  341. package/build/dist/UI/Utils/LogExport.js.map +1 -1
  342. package/build/dist/UI/Utils/TelemetryService.js +16 -16
  343. package/build/dist/UI/Utils/TelemetryService.js.map +1 -1
  344. package/build/dist/Utils/Dashboard/Components/DashboardTraceChartComponent.js +110 -0
  345. package/build/dist/Utils/Dashboard/Components/DashboardTraceChartComponent.js.map +1 -0
  346. package/build/dist/Utils/Dashboard/Components/Index.js +4 -0
  347. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  348. package/build/dist/Utils/Telemetry/EntityKey.js +115 -0
  349. package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -0
  350. package/build/dist/Utils/Telemetry/EntityRelationship.js +71 -0
  351. package/build/dist/Utils/Telemetry/EntityRelationship.js.map +1 -0
  352. package/build/dist/Utils/Traces/CriticalPath.js +5 -5
  353. package/build/dist/Utils/Traces/CriticalPath.js.map +1 -1
  354. package/build/dist/Utils/UUID.js +50 -0
  355. package/build/dist/Utils/UUID.js.map +1 -1
  356. package/package.json +2 -1
  357. package/tsconfig.json +10 -1
  358. package/Server/Services/MetricItemAggMV1mByHostService.ts +0 -30
  359. package/Types/Profile/ProfileMetricType.ts +0 -16
  360. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByHost.js.map +0 -1
  361. package/build/dist/Server/Services/MetricItemAggMV1mByHostService.js +0 -28
  362. package/build/dist/Server/Services/MetricItemAggMV1mByHostService.js.map +0 -1
  363. package/build/dist/Tests/MockType.js +0 -5
  364. package/build/dist/Tests/MockType.js.map +0 -1
  365. package/build/dist/Tests/Models/AnalyticsModels/Log.test.js +0 -12
  366. package/build/dist/Tests/Models/AnalyticsModels/Log.test.js.map +0 -1
  367. package/build/dist/Tests/Models/File.test.js +0 -10
  368. package/build/dist/Tests/Models/File.test.js.map +0 -1
  369. package/build/dist/Tests/Server/API/BaseAPI.test.js +0 -590
  370. package/build/dist/Tests/Server/API/BaseAPI.test.js.map +0 -1
  371. package/build/dist/Tests/Server/API/Helpers.js +0 -27
  372. package/build/dist/Tests/Server/API/Helpers.js.map +0 -1
  373. package/build/dist/Tests/Server/API/ProbeAPI.test.js +0 -84
  374. package/build/dist/Tests/Server/API/ProbeAPI.test.js.map +0 -1
  375. package/build/dist/Tests/Server/API/ProjectAPI.test.js +0 -170
  376. package/build/dist/Tests/Server/API/ProjectAPI.test.js.map +0 -1
  377. package/build/dist/Tests/Server/API/UserSmsApi.test.js +0 -177
  378. package/build/dist/Tests/Server/API/UserSmsApi.test.js.map +0 -1
  379. package/build/dist/Tests/Server/Middleware/BearerTokenAuthorization.test.js +0 -63
  380. package/build/dist/Tests/Server/Middleware/BearerTokenAuthorization.test.js.map +0 -1
  381. package/build/dist/Tests/Server/Middleware/ClusterKeyAuthorization.test.js +0 -58
  382. package/build/dist/Tests/Server/Middleware/ClusterKeyAuthorization.test.js.map +0 -1
  383. package/build/dist/Tests/Server/Middleware/NotificationMiddleware.test.js +0 -101
  384. package/build/dist/Tests/Server/Middleware/NotificationMiddleware.test.js.map +0 -1
  385. package/build/dist/Tests/Server/Middleware/ProjectAuthorization.test.js +0 -160
  386. package/build/dist/Tests/Server/Middleware/ProjectAuthorization.test.js.map +0 -1
  387. package/build/dist/Tests/Server/Middleware/UserAuthorization.test.js +0 -410
  388. package/build/dist/Tests/Server/Middleware/UserAuthorization.test.js.map +0 -1
  389. package/build/dist/Tests/Server/Services/AlertEpisodeMemberService.test.js +0 -165
  390. package/build/dist/Tests/Server/Services/AlertEpisodeMemberService.test.js.map +0 -1
  391. package/build/dist/Tests/Server/Services/AlertEpisodeService.test.js +0 -193
  392. package/build/dist/Tests/Server/Services/AlertEpisodeService.test.js.map +0 -1
  393. package/build/dist/Tests/Server/Services/AlertGroupingEngineService.test.js +0 -435
  394. package/build/dist/Tests/Server/Services/AlertGroupingEngineService.test.js.map +0 -1
  395. package/build/dist/Tests/Server/Services/AlertGroupingRuleService.test.js +0 -320
  396. package/build/dist/Tests/Server/Services/AlertGroupingRuleService.test.js.map +0 -1
  397. package/build/dist/Tests/Server/Services/AnalyticsDatabaseService.test.js +0 -266
  398. package/build/dist/Tests/Server/Services/AnalyticsDatabaseService.test.js.map +0 -1
  399. package/build/dist/Tests/Server/Services/BillingService.test.js +0 -910
  400. package/build/dist/Tests/Server/Services/BillingService.test.js.map +0 -1
  401. package/build/dist/Tests/Server/Services/LogAggregationService.test.js +0 -75
  402. package/build/dist/Tests/Server/Services/LogAggregationService.test.js.map +0 -1
  403. package/build/dist/Tests/Server/Services/ProbeService.test.js +0 -127
  404. package/build/dist/Tests/Server/Services/ProbeService.test.js.map +0 -1
  405. package/build/dist/Tests/Server/Services/ScheduledMaintenanceService.test.js +0 -114
  406. package/build/dist/Tests/Server/Services/ScheduledMaintenanceService.test.js.map +0 -1
  407. package/build/dist/Tests/Server/Services/TeamMemberService.test.js +0 -106
  408. package/build/dist/Tests/Server/Services/TeamMemberService.test.js.map +0 -1
  409. package/build/dist/Tests/Server/Services/TelemetryAttributeService.test.js +0 -50
  410. package/build/dist/Tests/Server/Services/TelemetryAttributeService.test.js.map +0 -1
  411. package/build/dist/Tests/Server/TestingUtils/Init.js +0 -4
  412. package/build/dist/Tests/Server/TestingUtils/Init.js.map +0 -1
  413. package/build/dist/Tests/Server/TestingUtils/Postgres/TestDataSourceOptions.js +0 -9
  414. package/build/dist/Tests/Server/TestingUtils/Postgres/TestDataSourceOptions.js.map +0 -1
  415. package/build/dist/Tests/Server/TestingUtils/Redis/TestRedisOptions.js +0 -16
  416. package/build/dist/Tests/Server/TestingUtils/Redis/TestRedisOptions.js.map +0 -1
  417. package/build/dist/Tests/Server/TestingUtils/Services/BillingServiceHelper.js +0 -125
  418. package/build/dist/Tests/Server/TestingUtils/Services/BillingServiceHelper.js.map +0 -1
  419. package/build/dist/Tests/Server/TestingUtils/Services/ProjectServiceHelper.js +0 -39
  420. package/build/dist/Tests/Server/TestingUtils/Services/ProjectServiceHelper.js.map +0 -1
  421. package/build/dist/Tests/Server/TestingUtils/Services/ScheduledMaintenanceServiceHelper.js +0 -20
  422. package/build/dist/Tests/Server/TestingUtils/Services/ScheduledMaintenanceServiceHelper.js.map +0 -1
  423. package/build/dist/Tests/Server/TestingUtils/Services/ScheduledMaintenanceStateServiceHelper.js +0 -31
  424. package/build/dist/Tests/Server/TestingUtils/Services/ScheduledMaintenanceStateServiceHelper.js.map +0 -1
  425. package/build/dist/Tests/Server/TestingUtils/Services/TeamMemberServiceHelper.js +0 -14
  426. package/build/dist/Tests/Server/TestingUtils/Services/TeamMemberServiceHelper.js.map +0 -1
  427. package/build/dist/Tests/Server/TestingUtils/Services/TeamServiceHelper.js +0 -21
  428. package/build/dist/Tests/Server/TestingUtils/Services/TeamServiceHelper.js.map +0 -1
  429. package/build/dist/Tests/Server/TestingUtils/Services/Types.js +0 -2
  430. package/build/dist/Tests/Server/TestingUtils/Services/Types.js.map +0 -1
  431. package/build/dist/Tests/Server/TestingUtils/Services/UserServiceHelper.js +0 -37
  432. package/build/dist/Tests/Server/TestingUtils/Services/UserServiceHelper.js.map +0 -1
  433. package/build/dist/Tests/Server/TestingUtils/__mocks__/Stripe.mock.js +0 -13
  434. package/build/dist/Tests/Server/TestingUtils/__mocks__/Stripe.mock.js.map +0 -1
  435. package/build/dist/Tests/Server/TestingUtils/__mocks__/TestDatabase.mock.js +0 -22
  436. package/build/dist/Tests/Server/TestingUtils/__mocks__/TestDatabase.mock.js.map +0 -1
  437. package/build/dist/Tests/Server/Types/Domain.test.js +0 -78
  438. package/build/dist/Tests/Server/Types/Domain.test.js.map +0 -1
  439. package/build/dist/Tests/Server/Utils/AnalyticsDatabase/Statement.test.js +0 -94
  440. package/build/dist/Tests/Server/Utils/AnalyticsDatabase/Statement.test.js.map +0 -1
  441. package/build/dist/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.js +0 -459
  442. package/build/dist/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.js.map +0 -1
  443. package/build/dist/Tests/Server/Utils/Cookie.test.js +0 -83
  444. package/build/dist/Tests/Server/Utils/Cookie.test.js.map +0 -1
  445. package/build/dist/Tests/Server/Utils/CronTab.test.js +0 -29
  446. package/build/dist/Tests/Server/Utils/CronTab.test.js.map +0 -1
  447. package/build/dist/Tests/Server/Utils/JsonToCsv.test.js +0 -114
  448. package/build/dist/Tests/Server/Utils/JsonToCsv.test.js.map +0 -1
  449. package/build/dist/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.test.js +0 -606
  450. package/build/dist/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.test.js.map +0 -1
  451. package/build/dist/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.js +0 -255
  452. package/build/dist/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.js.map +0 -1
  453. package/build/dist/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.js +0 -142
  454. package/build/dist/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.js.map +0 -1
  455. package/build/dist/Tests/Server/Utils/StatusPageResource.test.js +0 -122
  456. package/build/dist/Tests/Server/Utils/StatusPageResource.test.js.map +0 -1
  457. package/build/dist/Tests/Server/Utils/Telemetry/LogExceptionExtractor.test.js +0 -0
  458. package/build/dist/Tests/Server/Utils/Telemetry/LogExceptionExtractor.test.js.map +0 -1
  459. package/build/dist/Tests/Server/Utils/VM/VMAPI.test.js +0 -205
  460. package/build/dist/Tests/Server/Utils/VM/VMAPI.test.js.map +0 -1
  461. package/build/dist/Tests/Spy.js +0 -4
  462. package/build/dist/Tests/Spy.js.map +0 -1
  463. package/build/dist/Tests/Types/API/ErrorResponse.test.js +0 -13
  464. package/build/dist/Tests/Types/API/ErrorResponse.test.js.map +0 -1
  465. package/build/dist/Tests/Types/API/HTTPErrorResponse.test.js +0 -33
  466. package/build/dist/Tests/Types/API/HTTPErrorResponse.test.js.map +0 -1
  467. package/build/dist/Tests/Types/API/HTTPMethod.test.js +0 -16
  468. package/build/dist/Tests/Types/API/HTTPMethod.test.js.map +0 -1
  469. package/build/dist/Tests/Types/API/Headers.test.js +0 -14
  470. package/build/dist/Tests/Types/API/Headers.test.js.map +0 -1
  471. package/build/dist/Tests/Types/API/Hostname.test.js +0 -22
  472. package/build/dist/Tests/Types/API/Hostname.test.js.map +0 -1
  473. package/build/dist/Tests/Types/API/Protocal.test.js +0 -19
  474. package/build/dist/Tests/Types/API/Protocal.test.js.map +0 -1
  475. package/build/dist/Tests/Types/API/Response.test.js +0 -14
  476. package/build/dist/Tests/Types/API/Response.test.js.map +0 -1
  477. package/build/dist/Tests/Types/API/ResponseType.test.js +0 -13
  478. package/build/dist/Tests/Types/API/ResponseType.test.js.map +0 -1
  479. package/build/dist/Tests/Types/API/Route.test.js +0 -30
  480. package/build/dist/Tests/Types/API/Route.test.js.map +0 -1
  481. package/build/dist/Tests/Types/API/StatusCode.test.js +0 -26
  482. package/build/dist/Tests/Types/API/StatusCode.test.js.map +0 -1
  483. package/build/dist/Tests/Types/API/URL.test.js +0 -33
  484. package/build/dist/Tests/Types/API/URL.test.js.map +0 -1
  485. package/build/dist/Tests/Types/Alerts/AlertEventType.test.js +0 -34
  486. package/build/dist/Tests/Types/Alerts/AlertEventType.test.js.map +0 -1
  487. package/build/dist/Tests/Types/Alerts/AlertType.test.js +0 -19
  488. package/build/dist/Tests/Types/Alerts/AlertType.test.js.map +0 -1
  489. package/build/dist/Tests/Types/AppEnvironment.test.js +0 -13
  490. package/build/dist/Tests/Types/AppEnvironment.test.js.map +0 -1
  491. package/build/dist/Tests/Types/ApplicationLog/ApplicationLogType.test.js +0 -13
  492. package/build/dist/Tests/Types/ApplicationLog/ApplicationLogType.test.js.map +0 -1
  493. package/build/dist/Tests/Types/ArrayUtil.test.js +0 -71
  494. package/build/dist/Tests/Types/ArrayUtil.test.js.map +0 -1
  495. package/build/dist/Tests/Types/Billing/SubscriptionPlan.test.js +0 -181
  496. package/build/dist/Tests/Types/Billing/SubscriptionPlan.test.js.map +0 -1
  497. package/build/dist/Tests/Types/BrandColors.test.js +0 -124
  498. package/build/dist/Tests/Types/BrandColors.test.js.map +0 -1
  499. package/build/dist/Tests/Types/Char.test.js +0 -82
  500. package/build/dist/Tests/Types/Char.test.js.map +0 -1
  501. package/build/dist/Tests/Types/Code/CodeType.test.js +0 -13
  502. package/build/dist/Tests/Types/Code/CodeType.test.js.map +0 -1
  503. package/build/dist/Tests/Types/Color.test.js +0 -44
  504. package/build/dist/Tests/Types/Color.test.js.map +0 -1
  505. package/build/dist/Tests/Types/Company/CompanySize.test.js +0 -20
  506. package/build/dist/Tests/Types/Company/CompanySize.test.js.map +0 -1
  507. package/build/dist/Tests/Types/Company/JobRole.test.js +0 -22
  508. package/build/dist/Tests/Types/Company/JobRole.test.js.map +0 -1
  509. package/build/dist/Tests/Types/Countries.test.js +0 -249
  510. package/build/dist/Tests/Types/Countries.test.js.map +0 -1
  511. package/build/dist/Tests/Types/Database/ColumnLength.test.js +0 -43
  512. package/build/dist/Tests/Types/Database/ColumnLength.test.js.map +0 -1
  513. package/build/dist/Tests/Types/Database/ColumnType.test.js +0 -79
  514. package/build/dist/Tests/Types/Database/ColumnType.test.js.map +0 -1
  515. package/build/dist/Tests/Types/Database/Columns.test.js +0 -20
  516. package/build/dist/Tests/Types/Database/Columns.test.js.map +0 -1
  517. package/build/dist/Tests/Types/Database/CompareBase.test.js +0 -37
  518. package/build/dist/Tests/Types/Database/CompareBase.test.js.map +0 -1
  519. package/build/dist/Tests/Types/Database/Date.test.js +0 -62
  520. package/build/dist/Tests/Types/Database/Date.test.js.map +0 -1
  521. package/build/dist/Tests/Types/Database/EqualTo.test.js +0 -65
  522. package/build/dist/Tests/Types/Database/EqualTo.test.js.map +0 -1
  523. package/build/dist/Tests/Types/Database/EqualToOrNull.test.js +0 -62
  524. package/build/dist/Tests/Types/Database/EqualToOrNull.test.js.map +0 -1
  525. package/build/dist/Tests/Types/Database/InBetween.test.js +0 -72
  526. package/build/dist/Tests/Types/Database/InBetween.test.js.map +0 -1
  527. package/build/dist/Tests/Types/Database/LimitMax.test.js +0 -18
  528. package/build/dist/Tests/Types/Database/LimitMax.test.js.map +0 -1
  529. package/build/dist/Tests/Types/Database/NotEqual.test.js +0 -19
  530. package/build/dist/Tests/Types/Database/NotEqual.test.js.map +0 -1
  531. package/build/dist/Tests/Types/Database/Search.test.js +0 -10
  532. package/build/dist/Tests/Types/Database/Search.test.js.map +0 -1
  533. package/build/dist/Tests/Types/DatabaseType.test.js +0 -7
  534. package/build/dist/Tests/Types/DatabaseType.test.js.map +0 -1
  535. package/build/dist/Tests/Types/Date.test.js +0 -194
  536. package/build/dist/Tests/Types/Date.test.js.map +0 -1
  537. package/build/dist/Tests/Types/Dictionary.test.js +0 -25
  538. package/build/dist/Tests/Types/Dictionary.test.js.map +0 -1
  539. package/build/dist/Tests/Types/Domain.test.js +0 -54
  540. package/build/dist/Tests/Types/Domain.test.js.map +0 -1
  541. package/build/dist/Tests/Types/Email/Email.test.js +0 -51
  542. package/build/dist/Tests/Types/Email/Email.test.js.map +0 -1
  543. package/build/dist/Tests/Types/EmailWithName.test.js +0 -36
  544. package/build/dist/Tests/Types/EmailWithName.test.js.map +0 -1
  545. package/build/dist/Tests/Types/EncryptionAlgorithm.test.js +0 -7
  546. package/build/dist/Tests/Types/EncryptionAlgorithm.test.js.map +0 -1
  547. package/build/dist/Tests/Types/Exception/ApiException.test.js +0 -10
  548. package/build/dist/Tests/Types/Exception/ApiException.test.js.map +0 -1
  549. package/build/dist/Tests/Types/Exception/BadDataException.test.js +0 -12
  550. package/build/dist/Tests/Types/Exception/BadDataException.test.js.map +0 -1
  551. package/build/dist/Tests/Types/Exception/BadOperationException.test.js +0 -10
  552. package/build/dist/Tests/Types/Exception/BadOperationException.test.js.map +0 -1
  553. package/build/dist/Tests/Types/Exception/BadRequestException.test.js +0 -12
  554. package/build/dist/Tests/Types/Exception/BadRequestException.test.js.map +0 -1
  555. package/build/dist/Tests/Types/Exception/DatabaseNotConnectedException.test.js +0 -10
  556. package/build/dist/Tests/Types/Exception/DatabaseNotConnectedException.test.js.map +0 -1
  557. package/build/dist/Tests/Types/Exception/Exception.test.js +0 -15
  558. package/build/dist/Tests/Types/Exception/Exception.test.js.map +0 -1
  559. package/build/dist/Tests/Types/Exception/NotImplementedException.test.js +0 -12
  560. package/build/dist/Tests/Types/Exception/NotImplementedException.test.js.map +0 -1
  561. package/build/dist/Tests/Types/File.test.js +0 -22
  562. package/build/dist/Tests/Types/File.test.js.map +0 -1
  563. package/build/dist/Tests/Types/HashedString.test.js +0 -51
  564. package/build/dist/Tests/Types/HashedString.test.js.map +0 -1
  565. package/build/dist/Tests/Types/Html.test.js +0 -8
  566. package/build/dist/Tests/Types/Html.test.js.map +0 -1
  567. package/build/dist/Tests/Types/IP/IP.test.js +0 -65
  568. package/build/dist/Tests/Types/IP/IP.test.js.map +0 -1
  569. package/build/dist/Tests/Types/IP/IPType.test.js +0 -10
  570. package/build/dist/Tests/Types/IP/IPType.test.js.map +0 -1
  571. package/build/dist/Tests/Types/IP/IPv4.test.js +0 -17
  572. package/build/dist/Tests/Types/IP/IPv4.test.js.map +0 -1
  573. package/build/dist/Tests/Types/IP/IPv6.test.js +0 -17
  574. package/build/dist/Tests/Types/IP/IPv6.test.js.map +0 -1
  575. package/build/dist/Tests/Types/JSON.test.js +0 -37
  576. package/build/dist/Tests/Types/JSON.test.js.map +0 -1
  577. package/build/dist/Tests/Types/JSONFunctions.test.js +0 -38
  578. package/build/dist/Tests/Types/JSONFunctions.test.js.map +0 -1
  579. package/build/dist/Tests/Types/ListData.test.js +0 -34
  580. package/build/dist/Tests/Types/ListData.test.js.map +0 -1
  581. package/build/dist/Tests/Types/Monitor/KubernetesAlertTemplates.test.js +0 -121
  582. package/build/dist/Tests/Types/Monitor/KubernetesAlertTemplates.test.js.map +0 -1
  583. package/build/dist/Tests/Types/Name.test.js +0 -26
  584. package/build/dist/Tests/Types/Name.test.js.map +0 -1
  585. package/build/dist/Tests/Types/ObjectID.test.js +0 -12
  586. package/build/dist/Tests/Types/ObjectID.test.js.map +0 -1
  587. package/build/dist/Tests/Types/OnCallDutyPolicy/LayerUtil.test.js +0 -530
  588. package/build/dist/Tests/Types/OnCallDutyPolicy/LayerUtil.test.js.map +0 -1
  589. package/build/dist/Tests/Types/Permission.test.js +0 -99
  590. package/build/dist/Tests/Types/Permission.test.js.map +0 -1
  591. package/build/dist/Tests/Types/Phone.test.js +0 -37
  592. package/build/dist/Tests/Types/Phone.test.js.map +0 -1
  593. package/build/dist/Tests/Types/Port.test.js +0 -35
  594. package/build/dist/Tests/Types/Port.test.js.map +0 -1
  595. package/build/dist/Tests/Types/PositiveNumber.test.js +0 -101
  596. package/build/dist/Tests/Types/PositiveNumber.test.js.map +0 -1
  597. package/build/dist/Tests/Types/SecuritySeverity.test.js +0 -16
  598. package/build/dist/Tests/Types/SecuritySeverity.test.js.map +0 -1
  599. package/build/dist/Tests/Types/SerializableObject.test.js +0 -37
  600. package/build/dist/Tests/Types/SerializableObject.test.js.map +0 -1
  601. package/build/dist/Tests/Types/Sleep.test.js +0 -14
  602. package/build/dist/Tests/Types/Sleep.test.js.map +0 -1
  603. package/build/dist/Tests/Types/Text.test.js +0 -8
  604. package/build/dist/Tests/Types/Text.test.js.map +0 -1
  605. package/build/dist/Tests/Types/Timezone.test.js +0 -596
  606. package/build/dist/Tests/Types/Timezone.test.js.map +0 -1
  607. package/build/dist/Tests/Types/Typeof.test.js +0 -16
  608. package/build/dist/Tests/Types/Typeof.test.js.map +0 -1
  609. package/build/dist/Tests/Types/UserType.test.js +0 -16
  610. package/build/dist/Tests/Types/UserType.test.js.map +0 -1
  611. package/build/dist/Tests/Types/Version.test.js +0 -35
  612. package/build/dist/Tests/Types/Version.test.js.map +0 -1
  613. package/build/dist/Tests/Types/XML.test.js +0 -35
  614. package/build/dist/Tests/Types/XML.test.js.map +0 -1
  615. package/build/dist/Tests/UI/Components/404.test.js +0 -59
  616. package/build/dist/Tests/UI/Components/404.test.js.map +0 -1
  617. package/build/dist/Tests/UI/Components/Alert.test.js +0 -83
  618. package/build/dist/Tests/UI/Components/Alert.test.js.map +0 -1
  619. package/build/dist/Tests/UI/Components/Badge.test.js +0 -59
  620. package/build/dist/Tests/UI/Components/Badge.test.js.map +0 -1
  621. package/build/dist/Tests/UI/Components/BasicForm.test.js +0 -92
  622. package/build/dist/Tests/UI/Components/BasicForm.test.js.map +0 -1
  623. package/build/dist/Tests/UI/Components/Breadcrumbs.test.js +0 -69
  624. package/build/dist/Tests/UI/Components/Breadcrumbs.test.js.map +0 -1
  625. package/build/dist/Tests/UI/Components/Button.test.js +0 -104
  626. package/build/dist/Tests/UI/Components/Button.test.js.map +0 -1
  627. package/build/dist/Tests/UI/Components/Card.test.js +0 -81
  628. package/build/dist/Tests/UI/Components/Card.test.js.map +0 -1
  629. package/build/dist/Tests/UI/Components/ColorViewer.test.js +0 -42
  630. package/build/dist/Tests/UI/Components/ColorViewer.test.js.map +0 -1
  631. package/build/dist/Tests/UI/Components/ComponentsModal.test.js +0 -233
  632. package/build/dist/Tests/UI/Components/ComponentsModal.test.js.map +0 -1
  633. package/build/dist/Tests/UI/Components/ConfirmModal.test.js +0 -57
  634. package/build/dist/Tests/UI/Components/ConfirmModal.test.js.map +0 -1
  635. package/build/dist/Tests/UI/Components/DictionaryOfStrings.test.js +0 -84
  636. package/build/dist/Tests/UI/Components/DictionaryOfStrings.test.js.map +0 -1
  637. package/build/dist/Tests/UI/Components/Dropdown.test.js +0 -146
  638. package/build/dist/Tests/UI/Components/Dropdown.test.js.map +0 -1
  639. package/build/dist/Tests/UI/Components/DuplicateModel.test.js +0 -229
  640. package/build/dist/Tests/UI/Components/DuplicateModel.test.js.map +0 -1
  641. package/build/dist/Tests/UI/Components/EmptyState/EmptyState.test.js +0 -26
  642. package/build/dist/Tests/UI/Components/EmptyState/EmptyState.test.js.map +0 -1
  643. package/build/dist/Tests/UI/Components/ErrorBoundary.test.js +0 -32
  644. package/build/dist/Tests/UI/Components/ErrorBoundary.test.js.map +0 -1
  645. package/build/dist/Tests/UI/Components/FilePicker.test.js +0 -342
  646. package/build/dist/Tests/UI/Components/FilePicker.test.js.map +0 -1
  647. package/build/dist/Tests/UI/Components/HiddenText.test.js +0 -50
  648. package/build/dist/Tests/UI/Components/HiddenText.test.js.map +0 -1
  649. package/build/dist/Tests/UI/Components/Input.test.js +0 -223
  650. package/build/dist/Tests/UI/Components/Input.test.js.map +0 -1
  651. package/build/dist/Tests/UI/Components/Item.test.js +0 -58
  652. package/build/dist/Tests/UI/Components/Item.test.js.map +0 -1
  653. package/build/dist/Tests/UI/Components/List.test.js +0 -83
  654. package/build/dist/Tests/UI/Components/List.test.js.map +0 -1
  655. package/build/dist/Tests/UI/Components/Loader.test.js +0 -19
  656. package/build/dist/Tests/UI/Components/Loader.test.js.map +0 -1
  657. package/build/dist/Tests/UI/Components/MarkdownEditor.test.js +0 -85
  658. package/build/dist/Tests/UI/Components/MarkdownEditor.test.js.map +0 -1
  659. package/build/dist/Tests/UI/Components/MasterPage.test.js +0 -46
  660. package/build/dist/Tests/UI/Components/MasterPage.test.js.map +0 -1
  661. package/build/dist/Tests/UI/Components/Modal.test.js +0 -127
  662. package/build/dist/Tests/UI/Components/Modal.test.js.map +0 -1
  663. package/build/dist/Tests/UI/Components/NavBar.test.js +0 -52
  664. package/build/dist/Tests/UI/Components/NavBar.test.js.map +0 -1
  665. package/build/dist/Tests/UI/Components/OrderedStatesList.test.js +0 -86
  666. package/build/dist/Tests/UI/Components/OrderedStatesList.test.js.map +0 -1
  667. package/build/dist/Tests/UI/Components/Pagination.test.js +0 -137
  668. package/build/dist/Tests/UI/Components/Pagination.test.js.map +0 -1
  669. package/build/dist/Tests/UI/Components/Pill.test.js +0 -55
  670. package/build/dist/Tests/UI/Components/Pill.test.js.map +0 -1
  671. package/build/dist/Tests/UI/Components/Probe.test.js +0 -52
  672. package/build/dist/Tests/UI/Components/Probe.test.js.map +0 -1
  673. package/build/dist/Tests/UI/Components/ProgressBar.test.js +0 -41
  674. package/build/dist/Tests/UI/Components/ProgressBar.test.js.map +0 -1
  675. package/build/dist/Tests/UI/Components/RadioButtons.test.js +0 -66
  676. package/build/dist/Tests/UI/Components/RadioButtons.test.js.map +0 -1
  677. package/build/dist/Tests/UI/Components/SideMenuItem.test.js +0 -99
  678. package/build/dist/Tests/UI/Components/SideMenuItem.test.js.map +0 -1
  679. package/build/dist/Tests/UI/Components/SideOver.test.js +0 -77
  680. package/build/dist/Tests/UI/Components/SideOver.test.js.map +0 -1
  681. package/build/dist/Tests/UI/Components/Tabs.test.js +0 -56
  682. package/build/dist/Tests/UI/Components/Tabs.test.js.map +0 -1
  683. package/build/dist/Tests/UI/Components/Template/Template.test.js +0 -15
  684. package/build/dist/Tests/UI/Components/Template/Template.test.js.map +0 -1
  685. package/build/dist/Tests/UI/Components/TextArea.test.js +0 -112
  686. package/build/dist/Tests/UI/Components/TextArea.test.js.map +0 -1
  687. package/build/dist/Tests/UI/Components/TimePicker/TimePicker.test.js +0 -352
  688. package/build/dist/Tests/UI/Components/TimePicker/TimePicker.test.js.map +0 -1
  689. package/build/dist/Tests/UI/Components/Toast.test.js +0 -48
  690. package/build/dist/Tests/UI/Components/Toast.test.js.map +0 -1
  691. package/build/dist/Tests/UI/Components/Toggle.test.js +0 -95
  692. package/build/dist/Tests/UI/Components/Toggle.test.js.map +0 -1
  693. package/build/dist/Tests/UI/Components/TopSection.test.js +0 -33
  694. package/build/dist/Tests/UI/Components/TopSection.test.js.map +0 -1
  695. package/build/dist/Tests/UI/Components/XAxis.test.js +0 -21
  696. package/build/dist/Tests/UI/Components/XAxis.test.js.map +0 -1
  697. package/build/dist/Tests/UI/Index.js +0 -2
  698. package/build/dist/Tests/UI/Index.js.map +0 -1
  699. package/build/dist/Tests/UI/Mocks/FileMock.js +0 -3
  700. package/build/dist/Tests/UI/Mocks/FileMock.js.map +0 -1
  701. package/build/dist/Tests/Utils/API.test.js +0 -399
  702. package/build/dist/Tests/Utils/API.test.js.map +0 -1
  703. package/build/dist/Tests/Utils/Analytics.test.js +0 -67
  704. package/build/dist/Tests/Utils/Analytics.test.js.map +0 -1
  705. package/build/dist/Tests/Utils/CronTime.test.js +0 -22
  706. package/build/dist/Tests/Utils/CronTime.test.js.map +0 -1
  707. package/build/dist/Tests/Utils/Faker.test.js +0 -27
  708. package/build/dist/Tests/Utils/Faker.test.js.map +0 -1
  709. package/build/dist/Tests/Utils/MetricUnitUtil.test.js +0 -187
  710. package/build/dist/Tests/Utils/MetricUnitUtil.test.js.map +0 -1
  711. package/build/dist/Tests/Utils/Metrics/MetricFormulaEvaluator.test.js +0 -224
  712. package/build/dist/Tests/Utils/Metrics/MetricFormulaEvaluator.test.js.map +0 -1
  713. package/build/dist/Tests/Utils/Metrics/MetricResultUnitConverter.test.js +0 -180
  714. package/build/dist/Tests/Utils/Metrics/MetricResultUnitConverter.test.js.map +0 -1
  715. package/build/dist/Tests/Utils/RecordingRuleExpression.test.js +0 -142
  716. package/build/dist/Tests/Utils/RecordingRuleExpression.test.js.map +0 -1
  717. package/build/dist/Tests/Utils/Slug.test.js +0 -20
  718. package/build/dist/Tests/Utils/Slug.test.js.map +0 -1
  719. package/build/dist/Tests/Utils/UUID.test.js +0 -48
  720. package/build/dist/Tests/Utils/UUID.test.js.map +0 -1
  721. package/build/dist/Tests/jest.setup.js +0 -30
  722. package/build/dist/Tests/jest.setup.js.map +0 -1
  723. package/build/dist/Types/Profile/ProfileMetricType.js +0 -17
  724. package/build/dist/Types/Profile/ProfileMetricType.js.map +0 -1
@@ -14,32 +14,73 @@ import PprofEncoder from "../Utils/Profile/PprofEncoder";
14
14
  import ProfileService from "../Services/ProfileService";
15
15
  import ProfileSampleService from "../Services/ProfileSampleService";
16
16
  import SortOrder from "../../Types/BaseDatabase/SortOrder";
17
+ import Permission from "../../Types/Permission";
17
18
  import ObjectID from "../../Types/ObjectID";
18
19
  import OneUptimeDate from "../../Types/Date";
19
20
  import ResourceFacetResolver from "../Utils/Telemetry/ResourceFacetResolver";
20
21
  const router = Express.getRouter();
21
- router.post("/telemetry/metrics/get-attributes", UserMiddleware.getUserMiddleware, async (req, res, next) => {
22
+ const createTelemetryReadAccessGuard = (signalReadPermission) => {
23
+ return [
24
+ UserMiddleware.getUserMiddleware,
25
+ UserMiddleware.requireUserAuthentication,
26
+ UserMiddleware.requirePermission({
27
+ permissions: [
28
+ Permission.ProjectOwner,
29
+ Permission.ProjectAdmin,
30
+ Permission.ProjectMember,
31
+ Permission.Viewer,
32
+ Permission.TelemetryAdmin,
33
+ Permission.TelemetryMember,
34
+ Permission.TelemetryViewer,
35
+ signalReadPermission,
36
+ ],
37
+ }),
38
+ ];
39
+ };
40
+ // Mirrors the read access control declared on the Log analytics model.
41
+ const requireLogReadAccess = createTelemetryReadAccessGuard(Permission.ReadTelemetryServiceLog);
42
+ // Mirrors the read access control declared on the Span analytics model.
43
+ const requireTraceReadAccess = createTelemetryReadAccessGuard(Permission.ReadTelemetryServiceTraces);
44
+ /*
45
+ * Mirrors the read access control declared on the Metric analytics model,
46
+ * whose table-level read list grants ReadTelemetryServiceTraces rather than
47
+ * ReadTelemetryServiceMetrics. The guard follows the model declaration so
48
+ * these routes stay in lockstep with the model-backed CRUD API; if the model
49
+ * ever switches to ReadTelemetryServiceMetrics this must change with it.
50
+ */
51
+ const requireMetricReadAccess = createTelemetryReadAccessGuard(Permission.ReadTelemetryServiceTraces);
52
+ /*
53
+ * Mirrors the read access control declared on the ExceptionInstance
54
+ * analytics model.
55
+ */
56
+ const requireExceptionReadAccess = createTelemetryReadAccessGuard(Permission.ReadTelemetryException);
57
+ /*
58
+ * Mirrors the read access control declared on the Profile / ProfileSample
59
+ * analytics models.
60
+ */
61
+ const requireProfileReadAccess = createTelemetryReadAccessGuard(Permission.ReadTelemetryServiceProfiles);
62
+ router.post("/telemetry/metrics/get-attributes", ...requireMetricReadAccess, async (req, res, next) => {
22
63
  return getAttributes(req, res, next, TelemetryType.Metric);
23
64
  });
24
- router.post("/telemetry/metrics/get-attribute-values", UserMiddleware.getUserMiddleware, async (req, res, next) => {
65
+ router.post("/telemetry/metrics/get-attribute-values", ...requireMetricReadAccess, async (req, res, next) => {
25
66
  return getAttributeValues(req, res, next, TelemetryType.Metric);
26
67
  });
27
- router.post("/telemetry/logs/get-attributes", UserMiddleware.getUserMiddleware, async (req, res, next) => {
68
+ router.post("/telemetry/logs/get-attributes", ...requireLogReadAccess, async (req, res, next) => {
28
69
  return getAttributes(req, res, next, TelemetryType.Log);
29
70
  });
30
- router.post("/telemetry/logs/get-attribute-values", UserMiddleware.getUserMiddleware, async (req, res, next) => {
71
+ router.post("/telemetry/logs/get-attribute-values", ...requireLogReadAccess, async (req, res, next) => {
31
72
  return getAttributeValues(req, res, next, TelemetryType.Log);
32
73
  });
33
- router.post("/telemetry/traces/get-attributes", UserMiddleware.getUserMiddleware, async (req, res, next) => {
74
+ router.post("/telemetry/traces/get-attributes", ...requireTraceReadAccess, async (req, res, next) => {
34
75
  return getAttributes(req, res, next, TelemetryType.Trace);
35
76
  });
36
- router.post("/telemetry/traces/get-attribute-values", UserMiddleware.getUserMiddleware, async (req, res, next) => {
77
+ router.post("/telemetry/traces/get-attribute-values", ...requireTraceReadAccess, async (req, res, next) => {
37
78
  return getAttributeValues(req, res, next, TelemetryType.Trace);
38
79
  });
39
- router.post("/telemetry/exceptions/get-attributes", UserMiddleware.getUserMiddleware, async (req, res, next) => {
80
+ router.post("/telemetry/exceptions/get-attributes", ...requireExceptionReadAccess, async (req, res, next) => {
40
81
  return getAttributes(req, res, next, TelemetryType.Exception);
41
82
  });
42
- router.post("/telemetry/exceptions/get-attribute-values", UserMiddleware.getUserMiddleware, async (req, res, next) => {
83
+ router.post("/telemetry/exceptions/get-attribute-values", ...requireExceptionReadAccess, async (req, res, next) => {
43
84
  return getAttributeValues(req, res, next, TelemetryType.Exception);
44
85
  });
45
86
  const getAttributes = async (req, res, next, telemetryType) => {
@@ -104,7 +145,7 @@ const getAttributeValues = async (req, res, next, telemetryType) => {
104
145
  }
105
146
  };
106
147
  // --- Log Histogram Endpoint ---
107
- router.post("/telemetry/logs/histogram", UserMiddleware.getUserMiddleware, async (req, res, next) => {
148
+ router.post("/telemetry/logs/histogram", ...requireLogReadAccess, async (req, res, next) => {
108
149
  try {
109
150
  const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
110
151
  if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
@@ -124,6 +165,9 @@ router.post("/telemetry/logs/histogram", UserMiddleware.getUserMiddleware, async
124
165
  return new ObjectID(id);
125
166
  })
126
167
  : undefined;
168
+ const entityKeys = body["entityKeys"]
169
+ ? body["entityKeys"]
170
+ : undefined;
127
171
  const severityTexts = body["severityTexts"]
128
172
  ? body["severityTexts"]
129
173
  : undefined;
@@ -145,6 +189,7 @@ router.post("/telemetry/logs/histogram", UserMiddleware.getUserMiddleware, async
145
189
  endTime,
146
190
  bucketSizeInMinutes,
147
191
  serviceIds,
192
+ entityKeys,
148
193
  severityTexts,
149
194
  bodySearchText,
150
195
  traceIds,
@@ -161,7 +206,7 @@ router.post("/telemetry/logs/histogram", UserMiddleware.getUserMiddleware, async
161
206
  }
162
207
  });
163
208
  // --- Log Facets Endpoint ---
164
- router.post("/telemetry/logs/facets", UserMiddleware.getUserMiddleware, async (req, res, next) => {
209
+ router.post("/telemetry/logs/facets", ...requireLogReadAccess, async (req, res, next) => {
165
210
  try {
166
211
  const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
167
212
  if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
@@ -170,7 +215,7 @@ router.post("/telemetry/logs/facets", UserMiddleware.getUserMiddleware, async (r
170
215
  const body = req.body;
171
216
  const facetKeys = body["facetKeys"]
172
217
  ? body["facetKeys"]
173
- : ["severityText", "serviceId"];
218
+ : ["severityText", "primaryEntityId"];
174
219
  const startTime = body["startTime"]
175
220
  ? OneUptimeDate.fromString(body["startTime"])
176
221
  : OneUptimeDate.addRemoveHours(OneUptimeDate.getCurrentDate(), -1);
@@ -183,6 +228,9 @@ router.post("/telemetry/logs/facets", UserMiddleware.getUserMiddleware, async (r
183
228
  return new ObjectID(id);
184
229
  })
185
230
  : undefined;
231
+ const entityKeys = body["entityKeys"]
232
+ ? body["entityKeys"]
233
+ : undefined;
186
234
  const severityTexts = body["severityTexts"]
187
235
  ? body["severityTexts"]
188
236
  : undefined;
@@ -200,9 +248,9 @@ router.post("/telemetry/logs/facets", UserMiddleware.getUserMiddleware, async (r
200
248
  : undefined;
201
249
  /*
202
250
  * Per-facet partial-match filter applied at the Postgres source-of-truth
203
- * lookup stage. Only consulted for resource facets (serviceId / hostId /
204
- * dockerHostId / kubernetesClusterId) — other facets continue to filter
205
- * client-side over the loaded value list.
251
+ * lookup stage. Only consulted for resource facets (primaryEntityId /
252
+ * hostId / dockerHostId / kubernetesClusterId) — other facets continue
253
+ * to filter client-side over the loaded value list.
206
254
  */
207
255
  const facetSearchText = body["facetSearchText"]
208
256
  ? body["facetSearchText"]
@@ -225,6 +273,7 @@ router.post("/telemetry/logs/facets", UserMiddleware.getUserMiddleware, async (r
225
273
  facetKey,
226
274
  limit,
227
275
  serviceIds,
276
+ entityKeys,
228
277
  severityTexts,
229
278
  bodySearchText,
230
279
  traceIds,
@@ -276,8 +325,103 @@ router.post("/telemetry/logs/facets", UserMiddleware.getUserMiddleware, async (r
276
325
  next(err);
277
326
  }
278
327
  });
328
+ /*
329
+ * Shared body parsing for every trace aggregation endpoint (histogram,
330
+ * facets, analytics). Defensive about shapes: arrays are validated and
331
+ * filtered to strings, booleans/numbers use strict typeof checks (JSON null
332
+ * or a stringly-typed value must mean "no filter", never an active
333
+ * predicate).
334
+ */
335
+ function parseTraceFilterBody(body) {
336
+ var _a;
337
+ const serviceIds = Array.isArray(body["serviceIds"])
338
+ ? body["serviceIds"]
339
+ .filter((v) => {
340
+ return typeof v === "string";
341
+ })
342
+ .map((id) => {
343
+ return new ObjectID(id);
344
+ })
345
+ : undefined;
346
+ const stringArray = (key) => {
347
+ return Array.isArray(body[key])
348
+ ? body[key].filter((v) => {
349
+ return typeof v === "string";
350
+ })
351
+ : undefined;
352
+ };
353
+ /*
354
+ * Numeric strings are coerced (stringly-typed clients worked before the
355
+ * parsing was centralized) — dropping them would silently widen the
356
+ * filter to all statuses.
357
+ */
358
+ const statusCodes = Array.isArray(body["statusCodes"])
359
+ ? body["statusCodes"]
360
+ .map((v) => {
361
+ return typeof v === "number" ? v : Number(v);
362
+ })
363
+ .filter((v) => {
364
+ return Number.isFinite(v);
365
+ })
366
+ : undefined;
367
+ const stringRecord = (key) => {
368
+ const raw = body[key];
369
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
370
+ return undefined;
371
+ }
372
+ const entries = Object.entries(raw).filter((entry) => {
373
+ return typeof entry[1] === "string";
374
+ });
375
+ if (entries.length === 0) {
376
+ return undefined;
377
+ }
378
+ return Object.fromEntries(entries);
379
+ };
380
+ return {
381
+ serviceIds,
382
+ entityKeys: stringArray("entityKeys"),
383
+ statusCodes,
384
+ spanKinds: stringArray("spanKinds"),
385
+ spanNames: stringArray("spanNames"),
386
+ /*
387
+ * spanNameSearches is the only multiplicative filter (one ILIKE
388
+ * predicate per entry) — cap it. The dashboard sends at most one.
389
+ */
390
+ spanNameSearches: (_a = stringArray("spanNameSearches")) === null || _a === void 0 ? void 0 : _a.slice(0, 10),
391
+ spanIds: stringArray("spanIds"),
392
+ traceIds: stringArray("traceIds"),
393
+ nameSearchText: typeof body["nameSearchText"] === "string" && body["nameSearchText"]
394
+ ? body["nameSearchText"]
395
+ : undefined,
396
+ statusMessageSearchText: typeof body["statusMessageSearchText"] === "string" &&
397
+ body["statusMessageSearchText"]
398
+ ? body["statusMessageSearchText"]
399
+ : undefined,
400
+ statusMessages: stringArray("statusMessages"),
401
+ /*
402
+ * Strict boolean check — unlike rootOnly, a coerced `false` is a
403
+ * meaningful predicate here (JSON null must mean "no filter", not
404
+ * "exclude exception spans").
405
+ */
406
+ hasException: typeof body["hasException"] === "boolean"
407
+ ? body["hasException"]
408
+ : undefined,
409
+ minDurationNano: typeof body["minDurationNano"] === "number"
410
+ ? body["minDurationNano"]
411
+ : undefined,
412
+ maxDurationNano: typeof body["maxDurationNano"] === "number"
413
+ ? body["maxDurationNano"]
414
+ : undefined,
415
+ exactDurationNano: typeof body["exactDurationNano"] === "number"
416
+ ? body["exactDurationNano"]
417
+ : undefined,
418
+ rootOnly: body["rootOnly"] === undefined ? undefined : Boolean(body["rootOnly"]),
419
+ attributes: stringRecord("attributes"),
420
+ attributeSearches: stringRecord("attributeSearches"),
421
+ };
422
+ }
279
423
  // --- Trace Histogram Endpoint ---
280
- router.post("/telemetry/traces/histogram", UserMiddleware.getUserMiddleware, async (req, res, next) => {
424
+ router.post("/telemetry/traces/histogram", ...requireTraceReadAccess, async (req, res, next) => {
281
425
  try {
282
426
  const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
283
427
  if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
@@ -292,44 +436,10 @@ router.post("/telemetry/traces/histogram", UserMiddleware.getUserMiddleware, asy
292
436
  : OneUptimeDate.getCurrentDate();
293
437
  const bucketSizeInMinutes = body["bucketSizeInMinutes"] ||
294
438
  computeDefaultBucketSize(startTime, endTime);
295
- const serviceIds = body["serviceIds"]
296
- ? body["serviceIds"].map((id) => {
297
- return new ObjectID(id);
298
- })
299
- : undefined;
300
- const statusCodes = body["statusCodes"]
301
- ? body["statusCodes"]
302
- : undefined;
303
- const spanKinds = body["spanKinds"]
304
- ? body["spanKinds"]
305
- : undefined;
306
- const spanNames = body["spanNames"]
307
- ? body["spanNames"]
308
- : undefined;
309
- const traceIds = body["traceIds"]
310
- ? body["traceIds"]
311
- : undefined;
312
- const nameSearchText = body["nameSearchText"]
313
- ? body["nameSearchText"]
314
- : undefined;
315
- const rootOnly = body["rootOnly"] === undefined ? undefined : Boolean(body["rootOnly"]);
316
- const attributes = body["attributes"]
317
- ? body["attributes"]
318
- : undefined;
319
- const request = {
320
- projectId: databaseProps.tenantId,
321
- startTime,
439
+ const traceFilters = parseTraceFilterBody(body);
440
+ const request = Object.assign({ projectId: databaseProps.tenantId, startTime,
322
441
  endTime,
323
- bucketSizeInMinutes,
324
- serviceIds,
325
- statusCodes,
326
- spanKinds,
327
- spanNames,
328
- traceIds,
329
- nameSearchText,
330
- rootOnly,
331
- attributes,
332
- };
442
+ bucketSizeInMinutes }, traceFilters);
333
443
  const buckets = await TraceAggregationService.getHistogram(request);
334
444
  return Response.sendJsonObjectResponse(req, res, {
335
445
  buckets: buckets,
@@ -340,7 +450,7 @@ router.post("/telemetry/traces/histogram", UserMiddleware.getUserMiddleware, asy
340
450
  }
341
451
  });
342
452
  // --- Trace Facets Endpoint ---
343
- router.post("/telemetry/traces/facets", UserMiddleware.getUserMiddleware, async (req, res, next) => {
453
+ router.post("/telemetry/traces/facets", ...requireTraceReadAccess, async (req, res, next) => {
344
454
  try {
345
455
  const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
346
456
  if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
@@ -349,7 +459,7 @@ router.post("/telemetry/traces/facets", UserMiddleware.getUserMiddleware, async
349
459
  const body = req.body;
350
460
  const facetKeys = body["facetKeys"]
351
461
  ? body["facetKeys"]
352
- : ["serviceId", "statusCode", "kind", "name"];
462
+ : ["primaryEntityId", "statusCode", "kind", "name"];
353
463
  const startTime = body["startTime"]
354
464
  ? OneUptimeDate.fromString(body["startTime"])
355
465
  : OneUptimeDate.addRemoveHours(OneUptimeDate.getCurrentDate(), -1);
@@ -357,35 +467,12 @@ router.post("/telemetry/traces/facets", UserMiddleware.getUserMiddleware, async
357
467
  ? OneUptimeDate.fromString(body["endTime"])
358
468
  : OneUptimeDate.getCurrentDate();
359
469
  const limit = body["limit"] || 500;
360
- const serviceIds = body["serviceIds"]
361
- ? body["serviceIds"].map((id) => {
362
- return new ObjectID(id);
363
- })
364
- : undefined;
365
- const statusCodes = body["statusCodes"]
366
- ? body["statusCodes"]
367
- : undefined;
368
- const spanKinds = body["spanKinds"]
369
- ? body["spanKinds"]
370
- : undefined;
371
- const spanNames = body["spanNames"]
372
- ? body["spanNames"]
373
- : undefined;
374
- const traceIds = body["traceIds"]
375
- ? body["traceIds"]
376
- : undefined;
377
- const nameSearchText = body["nameSearchText"]
378
- ? body["nameSearchText"]
379
- : undefined;
380
- const rootOnly = body["rootOnly"] === undefined ? undefined : Boolean(body["rootOnly"]);
381
- const attributes = body["attributes"]
382
- ? body["attributes"]
383
- : undefined;
470
+ const traceFilters = parseTraceFilterBody(body);
384
471
  /*
385
472
  * Per-facet partial-match filter applied at the Postgres source-of-truth
386
- * lookup stage. Only consulted for resource facets (serviceId / hostId /
387
- * dockerHostId / kubernetesClusterId) — other facets continue to filter
388
- * client-side over the loaded value list.
473
+ * lookup stage. Only consulted for resource facets (primaryEntityId /
474
+ * hostId / dockerHostId / kubernetesClusterId) — other facets continue
475
+ * to filter client-side over the loaded value list.
389
476
  */
390
477
  const facetSearchText = body["facetSearchText"]
391
478
  ? body["facetSearchText"]
@@ -396,24 +483,14 @@ router.post("/telemetry/traces/facets", UserMiddleware.getUserMiddleware, async
396
483
  * and the recent-N sample (kind + attribute facets, which have no cheap
397
484
  * exact path).
398
485
  */
399
- const multiRequest = {
400
- projectId: databaseProps.tenantId,
401
- startTime,
486
+ const multiRequest = Object.assign({ projectId: databaseProps.tenantId, startTime,
402
487
  endTime,
403
488
  facetKeys,
404
- limit,
405
- serviceIds,
406
- statusCodes,
407
- spanKinds,
408
- spanNames,
409
- traceIds,
410
- nameSearchText,
411
- rootOnly,
412
- attributes,
413
- };
489
+ limit }, traceFilters);
414
490
  /*
415
- * Resource facets (serviceId / hostId / dockerHostId / k8s cluster ...)
416
- * and statusCode are counted with an exact, projection-backed GROUP BY
491
+ * Resource facets (primaryEntityId / hostId / dockerHostId / k8s
492
+ * cluster ...) and statusCode are counted with an exact,
493
+ * projection-backed GROUP BY
417
494
  * in getResourceFacetCounts(). The recent-N sample below saturates with
418
495
  * whichever service is chattiest right now and reports 0 for every other
419
496
  * service regardless of its true volume over the window — the "top 1000"
@@ -466,8 +543,8 @@ router.post("/telemetry/traces/facets", UserMiddleware.getUserMiddleware, async
466
543
  /*
467
544
  * Replace resource-facet results with the Postgres source-of-truth list
468
545
  * (filtered by facetSearchText and enriched with displayName). Every
469
- * resource facet shares the same exact serviceId -> count map; resource
470
- * ids are globally unique, so each facet only ever resolves its own
546
+ * resource facet shares the same exact primaryEntityId -> count map;
547
+ * resource ids are globally unique, so each facet only ever resolves its own
471
548
  * entities. Entities with no telemetry in the window surface with count
472
549
  * 0 instead of being hidden, and the search box can find resources
473
550
  * beyond the loaded subset.
@@ -498,8 +575,79 @@ router.post("/telemetry/traces/facets", UserMiddleware.getUserMiddleware, async
498
575
  next(err);
499
576
  }
500
577
  });
578
+ // --- Trace Analytics Endpoint ---
579
+ router.post("/telemetry/traces/analytics", ...requireTraceReadAccess, async (req, res, next) => {
580
+ try {
581
+ const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
582
+ if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
583
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid Project ID"));
584
+ }
585
+ const body = req.body;
586
+ const chartType = body["chartType"] || "timeseries";
587
+ if (!["timeseries", "toplist", "table"].includes(chartType)) {
588
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid chartType"));
589
+ }
590
+ const metric = body["metric"] || "count";
591
+ if (!TraceAggregationService.isValidAnalyticsMetric(metric)) {
592
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid metric"));
593
+ }
594
+ const startTime = body["startTime"]
595
+ ? OneUptimeDate.fromString(body["startTime"])
596
+ : OneUptimeDate.addRemoveHours(OneUptimeDate.getCurrentDate(), -1);
597
+ const endTime = body["endTime"]
598
+ ? OneUptimeDate.fromString(body["endTime"])
599
+ : OneUptimeDate.getCurrentDate();
600
+ const rawBucketSize = Number(body["bucketSizeInMinutes"]);
601
+ const bucketSizeInMinutes = Number.isFinite(rawBucketSize) && rawBucketSize >= 1
602
+ ? Math.trunc(rawBucketSize)
603
+ : computeDefaultBucketSize(startTime, endTime);
604
+ const groupBy = Array.isArray(body["groupBy"])
605
+ ? body["groupBy"].filter((v) => {
606
+ return typeof v === "string" && v.length > 0;
607
+ })
608
+ : undefined;
609
+ /*
610
+ * Clamp to a sane integer range — `limit` flows into LIMIT and the
611
+ * timeseries series cap, so negative/fractional values would 500 in
612
+ * ClickHouse and huge values would explode the result set. Numeric
613
+ * strings are accepted (dashboard widget arguments are stored as
614
+ * strings).
615
+ */
616
+ const rawLimit = Number(body["limit"]);
617
+ const limit = Number.isFinite(rawLimit)
618
+ ? Math.min(Math.max(Math.trunc(rawLimit), 1), 1000)
619
+ : undefined;
620
+ const traceFilters = parseTraceFilterBody(body);
621
+ const request = Object.assign({ projectId: databaseProps.tenantId, startTime,
622
+ endTime,
623
+ bucketSizeInMinutes,
624
+ chartType,
625
+ metric,
626
+ groupBy,
627
+ limit }, traceFilters);
628
+ if (chartType === "timeseries") {
629
+ const data = await TraceAggregationService.getAnalyticsTimeseries(request);
630
+ return Response.sendJsonObjectResponse(req, res, {
631
+ data: data,
632
+ });
633
+ }
634
+ if (chartType === "toplist") {
635
+ const data = await TraceAggregationService.getAnalyticsTopList(request);
636
+ return Response.sendJsonObjectResponse(req, res, {
637
+ data: data,
638
+ });
639
+ }
640
+ const data = await TraceAggregationService.getAnalyticsTable(request);
641
+ return Response.sendJsonObjectResponse(req, res, {
642
+ data: data,
643
+ });
644
+ }
645
+ catch (err) {
646
+ next(err);
647
+ }
648
+ });
501
649
  // --- Exception Histogram Endpoint ---
502
- router.post("/telemetry/exceptions/histogram", UserMiddleware.getUserMiddleware, async (req, res, next) => {
650
+ router.post("/telemetry/exceptions/histogram", ...requireExceptionReadAccess, async (req, res, next) => {
503
651
  try {
504
652
  const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
505
653
  if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
@@ -558,7 +706,7 @@ router.post("/telemetry/exceptions/histogram", UserMiddleware.getUserMiddleware,
558
706
  }
559
707
  });
560
708
  // --- Exception Facets Endpoint ---
561
- router.post("/telemetry/exceptions/facets", UserMiddleware.getUserMiddleware, async (req, res, next) => {
709
+ router.post("/telemetry/exceptions/facets", ...requireExceptionReadAccess, async (req, res, next) => {
562
710
  try {
563
711
  const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
564
712
  if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
@@ -568,7 +716,7 @@ router.post("/telemetry/exceptions/facets", UserMiddleware.getUserMiddleware, as
568
716
  const facetKeys = body["facetKeys"]
569
717
  ? body["facetKeys"]
570
718
  : [
571
- "serviceId",
719
+ "primaryEntityId",
572
720
  "hostId",
573
721
  "dockerHostId",
574
722
  "kubernetesClusterId",
@@ -676,7 +824,7 @@ router.post("/telemetry/exceptions/facets", UserMiddleware.getUserMiddleware, as
676
824
  }
677
825
  });
678
826
  // --- Metric Facets Endpoint ---
679
- router.post("/telemetry/metrics/facets", UserMiddleware.getUserMiddleware, async (req, res, next) => {
827
+ router.post("/telemetry/metrics/facets", ...requireMetricReadAccess, async (req, res, next) => {
680
828
  try {
681
829
  const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
682
830
  if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
@@ -685,7 +833,7 @@ router.post("/telemetry/metrics/facets", UserMiddleware.getUserMiddleware, async
685
833
  const body = req.body;
686
834
  const facetKeys = body["facetKeys"]
687
835
  ? body["facetKeys"]
688
- : ["serviceId", "hostId", "dockerHostId", "kubernetesClusterId"];
836
+ : ["primaryEntityId", "hostId", "dockerHostId", "kubernetesClusterId"];
689
837
  const startTime = body["startTime"]
690
838
  ? OneUptimeDate.fromString(body["startTime"])
691
839
  : OneUptimeDate.addRemoveHours(OneUptimeDate.getCurrentDate(), -1);
@@ -764,7 +912,7 @@ router.post("/telemetry/metrics/facets", UserMiddleware.getUserMiddleware, async
764
912
  }
765
913
  });
766
914
  // --- Log Analytics Endpoint ---
767
- router.post("/telemetry/logs/analytics", UserMiddleware.getUserMiddleware, async (req, res, next) => {
915
+ router.post("/telemetry/logs/analytics", ...requireLogReadAccess, async (req, res, next) => {
768
916
  try {
769
917
  const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
770
918
  if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
@@ -852,7 +1000,7 @@ router.post("/telemetry/logs/analytics", UserMiddleware.getUserMiddleware, async
852
1000
  }
853
1001
  });
854
1002
  // --- Log Export Endpoint ---
855
- router.post("/telemetry/logs/export", UserMiddleware.getUserMiddleware, async (req, res, next) => {
1003
+ router.post("/telemetry/logs/export", ...requireLogReadAccess, async (req, res, next) => {
856
1004
  try {
857
1005
  const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
858
1006
  if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
@@ -896,7 +1044,7 @@ router.post("/telemetry/logs/export", UserMiddleware.getUserMiddleware, async (r
896
1044
  spanIds,
897
1045
  });
898
1046
  if (format === "csv") {
899
- const header = "time,serviceId,severityText,severityNumber,body,traceId,spanId,attributes";
1047
+ const header = "time,primaryEntityId,severityText,severityNumber,body,traceId,spanId,attributes";
900
1048
  const csvRows = rows.map((row) => {
901
1049
  const escapeCsv = (val) => {
902
1050
  const str = val === null || val === undefined ? "" : String(val);
@@ -907,7 +1055,7 @@ router.post("/telemetry/logs/export", UserMiddleware.getUserMiddleware, async (r
907
1055
  };
908
1056
  return [
909
1057
  escapeCsv(row["time"]),
910
- escapeCsv(row["serviceId"]),
1058
+ escapeCsv(row["primaryEntityId"]),
911
1059
  escapeCsv(row["severityText"]),
912
1060
  escapeCsv(row["severityNumber"]),
913
1061
  escapeCsv(row["body"]),
@@ -932,7 +1080,7 @@ router.post("/telemetry/logs/export", UserMiddleware.getUserMiddleware, async (r
932
1080
  }
933
1081
  });
934
1082
  // --- Log Context Endpoint ---
935
- router.post("/telemetry/logs/context", UserMiddleware.getUserMiddleware, async (req, res, next) => {
1083
+ router.post("/telemetry/logs/context", ...requireLogReadAccess, async (req, res, next) => {
936
1084
  try {
937
1085
  const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
938
1086
  if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
@@ -940,15 +1088,17 @@ router.post("/telemetry/logs/context", UserMiddleware.getUserMiddleware, async (
940
1088
  }
941
1089
  const body = req.body;
942
1090
  const logId = body["logId"];
943
- const serviceId = body["serviceId"];
1091
+ // `serviceId` is the pre-rename alias kept for stale clients.
1092
+ const primaryEntityId = (body["primaryEntityId"] ||
1093
+ body["serviceId"]);
944
1094
  const time = body["time"];
945
- if (!logId || !serviceId || !time) {
946
- return Response.sendErrorResponse(req, res, new BadDataException("logId, serviceId, and time are required"));
1095
+ if (!logId || !primaryEntityId || !time) {
1096
+ return Response.sendErrorResponse(req, res, new BadDataException("logId, primaryEntityId, and time are required"));
947
1097
  }
948
1098
  const count = body["count"] || 5;
949
1099
  const result = await LogAggregationService.getLogContext({
950
1100
  projectId: databaseProps.tenantId,
951
- serviceId: new ObjectID(serviceId),
1101
+ primaryEntityId: new ObjectID(primaryEntityId),
952
1102
  time: OneUptimeDate.fromString(time),
953
1103
  logId,
954
1104
  count,
@@ -963,7 +1113,7 @@ router.post("/telemetry/logs/context", UserMiddleware.getUserMiddleware, async (
963
1113
  }
964
1114
  });
965
1115
  // --- Drop Filter Estimate Endpoint ---
966
- router.post("/telemetry/logs/drop-filter-estimate", UserMiddleware.getUserMiddleware, async (req, res, next) => {
1116
+ router.post("/telemetry/logs/drop-filter-estimate", ...requireLogReadAccess, async (req, res, next) => {
967
1117
  try {
968
1118
  const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
969
1119
  if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
@@ -1028,11 +1178,11 @@ function computeDefaultBucketSize(startTime, endTime) {
1028
1178
  return 1440;
1029
1179
  }
1030
1180
  // --- Profile Get Attributes Endpoint ---
1031
- router.post("/telemetry/profiles/get-attributes", UserMiddleware.getUserMiddleware, async (req, res, next) => {
1181
+ router.post("/telemetry/profiles/get-attributes", ...requireProfileReadAccess, async (req, res, next) => {
1032
1182
  return getAttributes(req, res, next, TelemetryType.Profile);
1033
1183
  });
1034
1184
  // --- Profile Flamegraph Endpoint ---
1035
- router.post("/telemetry/profiles/flamegraph", UserMiddleware.getUserMiddleware, async (req, res, next) => {
1185
+ router.post("/telemetry/profiles/flamegraph", ...requireProfileReadAccess, async (req, res, next) => {
1036
1186
  try {
1037
1187
  const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
1038
1188
  if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
@@ -1066,9 +1216,10 @@ router.post("/telemetry/profiles/flamegraph", UserMiddleware.getUserMiddleware,
1066
1216
  }
1067
1217
  const request = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ projectId: databaseProps.tenantId }, (profileId !== undefined && { profileId })), (startTime !== undefined && { startTime })), (endTime !== undefined && { endTime })), (serviceIds !== undefined && { serviceIds })), (profileType !== undefined && { profileType })), (profileTypes !== undefined &&
1068
1218
  profileTypes.length > 0 && { profileTypes }));
1069
- const flamegraph = await ProfileAggregationService.getFlamegraph(request);
1219
+ const result = await ProfileAggregationService.getFlamegraph(request);
1070
1220
  return Response.sendJsonObjectResponse(req, res, {
1071
- flamegraph: flamegraph,
1221
+ flamegraph: result.flamegraph,
1222
+ truncated: result.truncated,
1072
1223
  });
1073
1224
  }
1074
1225
  catch (err) {
@@ -1076,19 +1227,35 @@ router.post("/telemetry/profiles/flamegraph", UserMiddleware.getUserMiddleware,
1076
1227
  }
1077
1228
  });
1078
1229
  // --- Profile Function List Endpoint ---
1079
- router.post("/telemetry/profiles/function-list", UserMiddleware.getUserMiddleware, async (req, res, next) => {
1230
+ router.post("/telemetry/profiles/function-list", ...requireProfileReadAccess, async (req, res, next) => {
1080
1231
  try {
1081
1232
  const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
1082
1233
  if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
1083
1234
  return Response.sendErrorResponse(req, res, new BadDataException("Invalid Project ID"));
1084
1235
  }
1085
1236
  const body = req.body;
1237
+ const profileId = body["profileId"]
1238
+ ? body["profileId"]
1239
+ : undefined;
1240
+ /*
1241
+ * Only default the window when no profileId is given: a profile's
1242
+ * samples are bounded by the profile itself, and a defaulted
1243
+ * last-hour window would silently exclude any profile captured
1244
+ * before the window started.
1245
+ */
1086
1246
  const startTime = body["startTime"]
1087
1247
  ? OneUptimeDate.fromString(body["startTime"])
1088
- : OneUptimeDate.addRemoveHours(OneUptimeDate.getCurrentDate(), -1);
1248
+ : profileId
1249
+ ? undefined
1250
+ : OneUptimeDate.addRemoveHours(OneUptimeDate.getCurrentDate(), -1);
1089
1251
  const endTime = body["endTime"]
1090
1252
  ? OneUptimeDate.fromString(body["endTime"])
1091
- : OneUptimeDate.getCurrentDate();
1253
+ : profileId
1254
+ ? undefined
1255
+ : OneUptimeDate.getCurrentDate();
1256
+ if (!profileId && !startTime) {
1257
+ return Response.sendErrorResponse(req, res, new BadDataException("Either profileId or startTime must be provided"));
1258
+ }
1092
1259
  const serviceIds = body["serviceIds"]
1093
1260
  ? body["serviceIds"].map((id) => {
1094
1261
  return new ObjectID(id);
@@ -1108,12 +1275,13 @@ router.post("/telemetry/profiles/function-list", UserMiddleware.getUserMiddlewar
1108
1275
  const sortBy = body["sortBy"]
1109
1276
  ? body["sortBy"]
1110
1277
  : undefined;
1111
- const request = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ projectId: databaseProps.tenantId, startTime,
1112
- endTime }, (serviceIds !== undefined && { serviceIds })), (profileType !== undefined && { profileType })), (profileTypes !== undefined &&
1278
+ const request = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ projectId: databaseProps.tenantId }, (startTime !== undefined && { startTime })), (endTime !== undefined && { endTime })), (profileId !== undefined && { profileId })), (serviceIds !== undefined && { serviceIds })), (profileType !== undefined && { profileType })), (profileTypes !== undefined &&
1113
1279
  profileTypes.length > 0 && { profileTypes })), (limit !== undefined && { limit })), (sortBy !== undefined && { sortBy }));
1114
- const functions = await ProfileAggregationService.getFunctionList(request);
1280
+ const result = await ProfileAggregationService.getFunctionList(request);
1115
1281
  return Response.sendJsonObjectResponse(req, res, {
1116
- functions: functions,
1282
+ functions: result.functions,
1283
+ windowTotal: result.windowTotal,
1284
+ truncated: result.truncated,
1117
1285
  });
1118
1286
  }
1119
1287
  catch (err) {
@@ -1121,7 +1289,7 @@ router.post("/telemetry/profiles/function-list", UserMiddleware.getUserMiddlewar
1121
1289
  }
1122
1290
  });
1123
1291
  // --- Profile Service Activity Endpoint ---
1124
- router.post("/telemetry/profiles/service-activity", UserMiddleware.getUserMiddleware, async (req, res, next) => {
1292
+ router.post("/telemetry/profiles/service-activity", ...requireProfileReadAccess, async (req, res, next) => {
1125
1293
  try {
1126
1294
  const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
1127
1295
  if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
@@ -1155,7 +1323,7 @@ router.post("/telemetry/profiles/service-activity", UserMiddleware.getUserMiddle
1155
1323
  }
1156
1324
  });
1157
1325
  // --- Profile pprof Export Endpoint ---
1158
- router.get("/telemetry/profiles/:profileId/pprof", UserMiddleware.getUserMiddleware, async (req, res, next) => {
1326
+ router.get("/telemetry/profiles/:profileId/pprof", ...requireProfileReadAccess, async (req, res, next) => {
1159
1327
  try {
1160
1328
  const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
1161
1329
  if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
@@ -1244,7 +1412,7 @@ router.get("/telemetry/profiles/:profileId/pprof", UserMiddleware.getUserMiddlew
1244
1412
  }
1245
1413
  });
1246
1414
  // --- Profile Diff Flamegraph Endpoint ---
1247
- router.post("/telemetry/profiles/diff-flamegraph", UserMiddleware.getUserMiddleware, async (req, res, next) => {
1415
+ router.post("/telemetry/profiles/diff-flamegraph", ...requireProfileReadAccess, async (req, res, next) => {
1248
1416
  try {
1249
1417
  const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
1250
1418
  if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
@@ -1287,9 +1455,137 @@ router.post("/telemetry/profiles/diff-flamegraph", UserMiddleware.getUserMiddlew
1287
1455
  comparisonStartTime,
1288
1456
  comparisonEndTime }, (serviceIds !== undefined && { serviceIds })), (profileType !== undefined && { profileType })), (profileTypes !== undefined &&
1289
1457
  profileTypes.length > 0 && { profileTypes }));
1290
- const diffFlamegraph = await ProfileAggregationService.getDiffFlamegraph(request);
1458
+ const result = await ProfileAggregationService.getDiffFlamegraph(request);
1459
+ /*
1460
+ * `truncated` is surfaced so the UI can warn that the diff was built
1461
+ * from a capped sample set rather than the full window.
1462
+ */
1463
+ return Response.sendJsonObjectResponse(req, res, {
1464
+ diffFlamegraph: result.diffFlamegraph,
1465
+ truncated: result.truncated,
1466
+ });
1467
+ }
1468
+ catch (err) {
1469
+ next(err);
1470
+ }
1471
+ });
1472
+ // --- Profile Function Focus Endpoint ---
1473
+ router.post("/telemetry/profiles/function-focus", ...requireProfileReadAccess, async (req, res, next) => {
1474
+ try {
1475
+ const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
1476
+ if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
1477
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid Project ID"));
1478
+ }
1479
+ const body = req.body;
1480
+ const functionName = body["functionName"] && typeof body["functionName"] === "string"
1481
+ ? body["functionName"]
1482
+ : undefined;
1483
+ if (!functionName) {
1484
+ return Response.sendErrorResponse(req, res, new BadDataException("functionName is required"));
1485
+ }
1486
+ /*
1487
+ * fileName participates in frame identity (frames match on
1488
+ * functionName + fileName; line numbers are ignored so identity
1489
+ * survives deploys) but may legitimately be empty: folded uploads
1490
+ * produce bare frames with no file information.
1491
+ */
1492
+ const fileName = typeof body["fileName"] === "string"
1493
+ ? body["fileName"]
1494
+ : "";
1495
+ const profileId = body["profileId"]
1496
+ ? body["profileId"]
1497
+ : undefined;
1498
+ const startTime = body["startTime"]
1499
+ ? OneUptimeDate.fromString(body["startTime"])
1500
+ : undefined;
1501
+ const endTime = body["endTime"]
1502
+ ? OneUptimeDate.fromString(body["endTime"])
1503
+ : undefined;
1504
+ const serviceIds = body["serviceIds"]
1505
+ ? body["serviceIds"].map((id) => {
1506
+ return new ObjectID(id);
1507
+ })
1508
+ : undefined;
1509
+ const profileType = body["profileType"]
1510
+ ? body["profileType"]
1511
+ : undefined;
1512
+ const profileTypes = Array.isArray(body["profileTypes"])
1513
+ ? body["profileTypes"].filter((t) => {
1514
+ return typeof t === "string" && t.length > 0;
1515
+ })
1516
+ : undefined;
1517
+ if (!profileId && !startTime) {
1518
+ return Response.sendErrorResponse(req, res, new BadDataException("Either profileId or startTime must be provided"));
1519
+ }
1520
+ const request = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ projectId: databaseProps.tenantId, functionName,
1521
+ fileName }, (profileId !== undefined && { profileId })), (startTime !== undefined && { startTime })), (endTime !== undefined && { endTime })), (serviceIds !== undefined && { serviceIds })), (profileType !== undefined && { profileType })), (profileTypes !== undefined &&
1522
+ profileTypes.length > 0 && { profileTypes }));
1523
+ const result = await ProfileAggregationService.getFunctionFocus(request);
1524
+ return Response.sendJsonObjectResponse(req, res, {
1525
+ functionName: result.functionName,
1526
+ fileName: result.fileName,
1527
+ totalValue: result.totalValue,
1528
+ selfValue: result.selfValue,
1529
+ sampleCount: result.sampleCount,
1530
+ windowTotal: result.windowTotal,
1531
+ callers: result.callers,
1532
+ callees: result.callees,
1533
+ truncated: result.truncated,
1534
+ });
1535
+ }
1536
+ catch (err) {
1537
+ next(err);
1538
+ }
1539
+ });
1540
+ // --- Profile Breakdown Endpoint ---
1541
+ router.post("/telemetry/profiles/breakdown", ...requireProfileReadAccess, async (req, res, next) => {
1542
+ try {
1543
+ const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
1544
+ if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
1545
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid Project ID"));
1546
+ }
1547
+ const body = req.body;
1548
+ const startTime = body["startTime"]
1549
+ ? OneUptimeDate.fromString(body["startTime"])
1550
+ : undefined;
1551
+ const endTime = body["endTime"]
1552
+ ? OneUptimeDate.fromString(body["endTime"])
1553
+ : undefined;
1554
+ /*
1555
+ * breakdownBy is either the reserved key 'service' (grouping by
1556
+ * primaryEntityId, resolved to display names by the UI) or a Profile
1557
+ * attribute key.
1558
+ */
1559
+ const breakdownBy = body["breakdownBy"] && typeof body["breakdownBy"] === "string"
1560
+ ? body["breakdownBy"]
1561
+ : undefined;
1562
+ if (!startTime || !endTime || !breakdownBy) {
1563
+ return Response.sendErrorResponse(req, res, new BadDataException("startTime, endTime, and breakdownBy are all required"));
1564
+ }
1565
+ const serviceIds = body["serviceIds"]
1566
+ ? body["serviceIds"].map((id) => {
1567
+ return new ObjectID(id);
1568
+ })
1569
+ : undefined;
1570
+ const profileType = body["profileType"]
1571
+ ? body["profileType"]
1572
+ : undefined;
1573
+ const profileTypes = Array.isArray(body["profileTypes"])
1574
+ ? body["profileTypes"].filter((t) => {
1575
+ return typeof t === "string" && t.length > 0;
1576
+ })
1577
+ : undefined;
1578
+ const limit = body["limit"]
1579
+ ? body["limit"]
1580
+ : undefined;
1581
+ const request = Object.assign(Object.assign(Object.assign(Object.assign({ projectId: databaseProps.tenantId, startTime,
1582
+ endTime,
1583
+ breakdownBy }, (serviceIds !== undefined && { serviceIds })), (profileType !== undefined && { profileType })), (profileTypes !== undefined &&
1584
+ profileTypes.length > 0 && { profileTypes })), (limit !== undefined && { limit }));
1585
+ const result = await ProfileAggregationService.getBreakdown(request);
1291
1586
  return Response.sendJsonObjectResponse(req, res, {
1292
- diffFlamegraph: diffFlamegraph,
1587
+ items: result.items,
1588
+ totalSampleCount: result.totalSampleCount,
1293
1589
  });
1294
1590
  }
1295
1591
  catch (err) {