@oneuptime/common 10.7.2 → 10.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. package/Models/DatabaseModels/CloudResource.ts +846 -0
  2. package/Models/DatabaseModels/CloudResourceInstance.ts +276 -0
  3. package/Models/DatabaseModels/CloudResourceLabelRule.ts +510 -0
  4. package/Models/DatabaseModels/CloudResourceOwnerRule.ts +592 -0
  5. package/Models/DatabaseModels/CloudResourceOwnerTeam.ts +487 -0
  6. package/Models/DatabaseModels/CloudResourceOwnerUser.ts +486 -0
  7. package/Models/DatabaseModels/Host.ts +209 -0
  8. package/Models/DatabaseModels/Index.ts +36 -0
  9. package/Models/DatabaseModels/RumApplication.ts +731 -0
  10. package/Models/DatabaseModels/RumApplicationClient.ts +229 -0
  11. package/Models/DatabaseModels/RumApplicationLabelRule.ts +510 -0
  12. package/Models/DatabaseModels/RumApplicationOwnerRule.ts +592 -0
  13. package/Models/DatabaseModels/RumApplicationOwnerTeam.ts +486 -0
  14. package/Models/DatabaseModels/RumApplicationOwnerUser.ts +485 -0
  15. package/Models/DatabaseModels/ServerlessFunction.ts +881 -0
  16. package/Models/DatabaseModels/ServerlessFunctionInstance.ts +212 -0
  17. package/Models/DatabaseModels/ServerlessFunctionLabelRule.ts +510 -0
  18. package/Models/DatabaseModels/ServerlessFunctionOwnerRule.ts +592 -0
  19. package/Models/DatabaseModels/ServerlessFunctionOwnerTeam.ts +487 -0
  20. package/Models/DatabaseModels/ServerlessFunctionOwnerUser.ts +486 -0
  21. package/Models/DatabaseModels/Service.ts +268 -0
  22. package/Models/DatabaseModels/TelemetryException.ts +15 -1
  23. package/Models/DatabaseModels/WorkflowLog.ts +52 -0
  24. package/Server/API/TelemetryAPI.ts +78 -25
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/1780931746908-AddResumeStateToWorkflowLog.ts +21 -0
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/1780931863719-AddTelemetryResourceMetadataColumns.ts +108 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/1780933132562-AddServerlessFunctionTables.ts +205 -0
  28. package/Server/Infrastructure/Postgres/SchemaMigrations/1780935387827-AddCloudResourceTables.ts +195 -0
  29. package/Server/Infrastructure/Postgres/SchemaMigrations/1780936579718-AddRumApplicationTables.ts +202 -0
  30. package/Server/Infrastructure/Postgres/SchemaMigrations/1780938407319-AddServerlessFunctionRuleTables.ts +156 -0
  31. package/Server/Infrastructure/Postgres/SchemaMigrations/1780940721814-AddCloudResourceRuleTables.ts +149 -0
  32. package/Server/Infrastructure/Postgres/SchemaMigrations/1780940998002-AddRumApplicationRuleTables.ts +149 -0
  33. package/Server/Infrastructure/Postgres/SchemaMigrations/1780941762204-AddTelemetryResourceInventoryTables.ts +95 -0
  34. package/Server/Infrastructure/Postgres/SchemaMigrations/1780985763463-AddRumApplicationSdkLanguage.ts +25 -0
  35. package/Server/Infrastructure/Postgres/SchemaMigrations/1780987192743-RecastCloudResourcesByEnvironment.ts +30 -0
  36. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +22 -0
  37. package/Server/Infrastructure/Queue.ts +11 -0
  38. package/Server/Services/CloudResourceInstanceService.ts +76 -0
  39. package/Server/Services/CloudResourceLabelRuleEngineService.ts +175 -0
  40. package/Server/Services/CloudResourceLabelRuleService.ts +14 -0
  41. package/Server/Services/CloudResourceOwnerRuleEngineService.ts +192 -0
  42. package/Server/Services/CloudResourceOwnerRuleService.ts +14 -0
  43. package/Server/Services/CloudResourceOwnerTeamService.ts +10 -0
  44. package/Server/Services/CloudResourceOwnerUserService.ts +10 -0
  45. package/Server/Services/CloudResourceService.ts +342 -0
  46. package/Server/Services/ExceptionAggregationService.ts +3 -0
  47. package/Server/Services/HostService.ts +42 -0
  48. package/Server/Services/LogAggregationService.ts +44 -16
  49. package/Server/Services/MetricAggregationService.ts +3 -0
  50. package/Server/Services/OpenTelemetryIngestService.ts +148 -1
  51. package/Server/Services/RumApplicationClientService.ts +69 -0
  52. package/Server/Services/RumApplicationLabelRuleEngineService.ts +175 -0
  53. package/Server/Services/RumApplicationLabelRuleService.ts +14 -0
  54. package/Server/Services/RumApplicationOwnerRuleEngineService.ts +192 -0
  55. package/Server/Services/RumApplicationOwnerRuleService.ts +14 -0
  56. package/Server/Services/RumApplicationOwnerTeamService.ts +10 -0
  57. package/Server/Services/RumApplicationOwnerUserService.ts +10 -0
  58. package/Server/Services/RumApplicationService.ts +301 -0
  59. package/Server/Services/ServerlessFunctionInstanceService.ts +61 -0
  60. package/Server/Services/ServerlessFunctionLabelRuleEngineService.ts +182 -0
  61. package/Server/Services/ServerlessFunctionLabelRuleService.ts +14 -0
  62. package/Server/Services/ServerlessFunctionOwnerRuleEngineService.ts +199 -0
  63. package/Server/Services/ServerlessFunctionOwnerRuleService.ts +14 -0
  64. package/Server/Services/ServerlessFunctionOwnerTeamService.ts +10 -0
  65. package/Server/Services/ServerlessFunctionOwnerUserService.ts +10 -0
  66. package/Server/Services/ServerlessFunctionService.ts +351 -0
  67. package/Server/Services/ServiceService.ts +95 -8
  68. package/Server/Services/TraceAggregationService.ts +131 -4
  69. package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +39 -0
  70. package/Server/Types/Workflow/ComponentCode.ts +9 -0
  71. package/Server/Types/Workflow/Components/Index.ts +2 -0
  72. package/Server/Types/Workflow/Components/Sleep.ts +105 -0
  73. package/Server/Types/Workflow/Workflow.ts +6 -0
  74. package/Server/Utils/Telemetry/ResourceFacetResolver.ts +150 -0
  75. package/Types/Permission.ts +692 -1
  76. package/Types/Telemetry/ServiceType.ts +3 -0
  77. package/Types/Workflow/ComponentID.ts +1 -0
  78. package/Types/Workflow/Components/Sleep.ts +71 -0
  79. package/Types/Workflow/Components.ts +2 -0
  80. package/Types/Workflow/WorkflowStatus.ts +1 -0
  81. package/UI/Components/BulkUpdate/BulkLabelActions.tsx +159 -32
  82. package/UI/Components/Navbar/NavBar.tsx +72 -123
  83. package/UI/Components/Navbar/NavBarMenuModal.tsx +642 -0
  84. package/UI/Components/Workflow/WorkflowStatus.tsx +3 -0
  85. package/build/dist/Models/DatabaseModels/CloudResource.js +871 -0
  86. package/build/dist/Models/DatabaseModels/CloudResource.js.map +1 -0
  87. package/build/dist/Models/DatabaseModels/CloudResourceInstance.js +300 -0
  88. package/build/dist/Models/DatabaseModels/CloudResourceInstance.js.map +1 -0
  89. package/build/dist/Models/DatabaseModels/CloudResourceLabelRule.js +520 -0
  90. package/build/dist/Models/DatabaseModels/CloudResourceLabelRule.js.map +1 -0
  91. package/build/dist/Models/DatabaseModels/CloudResourceOwnerRule.js +601 -0
  92. package/build/dist/Models/DatabaseModels/CloudResourceOwnerRule.js.map +1 -0
  93. package/build/dist/Models/DatabaseModels/CloudResourceOwnerTeam.js +503 -0
  94. package/build/dist/Models/DatabaseModels/CloudResourceOwnerTeam.js.map +1 -0
  95. package/build/dist/Models/DatabaseModels/CloudResourceOwnerUser.js +502 -0
  96. package/build/dist/Models/DatabaseModels/CloudResourceOwnerUser.js.map +1 -0
  97. package/build/dist/Models/DatabaseModels/Host.js +215 -0
  98. package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
  99. package/build/dist/Models/DatabaseModels/Index.js +36 -0
  100. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  101. package/build/dist/Models/DatabaseModels/RumApplication.js +751 -0
  102. package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -0
  103. package/build/dist/Models/DatabaseModels/RumApplicationClient.js +252 -0
  104. package/build/dist/Models/DatabaseModels/RumApplicationClient.js.map +1 -0
  105. package/build/dist/Models/DatabaseModels/RumApplicationLabelRule.js +520 -0
  106. package/build/dist/Models/DatabaseModels/RumApplicationLabelRule.js.map +1 -0
  107. package/build/dist/Models/DatabaseModels/RumApplicationOwnerRule.js +601 -0
  108. package/build/dist/Models/DatabaseModels/RumApplicationOwnerRule.js.map +1 -0
  109. package/build/dist/Models/DatabaseModels/RumApplicationOwnerTeam.js +503 -0
  110. package/build/dist/Models/DatabaseModels/RumApplicationOwnerTeam.js.map +1 -0
  111. package/build/dist/Models/DatabaseModels/RumApplicationOwnerUser.js +502 -0
  112. package/build/dist/Models/DatabaseModels/RumApplicationOwnerUser.js.map +1 -0
  113. package/build/dist/Models/DatabaseModels/ServerlessFunction.js +908 -0
  114. package/build/dist/Models/DatabaseModels/ServerlessFunction.js.map +1 -0
  115. package/build/dist/Models/DatabaseModels/ServerlessFunctionInstance.js +234 -0
  116. package/build/dist/Models/DatabaseModels/ServerlessFunctionInstance.js.map +1 -0
  117. package/build/dist/Models/DatabaseModels/ServerlessFunctionLabelRule.js +520 -0
  118. package/build/dist/Models/DatabaseModels/ServerlessFunctionLabelRule.js.map +1 -0
  119. package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerRule.js +601 -0
  120. package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerRule.js.map +1 -0
  121. package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerTeam.js +503 -0
  122. package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerTeam.js.map +1 -0
  123. package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerUser.js +502 -0
  124. package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerUser.js.map +1 -0
  125. package/build/dist/Models/DatabaseModels/Service.js +276 -0
  126. package/build/dist/Models/DatabaseModels/Service.js.map +1 -1
  127. package/build/dist/Models/DatabaseModels/TelemetryException.js +12 -1
  128. package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
  129. package/build/dist/Models/DatabaseModels/WorkflowLog.js +53 -0
  130. package/build/dist/Models/DatabaseModels/WorkflowLog.js.map +1 -1
  131. package/build/dist/Server/API/TelemetryAPI.js +61 -23
  132. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  133. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780931746908-AddResumeStateToWorkflowLog.js +14 -0
  134. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780931746908-AddResumeStateToWorkflowLog.js.map +1 -0
  135. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780931863719-AddTelemetryResourceMetadataColumns.js +53 -0
  136. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780931863719-AddTelemetryResourceMetadataColumns.js.map +1 -0
  137. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780933132562-AddServerlessFunctionTables.js +82 -0
  138. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780933132562-AddServerlessFunctionTables.js.map +1 -0
  139. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780935387827-AddCloudResourceTables.js +82 -0
  140. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780935387827-AddCloudResourceTables.js.map +1 -0
  141. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780936579718-AddRumApplicationTables.js +83 -0
  142. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780936579718-AddRumApplicationTables.js.map +1 -0
  143. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780938407319-AddServerlessFunctionRuleTables.js +67 -0
  144. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780938407319-AddServerlessFunctionRuleTables.js.map +1 -0
  145. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780940721814-AddCloudResourceRuleTables.js +60 -0
  146. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780940721814-AddCloudResourceRuleTables.js.map +1 -0
  147. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780940998002-AddRumApplicationRuleTables.js +60 -0
  148. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780940998002-AddRumApplicationRuleTables.js.map +1 -0
  149. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780941762204-AddTelemetryResourceInventoryTables.js +45 -0
  150. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780941762204-AddTelemetryResourceInventoryTables.js.map +1 -0
  151. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780985763463-AddRumApplicationSdkLanguage.js +18 -0
  152. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780985763463-AddRumApplicationSdkLanguage.js.map +1 -0
  153. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780987192743-RecastCloudResourcesByEnvironment.js +27 -0
  154. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780987192743-RecastCloudResourcesByEnvironment.js.map +1 -0
  155. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +22 -0
  156. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  157. package/build/dist/Server/Infrastructure/Queue.js +3 -0
  158. package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
  159. package/build/dist/Server/Services/CloudResourceInstanceService.js +76 -0
  160. package/build/dist/Server/Services/CloudResourceInstanceService.js.map +1 -0
  161. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +160 -0
  162. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -0
  163. package/build/dist/Server/Services/CloudResourceLabelRuleService.js +13 -0
  164. package/build/dist/Server/Services/CloudResourceLabelRuleService.js.map +1 -0
  165. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +179 -0
  166. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -0
  167. package/build/dist/Server/Services/CloudResourceOwnerRuleService.js +13 -0
  168. package/build/dist/Server/Services/CloudResourceOwnerRuleService.js.map +1 -0
  169. package/build/dist/Server/Services/CloudResourceOwnerTeamService.js +9 -0
  170. package/build/dist/Server/Services/CloudResourceOwnerTeamService.js.map +1 -0
  171. package/build/dist/Server/Services/CloudResourceOwnerUserService.js +9 -0
  172. package/build/dist/Server/Services/CloudResourceOwnerUserService.js.map +1 -0
  173. package/build/dist/Server/Services/CloudResourceService.js +287 -0
  174. package/build/dist/Server/Services/CloudResourceService.js.map +1 -0
  175. package/build/dist/Server/Services/ExceptionAggregationService.js +3 -0
  176. package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
  177. package/build/dist/Server/Services/HostService.js +29 -1
  178. package/build/dist/Server/Services/HostService.js.map +1 -1
  179. package/build/dist/Server/Services/LogAggregationService.js +36 -10
  180. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  181. package/build/dist/Server/Services/MetricAggregationService.js +3 -0
  182. package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
  183. package/build/dist/Server/Services/OpenTelemetryIngestService.js +98 -2
  184. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  185. package/build/dist/Server/Services/RumApplicationClientService.js +70 -0
  186. package/build/dist/Server/Services/RumApplicationClientService.js.map +1 -0
  187. package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js +160 -0
  188. package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js.map +1 -0
  189. package/build/dist/Server/Services/RumApplicationLabelRuleService.js +13 -0
  190. package/build/dist/Server/Services/RumApplicationLabelRuleService.js.map +1 -0
  191. package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js +179 -0
  192. package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js.map +1 -0
  193. package/build/dist/Server/Services/RumApplicationOwnerRuleService.js +13 -0
  194. package/build/dist/Server/Services/RumApplicationOwnerRuleService.js.map +1 -0
  195. package/build/dist/Server/Services/RumApplicationOwnerTeamService.js +9 -0
  196. package/build/dist/Server/Services/RumApplicationOwnerTeamService.js.map +1 -0
  197. package/build/dist/Server/Services/RumApplicationOwnerUserService.js +9 -0
  198. package/build/dist/Server/Services/RumApplicationOwnerUserService.js.map +1 -0
  199. package/build/dist/Server/Services/RumApplicationService.js +259 -0
  200. package/build/dist/Server/Services/RumApplicationService.js.map +1 -0
  201. package/build/dist/Server/Services/ServerlessFunctionInstanceService.js +64 -0
  202. package/build/dist/Server/Services/ServerlessFunctionInstanceService.js.map +1 -0
  203. package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js +160 -0
  204. package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js.map +1 -0
  205. package/build/dist/Server/Services/ServerlessFunctionLabelRuleService.js +13 -0
  206. package/build/dist/Server/Services/ServerlessFunctionLabelRuleService.js.map +1 -0
  207. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js +179 -0
  208. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js.map +1 -0
  209. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleService.js +13 -0
  210. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleService.js.map +1 -0
  211. package/build/dist/Server/Services/ServerlessFunctionOwnerTeamService.js +9 -0
  212. package/build/dist/Server/Services/ServerlessFunctionOwnerTeamService.js.map +1 -0
  213. package/build/dist/Server/Services/ServerlessFunctionOwnerUserService.js +9 -0
  214. package/build/dist/Server/Services/ServerlessFunctionOwnerUserService.js.map +1 -0
  215. package/build/dist/Server/Services/ServerlessFunctionService.js +299 -0
  216. package/build/dist/Server/Services/ServerlessFunctionService.js.map +1 -0
  217. package/build/dist/Server/Services/ServiceService.js +63 -7
  218. package/build/dist/Server/Services/ServiceService.js.map +1 -1
  219. package/build/dist/Server/Services/TraceAggregationService.js +108 -4
  220. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  221. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +39 -0
  222. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
  223. package/build/dist/Server/Types/Workflow/ComponentCode.js.map +1 -1
  224. package/build/dist/Server/Types/Workflow/Components/Index.js +2 -0
  225. package/build/dist/Server/Types/Workflow/Components/Index.js.map +1 -1
  226. package/build/dist/Server/Types/Workflow/Components/Sleep.js +85 -0
  227. package/build/dist/Server/Types/Workflow/Components/Sleep.js.map +1 -0
  228. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js +90 -0
  229. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js.map +1 -1
  230. package/build/dist/Types/Permission.js +609 -1
  231. package/build/dist/Types/Permission.js.map +1 -1
  232. package/build/dist/Types/Telemetry/ServiceType.js +3 -0
  233. package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
  234. package/build/dist/Types/Workflow/ComponentID.js +1 -0
  235. package/build/dist/Types/Workflow/ComponentID.js.map +1 -1
  236. package/build/dist/Types/Workflow/Components/Sleep.js +64 -0
  237. package/build/dist/Types/Workflow/Components/Sleep.js.map +1 -0
  238. package/build/dist/Types/Workflow/Components.js +2 -0
  239. package/build/dist/Types/Workflow/Components.js.map +1 -1
  240. package/build/dist/Types/Workflow/WorkflowStatus.js +1 -0
  241. package/build/dist/Types/Workflow/WorkflowStatus.js.map +1 -1
  242. package/build/dist/UI/Components/BulkUpdate/BulkLabelActions.js +113 -19
  243. package/build/dist/UI/Components/BulkUpdate/BulkLabelActions.js.map +1 -1
  244. package/build/dist/UI/Components/Navbar/NavBar.js +34 -66
  245. package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
  246. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +412 -0
  247. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -0
  248. package/build/dist/UI/Components/Workflow/WorkflowStatus.js +3 -0
  249. package/build/dist/UI/Components/Workflow/WorkflowStatus.js.map +1 -1
  250. package/package.json +1 -1
  251. package/UI/Components/Navbar/NavBarMenu.tsx +0 -183
  252. package/UI/Components/Navbar/NavBarMenuItem.tsx +0 -146
  253. package/build/dist/UI/Components/Navbar/NavBarMenu.js +0 -82
  254. package/build/dist/UI/Components/Navbar/NavBarMenu.js.map +0 -1
  255. package/build/dist/UI/Components/Navbar/NavBarMenuItem.js +0 -109
  256. package/build/dist/UI/Components/Navbar/NavBarMenuItem.js.map +0 -1
