@budibase/server 1.0.212-alpha.12 → 1.0.212-alpha.13

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 (187) hide show
  1. package/builder/assets/{index.a895b27f.js → index.8653aa05.js} +164 -165
  2. package/builder/assets/{index.969c2236.css → index.92958011.css} +2 -2
  3. package/builder/assets/{vendor.9bf2fcb4.js → vendor.b4361801.js} +163 -163
  4. package/builder/index.html +3 -3
  5. package/coverage/clover.xml +414 -394
  6. package/coverage/coverage-final.json +8 -8
  7. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/automation.js.html +111 -12
  10. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/index.html +19 -19
  16. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  22. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/row/index.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  36. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  41. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  45. package/coverage/lcov-report/api/index.html +15 -15
  46. package/coverage/lcov-report/api/index.js.html +18 -9
  47. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  48. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  49. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/automation.js.html +32 -2
  51. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/index.html +1 -1
  58. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/utils/index.html +1 -1
  72. package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  75. package/coverage/lcov-report/automations/actions.js.html +1 -1
  76. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  77. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  78. package/coverage/lcov-report/automations/index.html +1 -1
  79. package/coverage/lcov-report/automations/index.js.html +1 -1
  80. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  81. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  82. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/filter.js.html +58 -34
  86. package/coverage/lcov-report/automations/steps/index.html +11 -11
  87. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  97. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  98. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  100. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  101. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  106. package/coverage/lcov-report/constants/index.html +1 -1
  107. package/coverage/lcov-report/constants/index.js.html +1 -1
  108. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  109. package/coverage/lcov-report/constants/screens.js.html +1 -1
  110. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  111. package/coverage/lcov-report/db/index.html +14 -14
  112. package/coverage/lcov-report/db/index.js.html +1 -1
  113. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  114. package/coverage/lcov-report/db/linkedRows/index.html +13 -13
  115. package/coverage/lcov-report/db/linkedRows/index.js.html +10 -7
  116. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  117. package/coverage/lcov-report/db/newid.js.html +1 -1
  118. package/coverage/lcov-report/db/utils.js.html +14 -41
  119. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  120. package/coverage/lcov-report/events/index.html +1 -1
  121. package/coverage/lcov-report/events/index.js.html +1 -1
  122. package/coverage/lcov-report/events/utils.js.html +1 -1
  123. package/coverage/lcov-report/index.html +52 -52
  124. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  125. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  126. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  127. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  128. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  129. package/coverage/lcov-report/middleware/index.html +1 -1
  130. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  131. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  132. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  133. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  134. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  135. package/coverage/lcov-report/threads/automation.js.html +17 -8
  136. package/coverage/lcov-report/threads/index.html +11 -11
  137. package/coverage/lcov-report/threads/query.js.html +1 -1
  138. package/coverage/lcov-report/threads/utils.js.html +1 -1
  139. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  140. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  141. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  142. package/coverage/lcov-report/utilities/global.js.html +1 -1
  143. package/coverage/lcov-report/utilities/index.html +1 -1
  144. package/coverage/lcov-report/utilities/index.js.html +1 -1
  145. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  146. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  147. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  148. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  149. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  150. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  151. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  152. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  153. package/coverage/lcov-report/utilities/security.js.html +2 -2
  154. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  155. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  156. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  157. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  158. package/coverage/lcov-report/utilities/users.js.html +1 -1
  159. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  160. package/coverage/lcov.info +721 -687
  161. package/dist/api/controllers/application.js +2 -1
  162. package/dist/api/controllers/automation.js +28 -2
  163. package/dist/api/index.js +4 -1
  164. package/dist/api/routes/automation.js +2 -0
  165. package/dist/automations/logging/index.js +70 -0
  166. package/dist/automations/steps/filter.js +38 -29
  167. package/dist/db/linkedRows/index.js +1 -0
  168. package/dist/db/utils.js +3 -31
  169. package/dist/environment.js +1 -0
  170. package/dist/package.json +6 -6
  171. package/dist/threads/automation.js +5 -2
  172. package/dist/threads/index.js +15 -1
  173. package/dist/tsconfig.build.tsbuildinfo +1 -1
  174. package/package.json +7 -7
  175. package/src/api/controllers/application.ts +2 -1
  176. package/src/api/controllers/automation.js +35 -2
  177. package/src/api/index.js +4 -1
  178. package/src/api/routes/automation.js +10 -0
  179. package/src/automations/logging/index.ts +35 -0
  180. package/src/automations/steps/filter.js +36 -28
  181. package/src/automations/tests/filter.spec.js +2 -1
  182. package/src/db/linkedRows/index.js +1 -0
  183. package/src/db/utils.js +4 -13
  184. package/src/environment.js +1 -0
  185. package/src/module.d.ts +1 -0
  186. package/src/threads/automation.js +5 -2
  187. package/src/threads/index.ts +5 -1
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "1.0.212-alpha.12",
4
+ "version": "1.0.212-alpha.13",
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.0.212-alpha.12",
81
- "@budibase/client": "^1.0.212-alpha.12",
82
- "@budibase/pro": "1.0.212-alpha.11",
83
- "@budibase/string-templates": "^1.0.212-alpha.12",
84
- "@budibase/types": "^1.0.212-alpha.12",
80
+ "@budibase/backend-core": "^1.0.212-alpha.13",
81
+ "@budibase/client": "^1.0.212-alpha.13",
82
+ "@budibase/pro": "1.0.212-alpha.12",
83
+ "@budibase/string-templates": "^1.0.212-alpha.13",
84
+ "@budibase/types": "^1.0.212-alpha.13",
85
85
  "@bull-board/api": "3.7.0",
