@oneuptime/common 10.7.2 → 10.8.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 (253) 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/Infrastructure/Postgres/SchemaMigrations/1780931746908-AddResumeStateToWorkflowLog.ts +21 -0
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/1780931863719-AddTelemetryResourceMetadataColumns.ts +108 -0
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/1780933132562-AddServerlessFunctionTables.ts +205 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/1780935387827-AddCloudResourceTables.ts +195 -0
  28. package/Server/Infrastructure/Postgres/SchemaMigrations/1780936579718-AddRumApplicationTables.ts +202 -0
  29. package/Server/Infrastructure/Postgres/SchemaMigrations/1780938407319-AddServerlessFunctionRuleTables.ts +156 -0
  30. package/Server/Infrastructure/Postgres/SchemaMigrations/1780940721814-AddCloudResourceRuleTables.ts +149 -0
  31. package/Server/Infrastructure/Postgres/SchemaMigrations/1780940998002-AddRumApplicationRuleTables.ts +149 -0
  32. package/Server/Infrastructure/Postgres/SchemaMigrations/1780941762204-AddTelemetryResourceInventoryTables.ts +95 -0
  33. package/Server/Infrastructure/Postgres/SchemaMigrations/1780985763463-AddRumApplicationSdkLanguage.ts +25 -0
  34. package/Server/Infrastructure/Postgres/SchemaMigrations/1780987192743-RecastCloudResourcesByEnvironment.ts +30 -0
  35. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +22 -0
  36. package/Server/Infrastructure/Queue.ts +11 -0
  37. package/Server/Services/CloudResourceInstanceService.ts +76 -0
  38. package/Server/Services/CloudResourceLabelRuleEngineService.ts +175 -0
  39. package/Server/Services/CloudResourceLabelRuleService.ts +14 -0
  40. package/Server/Services/CloudResourceOwnerRuleEngineService.ts +192 -0
  41. package/Server/Services/CloudResourceOwnerRuleService.ts +14 -0
  42. package/Server/Services/CloudResourceOwnerTeamService.ts +10 -0
  43. package/Server/Services/CloudResourceOwnerUserService.ts +10 -0
  44. package/Server/Services/CloudResourceService.ts +342 -0
  45. package/Server/Services/ExceptionAggregationService.ts +3 -0
  46. package/Server/Services/HostService.ts +42 -0
  47. package/Server/Services/LogAggregationService.ts +3 -0
  48. package/Server/Services/MetricAggregationService.ts +3 -0
  49. package/Server/Services/OpenTelemetryIngestService.ts +148 -1
  50. package/Server/Services/RumApplicationClientService.ts +69 -0
  51. package/Server/Services/RumApplicationLabelRuleEngineService.ts +175 -0
  52. package/Server/Services/RumApplicationLabelRuleService.ts +14 -0
  53. package/Server/Services/RumApplicationOwnerRuleEngineService.ts +192 -0
  54. package/Server/Services/RumApplicationOwnerRuleService.ts +14 -0
  55. package/Server/Services/RumApplicationOwnerTeamService.ts +10 -0
  56. package/Server/Services/RumApplicationOwnerUserService.ts +10 -0
  57. package/Server/Services/RumApplicationService.ts +301 -0
  58. package/Server/Services/ServerlessFunctionInstanceService.ts +61 -0
  59. package/Server/Services/ServerlessFunctionLabelRuleEngineService.ts +182 -0
  60. package/Server/Services/ServerlessFunctionLabelRuleService.ts +14 -0
  61. package/Server/Services/ServerlessFunctionOwnerRuleEngineService.ts +199 -0
  62. package/Server/Services/ServerlessFunctionOwnerRuleService.ts +14 -0
  63. package/Server/Services/ServerlessFunctionOwnerTeamService.ts +10 -0
  64. package/Server/Services/ServerlessFunctionOwnerUserService.ts +10 -0
  65. package/Server/Services/ServerlessFunctionService.ts +351 -0
  66. package/Server/Services/ServiceService.ts +95 -8
  67. package/Server/Services/TraceAggregationService.ts +3 -0
  68. package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +39 -0
  69. package/Server/Types/Workflow/ComponentCode.ts +9 -0
  70. package/Server/Types/Workflow/Components/Index.ts +2 -0
  71. package/Server/Types/Workflow/Components/Sleep.ts +105 -0
  72. package/Server/Types/Workflow/Workflow.ts +6 -0
  73. package/Server/Utils/Telemetry/ResourceFacetResolver.ts +150 -0
  74. package/Types/Permission.ts +692 -1
  75. package/Types/Telemetry/ServiceType.ts +3 -0
  76. package/Types/Workflow/ComponentID.ts +1 -0
  77. package/Types/Workflow/Components/Sleep.ts +71 -0
  78. package/Types/Workflow/Components.ts +2 -0
  79. package/Types/Workflow/WorkflowStatus.ts +1 -0
  80. package/UI/Components/BulkUpdate/BulkLabelActions.tsx +159 -32
  81. package/UI/Components/Navbar/NavBar.tsx +72 -123
  82. package/UI/Components/Navbar/NavBarMenuModal.tsx +642 -0
  83. package/UI/Components/Workflow/WorkflowStatus.tsx +3 -0
  84. package/build/dist/Models/DatabaseModels/CloudResource.js +871 -0
  85. package/build/dist/Models/DatabaseModels/CloudResource.js.map +1 -0
  86. package/build/dist/Models/DatabaseModels/CloudResourceInstance.js +300 -0
  87. package/build/dist/Models/DatabaseModels/CloudResourceInstance.js.map +1 -0
  88. package/build/dist/Models/DatabaseModels/CloudResourceLabelRule.js +520 -0
  89. package/build/dist/Models/DatabaseModels/CloudResourceLabelRule.js.map +1 -0
  90. package/build/dist/Models/DatabaseModels/CloudResourceOwnerRule.js +601 -0
  91. package/build/dist/Models/DatabaseModels/CloudResourceOwnerRule.js.map +1 -0
  92. package/build/dist/Models/DatabaseModels/CloudResourceOwnerTeam.js +503 -0
  93. package/build/dist/Models/DatabaseModels/CloudResourceOwnerTeam.js.map +1 -0
  94. package/build/dist/Models/DatabaseModels/CloudResourceOwnerUser.js +502 -0
  95. package/build/dist/Models/DatabaseModels/CloudResourceOwnerUser.js.map +1 -0
  96. package/build/dist/Models/DatabaseModels/Host.js +215 -0
  97. package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
  98. package/build/dist/Models/DatabaseModels/Index.js +36 -0
  99. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  100. package/build/dist/Models/DatabaseModels/RumApplication.js +751 -0
  101. package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -0
  102. package/build/dist/Models/DatabaseModels/RumApplicationClient.js +252 -0
  103. package/build/dist/Models/DatabaseModels/RumApplicationClient.js.map +1 -0
  104. package/build/dist/Models/DatabaseModels/RumApplicationLabelRule.js +520 -0
  105. package/build/dist/Models/DatabaseModels/RumApplicationLabelRule.js.map +1 -0
  106. package/build/dist/Models/DatabaseModels/RumApplicationOwnerRule.js +601 -0
  107. package/build/dist/Models/DatabaseModels/RumApplicationOwnerRule.js.map +1 -0
  108. package/build/dist/Models/DatabaseModels/RumApplicationOwnerTeam.js +503 -0
  109. package/build/dist/Models/DatabaseModels/RumApplicationOwnerTeam.js.map +1 -0
  110. package/build/dist/Models/DatabaseModels/RumApplicationOwnerUser.js +502 -0
  111. package/build/dist/Models/DatabaseModels/RumApplicationOwnerUser.js.map +1 -0
  112. package/build/dist/Models/DatabaseModels/ServerlessFunction.js +908 -0
  113. package/build/dist/Models/DatabaseModels/ServerlessFunction.js.map +1 -0
  114. package/build/dist/Models/DatabaseModels/ServerlessFunctionInstance.js +234 -0
  115. package/build/dist/Models/DatabaseModels/ServerlessFunctionInstance.js.map +1 -0
  116. package/build/dist/Models/DatabaseModels/ServerlessFunctionLabelRule.js +520 -0
  117. package/build/dist/Models/DatabaseModels/ServerlessFunctionLabelRule.js.map +1 -0
  118. package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerRule.js +601 -0
  119. package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerRule.js.map +1 -0
  120. package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerTeam.js +503 -0
  121. package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerTeam.js.map +1 -0
  122. package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerUser.js +502 -0
  123. package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerUser.js.map +1 -0
  124. package/build/dist/Models/DatabaseModels/Service.js +276 -0
  125. package/build/dist/Models/DatabaseModels/Service.js.map +1 -1
  126. package/build/dist/Models/DatabaseModels/TelemetryException.js +12 -1
  127. package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
  128. package/build/dist/Models/DatabaseModels/WorkflowLog.js +53 -0
  129. package/build/dist/Models/DatabaseModels/WorkflowLog.js.map +1 -1
  130. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780931746908-AddResumeStateToWorkflowLog.js +14 -0
  131. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780931746908-AddResumeStateToWorkflowLog.js.map +1 -0
  132. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780931863719-AddTelemetryResourceMetadataColumns.js +53 -0
  133. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780931863719-AddTelemetryResourceMetadataColumns.js.map +1 -0
  134. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780933132562-AddServerlessFunctionTables.js +82 -0
  135. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780933132562-AddServerlessFunctionTables.js.map +1 -0
  136. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780935387827-AddCloudResourceTables.js +82 -0
  137. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780935387827-AddCloudResourceTables.js.map +1 -0
  138. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780936579718-AddRumApplicationTables.js +83 -0
  139. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780936579718-AddRumApplicationTables.js.map +1 -0
  140. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780938407319-AddServerlessFunctionRuleTables.js +67 -0
  141. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780938407319-AddServerlessFunctionRuleTables.js.map +1 -0
  142. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780940721814-AddCloudResourceRuleTables.js +60 -0
  143. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780940721814-AddCloudResourceRuleTables.js.map +1 -0
  144. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780940998002-AddRumApplicationRuleTables.js +60 -0
  145. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780940998002-AddRumApplicationRuleTables.js.map +1 -0
  146. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780941762204-AddTelemetryResourceInventoryTables.js +45 -0
  147. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780941762204-AddTelemetryResourceInventoryTables.js.map +1 -0
  148. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780985763463-AddRumApplicationSdkLanguage.js +18 -0
  149. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780985763463-AddRumApplicationSdkLanguage.js.map +1 -0
  150. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780987192743-RecastCloudResourcesByEnvironment.js +27 -0
  151. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780987192743-RecastCloudResourcesByEnvironment.js.map +1 -0
  152. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +22 -0
  153. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  154. package/build/dist/Server/Infrastructure/Queue.js +3 -0
  155. package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
  156. package/build/dist/Server/Services/CloudResourceInstanceService.js +76 -0
  157. package/build/dist/Server/Services/CloudResourceInstanceService.js.map +1 -0
  158. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +160 -0
  159. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -0
  160. package/build/dist/Server/Services/CloudResourceLabelRuleService.js +13 -0
  161. package/build/dist/Server/Services/CloudResourceLabelRuleService.js.map +1 -0
  162. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +179 -0
  163. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -0
  164. package/build/dist/Server/Services/CloudResourceOwnerRuleService.js +13 -0
  165. package/build/dist/Server/Services/CloudResourceOwnerRuleService.js.map +1 -0
  166. package/build/dist/Server/Services/CloudResourceOwnerTeamService.js +9 -0
  167. package/build/dist/Server/Services/CloudResourceOwnerTeamService.js.map +1 -0
  168. package/build/dist/Server/Services/CloudResourceOwnerUserService.js +9 -0
  169. package/build/dist/Server/Services/CloudResourceOwnerUserService.js.map +1 -0
  170. package/build/dist/Server/Services/CloudResourceService.js +287 -0
  171. package/build/dist/Server/Services/CloudResourceService.js.map +1 -0
  172. package/build/dist/Server/Services/ExceptionAggregationService.js +3 -0
  173. package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
  174. package/build/dist/Server/Services/HostService.js +29 -1
  175. package/build/dist/Server/Services/HostService.js.map +1 -1
  176. package/build/dist/Server/Services/LogAggregationService.js +3 -0
  177. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  178. package/build/dist/Server/Services/MetricAggregationService.js +3 -0
  179. package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
  180. package/build/dist/Server/Services/OpenTelemetryIngestService.js +98 -2
  181. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  182. package/build/dist/Server/Services/RumApplicationClientService.js +70 -0
  183. package/build/dist/Server/Services/RumApplicationClientService.js.map +1 -0
  184. package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js +160 -0
  185. package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js.map +1 -0
  186. package/build/dist/Server/Services/RumApplicationLabelRuleService.js +13 -0
  187. package/build/dist/Server/Services/RumApplicationLabelRuleService.js.map +1 -0
  188. package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js +179 -0
  189. package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js.map +1 -0
  190. package/build/dist/Server/Services/RumApplicationOwnerRuleService.js +13 -0
  191. package/build/dist/Server/Services/RumApplicationOwnerRuleService.js.map +1 -0
  192. package/build/dist/Server/Services/RumApplicationOwnerTeamService.js +9 -0
  193. package/build/dist/Server/Services/RumApplicationOwnerTeamService.js.map +1 -0
  194. package/build/dist/Server/Services/RumApplicationOwnerUserService.js +9 -0
  195. package/build/dist/Server/Services/RumApplicationOwnerUserService.js.map +1 -0
  196. package/build/dist/Server/Services/RumApplicationService.js +259 -0
  197. package/build/dist/Server/Services/RumApplicationService.js.map +1 -0
  198. package/build/dist/Server/Services/ServerlessFunctionInstanceService.js +64 -0
  199. package/build/dist/Server/Services/ServerlessFunctionInstanceService.js.map +1 -0
  200. package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js +160 -0
  201. package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js.map +1 -0
  202. package/build/dist/Server/Services/ServerlessFunctionLabelRuleService.js +13 -0
  203. package/build/dist/Server/Services/ServerlessFunctionLabelRuleService.js.map +1 -0
  204. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js +179 -0
  205. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js.map +1 -0
  206. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleService.js +13 -0
  207. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleService.js.map +1 -0
  208. package/build/dist/Server/Services/ServerlessFunctionOwnerTeamService.js +9 -0
  209. package/build/dist/Server/Services/ServerlessFunctionOwnerTeamService.js.map +1 -0
  210. package/build/dist/Server/Services/ServerlessFunctionOwnerUserService.js +9 -0
  211. package/build/dist/Server/Services/ServerlessFunctionOwnerUserService.js.map +1 -0
  212. package/build/dist/Server/Services/ServerlessFunctionService.js +299 -0
  213. package/build/dist/Server/Services/ServerlessFunctionService.js.map +1 -0
  214. package/build/dist/Server/Services/ServiceService.js +63 -7
  215. package/build/dist/Server/Services/ServiceService.js.map +1 -1
  216. package/build/dist/Server/Services/TraceAggregationService.js +3 -0
  217. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  218. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +39 -0
  219. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
  220. package/build/dist/Server/Types/Workflow/ComponentCode.js.map +1 -1
  221. package/build/dist/Server/Types/Workflow/Components/Index.js +2 -0
  222. package/build/dist/Server/Types/Workflow/Components/Index.js.map +1 -1
  223. package/build/dist/Server/Types/Workflow/Components/Sleep.js +85 -0
  224. package/build/dist/Server/Types/Workflow/Components/Sleep.js.map +1 -0
  225. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js +90 -0
  226. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js.map +1 -1
  227. package/build/dist/Types/Permission.js +609 -1
  228. package/build/dist/Types/Permission.js.map +1 -1
  229. package/build/dist/Types/Telemetry/ServiceType.js +3 -0
  230. package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
  231. package/build/dist/Types/Workflow/ComponentID.js +1 -0
  232. package/build/dist/Types/Workflow/ComponentID.js.map +1 -1
  233. package/build/dist/Types/Workflow/Components/Sleep.js +64 -0
  234. package/build/dist/Types/Workflow/Components/Sleep.js.map +1 -0
  235. package/build/dist/Types/Workflow/Components.js +2 -0
  236. package/build/dist/Types/Workflow/Components.js.map +1 -1
  237. package/build/dist/Types/Workflow/WorkflowStatus.js +1 -0
  238. package/build/dist/Types/Workflow/WorkflowStatus.js.map +1 -1
  239. package/build/dist/UI/Components/BulkUpdate/BulkLabelActions.js +113 -19
  240. package/build/dist/UI/Components/BulkUpdate/BulkLabelActions.js.map +1 -1
  241. package/build/dist/UI/Components/Navbar/NavBar.js +34 -66
  242. package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
  243. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +412 -0
  244. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -0
  245. package/build/dist/UI/Components/Workflow/WorkflowStatus.js +3 -0
  246. package/build/dist/UI/Components/Workflow/WorkflowStatus.js.map +1 -1
  247. package/package.json +1 -1
  248. package/UI/Components/Navbar/NavBarMenu.tsx +0 -183
  249. package/UI/Components/Navbar/NavBarMenuItem.tsx +0 -146
  250. package/build/dist/UI/Components/Navbar/NavBarMenu.js +0 -82
  251. package/build/dist/UI/Components/Navbar/NavBarMenu.js.map +0 -1
  252. package/build/dist/UI/Components/Navbar/NavBarMenuItem.js +0 -109
  253. package/build/dist/UI/Components/Navbar/NavBarMenuItem.js.map +0 -1
