@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
@@ -1317,7 +1317,7 @@ ${alertSeverity.name}
1317
1317
  // delete all the alert metrics with this alert id because it's a refresh
1318
1318
  await MetricService.deleteBy({
1319
1319
  query: {
1320
- serviceId: data.alertId,
1320
+ primaryEntityId: data.alertId,
1321
1321
  },
1322
1322
  props: {
1323
1323
  isRoot: true,
@@ -1342,8 +1342,8 @@ ${alertSeverity.name}
1342
1342
  const alertCountMetric: Metric = new Metric();
1343
1343
 
1344
1344
  alertCountMetric.projectId = alert.projectId;
1345
- alertCountMetric.serviceId = alert.id!;
1346
- alertCountMetric.serviceType = ServiceType.Alert;
1345
+ alertCountMetric.primaryEntityId = alert.id!;
1346
+ alertCountMetric.primaryEntityType = ServiceType.Alert;
1347
1347
  alertCountMetric.name = AlertMetricType.AlertCount;
1348
1348
  alertCountMetric.value = 1;
1349
1349
  alertCountMetric.attributes = {
@@ -1391,8 +1391,8 @@ ${alertSeverity.name}
1391
1391
  const timeToAcknowledgeMetric: Metric = new Metric();
1392
1392
 
1393
1393
  timeToAcknowledgeMetric.projectId = alert.projectId;
1394
- timeToAcknowledgeMetric.serviceId = alert.id!;
1395
- timeToAcknowledgeMetric.serviceType = ServiceType.Alert;
1394
+ timeToAcknowledgeMetric.primaryEntityId = alert.id!;
1395
+ timeToAcknowledgeMetric.primaryEntityType = ServiceType.Alert;
1396
1396
  timeToAcknowledgeMetric.name = AlertMetricType.TimeToAcknowledge;
1397
1397
  timeToAcknowledgeMetric.value = OneUptimeDate.getDifferenceInSeconds(
1398
1398
  ackAlertStateTimeline?.startsAt || OneUptimeDate.getCurrentDate(),
@@ -1447,8 +1447,8 @@ ${alertSeverity.name}
1447
1447
  const timeToResolveMetric: Metric = new Metric();
1448
1448
 
1449
1449
  timeToResolveMetric.projectId = alert.projectId;
1450
- timeToResolveMetric.serviceId = alert.id!;
1451
- timeToResolveMetric.serviceType = ServiceType.Alert;
1450
+ timeToResolveMetric.primaryEntityId = alert.id!;
1451
+ timeToResolveMetric.primaryEntityType = ServiceType.Alert;
1452
1452
  timeToResolveMetric.name = AlertMetricType.TimeToResolve;
1453
1453
  timeToResolveMetric.value = OneUptimeDate.getDifferenceInSeconds(
1454
1454
  resolvedAlertStateTimeline?.startsAt ||
@@ -1498,8 +1498,8 @@ ${alertSeverity.name}
1498
1498
  lastAlertStateTimeline.startsAt || OneUptimeDate.getCurrentDate();
1499
1499
 
1500
1500
  alertDurationMetric.projectId = alert.projectId;
1501
- alertDurationMetric.serviceId = alert.id!;
1502
- alertDurationMetric.serviceType = ServiceType.Alert;
1501
+ alertDurationMetric.primaryEntityId = alert.id!;
1502
+ alertDurationMetric.primaryEntityType = ServiceType.Alert;
1503
1503
  alertDurationMetric.name = AlertMetricType.AlertDuration;
1504
1504
  alertDurationMetric.value = OneUptimeDate.getDifferenceInSeconds(
1505
1505
  alertEndsAt,
@@ -28,11 +28,18 @@ import Select from "../Types/AnalyticsDatabase/Select";
28
28
  import UpdateBy from "../Types/AnalyticsDatabase/UpdateBy";
29
29
  import { SQL, Statement } from "../Utils/AnalyticsDatabase/Statement";
30
30
  import StatementGenerator from "../Utils/AnalyticsDatabase/StatementGenerator";
31
+ import { getQuerySettings } from "../Utils/AnalyticsDatabase/QuerySettingsHelper";
31
32
  import logger, { LogAttributes } from "../Utils/Logger";
32
33
  import Realtime from "../Utils/Realtime";
33
34
  import StreamUtil from "../Utils/Stream";
34
35
  import BaseService from "./BaseService";
35
- import { ExecResult, ResponseJSON, ResultSet } from "@clickhouse/client";
36
+ import {
37
+ ClickHouseSettings,
38
+ ExecResult,
39
+ ResponseJSON,
40
+ ResultSet,
41
+ } from "@clickhouse/client";
42
+ import { AsyncLocalStorage } from "node:async_hooks";
36
43
  import AnalyticsBaseModel from "../../Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel";
37
44
  import { WorkflowRoute } from "../../ServiceRoute";
38
45
  import Protocol from "../../Types/API/Protocol";
@@ -64,6 +71,65 @@ export type DbJSONResponse = ResponseJSON<{
64
71
  data?: Array<JSONObject>;
65
72
  }>;
66
73
 
74
+ /*
75
+ * Re-exported so callers outside Common (e.g. App data migrations) can type
76
+ * per-call settings without depending on @clickhouse/client directly.
77
+ */
78
+ export type { ClickHouseSettings } from "@clickhouse/client";
79
+
80
+ /**
81
+ * Optional per-call knobs for `execute` / `executeQuery`, threaded into
82
+ * `client.exec` / `client.query`. Long-running statements (e.g. the
83
+ * telemetry V3 backfill's INSERT...SELECT chunks) need per-call
84
+ * `clickhouse_settings` — notably `send_progress_in_http_headers`, which
85
+ * keeps the HTTP socket non-idle so the client's `request_timeout`
86
+ * (enforced as a socket *idle* timer, see ClickhouseConfig.ts) never
87
+ * destroys a healthy request — and a deterministic `query_id` so a retry
88
+ * can find a still-running or already-finished predecessor in
89
+ * `system.processes` / `system.query_log`. Additive: callers that pass
90
+ * nothing get the exact pre-existing behavior.
91
+ */
92
+ export interface ClickhouseExecuteOptions {
93
+ clickhouseSettings?: ClickHouseSettings | undefined;
94
+ queryId?: string | undefined;
95
+ }
96
+
97
+ /**
98
+ * Ambient context that makes ClickHouse inserts idempotent across queue
99
+ * retries. The telemetry queue worker wraps each job in
100
+ * `runWithInsertDedup(jobId, ...)`; every insertJsonRows call inside the
101
+ * job then stamps `insert_deduplication_token =
102
+ * "<tokenBase>:<table>:<chunkIndex>"` plus async_insert_deduplicate=1 /
103
+ * wait_for_async_insert=1, so a stalled-job retry that re-processes the
104
+ * same payload re-issues byte-identical tokens and ClickHouse drops the
105
+ * duplicate blocks (on replicated tables; on plain MergeTree the token is
106
+ * ignored unless non_replicated_deduplication_window is set — no harm
107
+ * either way). The chunk counter is per table because one job inserts
108
+ * into several tables (e.g. Span + ExceptionInstance) in a deterministic
109
+ * order.
110
+ *
111
+ * HTTP-path inserts run outside the context and keep the fire-and-forget
112
+ * async insert (wait_for_async_insert=0) — dedup waiting is only
113
+ * affordable off the request thread.
114
+ */
115
+ export interface InsertDedupContextStore {
116
+ tokenBase: string;
117
+ chunkIndexByTable: Map<string, number>;
118
+ }
119
+
120
+ const insertDedupContext: AsyncLocalStorage<InsertDedupContextStore> =
121
+ new AsyncLocalStorage<InsertDedupContextStore>();
122
+
123
+ export function runWithInsertDedup<T>(
124
+ tokenBase: string,
125
+ fn: () => Promise<T>,
126
+ ): Promise<T> {
127
+ return insertDedupContext.run(
128
+ { tokenBase, chunkIndexByTable: new Map<string, number>() },
129
+ fn,
130
+ );
131
+ }
132
+
67
133
  export default class AnalyticsDatabaseService<
68
134
  TBaseModel extends AnalyticsBaseModel,
69
135
  > extends BaseService {
@@ -105,7 +171,20 @@ export default class AnalyticsDatabaseService<
105
171
  }
106
172
 
107
173
  @CaptureSpan()
108
- public async insertJsonRows(rows: Array<JSONObject>): Promise<void> {
174
+ public async insertJsonRows(
175
+ rows: Array<JSONObject>,
176
+ options?: {
177
+ /**
178
+ * Explicit deduplication token for this insert. Overrides the
179
+ * ambient runWithInsertDedup context. Callers must guarantee the
180
+ * token is stable across retries of the same logical insert and
181
+ * unique otherwise.
182
+ */
183
+ dedupToken?: string | undefined;
184
+ /** Extra per-insert ClickHouse settings, merged last. */
185
+ clickhouseSettings?: ClickHouseSettings | undefined;
186
+ },
187
+ ): Promise<void> {
109
188
  if (!rows || rows.length === 0) {
110
189
  return;
111
190
  }
@@ -121,15 +200,51 @@ export default class AnalyticsDatabaseService<
121
200
  );
122
201
  }
123
202
 
203
+ let dedupToken: string | undefined = options?.dedupToken;
204
+
205
+ if (!dedupToken) {
206
+ const dedupStore: InsertDedupContextStore | undefined =
207
+ insertDedupContext.getStore();
208
+ if (dedupStore) {
209
+ const chunkIndex: number =
210
+ dedupStore.chunkIndexByTable.get(tableName) ?? 0;
211
+ dedupStore.chunkIndexByTable.set(tableName, chunkIndex + 1);
212
+ dedupToken = `${dedupStore.tokenBase}:${tableName}:${chunkIndex}`;
213
+ }
214
+ }
215
+
216
+ let clickhouseSettings: ClickHouseSettings = {
217
+ async_insert: 1,
218
+ wait_for_async_insert: 0,
219
+ };
220
+
221
+ if (dedupToken) {
222
+ /*
223
+ * wait_for_async_insert=1 so the worker only acks the job after
224
+ * the block actually landed (or was deduplicated) — otherwise a
225
+ * crash between buffer-write and flush loses data with no retry.
226
+ */
227
+ clickhouseSettings = {
228
+ async_insert: 1,
229
+ wait_for_async_insert: 1,
230
+ async_insert_deduplicate: 1,
231
+ insert_deduplication_token: dedupToken,
232
+ };
233
+ }
234
+
235
+ if (options?.clickhouseSettings) {
236
+ clickhouseSettings = {
237
+ ...clickhouseSettings,
238
+ ...options.clickhouseSettings,
239
+ };
240
+ }
241
+
124
242
  try {
125
243
  await client.insert({
126
244
  table: tableName,
127
245
  values: rows,
128
246
  format: "JSONEachRow",
129
- clickhouse_settings: {
130
- async_insert: 1,
131
- wait_for_async_insert: 0,
132
- },
247
+ clickhouse_settings: clickhouseSettings,
133
248
  });
134
249
 
135
250
  logger.debug(
@@ -441,13 +556,13 @@ export default class AnalyticsDatabaseService<
441
556
  }
442
557
 
443
558
  /**
444
- * Group telemetry rows by (serviceId, serviceType) for a project over a
559
+ * Group telemetry rows by (primaryEntityId, primaryEntityType) for a project over a
445
560
  * time window, returning the row count and an estimate of the ingested
446
561
  * byte size (ClickHouse `byteSize(*)`, the uncompressed in-memory size of
447
562
  * each row's columns). This is the enumeration source for usage billing:
448
563
  * a single aggregation scan surfaces EVERY resource that emitted
449
564
  * telemetry — real Services, Hosts, Docker hosts, Kubernetes clusters,
450
- * Monitors and unattributed (serviceId = projectId) — without needing a
565
+ * Monitors and unattributed (primaryEntityId = projectId) — without needing a
451
566
  * Postgres row per resource. The caller decides which serviceTypes to
452
567
  * bill and how to attribute retention.
453
568
  */
@@ -459,8 +574,8 @@ export default class AnalyticsDatabaseService<
459
574
  endDate: Date;
460
575
  }): Promise<
461
576
  Array<{
462
- serviceId: string;
463
- serviceType: string | null;
577
+ primaryEntityId: string;
578
+ primaryEntityType: string | null;
464
579
  rowCount: number;
465
580
  estimatedBytes: number;
466
581
  }>
@@ -479,7 +594,7 @@ export default class AnalyticsDatabaseService<
479
594
  const databaseName: string =
480
595
  this.database!.getDatasourceOptions().database!;
481
596
 
482
- const statement: Statement = SQL`SELECT serviceId AS serviceId, serviceType AS serviceType, count() AS rowCount, sum(byteSize(*)) AS estimatedBytes FROM ${databaseName}.${this.model.tableName} WHERE projectId = ${{
597
+ const statement: Statement = SQL`SELECT primaryEntityId AS primaryEntityId, primaryEntityType AS primaryEntityType, count() AS rowCount, sum(byteSize(*)) AS estimatedBytes FROM ${databaseName}.${this.model.tableName} WHERE projectId = ${{
483
598
  type: TableColumnType.ObjectID,
484
599
  value: data.projectId,
485
600
  }} AND ${timestampColumnName} >= ${{
@@ -488,11 +603,16 @@ export default class AnalyticsDatabaseService<
488
603
  }} AND ${timestampColumnName} <= ${{
489
604
  type: TableColumnType.DateTime64,
490
605
  value: data.endDate,
491
- }} GROUP BY serviceId, serviceType`;
606
+ }} GROUP BY primaryEntityId, primaryEntityType`;
492
607
 
493
- statement.append(
494
- " SETTINGS max_execution_time = 60, timeout_overflow_mode = 'break'",
495
- );
608
+ /*
609
+ * Billing scan: deliberately NO timeout_overflow_mode='break'. A
610
+ * partial aggregation here silently undercounts usage (rows that
611
+ * weren't scanned before the cap simply never get billed). Failing
612
+ * loudly lets the staging cron retry instead; the cap is raised to
613
+ * compensate for the full-day scan on large projects.
614
+ */
615
+ statement.append(getQuerySettings({ maxExecutionTimeInSeconds: 120 }));
496
616
 
497
617
  const dbResult: ResultSet<"JSON"> = await this.executeQuery(statement);
498
618
  const responseJSON: ResponseJSON<JSONObject> =
@@ -500,25 +620,25 @@ export default class AnalyticsDatabaseService<
500
620
  const items: Array<JSONObject> = responseJSON.data ? responseJSON.data : [];
501
621
 
502
622
  const results: Array<{
503
- serviceId: string;
504
- serviceType: string | null;
623
+ primaryEntityId: string;
624
+ primaryEntityType: string | null;
505
625
  rowCount: number;
506
626
  estimatedBytes: number;
507
627
  }> = [];
508
628
 
509
629
  for (const item of items) {
510
- const serviceId: string = (item["serviceId"] as string) || "";
511
- if (!serviceId) {
630
+ const primaryEntityId: string = (item["primaryEntityId"] as string) || "";
631
+ if (!primaryEntityId) {
512
632
  continue;
513
633
  }
514
- const serviceTypeRaw: unknown = item["serviceType"];
515
- const serviceType: string | null =
634
+ const serviceTypeRaw: unknown = item["primaryEntityType"];
635
+ const primaryEntityType: string | null =
516
636
  typeof serviceTypeRaw === "string" && serviceTypeRaw.trim()
517
637
  ? serviceTypeRaw
518
638
  : null;
519
639
  results.push({
520
- serviceId,
521
- serviceType,
640
+ primaryEntityId,
641
+ primaryEntityType,
522
642
  rowCount: Number(item["rowCount"]) || 0,
523
643
  estimatedBytes: Number(item["estimatedBytes"]) || 0,
524
644
  });
@@ -847,6 +967,25 @@ export default class AnalyticsDatabaseService<
847
967
  return Promise.resolve({ findBy, carryForward: null });
848
968
  }
849
969
 
970
+ /**
971
+ * Read-side retention filter. TTL is `retentionDate DELETE` with
972
+ * ttl_only_drop_parts=1, so a part survives until EVERY row in it has
973
+ * expired — rows past their per-service retention stay on disk (and
974
+ * were queryable) for up to a partition's worth of extra time. For
975
+ * models that carry a retentionDate column, every centrally generated
976
+ * read appends this predicate so expired rows become invisible the
977
+ * moment they expire rather than when their part finally drops.
978
+ *
979
+ * Returns the raw SQL fragment (server-evaluated now(), no parameter)
980
+ * or "" when the model has no retentionDate column.
981
+ */
982
+ protected getRetentionReadFilter(): string {
983
+ if (!this.model.getTableColumn("retentionDate")) {
984
+ return "";
985
+ }
986
+ return " AND retentionDate >= now()";
987
+ }
988
+
850
989
  public toCountStatement(countBy: CountBy<TBaseModel>): Statement {
851
990
  if (!this.database) {
852
991
  this.useDefaultDatabase();
@@ -877,7 +1016,8 @@ export default class AnalyticsDatabaseService<
877
1016
  FROM ${databaseName}.${this.model.tableName}
878
1017
  WHERE TRUE `
879
1018
  )
880
- .append(whereStatement);
1019
+ .append(whereStatement)
1020
+ .append(this.getRetentionReadFilter());
881
1021
 
882
1022
  if (countBy.limit) {
883
1023
  statement.append(SQL`
@@ -906,7 +1046,10 @@ export default class AnalyticsDatabaseService<
906
1046
  * throwing, which is acceptable for pagination display.
907
1047
  */
908
1048
  statement.append(
909
- " SETTINGS max_execution_time = 45, timeout_overflow_mode = 'break'",
1049
+ getQuerySettings({
1050
+ maxExecutionTimeInSeconds: 45,
1051
+ timeoutOverflowMode: "break",
1052
+ }),
910
1053
  );
911
1054
 
912
1055
  logger.debug(`${this.model.tableName} Count Statement`, { tableName: this.model.tableName } as LogAttributes);
@@ -941,11 +1084,13 @@ export default class AnalyticsDatabaseService<
941
1084
  const statement: Statement = SQL`
942
1085
  SELECT 1 as existsFlag
943
1086
  FROM ${databaseName}.${this.model.tableName}
944
- WHERE TRUE `.append(whereStatement);
1087
+ WHERE TRUE `
1088
+ .append(whereStatement)
1089
+ .append(this.getRetentionReadFilter());
945
1090
 
946
1091
  statement.append(SQL` LIMIT 1`);
947
1092
 
948
- statement.append(" SETTINGS max_execution_time = 45");
1093
+ statement.append(getQuerySettings({ maxExecutionTimeInSeconds: 45 }));
949
1094
 
950
1095
  logger.debug(`${this.model.tableName} Exists Statement`, { tableName: this.model.tableName } as LogAttributes);
951
1096
  logger.debug(statement, { tableName: this.model.tableName } as LogAttributes);
@@ -978,7 +1123,10 @@ export default class AnalyticsDatabaseService<
978
1123
 
979
1124
  statement.append(SQL`SELECT `.append(select.statement));
980
1125
  statement.append(SQL` FROM ${databaseName}.${this.model.tableName}`);
981
- statement.append(SQL` WHERE TRUE `).append(whereStatement);
1126
+ statement
1127
+ .append(SQL` WHERE TRUE `)
1128
+ .append(whereStatement)
1129
+ .append(this.getRetentionReadFilter());
982
1130
 
983
1131
  statement
984
1132
  .append(SQL` GROUP BY `)
@@ -1025,7 +1173,13 @@ export default class AnalyticsDatabaseService<
1025
1173
  * ranges, but cluster headroom is preserved under burst.
1026
1174
  */
1027
1175
  statement.append(
1028
- ` SETTINGS optimize_aggregation_in_order=1, optimize_move_to_prewhere=1, max_threads=4`,
1176
+ getQuerySettings({
1177
+ additionalSettings: {
1178
+ optimize_aggregation_in_order: 1,
1179
+ optimize_move_to_prewhere: 1,
1180
+ max_threads: 4,
1181
+ },
1182
+ }),
1029
1183
  );
1030
1184
 
1031
1185
  logger.debug(`${this.model.tableName} Aggregate Statement`, { tableName: this.model.tableName } as LogAttributes);
@@ -1071,7 +1225,10 @@ export default class AnalyticsDatabaseService<
1071
1225
 
1072
1226
  statement.append(SQL`SELECT `.append(select.statement));
1073
1227
  statement.append(SQL` FROM ${databaseName}.${this.model.tableName}`);
1074
- statement.append(SQL` WHERE TRUE `).append(whereStatement);
1228
+ statement
1229
+ .append(SQL` WHERE TRUE `)
1230
+ .append(whereStatement)
1231
+ .append(this.getRetentionReadFilter());
1075
1232
 
1076
1233
  if (groupByStatement) {
1077
1234
  statement.append(SQL` GROUP BY `).append(groupByStatement);
@@ -1100,7 +1257,10 @@ export default class AnalyticsDatabaseService<
1100
1257
  * partial results rather than throwing.
1101
1258
  */
1102
1259
  statement.append(
1103
- " SETTINGS max_execution_time = 45, timeout_overflow_mode = 'break'",
1260
+ getQuerySettings({
1261
+ maxExecutionTimeInSeconds: 45,
1262
+ timeoutOverflowMode: "break",
1263
+ }),
1104
1264
  );
1105
1265
 
1106
1266
  logger.debug(`${this.model.tableName} Find Statement`, { tableName: this.model.tableName } as LogAttributes);
@@ -1276,7 +1436,8 @@ export default class AnalyticsDatabaseService<
1276
1436
 
1277
1437
  @CaptureSpan()
1278
1438
  public async execute(
1279
- statement: Statement | string
1439
+ statement: Statement | string,
1440
+ options?: ClickhouseExecuteOptions
1280
1441
  ): Promise<ExecResult<Stream>> {
1281
1442
  const client: ClickhouseClient = this.getDatabaseClient();
1282
1443
 
@@ -1288,12 +1449,17 @@ export default class AnalyticsDatabaseService<
1288
1449
  return (await client.exec({
1289
1450
  query: query,
1290
1451
  query_params: queryParams || (undefined as any), // undefined is not specified in the type for query_params, but its ok to pass undefined.
1452
+ ...(options?.clickhouseSettings
1453
+ ? { clickhouse_settings: options.clickhouseSettings }
1454
+ : {}),
1455
+ ...(options?.queryId ? { query_id: options.queryId } : {}),
1291
1456
  })) as ExecResult<Stream>;
1292
1457
  }
1293
1458
 
1294
1459
  @CaptureSpan()
1295
1460
  public async executeQuery(
1296
- statement: Statement | string
1461
+ statement: Statement | string,
1462
+ options?: ClickhouseExecuteOptions
1297
1463
  ): Promise<ResultSet<"JSON">> {
1298
1464
  const client: ClickhouseClient = this.getDatabaseClient();
1299
1465
 
@@ -1306,6 +1472,10 @@ export default class AnalyticsDatabaseService<
1306
1472
  query: query,
1307
1473
  format: "JSON",
1308
1474
  query_params: queryParams || (undefined as any), // undefined is not specified in the type for query_params, but its ok to pass undefined.
1475
+ ...(options?.clickhouseSettings
1476
+ ? { clickhouse_settings: options.clickhouseSettings }
1477
+ : {}),
1478
+ ...(options?.queryId ? { query_id: options.queryId } : {}),
1309
1479
  });
1310
1480
  }
1311
1481
 
@@ -1599,11 +1769,10 @@ export default class AnalyticsDatabaseService<
1599
1769
  data: TBaseModel
1600
1770
  ): TBaseModel {
1601
1771
  if (!data.id) {
1602
- data.id = ObjectID.generate();
1772
+ data.id = ObjectID.generateTimeOrdered();
1603
1773
  }
1604
1774
 
1605
1775
  data.createdAt = OneUptimeDate.getCurrentDate();
1606
- data.updatedAt = OneUptimeDate.getCurrentDate();
1607
1776
 
1608
1777
  return data;
1609
1778
  }
@@ -1,4 +1,5 @@
1
1
  import { SQL, Statement } from "../Utils/AnalyticsDatabase/Statement";
2
+ import { getQuerySettings } from "../Utils/AnalyticsDatabase/QuerySettingsHelper";
2
3
  import ExceptionInstanceService from "./ExceptionInstanceService";
3
4
  import TableColumnType from "../../Types/AnalyticsDatabase/TableColumnType";
4
5
  import { JSONObject } from "../../Types/JSON";
@@ -52,7 +53,7 @@ export class ExceptionAggregationService {
52
53
  private static readonly TABLE_NAME: string =
53
54
  AnalyticsTableName.ExceptionInstance;
54
55
  private static readonly TOP_LEVEL_COLUMNS: Set<string> = new Set([
55
- "serviceId",
56
+ "primaryEntityId",
56
57
  "exceptionType",
57
58
  "environment",
58
59
  "fingerprint",
@@ -63,8 +64,8 @@ export class ExceptionAggregationService {
63
64
  ]);
64
65
  /*
65
66
  * Virtual facet keys — same scheme as TraceAggregationService /
66
- * LogAggregationService. The `serviceId` slot is reused for host /
67
- * docker host / k8s cluster ids, disambiguated by the `serviceType`
67
+ * LogAggregationService. The `primaryEntityId` slot is reused for host /
68
+ * docker host / k8s cluster ids, disambiguated by the `primaryEntityType`
68
69
  * discriminator column on each ExceptionInstance row.
69
70
  */
70
71
  private static readonly RESOURCE_FACET_KEYS: Map<string, ServiceType> =
@@ -164,6 +165,14 @@ export class ExceptionAggregationService {
164
165
  }}
165
166
  `;
166
167
 
168
+ /*
169
+ * Read-side retention filter: rows past their per-service retention
170
+ * stay in their part until the whole part drops (ttl_only_drop_parts).
171
+ * Raw `time` predicates already make these queries ineligible for the
172
+ * proj_exception_group projection, so the extra predicate is free.
173
+ */
174
+ statement.append(" AND retentionDate >= now()");
175
+
167
176
  ExceptionAggregationService.appendCommonFilters(statement, request);
168
177
 
169
178
  statement.append(" GROUP BY bucket, escaped ORDER BY bucket ASC");
@@ -174,13 +183,21 @@ export class ExceptionAggregationService {
174
183
  * rather than throwing, which is acceptable for a density viz.
175
184
  */
176
185
  statement.append(
177
- " SETTINGS max_execution_time = 45, timeout_overflow_mode = 'break'",
186
+ getQuerySettings({
187
+ maxExecutionTimeInSeconds: 45,
188
+ timeoutOverflowMode: "break",
189
+ }),
178
190
  );
179
191
 
180
192
  return statement;
181
193
  }
182
194
 
183
195
  private static buildFacetStatement(request: FacetRequest): Statement {
196
+ // Pre-rename alias from stale clients; the V3 column is primaryEntityId.
197
+ if (request.facetKey === "serviceId") {
198
+ request.facetKey = "primaryEntityId";
199
+ }
200
+
184
201
  const limit: number =
185
202
  request.limit ?? ExceptionAggregationService.DEFAULT_FACET_LIMIT;
186
203
 
@@ -197,11 +214,12 @@ export class ExceptionAggregationService {
197
214
 
198
215
  if (isResourceFacet) {
199
216
  /*
200
- * Virtual facet — group serviceId values whose row carries the matching
201
- * ServiceType discriminator (Host / DockerHost / KubernetesCluster).
217
+ * Virtual facet — group primaryEntityId values whose row carries the
218
+ * matching ServiceType discriminator (Host / DockerHost /
219
+ * KubernetesCluster).
202
220
  */
203
221
  statement.append(
204
- SQL`SELECT toString(serviceId) AS val, count() AS cnt FROM ${ExceptionAggregationService.TABLE_NAME}`,
222
+ SQL`SELECT toString(primaryEntityId) AS val, count() AS cnt FROM ${ExceptionAggregationService.TABLE_NAME}`,
205
223
  );
206
224
  } else if (isTopLevelColumn) {
207
225
  statement.append(
@@ -209,10 +227,10 @@ export class ExceptionAggregationService {
209
227
  );
210
228
  } else {
211
229
  statement.append(
212
- SQL`SELECT JSONExtractRaw(attributes, ${{
230
+ SQL`SELECT attributes[${{
213
231
  type: TableColumnType.Text,
214
232
  value: request.facetKey,
215
- }}) AS val, count() AS cnt FROM ${ExceptionAggregationService.TABLE_NAME}`,
233
+ }}] AS val, count() AS cnt FROM ${ExceptionAggregationService.TABLE_NAME}`,
216
234
  );
217
235
  }
218
236
 
@@ -231,32 +249,34 @@ export class ExceptionAggregationService {
231
249
 
232
250
  if (isResourceFacet) {
233
251
  statement.append(
234
- SQL` AND serviceType = ${{
252
+ SQL` AND primaryEntityType = ${{
235
253
  type: TableColumnType.Text,
236
254
  value: resourceServiceType as string,
237
255
  }}`,
238
256
  );
239
- } else if (request.facetKey === "serviceId") {
257
+ } else if (request.facetKey === "primaryEntityId") {
240
258
  /*
241
259
  * Constrain the canonical Services facet to rows that actually
242
- * belong to a Service. NULL / empty serviceType covers legacy rows
243
- * ingested before the discriminator existed.
260
+ * belong to a Service. NULL / empty primaryEntityType covers legacy
261
+ * rows ingested before the discriminator existed.
244
262
  */
245
263
  statement.append(
246
- SQL` AND (serviceType = '' OR serviceType = ${{
264
+ SQL` AND (primaryEntityType = '' OR primaryEntityType = ${{
247
265
  type: TableColumnType.Text,
248
266
  value: ServiceType.OpenTelemetry as string,
249
267
  }})`,
250
268
  );
251
269
  } else if (!isTopLevelColumn) {
252
270
  statement.append(
253
- SQL` AND JSONHas(attributes, ${{
271
+ SQL` AND mapContains(attributes, ${{
254
272
  type: TableColumnType.Text,
255
273
  value: request.facetKey,
256
- }}) = 1`,
274
+ }})`,
257
275
  );
258
276
  }
259
277
 
278
+ statement.append(" AND retentionDate >= now()");
279
+
260
280
  ExceptionAggregationService.appendCommonFilters(statement, request);
261
281
 
262
282
  statement.append(
@@ -271,7 +291,10 @@ export class ExceptionAggregationService {
271
291
  * 60s proxy_read_timeout so a slow facet never starves the endpoint.
272
292
  */
273
293
  statement.append(
274
- " SETTINGS max_execution_time = 45, timeout_overflow_mode = 'break'",
294
+ getQuerySettings({
295
+ maxExecutionTimeInSeconds: 45,
296
+ timeoutOverflowMode: "break",
297
+ }),
275
298
  );
276
299
 
277
300
  return statement;
@@ -283,7 +306,7 @@ export class ExceptionAggregationService {
283
306
  ): void {
284
307
  if (request.serviceIds && request.serviceIds.length > 0) {
285
308
  statement.append(
286
- SQL` AND serviceId IN (${{
309
+ SQL` AND primaryEntityId IN (${{
287
310
  type: TableColumnType.ObjectID,
288
311
  value: new Includes(
289
312
  request.serviceIds.map((id: ObjectID) => {
@@ -11,6 +11,7 @@ import OneUptimeDate from "../../Types/Date";
11
11
  import LIMIT_MAX from "../../Types/Database/LimitMax";
12
12
  import GlobalCache from "../Infrastructure/GlobalCache";
13
13
  import logger, { LogAttributes } from "../Utils/Logger";
14
+ import { canonicalizeEntityValue } from "../../Utils/Telemetry/EntityKey";
14
15
  import crypto from "crypto";
15
16
 
16
17
  const LAST_SEEN_CACHE_NAMESPACE: string = "host-last-seen";
@@ -71,7 +72,7 @@ export class Service extends DatabaseService<Model> {
71
72
  * host.name (OtelIngestBaseService.normalizeHostNameAttributesInPlace);
72
73
  * we repeat it here so the method is correct for any caller.
73
74
  */
74
- const hostIdentifier: string = data.hostIdentifier.trim().toLowerCase();
75
+ const hostIdentifier: string = canonicalizeEntityValue(data.hostIdentifier);
75
76
 
76
77
  /*
77
78
  * Look up case-insensitively. The unique guard on name/hostIdentifier