From 4ff3cbafd5945f2e245633f49d7c0601df504de7 Mon Sep 17 00:00:00 2001 From: Rodrigo Rodriguez Date: Sat, 2 Dec 2023 10:21:12 -0300 Subject: [PATCH] fix(basic.gblib): Allow MERGE keyword in storage #380. @othonlima --- .../basic.gblib/services/SystemKeywords.ts | 46 +++++++++++++++---- src/app.ts | 4 +- 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/packages/basic.gblib/services/SystemKeywords.ts b/packages/basic.gblib/services/SystemKeywords.ts index 28477118..038623b2 100644 --- a/packages/basic.gblib/services/SystemKeywords.ts +++ b/packages/basic.gblib/services/SystemKeywords.ts @@ -653,6 +653,28 @@ export class SystemKeywords { await this.save({ pid, file: "Notes.xlsx", args: [text] }); } + /** + * Saves variables to storage, not a worksheet. + * + */ + public async saveToStorageBatch({ pid, table, rows }): Promise { + const { min } = await DialogKeywords.getProcessInfo(pid); + GBLog.info(`BASIC: Saving to storage '${table}' (SAVE).`); + + const definition = this.getTableFromName(table, min); + + await retry( + async (bail) => { + await definition.bulkCreate(rows); + }, + { + retries: 5, + onRetry: (err) => { GBLog.error(`Retrying SaveToStorageBatch due to: ${err.message}.`); } + } + ); + } + + /** * Saves variables to storage, not a worksheet. * @@ -683,7 +705,7 @@ export class SystemKeywords { }, { retries: 5, - onRetry: (err) => { GBLog.error(`Retrying due to: ${err.message}.`); } + onRetry: (err) => { GBLog.error(`Retrying SaveToStorage due to: ${err.message}.`); } } ); @@ -1644,6 +1666,7 @@ export class SystemKeywords { }, { retries: 5, + onRetry: (err) => { GBLog.error(`Retrying HTTP GET due to: ${err.message}.`); } } ); let res = JSON.parse(await result.text()); @@ -2013,6 +2036,7 @@ export class SystemKeywords { let t; let fieldsNames = []; let fieldsSizes = []; + let fieldsValuesList = []; if (storage) { @@ -2030,19 +2054,14 @@ export class SystemKeywords { fieldsSizes.push(t.fieldRawAttributesMap[e].size); }) + header = Object.keys(t.fieldRawAttributesMap); if (!this.cachedMerge[pid][file]) { - rows = await t.findAll({}); - header = Object.keys(rows[0].dataValues) - + rows = await t.findAll({}); } else { - rows = this.cachedMerge[pid][file]; - - header = Object.keys(rows[0]) + rows = this.cachedMerge[pid][file]; } - if (rows.length > 0) { - } } else { const botId = min.instance.botId; @@ -2232,6 +2251,7 @@ export class SystemKeywords { let dst = {}; // Uppercases fields. + let i = 0; Object.keys(fieldsValues).forEach(fieldSrc => { const field = fieldsNames[i].charAt(0).toUpperCase() + fieldsNames[i].slice(1); @@ -2241,7 +2261,7 @@ export class SystemKeywords { i++; }); - await this.saveToStorage({ pid, table: file, fieldsValues, fieldsNames }); + fieldsValuesList.push(dst); this.cachedMerge[pid][file].push(dst); } else { @@ -2252,6 +2272,12 @@ export class SystemKeywords { } } + // In case of storage, persist to DB in batch. + + if (fieldsValuesList.length){ + await this.saveToStorageBatch({ pid, table: file, rows:fieldsValuesList }); + } + GBLog.info(`BASIC: MERGE updated (merges:${merges}, additions:${adds}, skipped: ${skipped}).`); return table; } diff --git a/src/app.ts b/src/app.ts index 7b93e121..f092a4cc 100644 --- a/src/app.ts +++ b/src/app.ts @@ -160,11 +160,11 @@ export class GBServer { } else { GBServer.globals.publicAddress = await core.ensureProxy(port); process.env.BOT_URL = GBServer.globals.publicAddress; - GBLog.info(`Auto local proxy address defined at: ${process.env.BOT_URL}...`); + GBLog.info(`Auto-proxy address at: ${process.env.BOT_URL}...`); } } else { const serverAddress = process.env.BOT_URL; - GBLog.info(`Defining server address at ${serverAddress}...`); + GBLog.info(`.env address at ${serverAddress}...`); GBServer.globals.publicAddress = serverAddress; }