@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,69 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/RumApplicationClient";
3
+ import ObjectID from "../../Types/ObjectID";
4
+ import OneUptimeDate from "../../Types/Date";
5
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
6
+ import logger from "../Utils/Logger";
7
+
8
+ export class Service extends DatabaseService<Model> {
9
+ public constructor() {
10
+ super(Model);
11
+ }
12
+
13
+ /**
14
+ * Upsert a RUM client platform (browser.platform / device.model) from
15
+ * ingest. Refreshes lastSeenAt if it already exists.
16
+ */
17
+ @CaptureSpan()
18
+ public async recordClient(data: {
19
+ projectId: ObjectID;
20
+ rumApplicationId: ObjectID;
21
+ clientName: string;
22
+ clientType?: string | undefined;
23
+ }): Promise<void> {
24
+ try {
25
+ const existing: Model | null = await this.findOneBy({
26
+ query: {
27
+ projectId: data.projectId,
28
+ rumApplicationId: data.rumApplicationId,
29
+ clientName: data.clientName,
30
+ },
31
+ select: { _id: true },
32
+ props: { isRoot: true },
33
+ });
34
+
35
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
36
+ const fields: any = { lastSeenAt: OneUptimeDate.getCurrentDate() };
37
+ if (data.clientType) {
38
+ fields.clientType = data.clientType;
39
+ }
40
+
41
+ if (existing && existing._id) {
42
+ await this.updateOneById({
43
+ id: new ObjectID(existing._id.toString()),
44
+ data: fields,
45
+ props: { isRoot: true },
46
+ });
47
+ return;
48
+ }
49
+
50
+ const item: Model = new Model();
51
+ item.projectId = data.projectId;
52
+ item.rumApplicationId = data.rumApplicationId;
53
+ item.clientName = data.clientName;
54
+ item.lastSeenAt = OneUptimeDate.getCurrentDate();
55
+ if (data.clientType) {
56
+ item.clientType = data.clientType;
57
+ }
58
+ await this.create({ data: item, props: { isRoot: true } });
59
+ } catch (err) {
60
+ logger.warn(
61
+ `RumApplicationClientService.recordClient failed: ${
62
+ err instanceof Error ? err.message : String(err)
63
+ }`,
64
+ );
65
+ }
66
+ }
67
+ }
68
+
69
+ export default new Service();
@@ -0,0 +1,175 @@
1
+ import Label from "../../Models/DatabaseModels/Label";
2
+ import RumApplication from "../../Models/DatabaseModels/RumApplication";
3
+ import RumApplicationLabelRule from "../../Models/DatabaseModels/RumApplicationLabelRule";
4
+ import RumApplicationLabelRuleService from "./RumApplicationLabelRuleService";
5
+ import RumApplicationService from "./RumApplicationService";
6
+ import ObjectID from "../../Types/ObjectID";
7
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
8
+ import logger, { LogAttributes } from "../Utils/Logger";
9
+
10
+ class RumApplicationLabelRuleEngineServiceClass {
11
+ /**
12
+ * Evaluates RumApplicationLabelRule rows for the given application and
13
+ * attaches matched labels. The union is deduped against labels already on
14
+ * the application before insert to avoid PK conflicts on the join table.
15
+ */
16
+ @CaptureSpan()
17
+ public async applyRulesToRumApplication(
18
+ rumApplication: RumApplication,
19
+ ): Promise<void> {
20
+ if (!rumApplication.id || !rumApplication.projectId) {
21
+ return;
22
+ }
23
+
24
+ try {
25
+ const rules: Array<RumApplicationLabelRule> =
26
+ await RumApplicationLabelRuleService.findBy({
27
+ query: {
28
+ projectId: rumApplication.projectId,
29
+ isEnabled: true,
30
+ },
31
+ props: { isRoot: true },
32
+ select: {
33
+ _id: true,
34
+ name: true,
35
+ matchLabels: { _id: true },
36
+ nameRegexPattern: true,
37
+ descriptionRegexPattern: true,
38
+ labelsToAdd: { _id: true },
39
+ },
40
+ limit: 100,
41
+ skip: 0,
42
+ });
43
+
44
+ if (rules.length === 0) {
45
+ return;
46
+ }
47
+
48
+ const appWithDetails: RumApplication | null =
49
+ await RumApplicationService.findOneById({
50
+ id: rumApplication.id,
51
+ select: {
52
+ name: true,
53
+ description: true,
54
+ labels: { _id: true },
55
+ },
56
+ props: { isRoot: true },
57
+ });
58
+
59
+ if (!appWithDetails) {
60
+ return;
61
+ }
62
+
63
+ const labelIdsToAdd: Set<string> = new Set();
64
+
65
+ for (const rule of rules) {
66
+ if (!this.doesMatchRule(appWithDetails, rule)) {
67
+ continue;
68
+ }
69
+ for (const label of rule.labelsToAdd || []) {
70
+ if (label.id) {
71
+ labelIdsToAdd.add(label.id.toString());
72
+ }
73
+ }
74
+ }
75
+
76
+ if (labelIdsToAdd.size === 0) {
77
+ return;
78
+ }
79
+
80
+ const existingLabelIds: Set<string> = new Set(
81
+ (appWithDetails.labels || [])
82
+ .map((l: Label) => {
83
+ return l.id?.toString() || "";
84
+ })
85
+ .filter((id: string) => {
86
+ return id !== "";
87
+ }),
88
+ );
89
+
90
+ const newLabelIds: Array<string> = Array.from(labelIdsToAdd).filter(
91
+ (id: string) => {
92
+ return !existingLabelIds.has(id);
93
+ },
94
+ );
95
+ if (newLabelIds.length === 0) {
96
+ return;
97
+ }
98
+
99
+ await RumApplicationService.getRepository()
100
+ .createQueryBuilder()
101
+ .relation(RumApplication, "labels")
102
+ .of(rumApplication.id.toString())
103
+ .add(newLabelIds);
104
+
105
+ const mergedLabelIds: Set<string> = new Set([
106
+ ...existingLabelIds,
107
+ ...newLabelIds,
108
+ ]);
109
+ rumApplication.labels = Array.from(mergedLabelIds).map((id: string) => {
110
+ const label: Label = new Label();
111
+ label.id = new ObjectID(id);
112
+ return label;
113
+ });
114
+ } catch (error) {
115
+ logger.error(`Error applying RUM application label rules: ${error}`, {
116
+ projectId: rumApplication.projectId?.toString(),
117
+ rumApplicationId: rumApplication.id?.toString(),
118
+ } as LogAttributes);
119
+ }
120
+ }
121
+
122
+ private doesMatchRule(
123
+ rumApplication: RumApplication,
124
+ rule: RumApplicationLabelRule,
125
+ ): boolean {
126
+ if (rule.matchLabels && rule.matchLabels.length > 0) {
127
+ if (!rumApplication.labels || rumApplication.labels.length === 0) {
128
+ return false;
129
+ }
130
+ const ruleLabelIds: Array<string> = rule.matchLabels.map((l: Label) => {
131
+ return l.id?.toString() || "";
132
+ });
133
+ const labelIds: Array<string> = rumApplication.labels.map((l: Label) => {
134
+ return l.id?.toString() || "";
135
+ });
136
+ if (
137
+ !ruleLabelIds.some((id: string) => {
138
+ return labelIds.includes(id);
139
+ })
140
+ ) {
141
+ return false;
142
+ }
143
+ }
144
+
145
+ if (
146
+ rule.nameRegexPattern &&
147
+ (!rumApplication.name ||
148
+ !this.testRegex(rule.nameRegexPattern, rumApplication.name))
149
+ ) {
150
+ return false;
151
+ }
152
+
153
+ if (
154
+ rule.descriptionRegexPattern &&
155
+ (!rumApplication.description ||
156
+ !this.testRegex(rule.descriptionRegexPattern, rumApplication.description))
157
+ ) {
158
+ return false;
159
+ }
160
+
161
+ return true;
162
+ }
163
+
164
+ private testRegex(pattern: string, value: string): boolean {
165
+ try {
166
+ const regex: RegExp = new RegExp(pattern, "i");
167
+ return regex.test(value);
168
+ } catch {
169
+ logger.warn(`Invalid regex in RUM application label rule: ${pattern}`);
170
+ return false;
171
+ }
172
+ }
173
+ }
174
+
175
+ export default new RumApplicationLabelRuleEngineServiceClass();
@@ -0,0 +1,14 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/RumApplicationLabelRule";
3
+ import { IsBillingEnabled } from "../EnvironmentConfig";
4
+
5
+ export class Service extends DatabaseService<Model> {
6
+ public constructor() {
7
+ super(Model);
8
+ if (IsBillingEnabled) {
9
+ this.hardDeleteItemsOlderThanInDays("createdAt", 3 * 365);
10
+ }
11
+ }
12
+ }
13
+
14
+ export default new Service();
@@ -0,0 +1,192 @@
1
+ import Label from "../../Models/DatabaseModels/Label";
2
+ import RumApplication from "../../Models/DatabaseModels/RumApplication";
3
+ import RumApplicationOwnerRule from "../../Models/DatabaseModels/RumApplicationOwnerRule";
4
+ import RumApplicationOwnerUser from "../../Models/DatabaseModels/RumApplicationOwnerUser";
5
+ import RumApplicationOwnerTeam from "../../Models/DatabaseModels/RumApplicationOwnerTeam";
6
+ import RumApplicationOwnerRuleService from "./RumApplicationOwnerRuleService";
7
+ import RumApplicationOwnerUserService from "./RumApplicationOwnerUserService";
8
+ import RumApplicationOwnerTeamService from "./RumApplicationOwnerTeamService";
9
+ import RumApplicationService from "./RumApplicationService";
10
+ import ObjectID from "../../Types/ObjectID";
11
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
12
+ import logger, { LogAttributes } from "../Utils/Logger";
13
+
14
+ class RumApplicationOwnerRuleEngineServiceClass {
15
+ /**
16
+ * Evaluates RumApplicationOwnerRule rows for the given application and adds
17
+ * matched owner users / teams. Rules with notifyOwners set notify the added
18
+ * owners; rules with notifyOwners off add silently.
19
+ */
20
+ @CaptureSpan()
21
+ public async applyRulesToRumApplication(
22
+ rumApplication: RumApplication,
23
+ ): Promise<void> {
24
+ if (!rumApplication.id || !rumApplication.projectId) {
25
+ return;
26
+ }
27
+
28
+ try {
29
+ const rules: Array<RumApplicationOwnerRule> =
30
+ await RumApplicationOwnerRuleService.findBy({
31
+ query: {
32
+ projectId: rumApplication.projectId,
33
+ isEnabled: true,
34
+ },
35
+ props: { isRoot: true },
36
+ select: {
37
+ _id: true,
38
+ name: true,
39
+ notifyOwners: true,
40
+ matchLabels: { _id: true },
41
+ nameRegexPattern: true,
42
+ descriptionRegexPattern: true,
43
+ ownerUsers: { _id: true },
44
+ ownerTeams: { _id: true },
45
+ },
46
+ limit: 100,
47
+ skip: 0,
48
+ });
49
+
50
+ if (rules.length === 0) {
51
+ return;
52
+ }
53
+
54
+ const appWithDetails: RumApplication | null =
55
+ await RumApplicationService.findOneById({
56
+ id: rumApplication.id,
57
+ select: {
58
+ name: true,
59
+ description: true,
60
+ labels: { _id: true },
61
+ },
62
+ props: { isRoot: true },
63
+ });
64
+
65
+ if (!appWithDetails) {
66
+ return;
67
+ }
68
+
69
+ const usersByNotify: Map<boolean, Set<string>> = new Map([
70
+ [true, new Set()],
71
+ [false, new Set()],
72
+ ]);
73
+ const teamsByNotify: Map<boolean, Set<string>> = new Map([
74
+ [true, new Set()],
75
+ [false, new Set()],
76
+ ]);
77
+
78
+ let anyMatched: boolean = false;
79
+
80
+ for (const rule of rules) {
81
+ if (!this.doesMatchRule(appWithDetails, rule)) {
82
+ continue;
83
+ }
84
+ const notify: boolean = rule.notifyOwners !== false;
85
+ for (const user of rule.ownerUsers || []) {
86
+ if (user.id) {
87
+ usersByNotify.get(notify)!.add(user.id.toString());
88
+ anyMatched = true;
89
+ }
90
+ }
91
+ for (const team of rule.ownerTeams || []) {
92
+ if (team.id) {
93
+ teamsByNotify.get(notify)!.add(team.id.toString());
94
+ anyMatched = true;
95
+ }
96
+ }
97
+ }
98
+
99
+ if (!anyMatched) {
100
+ return;
101
+ }
102
+
103
+ for (const notify of [true, false]) {
104
+ const userIds: Set<string> = usersByNotify.get(notify)!;
105
+ const teamIds: Set<string> = teamsByNotify.get(notify)!;
106
+
107
+ for (const userId of userIds) {
108
+ const owner: RumApplicationOwnerUser = new RumApplicationOwnerUser();
109
+ owner.rumApplicationId = rumApplication.id;
110
+ owner.projectId = rumApplication.projectId;
111
+ owner.userId = new ObjectID(userId);
112
+ owner.isOwnerNotified = !notify;
113
+ await RumApplicationOwnerUserService.create({
114
+ data: owner,
115
+ props: { isRoot: true },
116
+ });
117
+ }
118
+
119
+ for (const teamId of teamIds) {
120
+ const owner: RumApplicationOwnerTeam = new RumApplicationOwnerTeam();
121
+ owner.rumApplicationId = rumApplication.id;
122
+ owner.projectId = rumApplication.projectId;
123
+ owner.teamId = new ObjectID(teamId);
124
+ owner.isOwnerNotified = !notify;
125
+ await RumApplicationOwnerTeamService.create({
126
+ data: owner,
127
+ props: { isRoot: true },
128
+ });
129
+ }
130
+ }
131
+ } catch (error) {
132
+ logger.error(`Error applying RUM application owner rules: ${error}`, {
133
+ projectId: rumApplication.projectId?.toString(),
134
+ rumApplicationId: rumApplication.id?.toString(),
135
+ } as LogAttributes);
136
+ }
137
+ }
138
+
139
+ private doesMatchRule(
140
+ rumApplication: RumApplication,
141
+ rule: RumApplicationOwnerRule,
142
+ ): boolean {
143
+ if (rule.matchLabels && rule.matchLabels.length > 0) {
144
+ if (!rumApplication.labels || rumApplication.labels.length === 0) {
145
+ return false;
146
+ }
147
+ const ruleLabelIds: Array<string> = rule.matchLabels.map((l: Label) => {
148
+ return l.id?.toString() || "";
149
+ });
150
+ const labelIds: Array<string> = rumApplication.labels.map((l: Label) => {
151
+ return l.id?.toString() || "";
152
+ });
153
+ if (
154
+ !ruleLabelIds.some((id: string) => {
155
+ return labelIds.includes(id);
156
+ })
157
+ ) {
158
+ return false;
159
+ }
160
+ }
161
+
162
+ if (
163
+ rule.nameRegexPattern &&
164
+ (!rumApplication.name ||
165
+ !this.testRegex(rule.nameRegexPattern, rumApplication.name))
166
+ ) {
167
+ return false;
168
+ }
169
+
170
+ if (
171
+ rule.descriptionRegexPattern &&
172
+ (!rumApplication.description ||
173
+ !this.testRegex(rule.descriptionRegexPattern, rumApplication.description))
174
+ ) {
175
+ return false;
176
+ }
177
+
178
+ return true;
179
+ }
180
+
181
+ private testRegex(pattern: string, value: string): boolean {
182
+ try {
183
+ const regex: RegExp = new RegExp(pattern, "i");
184
+ return regex.test(value);
185
+ } catch {
186
+ logger.warn(`Invalid regex in RUM application owner rule: ${pattern}`);
187
+ return false;
188
+ }
189
+ }
190
+ }
191
+
192
+ export default new RumApplicationOwnerRuleEngineServiceClass();
@@ -0,0 +1,14 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/RumApplicationOwnerRule";
3
+ import { IsBillingEnabled } from "../EnvironmentConfig";
4
+
5
+ export class Service extends DatabaseService<Model> {
6
+ public constructor() {
7
+ super(Model);
8
+ if (IsBillingEnabled) {
9
+ this.hardDeleteItemsOlderThanInDays("createdAt", 3 * 365);
10
+ }
11
+ }
12
+ }
13
+
14
+ export default new Service();
@@ -0,0 +1,10 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/RumApplicationOwnerTeam";
3
+
4
+ export class Service extends DatabaseService<Model> {
5
+ public constructor() {
6
+ super(Model);
7
+ }
8
+ }
9
+
10
+ export default new Service();
@@ -0,0 +1,10 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/RumApplicationOwnerUser";
3
+
4
+ export class Service extends DatabaseService<Model> {
5
+ public constructor() {
6
+ super(Model);
7
+ }
8
+ }
9
+
10
+ export default new Service();