@budibase/server 1.2.44 → 1.2.47

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 (167) hide show
  1. package/builder/assets/{index.cd024733.js → index.5686a36e.js} +1 -1
  2. package/builder/index.html +1 -1
  3. package/coverage/clover.xml +32 -30
  4. package/coverage/coverage-final.json +3 -3
  5. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  6. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  7. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/index.html +1 -1
  14. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  20. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/row/index.html +1 -1
  25. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  34. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  39. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  43. package/coverage/lcov-report/api/index.html +1 -1
  44. package/coverage/lcov-report/api/index.js.html +1 -1
  45. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  46. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  47. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  48. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  49. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/index.html +1 -1
  56. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/utils/index.html +1 -1
  70. package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  73. package/coverage/lcov-report/automations/actions.js.html +1 -1
  74. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  75. package/coverage/lcov-report/automations/bullboard.js.html +13 -7
  76. package/coverage/lcov-report/automations/index.html +12 -12
  77. package/coverage/lcov-report/automations/index.js.html +1 -1
  78. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  79. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  80. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  81. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  82. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/index.html +1 -1
  85. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  95. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  96. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  97. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  98. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  100. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  101. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  104. package/coverage/lcov-report/constants/index.html +1 -1
  105. package/coverage/lcov-report/constants/index.js.html +1 -1
  106. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  107. package/coverage/lcov-report/constants/screens.js.html +1 -1
  108. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  109. package/coverage/lcov-report/db/index.html +1 -1
  110. package/coverage/lcov-report/db/index.js.html +1 -1
  111. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  112. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  113. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  114. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  115. package/coverage/lcov-report/db/newid.js.html +1 -1
  116. package/coverage/lcov-report/db/utils.js.html +1 -1
  117. package/coverage/lcov-report/events/AutomationEmitter.js.html +5 -5
  118. package/coverage/lcov-report/events/index.html +1 -1
  119. package/coverage/lcov-report/events/index.js.html +1 -1
  120. package/coverage/lcov-report/events/utils.js.html +1 -1
  121. package/coverage/lcov-report/index.html +15 -15
  122. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  123. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  124. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  125. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  126. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  127. package/coverage/lcov-report/middleware/index.html +1 -1
  128. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  129. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  130. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  131. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  132. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  133. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  134. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  135. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  136. package/coverage/lcov-report/utilities/global.js.html +1 -1
  137. package/coverage/lcov-report/utilities/index.html +1 -1
  138. package/coverage/lcov-report/utilities/index.js.html +1 -1
  139. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +16 -4
  140. package/coverage/lcov-report/utilities/queue/index.html +5 -5
  141. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  142. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  143. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  144. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  145. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  146. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  147. package/coverage/lcov-report/utilities/security.js.html +1 -1
  148. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  149. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  150. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  151. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  152. package/coverage/lcov-report/utilities/users.js.html +1 -1
  153. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  154. package/coverage/lcov.info +38 -34
  155. package/dist/automations/bullboard.js +2 -0
  156. package/dist/automations/listeners.js +102 -0
  157. package/dist/automations/utils.js +6 -2
  158. package/dist/package.json +6 -6
  159. package/dist/threads/automation.js +27 -11
  160. package/dist/tsconfig.build.tsbuildinfo +1 -1
  161. package/dist/utilities/queue/inMemoryQueue.js +3 -0
  162. package/package.json +7 -7
  163. package/src/automations/bullboard.js +2 -0
  164. package/src/automations/listeners.ts +78 -0
  165. package/src/automations/utils.ts +7 -6
  166. package/src/threads/automation.ts +35 -16
  167. package/src/utilities/queue/inMemoryQueue.js +4 -0
@@ -91,7 +91,7 @@
91
91
  <div class='footer quiet pad2 space-top1 center small'>
92
92
  Code coverage generated by
93
93
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
94
- at Fri Aug 19 2022 14:16:53 GMT+0000 (Coordinated Universal Time)
94
+ at Sat Aug 20 2022 11:44:08 GMT+0000 (Coordinated Universal Time)
95
95
  </div>
96
96
  <script src="../prettify.js"></script>
97
97
  <script>
@@ -116,7 +116,7 @@
116
116
  <div class='footer quiet pad2 space-top1 center small'>
117
117
  Code coverage generated by
118
118
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
119
- at Fri Aug 19 2022 14:16:53 GMT+0000 (Coordinated Universal Time)
119
+ at Sat Aug 20 2022 11:44:08 GMT+0000 (Coordinated Universal Time)
120
120
  </div>