@@ -0,0 +1,299 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import DatabaseService from "./DatabaseService";
11
+ import Model from "../../Models/DatabaseModels/ServerlessFunction";
12
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
13
+ import ObjectID from "../../Types/ObjectID";
14
+ import QueryHelper from "../Types/Database/QueryHelper";
15
+ import OneUptimeDate from "../../Types/Date";
16
+ import LIMIT_MAX from "../../Types/Database/LimitMax";
17
+ import GlobalCache from "../Infrastructure/GlobalCache";
18
+ import logger from "../Utils/Logger";
19
+ import crypto from "crypto";
20
+ import ServerlessFunctionLabelRuleEngineService from "./ServerlessFunctionLabelRuleEngineService";
21
+ import ServerlessFunctionOwnerRuleEngineService from "./ServerlessFunctionOwnerRuleEngineService";
22
+ const LAST_SEEN_CACHE_NAMESPACE = "serverless-function-last-seen";
23
+ const LAST_SEEN_THROTTLE_SECONDS = 60;
24
+ const LABELS_APPLIED_CACHE_NAMESPACE = "serverless-function-labels-applied";
25
+ const LABELS_APPLIED_CACHE_TTL_SECONDS = 60;
26
+ export class Service extends DatabaseService {
27
+ constructor() {
28
+ super(Model);
29
+ }
30
+ async onCreateSuccess(_onCreate, createdItem) {
31
+ if (createdItem.projectId && createdItem.id) {
32
+ Promise.resolve()
33
+ .then(async () => {
34
+ await ServerlessFunctionLabelRuleEngineService.applyRulesToServerlessFunction(createdItem);
35
+ })
36
+ .then(async () => {
37
+ await ServerlessFunctionOwnerRuleEngineService.applyRulesToServerlessFunction(createdItem);
38
+ })
39
+ .catch((error) => {
40
+ var _a, _b;
41
+ logger.error(`Error applying serverless function rules in ServerlessFunctionService.onCreateSuccess: ${error}`, {
42
+ projectId: (_a = createdItem.projectId) === null || _a === void 0 ? void 0 : _a.toString(),
43
+ serverlessFunctionId: (_b = createdItem.id) === null || _b === void 0 ? void 0 : _b.toString(),
44
+ });
45
+ });
46
+ }
47
+ return createdItem;
48
+ }
49
+ async findOrCreateByFunctionIdentifier(data) {
50
+ /*
51
+ * Look up case-insensitively. The unique guard on name/functionIdentifier
52
+ * (checkUniqueColumnBy -> findWithSameText) compares case-insensitively,
53
+ * so a case-sensitive lookup would miss an existing row on casing drift
54
+ * (faas.name), then fail to create it ("ServerlessFunction with the same
55
+ * name already exists") and wedge ingest. We keep the stored casing as-is
56
+ * so it stays in sync with the raw-cased resource.faas.name attribute the
57
+ * detail page filters on.
58
+ */
59
+ const existingFunction = await this.findOneBy({
60
+ query: {
61
+ projectId: data.projectId,
62
+ functionIdentifier: QueryHelper.findWithSameText(data.functionIdentifier),
63
+ },
64
+ select: {
65
+ _id: true,
66
+ projectId: true,
67
+ functionIdentifier: true,
68
+ },
69
+ props: {
70
+ isRoot: true,
71
+ },
72
+ });
73
+ if (existingFunction) {
74
+ return existingFunction;
75
+ }
76
+ try {
77
+ const newFunction = new Model();
78
+ newFunction.projectId = data.projectId;
79
+ newFunction.name = data.functionIdentifier;
80
+ newFunction.functionIdentifier = data.functionIdentifier;
81
+ newFunction.otelCollectorStatus = "connected";
82
+ newFunction.lastSeenAt = OneUptimeDate.getCurrentDate();
83
+ const createdFunction = await this.create({
84
+ data: newFunction,
85
+ props: {
86
+ isRoot: true,
87
+ },
88
+ });
89
+ return createdFunction;
90
+ }
91
+ catch (_a) {
92
+ /*
93
+ * Race condition: another request created the function concurrently.
94
+ * Re-fetch the existing row.
95
+ */
96
+ const reFetchedFunction = await this.findOneBy({
97
+ query: {
98
+ projectId: data.projectId,
99
+ functionIdentifier: QueryHelper.findWithSameText(data.functionIdentifier),
100
+ },
101
+ select: {
102
+ _id: true,
103
+ projectId: true,
104
+ functionIdentifier: true,
105
+ },
106
+ props: {
107
+ isRoot: true,
108
+ },
109
+ });
110
+ if (reFetchedFunction) {
111
+ return reFetchedFunction;
112
+ }
113
+ throw new Error("Failed to create or find serverless function: " +
114
+ data.functionIdentifier);
115
+ }
116
+ }
117
+ async updateLastSeen(serverlessFunctionId, extra) {
118
+ var _a, _b, _c, _d, _e, _f, _g, _h;
119
+ const cacheKey = serverlessFunctionId.toString();
120
+ const extrasFingerprint = crypto
121
+ .createHash("sha1")
122
+ .update(JSON.stringify({
123
+ agentVersion: (_a = extra === null || extra === void 0 ? void 0 : extra.agentVersion) !== null && _a !== void 0 ? _a : null,
124
+ cloudPlatform: (_b = extra === null || extra === void 0 ? void 0 : extra.cloudPlatform) !== null && _b !== void 0 ? _b : null,
125
+ cloudProvider: (_c = extra === null || extra === void 0 ? void 0 : extra.cloudProvider) !== null && _c !== void 0 ? _c : null,
126
+ cloudRegion: (_d = extra === null || extra === void 0 ? void 0 : extra.cloudRegion) !== null && _d !== void 0 ? _d : null,
127
+ cloudAccountId: (_e = extra === null || extra === void 0 ? void 0 : extra.cloudAccountId) !== null && _e !== void 0 ? _e : null,
128
+ functionVersion: (_f = extra === null || extra === void 0 ? void 0 : extra.functionVersion) !== null && _f !== void 0 ? _f : null,
129
+ runtimeName: (_g = extra === null || extra === void 0 ? void 0 : extra.runtimeName) !== null && _g !== void 0 ? _g : null,
130
+ runtimeVersion: (_h = extra === null || extra === void 0 ? void 0 : extra.runtimeVersion) !== null && _h !== void 0 ? _h : null,
131
+ }))
132
+ .digest("hex");
133
+ const cached = await GlobalCache.getString(LAST_SEEN_CACHE_NAMESPACE, cacheKey);
134
+ if (cached === extrasFingerprint) {
135
+ return; // same data was written recently
136
+ }
137
+ await GlobalCache.setString(LAST_SEEN_CACHE_NAMESPACE, cacheKey, extrasFingerprint, { expiresInSeconds: LAST_SEEN_THROTTLE_SECONDS });
138
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
139
+ const data = {
140
+ lastSeenAt: OneUptimeDate.getCurrentDate(),
141
+ otelCollectorStatus: "connected",
142
+ };
143
+ if (extra === null || extra === void 0 ? void 0 : extra.agentVersion) {
144
+ data.agentVersion = extra.agentVersion;
145
+ }
146
+ if (extra === null || extra === void 0 ? void 0 : extra.cloudPlatform) {
147
+ data.cloudPlatform = extra.cloudPlatform;
148
+ }
149
+ if (extra === null || extra === void 0 ? void 0 : extra.cloudProvider) {
150
+ data.cloudProvider = extra.cloudProvider;
151
+ }
152
+ if (extra === null || extra === void 0 ? void 0 : extra.cloudRegion) {
153
+ data.cloudRegion = extra.cloudRegion;
154
+ }
155
+ if (extra === null || extra === void 0 ? void 0 : extra.cloudAccountId) {
156
+ data.cloudAccountId = extra.cloudAccountId;
157
+ }
158
+ if (extra === null || extra === void 0 ? void 0 : extra.functionVersion) {
159
+ data.functionVersion = extra.functionVersion;
160
+ }
161
+ if (extra === null || extra === void 0 ? void 0 : extra.runtimeName) {
162
+ data.runtimeName = extra.runtimeName;
163
+ }
164
+ if (extra === null || extra === void 0 ? void 0 : extra.runtimeVersion) {
165
+ data.runtimeVersion = extra.runtimeVersion;
166
+ }
167
+ await this.updateOneById({
168
+ id: serverlessFunctionId,
169
+ data: data,
170
+ props: {
171
+ isRoot: true,
172
+ },
173
+ });
174
+ }
175
+ /**
176
+ * Additively attach labels to a serverless function. Existing labels are
177
+ * never removed — manual labels set via the UI survive ingest. The set of
178
+ * labelIds is fingerprinted and cached for 60s so steady-state ingest with
179
+ * an unchanged label set costs one in-memory lookup.
180
+ */
181
+ async attachLabels(data) {
182
+ var _a;
183
+ if (!data.labelIds || data.labelIds.length === 0) {
184
+ return;
185
+ }
186
+ const cacheKey = data.serverlessFunctionId.toString();
187
+ const fingerprint = fingerprintLabelIds(data.labelIds);
188
+ const cached = await GlobalCache.getString(LABELS_APPLIED_CACHE_NAMESPACE, cacheKey);
189
+ if (cached === fingerprint) {
190
+ return;
191
+ }
192
+ try {
193
+ const functionIdStr = data.serverlessFunctionId.toString();
194
+ const existingLabels = await this.getRepository()
195
+ .createQueryBuilder()
196
+ .relation(Model, "labels")
197
+ .of(functionIdStr)
198
+ .loadMany();
199
+ const existingIds = new Set();
200
+ for (const lbl of existingLabels) {
201
+ const idStr = (_a = lbl._id) === null || _a === void 0 ? void 0 : _a.toString();
202
+ if (idStr) {
203
+ existingIds.add(idStr);
204
+ }
205
+ }
206
+ const toAddIds = [];
207
+ const seen = new Set();
208
+ for (const id of data.labelIds) {
209
+ const idStr = id.toString();
210
+ if (existingIds.has(idStr) || seen.has(idStr)) {
211
+ continue;
212
+ }
213
+ seen.add(idStr);
214
+ toAddIds.push(idStr);
215
+ }
216
+ if (toAddIds.length > 0) {
217
+ await this.getRepository()
218
+ .createQueryBuilder()
219
+ .relation(Model, "labels")
220
+ .of(functionIdStr)
221
+ .add(toAddIds);
222
+ }
223
+ await GlobalCache.setString(LABELS_APPLIED_CACHE_NAMESPACE, cacheKey, fingerprint, { expiresInSeconds: LABELS_APPLIED_CACHE_TTL_SECONDS });
224
+ }
225
+ catch (err) {
226
+ logger.warn(`ServerlessFunctionService.attachLabels failed for function ${data.serverlessFunctionId.toString()}: ${err instanceof Error ? err.message : String(err)}`);
227
+ }
228
+ }
229
+ async markDisconnectedFunctions() {
230
+ const fiveMinutesAgo = OneUptimeDate.addRemoveMinutes(OneUptimeDate.getCurrentDate(), -5);
231
+ const connectedFunctions = await this.findBy({
232
+ query: {
233
+ otelCollectorStatus: "connected",
234
+ lastSeenAt: QueryHelper.lessThan(fiveMinutesAgo),
235
+ },
236
+ select: {
237
+ _id: true,
238
+ },
239
+ limit: LIMIT_MAX,
240
+ skip: 0,
241
+ props: {
242
+ isRoot: true,
243
+ },
244
+ });
245
+ for (const serverlessFunction of connectedFunctions) {
246
+ if (serverlessFunction._id) {
247
+ await this.updateOneById({
248
+ id: new ObjectID(serverlessFunction._id.toString()),
249
+ data: {
250
+ otelCollectorStatus: "disconnected",
251
+ },
252
+ props: {
253
+ isRoot: true,
254
+ },
255
+ });
256
+ }
257
+ }
258
+ }
259
+ }
260
+ __decorate([
261
+ CaptureSpan(),
262
+ __metadata("design:type", Function),
263
+ __metadata("design:paramtypes", [Object, Model]),
264
+ __metadata("design:returntype", Promise)
265
+ ], Service.prototype, "onCreateSuccess", null);
266
+ __decorate([
267
+ CaptureSpan(),
268
+ __metadata("design:type", Function),
269
+ __metadata("design:paramtypes", [Object]),
270
+ __metadata("design:returntype", Promise)
271
+ ], Service.prototype, "findOrCreateByFunctionIdentifier", null);
272
+ __decorate([
273
+ CaptureSpan(),
274
+ __metadata("design:type", Function),
275
+ __metadata("design:paramtypes", [ObjectID, Object]),
276
+ __metadata("design:returntype", Promise)
277
+ ], Service.prototype, "updateLastSeen", null);
278
+ __decorate([
279
+ CaptureSpan(),
280
+ __metadata("design:type", Function),
281
+ __metadata("design:paramtypes", [Object]),
282
+ __metadata("design:returntype", Promise)
283
+ ], Service.prototype, "attachLabels", null);
284
+ __decorate([
285
+ CaptureSpan(),
286
+ __metadata("design:type", Function),
287
+ __metadata("design:paramtypes", []),
288
+ __metadata("design:returntype", Promise)
289
+ ], Service.prototype, "markDisconnectedFunctions", null);
290
+ function fingerprintLabelIds(labelIds) {
291
+ const sorted = labelIds
292
+ .map((id) => {
293
+ return id.toString();
294
+ })
295
+ .sort();
296
+ return crypto.createHash("sha1").update(sorted.join(",")).digest("hex");
297
+ }
298
+ export default new Service();
299
+ //# sourceMappingURL=ServerlessFunctionService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerlessFunctionService.js","sourceRoot":"","sources":["../../../../Server/Services/ServerlessFunctionService.ts"],"names":[],"mappings":"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"}
@@ -97,25 +97,81 @@ export class Service extends DatabaseService {
97
97
  * re-resolves the same serviceId) costs one in-memory cache lookup