86
86
  "@bull-board/koa": "3.9.4",
87
87
  "@elastic/elasticsearch": "7.10.0",
@@ -195,5 +195,5 @@
195
195
  "optionalDependencies": {
196
196
  "oracledb": "5.3.0"
197
197
  },
198
- "gitHead": "2a15345a18bfeb1764cc1cd15a67fa3f881f8d9d"
198
+ "gitHead": "1b460f45a10f98573cb9fe7ca5269550155c5bed"
199
199
  }
@@ -45,6 +45,7 @@ const { getTenantId, isMultiTenant } = require("@budibase/backend-core/tenancy")
45
45
  import { syncGlobalUsers } from "./user"
46
46
  const { app: appCache } = require("@budibase/backend-core/cache")
47
47
  import { cleanupAutomations } from "../../automations/utils"
48
+ import { checkAppMetadata } from "../../automations/logging"
48
49
  const {
49
50
  getAppDB,
50
51
  getProdAppDB,
@@ -193,7 +194,7 @@ export const fetch = async (ctx: any) => {
193
194
  }
194
195
  }
195
196
 
196
- ctx.body = apps
197
+ ctx.body = await checkAppMetadata(apps)
197
198
  }
198
199
 
199
200
  export const fetchAppDefinition = async (ctx: any) => {
@@ -1,6 +1,10 @@
1
1
  const actions = require("../../automations/actions")
2
2
  const triggers = require("../../automations/triggers")
3
- const { getAutomationParams, generateAutomationID } = require("../../db/utils")
3
+ const {
4
+ getAutomationParams,
5
+ generateAutomationID,
6
+ DocumentTypes,
7
+ } = require("../../db/utils")
4
8
  const {
5
9
  checkForWebhooks,
6
10
  updateTestHistory,
@@ -9,8 +13,14 @@ const {
9
13
  const { deleteEntityMetadata } = require("../../utilities")
10
14
  const { MetadataTypes } = require("../../constants")
11
15
  const { setTestFlag, clearTestFlag } = require("../../utilities/redis")
12
- const { getAppDB } = require("@budibase/backend-core/context")
16
+ const {
17
+ getAppDB,
18
+ getProdAppDB,
19
+ doInAppContext,
20
+ } = require("@budibase/backend-core/context")
13
21
  const { events } = require("@budibase/backend-core")
22
+ const { app } = require("@budibase/backend-core/cache")
23
+ const { automations } = require("@budibase/pro")
14
24
 
15
25
  const ACTION_DEFS = removeDeprecated(actions.ACTION_DEFINITIONS)
16
26
  const TRIGGER_DEFS = removeDeprecated(triggers.TRIGGER_DEFINITIONS)
@@ -183,6 +193,29 @@ exports.destroy = async function (ctx) {
183
193
  await events.automation.deleted(oldAutomation)
184
194
  }
185
195
 
196
+ exports.logSearch = async function (ctx) {
197
+ ctx.body = await automations.logs.logSearch(ctx.request.body)
198
+ }
199
+
200
+ exports.clearLogError = async function (ctx) {
201
+ const { automationId, appId } = ctx.request.body
202
+ await doInAppContext(appId, async () => {
203
+ const db = getProdAppDB()
204
+ const metadata = await db.get(DocumentTypes.APP_METADATA)
205
+ if (!automationId) {
206
+ delete metadata.automationErrors
207
+ } else if (
208
+ metadata.automationErrors &&
209
+ metadata.automationErrors[automationId]
210
+ ) {
211
+ delete metadata.automationErrors[automationId]
212
+ }
213
+ await db.put(metadata)
214
+ await app.invalidateAppMetadata(metadata.appId, metadata)
215
+ ctx.body = { message: `Error logs cleared.` }
216
+ })
217
+ }
218
+
186
219
  exports.getActionList = async function (ctx) {
187
220
  ctx.body = ACTION_DEFS
188
221
  }
package/src/api/index.js CHANGED
@@ -72,7 +72,10 @@ router.use(async (ctx, next) => {
72
72
  error,
73
73
  }
74
74
  ctx.log.error(err)
75
- console.trace(err)
75
+ // unauthorised errors don't provide a useful trace
76
+ if (!env.isTest()) {
77
+ console.trace(err)
78
+ }
76
79
  }
77
80
  })
78
81
 
@@ -51,6 +51,16 @@ router
51
51
  automationValidator(false),
52
52
  controller.create
53
53
  )