121
121
  <script src="../../prettify.js"></script>
122
122
  <script>
@@ -307,7 +307,7 @@ exports.getUniqueRows = async appIds =&gt; {
307
307
  <div class='footer quiet pad2 space-top1 center small'>
308
308
  Code coverage generated by
309
309
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
310
- at Fri Aug 19 2022 14:16:53 GMT+0000 (Coordinated Universal Time)
310
+ at Sat Aug 20 2022 11:44:08 GMT+0000 (Coordinated Universal Time)
311
311
  </div>
312
312
  <script src="../../prettify.js"></script>
313
313
  <script>
@@ -124,7 +124,7 @@ function <span class="fstat-no" title="function not covered" >resetQuotasIfRequi
124
124
  <div class='footer quiet pad2 space-top1 center small'>
125
125
  Code coverage generated by
126
126
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
127
- at Fri Aug 19 2022 14:16:53 GMT+0000 (Coordinated Universal Time)
127
+ at Sat Aug 20 2022 11:44:08 GMT+0000 (Coordinated Universal Time)
128
128
  </div>
129
129
  <script src="../../prettify.js"></script>
130
130
  <script>
@@ -205,7 +205,7 @@ exports.publicApiUserFix = ctx =&gt; {
205
205
  <div class='footer quiet pad2 space-top1 center small'>
206
206
  Code coverage generated by
207
207
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
208
- at Fri Aug 19 2022 14:16:53 GMT+0000 (Coordinated Universal Time)
208
+ at Sat Aug 20 2022 11:44:08 GMT+0000 (Coordinated Universal Time)
209
209
  </div>
210
210
  <script src="../prettify.js"></script>
211
211
  <script>
@@ -535,7 +535,7 @@ exports.getChecklist = <span class="fstat-no" title="function not covered" >as</
535
535
  <div class='footer quiet pad2 space-top1 center small'>
536
536
  Code coverage generated by
537
537
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
538
- at Fri Aug 19 2022 14:16:53 GMT+0000 (Coordinated Universal Time)
538
+ at Sat Aug 20 2022 11:44:08 GMT+0000 (Coordinated Universal Time)
539
539
  </div>
540
540
  <script src="../prettify.js"></script>
541
541
  <script>
@@ -4619,10 +4619,10 @@ BRH:21
4619
4619
  end_of_record
4620
4620
  TN:
4621
4621
  SF:src/automations/bullboard.js
4622
- FN:18,cleanup
4623
- FN:24,(anonymous_1)
4624
- FN:29,(anonymous_2)
4625
- FN:48,(anonymous_3)
4622
+ FN:20,cleanup
4623
+ FN:26,(anonymous_1)
4624
+ FN:31,(anonymous_2)
4625
+ FN:50,(anonymous_3)
4626
4626
  FNF:4
4627
4627
  FNH:0
4628
4628
  FNDA:0,cleanup
@@ -4637,41 +4637,43 @@ DA:5,45
4637
4637
  DA:8,45
4638
4638
  DA:9,45
4639
4639
  DA:10,45
4640
- DA:12,45
4640
+ DA:11,45
4641
4641
  DA:13,45
4642
4642
  DA:14,45
4643
- DA:16,45
4644
- DA:19,0
4645
- DA:22,45
4643
+ DA:15,45
4644
+ DA:17,45
4645
+ DA:18,45
4646
+ DA:21,0
4646
4647
  DA:24,45
4647
- DA:26,0
4648
- DA:27,0
4648
+ DA:26,45
4649
+ DA:28,0
4649
4650
  DA:29,0
4650
- DA:30,0
4651
- DA:34,0
4652
- DA:35,0
4651
+ DA:31,0
4652
+ DA:32,0
4653
4653
  DA:36,0
4654
4654
  DA:37,0
4655
4655
  DA:38,0
4656
+ DA:39,0
4656
4657
  DA:40,0
4657
- DA:44,0
4658
- DA:45,0
4659
- DA:48,45
4660
- DA:49,0
4661
- DA:50,0
4658
+ DA:42,0
4659
+ DA:46,0
4660
+ DA:47,0
4661
+ DA:50,45
4662
4662
  DA:51,0
4663
4663
  DA:52,0
4664
- DA:56,45
4665
- LF:33
4666
- LH:16
4664
+ DA:53,0
4665
+ DA:54,0
4666
+ DA:58,45
4667
+ LF:35
4668
+ LH:18
4667
4669
  BRDA:5,0,0,45
4668
4670
  BRDA:5,0,1,0
4669
- BRDA:13,1,0,45
4670
- BRDA:13,1,1,45
4671
- BRDA:26,2,0,0
4672
- BRDA:26,2,1,0
4673
- BRDA:49,3,0,0
4674
- BRDA:49,3,1,0
4671
+ BRDA:14,1,0,45
4672
+ BRDA:14,1,1,45
4673
+ BRDA:28,2,0,0
4674
+ BRDA:28,2,1,0
4675
+ BRDA:51,3,0,0
4676
+ BRDA:51,3,1,0
4675
4677
  BRF:8
4676
4678
  BRH:3
4677
4679
  end_of_record
@@ -6380,9 +6382,9 @@ FNH:2
6380
6382
  FNDA:6,(anonymous_0)
6381
6383
  FNDA:5,(anonymous_1)
6382
6384
  FNDA:0,(anonymous_2)
6383
- DA:1,3
6384
- DA:2,3
6385
- DA:5,3
6385
+ DA:1,44
6386
+ DA:2,44
6387
+ DA:5,44
6386
6388
  DA:15,6
6387
6389
  DA:16,6
6388
6390
  DA:23,5
@@ -6391,7 +6393,7 @@ DA:26,4
6391
6393
  DA:38,0
6392
6394
  DA:39,0
6393
6395
  DA:41,0
6394
- DA:51,3
6396
+ DA:51,44
6395
6397
  LF:12
6396
6398
  LH:9
6397
6399
  BRDA:21,0,0,0
@@ -7647,8 +7649,9 @@ FN:97,(anonymous_7)
7647
7649
  FN:102,(anonymous_8)
7648
7650
  FN:109,(anonymous_9)
7649
7651
  FN:113,(anonymous_10)
7650
- FNF:11
7651
- FNH:6
7652
+ FN:117,(anonymous_11)
7653
+ FNF:12
7654
+ FNH:7
7652
7655
  FNDA:8,newJob
7653
7656
  FNDA:45,(anonymous_1)
7654
7657
  FNDA:32,(anonymous_2)
@@ -7660,6 +7663,7 @@ FNDA:253,(anonymous_7)
7660
7663
  FNDA:0,(anonymous_8)
7661
7664
  FNDA:0,(anonymous_9)
7662
7665
  FNDA:0,(anonymous_10)
7666
+ FNDA:45,(anonymous_11)
7663
7667
  DA:1,45
7664
7668
  DA:13,8
7665
7669
  DA:33,45
@@ -7682,7 +7686,7 @@ DA:91,0
7682
7686
  DA:98,253
7683
7687
  DA:110,0
7684
7688
  DA:114,0
7685
- DA:118,45
7689
+ DA:122,45
7686
7690
  LF:23
7687
7691
  LH:18
7688
7692
  BRDA:32,0,0,0
@@ -18,10 +18,12 @@ const Queue = env.isTest()
18
18
  const { JobQueues } = require("../constants");
19
19
  const { utils } = require("@budibase/backend-core/redis");
20
20
  const { opts, redisProtocolUrl } = utils.getRedisOptions();
21
+ const listeners = require("./listeners");
21
22
  const CLEANUP_PERIOD_MS = 60 * 1000;
22
23
  const queueConfig = redisProtocolUrl || { redis: opts };
23
24
  let cleanupInternal = null;
24
25
  let automationQueue = new Queue(JobQueues.AUTOMATIONS, queueConfig);
26
+ listeners.addListeners(automationQueue);
25
27
  function cleanup() {
26
28
  return __awaiter(this, void 0, void 0, function* () {
27
29
  yield automationQueue.clean(CLEANUP_PERIOD_MS, "completed");
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.addListeners = void 0;
36
+ const automation = __importStar(require("../threads/automation"));
37
+ const addListeners = (queue) => {
38
+ logging(queue);
39
+ handleStalled(queue);
40
+ };
41
+ exports.addListeners = addListeners;
42
+ const handleStalled = (queue) => {
43
+ queue.on("stalled", (job) => __awaiter(void 0, void 0, void 0, function* () {
44
+ yield automation.removeStalled(job);
45
+ }));
46
+ };
47
+ const logging = (queue) => {
48
+ var _a;
49
+ if ((_a = process.env.NODE_DEBUG) === null || _a === void 0 ? void 0 : _a.includes("bull")) {
50
+ queue
51
+ .on("error", (error) => {
52
+ // An error occurred.
53
+ console.error(`automation-event=error error=${JSON.stringify(error)}`);
54
+ })
55
+ .on("waiting", (jobId) => {
56
+ // A Job is waiting to be processed as soon as a worker is idling.
57
+ console.log(`automation-event=waiting jobId=${jobId}`);
58
+ })
59
+ .on("active", (job, jobPromise) => {
60
+ // A job has started. You can use `jobPromise.cancel()`` to abort it.
61
+ console.log(`automation-event=active jobId=${job.id}`);
62
+ })
63
+ .on("stalled", (job) => {
64
+ // A job has been marked as stalled. This is useful for debugging job
65
+ // workers that crash or pause the event loop.
66
+ console.error(`automation-event=stalled jobId=${job.id} job=${JSON.stringify(job)}`);
67
+ })
68
+ .on("progress", (job, progress) => {
69
+ // A job's progress was updated!
70
+ console.log(`automation-event=progress jobId=${job.id} progress=${progress}`);
71
+ })
72
+ .on("completed", (job, result) => {
73
+ // A job successfully completed with a `result`.
74
+ console.log(`automation-event=completed jobId=${job.id} result=${result}`);
75
+ })
76
+ .on("failed", (job, err) => {
77
+ // A job failed with reason `err`!
78
+ console.log(`automation-event=failed jobId=${job.id} error=${err}`);
79
+ })
80
+ .on("paused", () => {
81
+ // The queue has been paused.
82
+ console.log(`automation-event=paused`);
83
+ })
84
+ .on("resumed", (job) => {
85
+ // The queue has been resumed.
86
+ console.log(`automation-event=paused jobId=${job.id}`);
87
+ })
88
+ .on("cleaned", (jobs, type) => {
89
+ // Old jobs have been cleaned from the queue. `jobs` is an array of cleaned
90
+ // jobs, and `type` is the type of jobs cleaned.
91
+ console.log(`automation-event=cleaned length=${jobs.length} type=${type}`);
92
+ })
93
+ .on("drained", () => {
94
+ // Emitted every time the queue has processed all the waiting jobs (even if there can be some delayed jobs not yet processed)
95
+ console.log(`automation-event=drained`);
96
+ })
97
+ .on("removed", (job) => {
98
+ // A job successfully removed.
99
+ console.log(`automation-event=removed jobId=${job.id}`);
100
+ });
101
+ }
102
+ };
@@ -52,10 +52,13 @@ const pro_1 = require("@budibase/pro");
52
52
  const WH_STEP_ID = triggerInfo_1.definitions.WEBHOOK.stepId;
53
53
  const CRON_STEP_ID = triggerInfo_1.definitions.CRON.stepId;
54
54
  const Runner = new threads_1.Thread(threads_1.ThreadType.AUTOMATION);
55
+ const jobMessage = (job, message) => {
56
+ return `app=${job.data.event.appId} automation=${job.data.automation._id} jobId=${job.id} trigger=${job.data.automation.definition.trigger.event} : ${message}`;
57
+ };
55
58
  function processEvent(job) {
56
59
  return __awaiter(this, void 0, void 0, function* () {
57
60
  try {
58
- console.log(`${job.data.automation.appId} automation ${job.data.automation._id} running`);
61
+ console.log(jobMessage(job, "running"));
59
62
  // need to actually await these so that an error can be captured properly
60
63
  const tenantId = backend_core_1.tenancy.getTenantIDFromAppID(job.data.event.appId);
61
64
  return yield backend_core_1.tenancy.doInTenant(tenantId, () => __awaiter(this, void 0, void 0, function* () {
@@ -65,7 +68,7 @@ function processEvent(job) {
65
68
  }
66
69
  catch (err) {
67
70
  const errJson = JSON.stringify(err);
68
- console.error(`${job.data.automation.appId} automation ${job.data.automation._id} was unable to run - ${errJson}`);
71
+ console.error(jobMessage(job, `was unable to run - ${errJson}`));
69
72
  console.trace(err);
70
73
  return { err };
71
74
  }
@@ -119,6 +122,7 @@ function disableCron(jobId, jobKey) {
119
122
  return __awaiter(this, void 0, void 0, function* () {
120
123
  yield bullboard_1.queue.removeRepeatableByKey(jobKey);
121
124
  yield bullboard_1.queue.removeJobs(jobId);
125
+ console.log(`jobId=${jobId} disabled`);
122
126
  });
123
127
  }
124
128
  exports.disableCron = disableCron;
package/dist/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "1.2.43",
4
+ "version": "1.2.46",
5
5
  "description": "Budibase Web Server",
6
6
  "main": "src/index.ts",
7
7
  "repository": {
@@ -77,11 +77,11 @@
77
77
  "license": "GPL-3.0",
78
78
  "dependencies": {
79
79
  "@apidevtools/swagger-parser": "10.0.3",
80
- "@budibase/backend-core": "^1.2.43",
81
- "@budibase/client": "^1.2.43",
82
- "@budibase/pro": "1.2.43",
83
- "@budibase/string-templates": "^1.2.43",
84
- "@budibase/types": "^1.2.43",
80
+ "@budibase/backend-core": "^1.2.46",
81
+ "@budibase/client": "^1.2.46",
82
+ "@budibase/pro": "1.2.46",
83
+ "@budibase/string-templates": "^1.2.46",
84
+ "@budibase/types": "^1.2.46",
85
85
  "@bull-board/api": "3.7.0",
86
86
  "@bull-board/koa": "3.9.4",
87
87
  "@elastic/elasticsearch": "7.10.0",
@@ -12,7 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.execute = void 0;
15
+ exports.removeStalled = exports.execute = void 0;
16
16
  const utils_1 = __importDefault(require("./utils"));
17
17
  utils_1.default.threadSetup();
18
18
  const utils_2 = require("../automations/utils");
@@ -130,22 +130,30 @@ class Orchestrator {
130
130
  return metadata;
131
131
  });
132
132
  }
133
- checkIfShouldStop(metadata) {
133
+ stopCron(reason) {
134
134
  var _a, _b;
135
135
  return __awaiter(this, void 0, void 0, function* () {
136
- if (!metadata.errorCount || !this._repeat) {
137
- return false;
136
+ if (!this._repeat) {
137
+ return;
138
138
  }
139
+ logWarn(`CRON disabled reason=${reason} - ${this._appId}/${this._automation._id}`);
139
140
  const automation = this._automation;
140
141
  const trigger = automation.definition.trigger;
142
+ yield (0, utils_2.disableCron)((_a = this._repeat) === null || _a === void 0 ? void 0 : _a.jobId, (_b = this._repeat) === null || _b === void 0 ? void 0 : _b.jobKey);
143
+ this.updateExecutionOutput(trigger.id, trigger.stepId, {}, {
144
+ status: types_1.AutomationStatus.STOPPED_ERROR,
145
+ success: false,
146
+ });
147
+ yield (0, logging_1.storeLog)(automation, this.executionOutput);
148
+ });
149
+ }
150
+ checkIfShouldStop(metadata) {
151
+ return __awaiter(this, void 0, void 0, function* () {
152
+ if (!metadata.errorCount || !this._repeat) {
153
+ return false;
154
+ }
141
155
  if (metadata.errorCount >= constants_1.MAX_AUTOMATION_RECURRING_ERRORS) {
142
- logWarn(`CRON disabled due to errors - ${this._appId}/${this._automation._id}`);
143
- yield (0, utils_2.disableCron)((_a = this._repeat) === null || _a === void 0 ? void 0 : _a.jobId, (_b = this._repeat) === null || _b === void 0 ? void 0 : _b.jobKey);
144
- this.updateExecutionOutput(trigger.id, trigger.stepId, {}, {
145
- status: types_1.AutomationStatus.STOPPED_ERROR,
146
- success: false,
147
- });
148
- yield (0, logging_1.storeLog)(automation, this.executionOutput);
156
+ yield this.stopCron("errors");
149
157
  return true;
150
158
  }
151
159
  return false;
@@ -396,3 +404,11 @@ function execute(input, callback) {
396
404
  }));
397
405
  }
398
406
  exports.execute = execute;
407
+ const removeStalled = (input) => __awaiter(void 0, void 0, void 0, function* () {
408
+ const appId = input.data.event.appId;
409
+ yield doInAppContext(appId, () => __awaiter(void 0, void 0, void 0, function* () {
410
+ const automationOrchestrator = new Orchestrator(input.data.automation, input.data.event, input.opts);
411
+ yield automationOrchestrator.stopCron("stalled");
412
+ }));
413
+ });
414
+ exports.removeStalled = removeStalled;