@oneuptime/common 10.7.1 → 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 (262) 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/Tests/Types/Monitor/KubernetesAlertTemplates.test.ts +193 -0
  75. package/Tests/UI/Components/DuplicateModel.test.tsx +2 -2
  76. package/Types/Monitor/KubernetesAlertTemplates.ts +239 -14
  77. package/Types/Permission.ts +692 -1
  78. package/Types/Telemetry/ServiceType.ts +3 -0
  79. package/Types/Workflow/ComponentID.ts +1 -0
  80. package/Types/Workflow/Components/Sleep.ts +71 -0
  81. package/Types/Workflow/Components.ts +2 -0
  82. package/Types/Workflow/WorkflowStatus.ts +1 -0
  83. package/UI/Components/BulkUpdate/BulkLabelActions.tsx +159 -32
  84. package/UI/Components/Navbar/NavBar.tsx +72 -123
  85. package/UI/Components/Navbar/NavBarMenuModal.tsx +642 -0
  86. package/UI/Components/Workflow/WorkflowStatus.tsx +3 -0
  87. package/build/dist/Models/DatabaseModels/CloudResource.js +871 -0
  88. package/build/dist/Models/DatabaseModels/CloudResource.js.map +1 -0
  89. package/build/dist/Models/DatabaseModels/CloudResourceInstance.js +300 -0
  90. package/build/dist/Models/DatabaseModels/CloudResourceInstance.js.map +1 -0
  91. package/build/dist/Models/DatabaseModels/CloudResourceLabelRule.js +520 -0
  92. package/build/dist/Models/DatabaseModels/CloudResourceLabelRule.js.map +1 -0
  93. package/build/dist/Models/DatabaseModels/CloudResourceOwnerRule.js +601 -0
  94. package/build/dist/Models/DatabaseModels/CloudResourceOwnerRule.js.map +1 -0
  95. package/build/dist/Models/DatabaseModels/CloudResourceOwnerTeam.js +503 -0
  96. package/build/dist/Models/DatabaseModels/CloudResourceOwnerTeam.js.map +1 -0
  97. package/build/dist/Models/DatabaseModels/CloudResourceOwnerUser.js +502 -0
  98. package/build/dist/Models/DatabaseModels/CloudResourceOwnerUser.js.map +1 -0
  99. package/build/dist/Models/DatabaseModels/Host.js +215 -0
  100. package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
  101. package/build/dist/Models/DatabaseModels/Index.js +36 -0
  102. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  103. package/build/dist/Models/DatabaseModels/RumApplication.js +751 -0
  104. package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -0
  105. package/build/dist/Models/DatabaseModels/RumApplicationClient.js +252 -0
  106. package/build/dist/Models/DatabaseModels/RumApplicationClient.js.map +1 -0
  107. package/build/dist/Models/DatabaseModels/RumApplicationLabelRule.js +520 -0
  108. package/build/dist/Models/DatabaseModels/RumApplicationLabelRule.js.map +1 -0
  109. package/build/dist/Models/DatabaseModels/RumApplicationOwnerRule.js +601 -0
  110. package/build/dist/Models/DatabaseModels/RumApplicationOwnerRule.js.map +1 -0
  111. package/build/dist/Models/DatabaseModels/RumApplicationOwnerTeam.js +503 -0
  112. package/build/dist/Models/DatabaseModels/RumApplicationOwnerTeam.js.map +1 -0
  113. package/build/dist/Models/DatabaseModels/RumApplicationOwnerUser.js +502 -0
  114. package/build/dist/Models/DatabaseModels/RumApplicationOwnerUser.js.map +1 -0
  115. package/build/dist/Models/DatabaseModels/ServerlessFunction.js +908 -0
  116. package/build/dist/Models/DatabaseModels/ServerlessFunction.js.map +1 -0
  117. package/build/dist/Models/DatabaseModels/ServerlessFunctionInstance.js +234 -0
  118. package/build/dist/Models/DatabaseModels/ServerlessFunctionInstance.js.map +1 -0
  119. package/build/dist/Models/DatabaseModels/ServerlessFunctionLabelRule.js +520 -0
  120. package/build/dist/Models/DatabaseModels/ServerlessFunctionLabelRule.js.map +1 -0
  121. package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerRule.js +601 -0
  122. package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerRule.js.map +1 -0
  123. package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerTeam.js +503 -0
  124. package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerTeam.js.map +1 -0
  125. package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerUser.js +502 -0
  126. package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerUser.js.map +1 -0
  127. package/build/dist/Models/DatabaseModels/Service.js +276 -0
  128. package/build/dist/Models/DatabaseModels/Service.js.map +1 -1
  129. package/build/dist/Models/DatabaseModels/TelemetryException.js +12 -1
  130. package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
  131. package/build/dist/Models/DatabaseModels/WorkflowLog.js +53 -0
  132. package/build/dist/Models/DatabaseModels/WorkflowLog.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 +3 -0
  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 +3 -0
  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/Tests/Types/Monitor/KubernetesAlertTemplates.test.js +121 -0
  231. package/build/dist/Tests/Types/Monitor/KubernetesAlertTemplates.test.js.map +1 -0
  232. package/build/dist/Tests/UI/Components/DuplicateModel.test.js +2 -2
  233. package/build/dist/Tests/UI/Components/DuplicateModel.test.js.map +1 -1
  234. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +210 -14
  235. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
  236. package/build/dist/Types/Permission.js +609 -1
  237. package/build/dist/Types/Permission.js.map +1 -1
  238. package/build/dist/Types/Telemetry/ServiceType.js +3 -0
  239. package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
  240. package/build/dist/Types/Workflow/ComponentID.js +1 -0
  241. package/build/dist/Types/Workflow/ComponentID.js.map +1 -1
  242. package/build/dist/Types/Workflow/Components/Sleep.js +64 -0
  243. package/build/dist/Types/Workflow/Components/Sleep.js.map +1 -0
  244. package/build/dist/Types/Workflow/Components.js +2 -0
  245. package/build/dist/Types/Workflow/Components.js.map +1 -1
  246. package/build/dist/Types/Workflow/WorkflowStatus.js +1 -0
  247. package/build/dist/Types/Workflow/WorkflowStatus.js.map +1 -1
  248. package/build/dist/UI/Components/BulkUpdate/BulkLabelActions.js +113 -19
  249. package/build/dist/UI/Components/BulkUpdate/BulkLabelActions.js.map +1 -1
  250. package/build/dist/UI/Components/Navbar/NavBar.js +34 -66
  251. package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
  252. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +412 -0
  253. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -0
  254. package/build/dist/UI/Components/Workflow/WorkflowStatus.js +3 -0
  255. package/build/dist/UI/Components/Workflow/WorkflowStatus.js.map +1 -1
  256. package/package.json +1 -1
  257. package/UI/Components/Navbar/NavBarMenu.tsx +0 -183
  258. package/UI/Components/Navbar/NavBarMenuItem.tsx +0 -146
  259. package/build/dist/UI/Components/Navbar/NavBarMenu.js +0 -82
  260. package/build/dist/UI/Components/Navbar/NavBarMenu.js.map +0 -1
  261. package/build/dist/UI/Components/Navbar/NavBarMenuItem.js +0 -109
  262. package/build/dist/UI/Components/Navbar/NavBarMenuItem.js.map +0 -1
