@budibase/server 1.2.45 → 1.2.46

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 (165) hide show
  1. package/builder/assets/{index.0956c8bc.js → index.f6823431.js} +1 -1
  2. package/builder/index.html +1 -1
  3. package/coverage/clover.xml +29 -27
  4. package/coverage/coverage-final.json +2 -2
  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 +11 -11
  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 +1 -1
  140. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  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 +33 -31
  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/package.json +7 -7
  162. package/src/automations/bullboard.js +2 -0
  163. package/src/automations/listeners.ts +78 -0
  164. package/src/automations/utils.ts +7 -6
  165. package/src/threads/automation.ts +35 -16
@@ -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("active", (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. jobId=${job.id}`);
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.44",
4
+ "version": "1.2.45",
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.44",
81
- "@budibase/client": "^1.2.44",
82
- "@budibase/pro": "1.2.44",
83
- "@budibase/string-templates": "^1.2.44",
84
- "@budibase/types": "^1.2.44",
80
+ "@budibase/backend-core": "^1.2.45",
81
+ "@budibase/client": "^1.2.45",
82
+ "@budibase/pro": "1.2.45",
83
+ "@budibase/string-templates": "^1.2.45",
84
+ "@budibase/types": "^1.2.45",
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) => {
408
+ const appId = input.data.event.appId;
409
+ 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;