@@ -0,0 +1,301 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/RumApplication";
3
+ import Label from "../../Models/DatabaseModels/Label";
4
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
5
+ import ObjectID from "../../Types/ObjectID";
6
+ import QueryHelper from "../Types/Database/QueryHelper";
7
+ import OneUptimeDate from "../../Types/Date";
8
+ import LIMIT_MAX from "../../Types/Database/LimitMax";
9
+ import GlobalCache from "../Infrastructure/GlobalCache";
10
+ import logger, { LogAttributes } from "../Utils/Logger";
11
+ import crypto from "crypto";
12
+ import { OnCreate } from "../Types/Database/Hooks";
13
+ import RumApplicationLabelRuleEngineService from "./RumApplicationLabelRuleEngineService";
14
+ import RumApplicationOwnerRuleEngineService from "./RumApplicationOwnerRuleEngineService";
15
+
16
+ const LAST_SEEN_CACHE_NAMESPACE: string = "rum-application-last-seen";
17
+ const LAST_SEEN_THROTTLE_SECONDS: number = 60;
18
+
19
+ const LABELS_APPLIED_CACHE_NAMESPACE: string = "rum-application-labels-applied";
20
+ const LABELS_APPLIED_CACHE_TTL_SECONDS: number = 60;
21
+
22
+ export class Service extends DatabaseService<Model> {
23
+ public constructor() {
24
+ super(Model);
25
+ }
26
+
27
+ @CaptureSpan()
28
+ protected override async onCreateSuccess(
29
+ _onCreate: OnCreate<Model>,
30
+ createdItem: Model,
31
+ ): Promise<Model> {
32
+ if (createdItem.projectId && createdItem.id) {
33
+ Promise.resolve()
34
+ .then(async () => {
35
+ await RumApplicationLabelRuleEngineService.applyRulesToRumApplication(
36
+ createdItem,
37
+ );
38
+ })
39
+ .then(async () => {
40
+ await RumApplicationOwnerRuleEngineService.applyRulesToRumApplication(
41
+ createdItem,
42
+ );
43
+ })
44
+ .catch((error: Error) => {
45
+ logger.error(
46
+ `Error applying RUM application rules in RumApplicationService.onCreateSuccess: ${error}`,
47
+ {
48
+ projectId: createdItem.projectId?.toString(),
49
+ rumApplicationId: createdItem.id?.toString(),
50
+ } as LogAttributes,
51
+ );
52
+ });
53
+ }
54
+ return createdItem;
55
+ }
56
+
57
+ @CaptureSpan()
58
+ public async findOrCreateByAppIdentifier(data: {
59
+ projectId: ObjectID;
60
+ appIdentifier: string;
61
+ }): Promise<Model> {
62
+ const existingApp: Model | null = await this.findOneBy({
63
+ query: {
64
+ projectId: data.projectId,
65
+ appIdentifier: QueryHelper.findWithSameText(data.appIdentifier),
66
+ },
67
+ select: {
68
+ _id: true,
69
+ projectId: true,
70
+ appIdentifier: true,
71
+ },
72
+ props: {
73
+ isRoot: true,
74
+ },
75
+ });
76
+
77
+ if (existingApp) {
78
+ return existingApp;
79
+ }
80
+
81
+ try {
82
+ const newApp: Model = new Model();
83
+ newApp.projectId = data.projectId;
84
+ newApp.name = data.appIdentifier;
85
+ newApp.appIdentifier = data.appIdentifier;
86
+ newApp.otelCollectorStatus = "connected";
87
+ newApp.lastSeenAt = OneUptimeDate.getCurrentDate();
88
+
89
+ const createdApp: Model = await this.create({
90
+ data: newApp,
91
+ props: {
92
+ isRoot: true,
93
+ },
94
+ });
95
+
96
+ return createdApp;
97
+ } catch {
98
+ const reFetchedApp: Model | null = await this.findOneBy({
99
+ query: {
100
+ projectId: data.projectId,
101
+ appIdentifier: QueryHelper.findWithSameText(data.appIdentifier),
102
+ },
103
+ select: {
104
+ _id: true,
105
+ projectId: true,
106
+ appIdentifier: true,
107
+ },
108
+ props: {
109
+ isRoot: true,
110
+ },
111
+ });
112
+
113
+ if (reFetchedApp) {
114
+ return reFetchedApp;
115
+ }
116
+
117
+ throw new Error(
118
+ "Failed to create or find RUM application: " + data.appIdentifier,
119
+ );
120
+ }
121
+ }
122
+
123
+ @CaptureSpan()
124
+ public async updateLastSeen(
125
+ rumApplicationId: ObjectID,
126
+ extra?: {
127
+ agentVersion?: string | undefined;
128
+ clientType?: string | undefined;
129
+ sdkLanguage?: string | undefined;
130
+ },
131
+ ): Promise<void> {
132
+ const cacheKey: string = rumApplicationId.toString();
133
+ const extrasFingerprint: string = crypto
134
+ .createHash("sha1")
135
+ .update(
136
+ JSON.stringify({
137
+ agentVersion: extra?.agentVersion ?? null,
138
+ clientType: extra?.clientType ?? null,
139
+ sdkLanguage: extra?.sdkLanguage ?? null,
140
+ }),
141
+ )
142
+ .digest("hex");
143
+
144
+ const cached: string | null = await GlobalCache.getString(
145
+ LAST_SEEN_CACHE_NAMESPACE,
146
+ cacheKey,
147
+ );
148
+
149
+ if (cached === extrasFingerprint) {
150
+ return; // same data was written recently
151
+ }
152
+
153
+ await GlobalCache.setString(
154
+ LAST_SEEN_CACHE_NAMESPACE,
155
+ cacheKey,
156
+ extrasFingerprint,
157
+ { expiresInSeconds: LAST_SEEN_THROTTLE_SECONDS },
158
+ );
159
+
160
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
161
+ const data: any = {
162
+ lastSeenAt: OneUptimeDate.getCurrentDate(),
163
+ otelCollectorStatus: "connected",
164
+ };
165
+
166
+ if (extra?.agentVersion) {
167
+ data.agentVersion = extra.agentVersion;
168
+ }
169
+ if (extra?.clientType) {
170
+ data.clientType = extra.clientType;
171
+ }
172
+ if (extra?.sdkLanguage) {
173
+ data.sdkLanguage = extra.sdkLanguage;
174
+ }
175
+
176
+ await this.updateOneById({
177
+ id: rumApplicationId,
178
+ data: data,
179
+ props: {
180
+ isRoot: true,
181
+ },
182
+ });
183
+ }
184
+
185
+ @CaptureSpan()
186
+ public async attachLabels(data: {
187
+ rumApplicationId: ObjectID;
188
+ labelIds: Array<ObjectID>;
189
+ }): Promise<void> {
190
+ if (!data.labelIds || data.labelIds.length === 0) {
191
+ return;
192
+ }
193
+
194
+ const cacheKey: string = data.rumApplicationId.toString();
195
+ const fingerprint: string = fingerprintLabelIds(data.labelIds);
196
+ const cached: string | null = await GlobalCache.getString(
197
+ LABELS_APPLIED_CACHE_NAMESPACE,
198
+ cacheKey,
199
+ );
200
+ if (cached === fingerprint) {
201
+ return;
202
+ }
203
+
204
+ try {
205
+ const appIdStr: string = data.rumApplicationId.toString();
206
+ const existingLabels: Array<Label> = await this.getRepository()
207
+ .createQueryBuilder()
208
+ .relation(Model, "labels")
209
+ .of(appIdStr)
210
+ .loadMany();
211
+
212
+ const existingIds: Set<string> = new Set();
213
+ for (const lbl of existingLabels) {
214
+ const idStr: string | undefined = lbl._id?.toString();
215
+ if (idStr) {
216
+ existingIds.add(idStr);
217
+ }
218
+ }
219
+
220
+ const toAddIds: Array<string> = [];
221
+ const seen: Set<string> = new Set();
222
+ for (const id of data.labelIds) {
223
+ const idStr: string = id.toString();
224
+ if (existingIds.has(idStr) || seen.has(idStr)) {
225
+ continue;
226
+ }
227
+ seen.add(idStr);
228
+ toAddIds.push(idStr);
229
+ }
230
+
231
+ if (toAddIds.length > 0) {
232
+ await this.getRepository()
233
+ .createQueryBuilder()
234
+ .relation(Model, "labels")
235
+ .of(appIdStr)
236
+ .add(toAddIds);
237
+ }
238
+
239
+ await GlobalCache.setString(
240
+ LABELS_APPLIED_CACHE_NAMESPACE,
241
+ cacheKey,
242
+ fingerprint,
243
+ { expiresInSeconds: LABELS_APPLIED_CACHE_TTL_SECONDS },
244
+ );
245
+ } catch (err) {
246
+ logger.warn(
247
+ `RumApplicationService.attachLabels failed for application ${data.rumApplicationId.toString()}: ${
248
+ err instanceof Error ? err.message : String(err)
249
+ }`,
250
+ );
251
+ }
252
+ }
253
+
254
+ @CaptureSpan()
255
+ public async markDisconnectedApplications(): Promise<void> {
256
+ const fiveMinutesAgo: Date = OneUptimeDate.addRemoveMinutes(
257
+ OneUptimeDate.getCurrentDate(),
258
+ -5,
259
+ );
260
+
261
+ const connectedApps: Array<Model> = await this.findBy({
262
+ query: {
263
+ otelCollectorStatus: "connected",
264
+ lastSeenAt: QueryHelper.lessThan(fiveMinutesAgo),
265
+ },
266
+ select: {
267
+ _id: true,
268
+ },
269
+ limit: LIMIT_MAX,
270
+ skip: 0,
271
+ props: {
272
+ isRoot: true,
273
+ },
274
+ });
275
+
276
+ for (const rumApplication of connectedApps) {
277
+ if (rumApplication._id) {
278
+ await this.updateOneById({
279
+ id: new ObjectID(rumApplication._id.toString()),
280
+ data: {
281
+ otelCollectorStatus: "disconnected",
282
+ },
283
+ props: {
284
+ isRoot: true,
285
+ },
286
+ });
287
+ }
288
+ }
289
+ }
290
+ }
291
+
292
+ function fingerprintLabelIds(labelIds: Array<ObjectID>): string {
293
+ const sorted: Array<string> = labelIds
294
+ .map((id: ObjectID) => {
295
+ return id.toString();
296
+ })
297
+ .sort();
298
+ return crypto.createHash("sha1").update(sorted.join(",")).digest("hex");
299
+ }
300
+
301
+ export default new Service();
@@ -0,0 +1,61 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/ServerlessFunctionInstance";
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 serverless function instance (faas.instance) from ingest.
15
+ * Refreshes lastSeenAt if the instance already exists.
16
+ */
17
+ @CaptureSpan()
18
+ public async recordInstance(data: {
19
+ projectId: ObjectID;
20
+ serverlessFunctionId: ObjectID;
21
+ instanceName: string;
22
+ }): Promise<void> {
23
+ try {
24
+ const existing: Model | null = await this.findOneBy({
25
+ query: {
26
+ projectId: data.projectId,
27
+ serverlessFunctionId: data.serverlessFunctionId,
28
+ instanceName: data.instanceName,
29
+ },
30
+ select: { _id: true },
31
+ props: { isRoot: true },
32
+ });
33
+
34
+ if (existing && existing._id) {
35
+ await this.updateOneById({
36
+ id: new ObjectID(existing._id.toString()),
37
+ data: { lastSeenAt: OneUptimeDate.getCurrentDate() },
38
+ props: { isRoot: true },
39
+ });
40
+ return;
41
+ }
42
+
43
+ const item: Model = new Model();
44
+ item.projectId = data.projectId;
45
+ item.serverlessFunctionId = data.serverlessFunctionId;
46
+ item.instanceName = data.instanceName;
47
+ item.lastSeenAt = OneUptimeDate.getCurrentDate();
48
+ await this.create({ data: item, props: { isRoot: true } });
49
+ } catch (err) {
50
+ // Inventory is best-effort — a unique-violation race or transient error
51
+ // must never fail ingest.
52
+ logger.warn(
53
+ `ServerlessFunctionInstanceService.recordInstance failed: ${
54
+ err instanceof Error ? err.message : String(err)
55
+ }`,
56
+ );
57
+ }
58
+ }
59
+ }
60
+
61
+ export default new Service();
@@ -0,0 +1,182 @@
1
+ import Label from "../../Models/DatabaseModels/Label";
2
+ import ServerlessFunction from "../../Models/DatabaseModels/ServerlessFunction";
3
+ import ServerlessFunctionLabelRule from "../../Models/DatabaseModels/ServerlessFunctionLabelRule";
4
+ import ServerlessFunctionLabelRuleService from "./ServerlessFunctionLabelRuleService";
5
+ import ServerlessFunctionService from "./ServerlessFunctionService";
6
+ import ObjectID from "../../Types/ObjectID";
7
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
8
+ import logger, { LogAttributes } from "../Utils/Logger";
9
+
10
+ class ServerlessFunctionLabelRuleEngineServiceClass {
11
+ /**
12
+ * Evaluates ServerlessFunctionLabelRule rows for the given function and
13
+ * attaches matched labels. The union is deduped against labels already on
14
+ * the function before insert to avoid PK conflicts on the join table.
15
+ */
16
+ @CaptureSpan()
17
+ public async applyRulesToServerlessFunction(
18
+ serverlessFunction: ServerlessFunction,
19
+ ): Promise<void> {
20
+ if (!serverlessFunction.id || !serverlessFunction.projectId) {
21
+ return;
22
+ }
23
+
24
+ try {
25
+ const rules: Array<ServerlessFunctionLabelRule> =
26
+ await ServerlessFunctionLabelRuleService.findBy({
27
+ query: {
28
+ projectId: serverlessFunction.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 fnWithDetails: ServerlessFunction | null =
49
+ await ServerlessFunctionService.findOneById({
50
+ id: serverlessFunction.id,
51
+ select: {
52
+ name: true,
53
+ description: true,
54
+ labels: { _id: true },
55
+ },
56
+ props: { isRoot: true },
57
+ });
58
+
59
+ if (!fnWithDetails) {
60
+ return;
61
+ }
62
+
63
+ const labelIdsToAdd: Set<string> = new Set();
64
+
65
+ for (const rule of rules) {
66
+ if (!this.doesMatchRule(fnWithDetails, 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
+ (fnWithDetails.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 ServerlessFunctionService.getRepository()
100
+ .createQueryBuilder()
101
+ .relation(ServerlessFunction, "labels")
102
+ .of(serverlessFunction.id.toString())
103
+ .add(newLabelIds);
104
+
105
+ const mergedLabelIds: Set<string> = new Set([
106
+ ...existingLabelIds,
107
+ ...newLabelIds,
108
+ ]);
109
+ serverlessFunction.labels = Array.from(mergedLabelIds).map(
110
+ (id: string) => {
111
+ const label: Label = new Label();
112
+ label.id = new ObjectID(id);
113
+ return label;
114
+ },
115
+ );
116
+ } catch (error) {
117
+ logger.error(`Error applying serverless function label rules: ${error}`, {
118
+ projectId: serverlessFunction.projectId?.toString(),
119
+ serverlessFunctionId: serverlessFunction.id?.toString(),
120
+ } as LogAttributes);
121
+ }
122
+ }
123
+
124
+ private doesMatchRule(
125
+ serverlessFunction: ServerlessFunction,
126
+ rule: ServerlessFunctionLabelRule,
127
+ ): boolean {
128
+ if (rule.matchLabels && rule.matchLabels.length > 0) {
129
+ if (!serverlessFunction.labels || serverlessFunction.labels.length === 0) {
130
+ return false;
131
+ }
132
+ const ruleLabelIds: Array<string> = rule.matchLabels.map((l: Label) => {
133
+ return l.id?.toString() || "";
134
+ });
135
+ const labelIds: Array<string> = serverlessFunction.labels.map(
136
+ (l: Label) => {
137
+ return l.id?.toString() || "";
138
+ },
139
+ );
140
+ if (
141
+ !ruleLabelIds.some((id: string) => {
142
+ return labelIds.includes(id);
143
+ })
144
+ ) {
145
+ return false;
146
+ }
147
+ }
148
+
149
+ if (
150
+ rule.nameRegexPattern &&
151
+ (!serverlessFunction.name ||
152
+ !this.testRegex(rule.nameRegexPattern, serverlessFunction.name))
153
+ ) {
154
+ return false;
155
+ }
156
+
157
+ if (
158
+ rule.descriptionRegexPattern &&
159
+ (!serverlessFunction.description ||
160
+ !this.testRegex(
161
+ rule.descriptionRegexPattern,
162
+ serverlessFunction.description,
163
+ ))
164
+ ) {
165
+ return false;
166
+ }
167
+
168
+ return true;
169
+ }
170
+
171
+ private testRegex(pattern: string, value: string): boolean {
172
+ try {
173
+ const regex: RegExp = new RegExp(pattern, "i");
174
+ return regex.test(value);
175
+ } catch {
176
+ logger.warn(`Invalid regex in serverless function label rule: ${pattern}`);
177
+ return false;
178
+ }
179
+ }
180
+ }
181
+
182
+ export default new ServerlessFunctionLabelRuleEngineServiceClass();
@@ -0,0 +1,14 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/ServerlessFunctionLabelRule";
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();