@@ -0,0 +1,179 @@
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 ServerlessFunction from "../../Models/DatabaseModels/ServerlessFunction";
11
+ import ServerlessFunctionOwnerUser from "../../Models/DatabaseModels/ServerlessFunctionOwnerUser";
12
+ import ServerlessFunctionOwnerTeam from "../../Models/DatabaseModels/ServerlessFunctionOwnerTeam";
13
+ import ServerlessFunctionOwnerRuleService from "./ServerlessFunctionOwnerRuleService";
14
+ import ServerlessFunctionOwnerUserService from "./ServerlessFunctionOwnerUserService";
15
+ import ServerlessFunctionOwnerTeamService from "./ServerlessFunctionOwnerTeamService";
16
+ import ServerlessFunctionService from "./ServerlessFunctionService";
17
+ import ObjectID from "../../Types/ObjectID";
18
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
19
+ import logger from "../Utils/Logger";
20
+ class ServerlessFunctionOwnerRuleEngineServiceClass {
21
+ /**
22
+ * Evaluates ServerlessFunctionOwnerRule rows for the given function and adds
23
+ * matched owner users / teams. Rules with notifyOwners set notify the added
24
+ * owners; rules with notifyOwners off add silently.
25
+ */
26
+ async applyRulesToServerlessFunction(serverlessFunction) {
27
+ var _a, _b;
28
+ if (!serverlessFunction.id || !serverlessFunction.projectId) {
29
+ return;
30
+ }
31
+ try {
32
+ const rules = await ServerlessFunctionOwnerRuleService.findBy({
33
+ query: {
34
+ projectId: serverlessFunction.projectId,
35
+ isEnabled: true,
36
+ },
37
+ props: { isRoot: true },
38
+ select: {
39
+ _id: true,
40
+ name: true,
41
+ notifyOwners: true,
42
+ matchLabels: { _id: true },
43
+ nameRegexPattern: true,
44
+ descriptionRegexPattern: true,
45
+ ownerUsers: { _id: true },
46
+ ownerTeams: { _id: true },
47
+ },
48
+ limit: 100,
49
+ skip: 0,
50
+ });
51
+ if (rules.length === 0) {
52
+ return;
53
+ }
54
+ const fnWithDetails = await ServerlessFunctionService.findOneById({
55
+ id: serverlessFunction.id,
56
+ select: {
57
+ name: true,
58
+ description: true,
59
+ labels: { _id: true },
60
+ },
61
+ props: { isRoot: true },
62
+ });
63
+ if (!fnWithDetails) {
64
+ return;
65
+ }
66
+ const usersByNotify = new Map([
67
+ [true, new Set()],
68
+ [false, new Set()],
69
+ ]);
70
+ const teamsByNotify = new Map([
71
+ [true, new Set()],
72
+ [false, new Set()],
73
+ ]);
74
+ let anyMatched = false;
75
+ for (const rule of rules) {
76
+ if (!this.doesMatchRule(fnWithDetails, rule)) {
77
+ continue;
78
+ }
79
+ const notify = rule.notifyOwners !== false;
80
+ for (const user of rule.ownerUsers || []) {
81
+ if (user.id) {
82
+ usersByNotify.get(notify).add(user.id.toString());
83
+ anyMatched = true;
84
+ }
85
+ }
86
+ for (const team of rule.ownerTeams || []) {
87
+ if (team.id) {
88
+ teamsByNotify.get(notify).add(team.id.toString());
89
+ anyMatched = true;
90
+ }
91
+ }
92
+ }
93
+ if (!anyMatched) {
94
+ return;
95
+ }
96
+ for (const notify of [true, false]) {
97
+ const userIds = usersByNotify.get(notify);
98
+ const teamIds = teamsByNotify.get(notify);
99
+ for (const userId of userIds) {
100
+ const owner = new ServerlessFunctionOwnerUser();
101
+ owner.serverlessFunctionId = serverlessFunction.id;
102
+ owner.projectId = serverlessFunction.projectId;
103
+ owner.userId = new ObjectID(userId);
104
+ owner.isOwnerNotified = !notify;
105
+ await ServerlessFunctionOwnerUserService.create({
106
+ data: owner,
107
+ props: { isRoot: true },
108
+ });
109
+ }
110
+ for (const teamId of teamIds) {
111
+ const owner = new ServerlessFunctionOwnerTeam();
112
+ owner.serverlessFunctionId = serverlessFunction.id;
113
+ owner.projectId = serverlessFunction.projectId;
114
+ owner.teamId = new ObjectID(teamId);
115
+ owner.isOwnerNotified = !notify;
116
+ await ServerlessFunctionOwnerTeamService.create({
117
+ data: owner,
118
+ props: { isRoot: true },
119
+ });
120
+ }
121
+ }
122
+ }
123
+ catch (error) {
124
+ logger.error(`Error applying serverless function owner rules: ${error}`, {
125
+ projectId: (_a = serverlessFunction.projectId) === null || _a === void 0 ? void 0 : _a.toString(),
126
+ serverlessFunctionId: (_b = serverlessFunction.id) === null || _b === void 0 ? void 0 : _b.toString(),
127
+ });
128
+ }
129
+ }
130
+ doesMatchRule(serverlessFunction, rule) {
131
+ if (rule.matchLabels && rule.matchLabels.length > 0) {
132
+ if (!serverlessFunction.labels || serverlessFunction.labels.length === 0) {
133
+ return false;
134
+ }
135
+ const ruleLabelIds = rule.matchLabels.map((l) => {
136
+ var _a;
137
+ return ((_a = l.id) === null || _a === void 0 ? void 0 : _a.toString()) || "";
138
+ });
139
+ const labelIds = serverlessFunction.labels.map((l) => {
140
+ var _a;
141
+ return ((_a = l.id) === null || _a === void 0 ? void 0 : _a.toString()) || "";
142
+ });
143
+ if (!ruleLabelIds.some((id) => {
144
+ return labelIds.includes(id);
145
+ })) {
146
+ return false;
147
+ }
148
+ }
149
+ if (rule.nameRegexPattern &&
150
+ (!serverlessFunction.name ||
151
+ !this.testRegex(rule.nameRegexPattern, serverlessFunction.name))) {
152
+ return false;
153
+ }
154
+ if (rule.descriptionRegexPattern &&
155
+ (!serverlessFunction.description ||
156
+ !this.testRegex(rule.descriptionRegexPattern, serverlessFunction.description))) {
157
+ return false;
158
+ }
159
+ return true;
160
+ }
161
+ testRegex(pattern, value) {
162
+ try {
163
+ const regex = new RegExp(pattern, "i");
164
+ return regex.test(value);
165
+ }
166
+ catch (_a) {
167
+ logger.warn(`Invalid regex in serverless function owner rule: ${pattern}`);
168
+ return false;
169
+ }
170
+ }
171
+ }
172
+ __decorate([
173
+ CaptureSpan(),
174
+ __metadata("design:type", Function),
175
+ __metadata("design:paramtypes", [ServerlessFunction]),
176
+ __metadata("design:returntype", Promise)
177
+ ], ServerlessFunctionOwnerRuleEngineServiceClass.prototype, "applyRulesToServerlessFunction", null);
178
+ export default new ServerlessFunctionOwnerRuleEngineServiceClass();
179
+ //# sourceMappingURL=ServerlessFunctionOwnerRuleEngineService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerlessFunctionOwnerRuleEngineService.js","sourceRoot":"","sources":["../../../../Server/Services/ServerlessFunctionOwnerRuleEngineService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/ServerlessFunctionOwnerRule";
3
+ import { IsBillingEnabled } from "../EnvironmentConfig";
4
+ export class Service extends DatabaseService {
5
+ constructor() {
6
+ super(Model);
7
+ if (IsBillingEnabled) {
8
+ this.hardDeleteItemsOlderThanInDays("createdAt", 3 * 365);
9
+ }
10
+ }
11
+ }
12
+ export default new Service();
13
+ //# sourceMappingURL=ServerlessFunctionOwnerRuleService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerlessFunctionOwnerRuleService.js","sourceRoot":"","sources":["../../../../Server/Services/ServerlessFunctionOwnerRuleService.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,yDAAyD,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IACjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,gBAAgB,EAAE,CAAC;YACrB,IAAI,CAAC,8BAA8B,CAAC,WAAW,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;CACF;AAED,eAAe,IAAI,OAAO,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/ServerlessFunctionOwnerTeam";
3
+ export class Service extends DatabaseService {
4
+ constructor() {
5
+ super(Model);
6
+ }
7
+ }
8
+ export default new Service();
9
+ //# sourceMappingURL=ServerlessFunctionOwnerTeamService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerlessFunctionOwnerTeamService.js","sourceRoot":"","sources":["../../../../Server/Services/ServerlessFunctionOwnerTeamService.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,yDAAyD,CAAC;AAE5E,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IACjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;CACF;AAED,eAAe,IAAI,OAAO,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/ServerlessFunctionOwnerUser";
3
+ export class Service extends DatabaseService {
4
+ constructor() {
5
+ super(Model);
6
+ }
7
+ }
8
+ export default new Service();
9
+ //# sourceMappingURL=ServerlessFunctionOwnerUserService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerlessFunctionOwnerUserService.js","sourceRoot":"","sources":["../../../../Server/Services/ServerlessFunctionOwnerUserService.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,yDAAyD,CAAC;AAE5E,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IACjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;CACF;AAED,eAAe,IAAI,OAAO,EAAE,CAAC"}
@@ -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([