98
98
  * per batch instead of a DB write.
99
99
  */
100
- async updateLastSeen(serviceId) {
100
+ async updateLastSeen(serviceId, extra) {
101
+ /*
102
+ * Throttle keyed on a fingerprint of the metadata so the steady-state
103
+ * firehose (the same serviceId re-resolved every batch) costs one
104
+ * in-memory cache lookup, but a changed attribute (e.g. a new
105
+ * service.version after a deploy) busts the cache and writes
106
+ * immediately. With no extras the fingerprint is constant, preserving
107
+ * the original "refresh lastSeenAt at most once per window" behaviour.
108
+ */
101
109
  const cacheKey = serviceId.toString();
110
+ const fingerprint = this.fingerprintLastSeenExtras(extra);
102
111
  const cached = await GlobalCache.getString(LAST_SEEN_CACHE_NAMESPACE, cacheKey);
103
- if (cached) {
112
+ if (cached === fingerprint) {
104
113
  return;
105
114
  }
106
- await GlobalCache.setString(LAST_SEEN_CACHE_NAMESPACE, cacheKey, "1", {
115
+ await GlobalCache.setString(LAST_SEEN_CACHE_NAMESPACE, cacheKey, fingerprint, {
107
116
  expiresInSeconds: LAST_SEEN_THROTTLE_SECONDS,
108
117
  });
118
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
119
+ const data = {
120
+ lastSeenAt: OneUptimeDate.getCurrentDate(),
121
+ };
122
+ if (extra === null || extra === void 0 ? void 0 : extra.serviceVersion) {
123
+ data.serviceVersion = extra.serviceVersion;
124
+ }
125
+ if (extra === null || extra === void 0 ? void 0 : extra.deploymentEnvironment) {
126
+ data.deploymentEnvironment = extra.deploymentEnvironment;
127
+ }
128
+ if (extra === null || extra === void 0 ? void 0 : extra.serviceNamespace) {
129
+ data.serviceNamespace = extra.serviceNamespace;
130
+ }
131
+ if (extra === null || extra === void 0 ? void 0 : extra.runtimeName) {
132
+ data.runtimeName = extra.runtimeName;
133
+ }
134
+ if (extra === null || extra === void 0 ? void 0 : extra.runtimeVersion) {
135
+ data.runtimeVersion = extra.runtimeVersion;
136
+ }
137
+ if (extra === null || extra === void 0 ? void 0 : extra.cloudProvider) {
138
+ data.cloudProvider = extra.cloudProvider;
139
+ }
140
+ if (extra === null || extra === void 0 ? void 0 : extra.cloudPlatform) {
141
+ data.cloudPlatform = extra.cloudPlatform;
142
+ }
143
+ if (extra === null || extra === void 0 ? void 0 : extra.cloudRegion) {
144
+ data.cloudRegion = extra.cloudRegion;
145
+ }
146
+ if (extra === null || extra === void 0 ? void 0 : extra.cloudAccountId) {
147
+ data.cloudAccountId = extra.cloudAccountId;
148
+ }
109
149
  await this.updateOneById({
110
150
  id: serviceId,
111
- data: {
112
- lastSeenAt: OneUptimeDate.getCurrentDate(),
113
- },
151
+ data: data,
114
152
  props: {
115
153
  isRoot: true,
116
154
  },
117
155
  });
118
156
  }
157
+ fingerprintLastSeenExtras(extra) {
158
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
159
+ const normalized = {
160
+ serviceVersion: (_a = extra === null || extra === void 0 ? void 0 : extra.serviceVersion) !== null && _a !== void 0 ? _a : null,
161
+ deploymentEnvironment: (_b = extra === null || extra === void 0 ? void 0 : extra.deploymentEnvironment) !== null && _b !== void 0 ? _b : null,
162
+ serviceNamespace: (_c = extra === null || extra === void 0 ? void 0 : extra.serviceNamespace) !== null && _c !== void 0 ? _c : null,
163
+ runtimeName: (_d = extra === null || extra === void 0 ? void 0 : extra.runtimeName) !== null && _d !== void 0 ? _d : null,
164
+ runtimeVersion: (_e = extra === null || extra === void 0 ? void 0 : extra.runtimeVersion) !== null && _e !== void 0 ? _e : null,
165
+ cloudProvider: (_f = extra === null || extra === void 0 ? void 0 : extra.cloudProvider) !== null && _f !== void 0 ? _f : null,
166
+ cloudPlatform: (_g = extra === null || extra === void 0 ? void 0 : extra.cloudPlatform) !== null && _g !== void 0 ? _g : null,
167
+ cloudRegion: (_h = extra === null || extra === void 0 ? void 0 : extra.cloudRegion) !== null && _h !== void 0 ? _h : null,
168
+ cloudAccountId: (_j = extra === null || extra === void 0 ? void 0 : extra.cloudAccountId) !== null && _j !== void 0 ? _j : null,
169
+ };
170
+ return crypto
171
+ .createHash("sha1")
172
+ .update(JSON.stringify(normalized))
173
+ .digest("hex");
174
+ }
119
175
  /**
120
176
  * Additively attach labels to a telemetry service. Existing labels
121
177
  * are never removed — manual labels set via the UI survive ingest.
@@ -193,7 +249,7 @@ __decorate([
193
249
  __decorate([
194
250
  CaptureSpan(),
195
251
  __metadata("design:type", Function),
196
- __metadata("design:paramtypes", [ObjectID]),
252
+ __metadata("design:paramtypes", [ObjectID, Object]),
197
253
  __metadata("design:returntype", Promise)
198
254
  ], Service.prototype, "updateLastSeen", null);
199
255
  __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"ServiceService.js","sourceRoot":"","sources":["../../../../Server/Services/ServiceService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ServiceService.js","sourceRoot":"","sources":["../../../../Server/Services/ServiceService.ts"],"names":[],"mappings":"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"}
@@ -209,6 +209,92 @@ export class TraceAggregationService {
209
209
  }
210
210
  return result;
211
211
  }
212
+ /*
213
+ * Accurate per-service and per-status counts over the FULL time window,
214
+ * computed with a real GROUP BY instead of the recent-N sample in
215
+ * getFacetValuesFromSample(). The sample saturates with whichever service
216
+ * is chattiest right now, so high-volume services that aren't in the most
217
+ * recent N root spans read 0 — the "top 1000" symptom. This GROUP BY is
218
+ * exact regardless of skew.
219
+ *
220
+ * It is cheap because it rides the proj_hist_by_minute aggregate projection
221
+ * (projectId, minute, serviceId, statusCode, isRootSpan -> count): a 1-month
222
+ * window reads a few thousand pre-aggregated minute rows in single-digit ms
223
+ * instead of scanning tens of millions of raw spans. Two things are required
224
+ * for ClickHouse to actually pick that projection, both load-bearing:
225
+ * 1. The time predicate must be on toStartOfMinute(startTime) — the
226
+ * projection's key expression — NOT raw startTime. A raw startTime
227
+ * filter references a column the aggregate projection does not store, so
228
+ * ClickHouse rejects the projection and full-scans. (Window edges land
229
+ * on minute boundaries, consistent with the minute-bucketed histogram.)
230
+ * 2. Every other predicate must be on a projection column. isRootSpan,
231
+ * serviceId and statusCode all are, so the default sidebar load and
232
+ * drill-down-by-service stay on the projection. A non-projection filter
233
+ * (kind / name / traceId / attributes) transparently falls back to a
234
+ * base-table scan — still correct, still bounded by max_execution_time.
235
+ *
236
+ * serviceId is intentionally NOT disambiguated by serviceType here. Resource
237
+ * IDs are globally unique, so a single serviceId -> count map correctly
238
+ * serves the service / host / docker host / k8s cluster facets once merged
239
+ * against each Postgres source-of-truth list (a host id never collides with
240
+ * a service id, so an unrelated entry is simply never looked up). Omitting
241
+ * the serviceType predicate keeps the query projection-eligible.
242
+ */
243
+ static async getResourceFacetCounts(request) {
244
+ const statement = new Statement();
245
+ statement.append(`SELECT serviceId, statusCode, count() AS cnt FROM ${TraceAggregationService.TABLE_NAME}`);
246
+ statement.append(SQL ` WHERE projectId = ${{
247
+ type: TableColumnType.ObjectID,
248
+ value: request.projectId,
249
+ }} AND toStartOfMinute(startTime) >= toStartOfMinute(${{
250
+ type: TableColumnType.Date,
251
+ value: request.startTime,
252
+ }}) AND toStartOfMinute(startTime) <= toStartOfMinute(${{
253
+ type: TableColumnType.Date,
254
+ value: request.endTime,
255
+ }})`);
256
+ TraceAggregationService.appendCommonFilters(statement, request);
257
+ statement.append(" GROUP BY serviceId, statusCode");
258
+ /*
259
+ * Cap runtime below nginx's 60s proxy_read_timeout and explicitly allow
260
+ * projection use so proj_hist_by_minute is read when eligible (see the
261
+ * toStartOfMinute note above).
262
+ */
263
+ statement.append(" SETTINGS max_execution_time = 45, timeout_overflow_mode = 'break', optimize_use_projections = 1");
264
+ const serviceCounts = new Map();
265
+ const statusCounts = new Map();
266
+ const dbResult = await SpanService.executeQuery(statement);
267
+ let rows = [];
268
+ try {
269
+ const response = await dbResult.json();
270
+ rows = response.data || [];
271
+ }
272
+ catch (_a) {
273
+ /*
274
+ * 'break' mode can return truncated JSON on timeout. Degrade to empty
275
+ * counts — the Postgres resolver still lists every resource (count 0),
276
+ * which is no worse than the prior transient-failure behavior.
277
+ */
278
+ logger.warn("Resource facet count query returned unparseable response, returning empty counts");
279
+ return { serviceCounts, statusCounts };
280
+ }
281
+ for (const row of rows) {
282
+ const cnt = Number(row["cnt"] || 0);
283
+ const rawServiceId = row["serviceId"];
284
+ if (rawServiceId !== undefined && rawServiceId !== null) {
285
+ const serviceId = String(rawServiceId);
286
+ if (serviceId.length > 0) {
287
+ serviceCounts.set(serviceId, (serviceCounts.get(serviceId) || 0) + cnt);
288
+ }
289
+ }
290
+ const rawStatusCode = row["statusCode"];
291
+ if (rawStatusCode !== undefined && rawStatusCode !== null) {
292
+ const statusCode = String(rawStatusCode);
293
+ statusCounts.set(statusCode, (statusCounts.get(statusCode) || 0) + cnt);
294
+ }
295
+ }
296
+ return { serviceCounts, statusCounts };
297
+ }
212
298
  static mapStatusCodeToSeries(code) {
213
299
  if (code === 1) {
214
300
  return "ok";
@@ -228,6 +314,15 @@ export class TraceAggregationService {
228
314
  * even for multi-week ranges. The outer query then re-buckets the tiny
229
315
  * minute-level result to the requested bucket size.
230
316
  *
317
+ * The time window is filtered on toStartOfMinute(startTime) — the
318
+ * projection's key expression — NOT raw startTime. A raw startTime
319
+ * predicate references a column the aggregate projection does not store,
320
+ * so ClickHouse rejects proj_hist_by_minute and full-scans the base table
321
+ * (verified: 32M rows / ~220ms vs 1.5K rows / ~6ms with this form). The
322
+ * window edges round to the minute, which is consistent with the
323
+ * minute-bucketed output and only shifts the first/last bucket by the
324
+ * partial boundary minute when the range is not minute-aligned.
325
+ *
231
326
  * If any non-projection filter (kind, name, traceId, nameSearchText,
232
327
  * attributes) is active, ClickHouse transparently falls back to
233
328
  * scanning the main table for the inner query — same cost as before.
@@ -250,14 +345,14 @@ export class TraceAggregationService {
250
345
  type: TableColumnType.ObjectID,
251
346
  value: request.projectId,
252
347
  }}
253
- AND startTime >= ${{
348
+ AND toStartOfMinute(startTime) >= toStartOfMinute(${{
254
349
  type: TableColumnType.Date,
255
350
  value: request.startTime,
256
- }}
257
- AND startTime <= ${{
351
+ }})
352
+ AND toStartOfMinute(startTime) <= toStartOfMinute(${{
258
353
  type: TableColumnType.Date,
259
354
  value: request.endTime,
260
- }}
355
+ }})
261
356
  `;
262
357
  TraceAggregationService.appendCommonFilters(statement, request);
263
358
  statement.append(" GROUP BY minute, statusCode ) GROUP BY bucket, statusCode ORDER BY bucket ASC");
@@ -434,6 +529,9 @@ TraceAggregationService.RESOURCE_FACET_KEYS = new Map([
434
529
  ["hostId", ServiceType.Host],
435
530
  ["dockerHostId", ServiceType.DockerHost],
436
531
  ["kubernetesClusterId", ServiceType.KubernetesCluster],
532
+ ["serverlessFunctionId", ServiceType.ServerlessFunction],
533
+ ["cloudResourceId", ServiceType.CloudResource],
534
+ ["rumApplicationId", ServiceType.RealUserMonitor],
437
535
  ]);
438
536
  TraceAggregationService.ATTRIBUTE_KEY_PATTERN = /^[a-zA-Z0-9._:/-]+$/;
439
537
  TraceAggregationService.MAX_FACET_KEY_LENGTH = 256;
@@ -455,5 +553,11 @@ __decorate([
455
553
  __metadata("design:paramtypes", [Object]),
456
554
  __metadata("design:returntype", Promise)
457
555
  ], TraceAggregationService, "getFacetValuesFromSample", null);
556
+ __decorate([
557
+ CaptureSpan(),
558
+ __metadata("design:type", Function),
559
+ __metadata("design:paramtypes", [Object]),
560
+ __metadata("design:returntype", Promise)
561
+ ], TraceAggregationService, "getResourceFacetCounts", null);
458
562
  export default TraceAggregationService;
459
563
  //# sourceMappingURL=TraceAggregationService.js.map