54
+ .post(
55
+ "/api/automations/logs/search",
56
+ authorized(BUILDER),
57
+ controller.logSearch
58
+ )
59
+ .delete(
60
+ "/api/automations/logs",
61
+ authorized(BUILDER),
62
+ controller.clearLogError
63
+ )
54
64
  .delete(
55
65
  "/api/automations/:id/:rev",
56
66
  paramResource("id"),
@@ -0,0 +1,35 @@
1
+ import * as env from "../../environment"
2
+ import { AutomationResults, Automation, App } from "@budibase/types"
3
+ import { automations } from "@budibase/pro"
4
+ import { db as dbUtils } from "@budibase/backend-core"
5
+
6
+ export async function storeLog(
7
+ automation: Automation,
8
+ results: AutomationResults
9
+ ) {
10
+ // can disable this if un-needed in self-host, also only do this for prod apps
11
+ if (env.DISABLE_AUTOMATION_LOGS) {
12
+ return
13
+ }
14
+ await automations.logs.storeLog(automation, results)
15
+ }
16
+
17
+ export async function checkAppMetadata(apps: App[]) {
18
+ const maxStartDate = await automations.logs.oldestLogDate()
19
+ for (let metadata of apps) {
20
+ if (!metadata.automationErrors) {
21
+ continue
22
+ }
23
+ for (let [key, errors] of Object.entries(metadata.automationErrors)) {
24
+ const updated = []
25
+ for (let error of errors) {
26
+ const startDate = error.split(dbUtils.SEPARATOR)[2]
27
+ if (startDate > maxStartDate) {
28
+ updated.push(error)
29
+ }
30
+ }
31
+ metadata.automationErrors[key] = updated
32
+ }
33
+ }
34
+ return apps
35
+ }
@@ -50,43 +50,51 @@ exports.definition = {
50
50
  outputs: {
51
51
  properties: {
52
52
  success: {
53
+ type: "boolean",
54
+ description: "Whether the action was successful",
55
+ },
56
+ result: {
53
57
  type: "boolean",
54
58
  description: "Whether the logic block passed",
55
59
  },
56
60
  },
57
- required: ["success"],
61
+ required: ["success", "result"],
58
62
  },
59
63
  },
60
64
  }
61
65
 
62
66
  exports.run = async function filter({ inputs }) {
63
- let { field, condition, value } = inputs
64
- // coerce types so that we can use them
65
- if (!isNaN(value) && !isNaN(field)) {
66
- value = parseFloat(value)
67
- field = parseFloat(field)
68
- } else if (!isNaN(Date.parse(value)) && !isNaN(Date.parse(field))) {
69
- value = Date.parse(value)
70
- field = Date.parse(field)
71
- }
72
- let success = false
73
- if (typeof field !== "object" && typeof value !== "object") {
74
- switch (condition) {
75
- case FilterConditions.EQUAL:
76
- success = field === value
77
- break
78
- case FilterConditions.NOT_EQUAL:
79
- success = field !== value
80
- break
81
- case FilterConditions.GREATER_THAN:
82
- success = field > value
83
- break
84
- case FilterConditions.LESS_THAN:
85
- success = field < value
86
- break
67
+ try {
68
+ let { field, condition, value } = inputs
69
+ // coerce types so that we can use them
70
+ if (!isNaN(value) && !isNaN(field)) {
71
+ value = parseFloat(value)
72
+ field = parseFloat(field)
73
+ } else if (!isNaN(Date.parse(value)) && !isNaN(Date.parse(field))) {
74
+ value = Date.parse(value)
75
+ field = Date.parse(field)
76
+ }
77
+ let result = false
78
+ if (typeof field !== "object" && typeof value !== "object") {
79
+ switch (condition) {
80
+ case FilterConditions.EQUAL:
81
+ result = field === value
82
+ break
83
+ case FilterConditions.NOT_EQUAL:
84
+ result = field !== value
85
+ break
86
+ case FilterConditions.GREATER_THAN:
87
+ result = field > value
88
+ break
89
+ case FilterConditions.LESS_THAN:
90
+ result = field < value
91
+ break
92
+ }
93
+ } else {
94
+ result = false
87
95
  }
88
- } else {
89
- success = false
96
+ return { success: true, result }
97
+ } catch (err) {
98
+ return { success: false, result: false }
90
99
  }
91
- return { success }
92
100
  }
@@ -6,7 +6,8 @@ describe("test the filter logic", () => {
6
6
  let res = await setup.runStep(setup.actions.FILTER.stepId,
7
7
  { field, condition, value }
8
8
  )
9
- expect(res.success).toEqual(pass)
9
+ expect(res.result).toEqual(pass)
10
+ expect(res.success).toEqual(true)
10
11
  }
11
12
 
12
13
  it("should be able test equality", async () => {
@@ -65,6 +65,7 @@ async function getLinksForRows(rows) {
65
65
  // return duplicates, could be querying for both tables in a relation
66
66
  return getUniqueByProp(
67
67
  responses
68
+ .filter(el => el != null)
68
69
  // create a unique ID which we can use for getting only unique ones
69
70
  .map(el => ({ ...el, unique: el.id + el.thisId + el.fieldName })),
70
71
  "unique"
package/src/db/utils.js CHANGED
@@ -11,6 +11,8 @@ const {
11
11
  isProdAppID,
12
12
  getDevelopmentAppID,
13
13
  generateAppID,
14
+ getQueryIndex,
15
+ ViewNames,
14
16
  } = require("@budibase/backend-core/db")
15
17
 
16
18
  const UNICODE_MAX = "\ufff0"
@@ -22,11 +24,7 @@ const AppStatus = {
22
24
  }
23
25
 
24
26
  const DocumentTypes = {
25
- APP: CoreDocTypes.APP,
26
- DEV: CoreDocTypes.DEV,
27
- APP_DEV: CoreDocTypes.APP_DEV,
28
- APP_METADATA: CoreDocTypes.APP_METADATA,
29
- ROLE: CoreDocTypes.ROLE,
27
+ ...CoreDocTypes,
30
28
  TABLE: "ta",
31
29
  ROW: "ro",
32
30
  USER: "us",
@@ -45,11 +43,6 @@ const DocumentTypes = {
45
43
  USER_FLAG: "flag",
46
44
  }
47
45
 
48
- const ViewNames = {
49
- LINK: "by_link",
50
- ROUTING: "screen_routes",
51
- }
52
-
53
46
  const InternalTables = {
54
47
  USER_METADATA: "ta_users",
55
48
  }
@@ -89,9 +82,7 @@ exports.generateDevAppID = getDevelopmentAppID
89
82
  exports.generateRoleID = generateRoleID
90
83
  exports.getRoleParams = getRoleParams
91
84
 
92
- exports.getQueryIndex = viewName => {
93
- return `database/${viewName}`
94
- }
85
+ exports.getQueryIndex = getQueryIndex
95
86
 
96
87
  /**
97
88
  * If creating DB allDocs/query params with only a single top level ID this can be used, this
@@ -78,6 +78,7 @@ module.exports = {
78
78
  ALLOW_DEV_AUTOMATIONS: process.env.ALLOW_DEV_AUTOMATIONS,
79
79
  DISABLE_THREADING: process.env.DISABLE_THREADING,
80
80
  DISABLE_DEVELOPER_LICENSE: process.env.DISABLE_DEVELOPER_LICENSE,
81
+ DISABLE_AUTOMATION_LOGS: process.env.DISABLE_AUTOMATION_LOGS,
81
82
  MULTI_TENANCY: process.env.MULTI_TENANCY,
82
83
  ENABLE_ANALYTICS: process.env.ENABLE_ANALYTICS,
83
84
  SELF_HOSTED: process.env.SELF_HOSTED,
package/src/module.d.ts CHANGED
@@ -8,3 +8,4 @@ declare module "@budibase/backend-core/constants"
8
8
  declare module "@budibase/backend-core/auth"
9
9
  declare module "@budibase/backend-core/sessions"
10
10
  declare module "@budibase/backend-core/encryption"
11
+ declare module "@budibase/backend-core/redis"
@@ -9,11 +9,12 @@ const { doInTenant } = require("@budibase/backend-core/tenancy")
9
9
  const { definitions: triggerDefs } = require("../automations/triggerInfo")
10
10
  const { doInAppContext, getAppDB } = require("@budibase/backend-core/context")
11
11
  const { AutomationErrors, LoopStepTypes } = require("../constants")
12
+ const { storeLog } = require("../automations/logging")
12
13
  const FILTER_STEP_ID = actions.ACTION_DEFINITIONS.FILTER.stepId
13
14
  const LOOP_STEP_ID = actions.ACTION_DEFINITIONS.LOOP.stepId
14
15
 
15
16
  const CRON_STEP_ID = triggerDefs.CRON.stepId
16
- const STOPPED_STATUS = { success: false, status: "STOPPED" }
17
+ const STOPPED_STATUS = { success: true, status: "STOPPED" }
17
18
  const { cloneDeep } = require("lodash/fp")
18
19
  const env = require("../environment")
19
20
 
@@ -275,7 +276,7 @@ class Orchestrator {
275
276
  this._context.steps[stepCount] = outputs
276
277
  // if filter causes us to stop execution don't break the loop, set a var
277
278
  // so that we can finish iterating through the steps and record that it stopped
278
- if (step.stepId === FILTER_STEP_ID && !outputs.success) {
279
+ if (step.stepId === FILTER_STEP_ID && !outputs.result) {
279
280
  stopped = true
280
281
  this.updateExecutionOutput(step.id, step.stepId, step.inputs, {
281
282
  ...outputs,
@@ -325,6 +326,8 @@ class Orchestrator {
325
326
  }
326
327
  }
327
328
 
329
+ // store the logs for the automation run
330
+ await storeLog(this._automation, this.executionOutput)
328
331
  return this.executionOutput
329
332
  }
330
333
  }
@@ -77,7 +77,7 @@ export class Thread {
77
77
  })
78
78
  }
79
79
 
80
- static shutdown() {
80
+ static stopThreads() {
81
81
  return new Promise<void>(resolve => {
82
82
  if (Thread.workerRefs.length === 0) {
83
83
  resolve()
@@ -95,4 +95,8 @@ export class Thread {
95
95
  Thread.workerRefs = []
96
96
  })
97
97
  }
98
+
99
+ static async shutdown() {
100
+ await Thread.stopThreads()
101
+ }
98
102
  }