From 13ef6afb869d8b7011a27dbe83fcee4b56489ace Mon Sep 17 00:00:00 2001 From: Vladimir Voronkov Date: Thu, 16 Mar 2023 13:14:18 +0200 Subject: [PATCH 1/7] Add triggering-sync-after-updates error class --- src/errors/index.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/errors/index.js b/src/errors/index.js index fd13e2be..98a6119e 100644 --- a/src/errors/index.js +++ b/src/errors/index.js @@ -107,6 +107,12 @@ class ShowingChangelogError extends BaseError { } } +class TriggeringSyncAfterUpdatesError extends BaseError { + constructor (message = 'ERR_SYNC_AFTER_UPDATES_REQUEST_HAS_TRIGGERED') { + super(message) + } +} + module.exports = { BaseError, InvalidFilePathError, @@ -124,5 +130,6 @@ module.exports = { SyncFrequencyChangingError, UserManualShowingError, DbRestoringError, - ShowingChangelogError + ShowingChangelogError, + TriggeringSyncAfterUpdatesError } From e486f69febdcc78bd3871cf90263c26e7bcbda7b Mon Sep 17 00:00:00 2001 From: Vladimir Voronkov Date: Thu, 16 Mar 2023 13:16:00 +0200 Subject: [PATCH 2/7] Add main flow to trigger sync after updates --- src/trigger-sync-after-updates/index.js | 35 +++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/trigger-sync-after-updates/index.js diff --git a/src/trigger-sync-after-updates/index.js b/src/trigger-sync-after-updates/index.js new file mode 100644 index 00000000..2e100317 --- /dev/null +++ b/src/trigger-sync-after-updates/index.js @@ -0,0 +1,35 @@ +'use strict' + +const { + getConfigsKeeperByName +} = require('../configs-keeper') +const getDebugInfo = require('../helpers/get-debug-info') +const { + TriggeringSyncAfterUpdatesError +} = require('../errors') + +// TODO: +const _requestSyncAfterUpdates = async () => {} + +module.exports = async () => { + try { + const { version } = getDebugInfo() + const configsKeeper = getConfigsKeeperByName('main') + const triggeredSyncAfterUpdatesVer = await configsKeeper + .getConfigByName('triggeredSyncAfterUpdatesVer') + + if (version === triggeredSyncAfterUpdatesVer) { + return + } + + const wasRequested = await _requestSyncAfterUpdates() + + if (wasRequested) { + return + } + + throw new TriggeringSyncAfterUpdatesError() + } catch (err) { + console.error(err) + } +} From eb54ec27084bc2440a76d842443dc075a32d6e34 Mon Sep 17 00:00:00 2001 From: Vladimir Voronkov Date: Thu, 16 Mar 2023 13:18:03 +0200 Subject: [PATCH 3/7] Launch triggering sync after updates flow on init --- src/initialize-app.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/initialize-app.js b/src/initialize-app.js index 2e4b2cc2..9763bca2 100644 --- a/src/initialize-app.js +++ b/src/initialize-app.js @@ -5,6 +5,7 @@ const path = require('path') const { CSV_PATH_VERSION } = require('./const') +const triggerSyncAfterUpdates = require('./trigger-sync-after-updates') const triggerElectronLoad = require('./trigger-electron-load') const wins = require('./windows') const runServer = require('./run-server') @@ -208,6 +209,7 @@ module.exports = async () => { const isServerReadyPromise = _ipcMessToPromise(ipc) manageWorkerMessages(ipc) await isServerReadyPromise + await triggerSyncAfterUpdates() // Legacy fix related to reprodducing the same behavior on all OS, // waiting for checks that it was resolved in the last electron ver From 32f196c464fb9d8a8fe100ba0d0f3d15954ed2c9 Mon Sep 17 00:00:00 2001 From: Vladimir Voronkov Date: Thu, 16 Mar 2023 13:18:28 +0200 Subject: [PATCH 4/7] Add default value for triggeredSyncAfterUpdatesVer config --- src/initialize-app.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/initialize-app.js b/src/initialize-app.js index 9763bca2..6f5d6298 100644 --- a/src/initialize-app.js +++ b/src/initialize-app.js @@ -163,7 +163,8 @@ const _manageConfigs = (params = {}) => { { pathToUserCsv, schedulerRule, - shownChangelogVer: '0.0.0' + shownChangelogVer: '0.0.0', + triggeredSyncAfterUpdatesVer: '0.0.0' } ) _resetCsvPath( From 7907272b8cc6e6151b730ce2d6664a8112ee37be Mon Sep 17 00:00:00 2001 From: Vladimir Voronkov Date: Thu, 16 Mar 2023 13:21:22 +0200 Subject: [PATCH 5/7] Allow ipc messages for triggering sync after updates --- server.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/server.js b/server.js index be22f92d..2817eade 100644 --- a/server.js +++ b/server.js @@ -74,7 +74,9 @@ const allowedProcessMessagesSet = _getAllowedStatesSet({ 'REQUEST_MIGRATION_HAS_FAILED_WHAT_SHOULD_BE_DONE', 'REQUEST_SHOULD_ALL_TABLES_BE_REMOVED', - 'RESPONSE_GET_BACKUP_FILES_METADATA' + 'RESPONSE_GET_BACKUP_FILES_METADATA', + + 'RESPONSE_UPDATE_USERS_SYNC_ON_STARTUP_REQUIRED_STATE' ] }) const allowedProcessStatesSet = _getAllowedStatesSet({ @@ -88,7 +90,9 @@ const allowedProcessStatesSet = _getAllowedStatesSet({ 'RESPONSE_MIGRATION_HAS_FAILED_WHAT_SHOULD_BE_DONE', - 'REQUEST_GET_BACKUP_FILES_METADATA' + 'REQUEST_GET_BACKUP_FILES_METADATA', + + 'REQUEST_UPDATE_USERS_SYNC_ON_STARTUP_REQUIRED_STATE' ] }) From 5050140ef6761073e8c5f01c6ad360ea8302e78b Mon Sep 17 00:00:00 2001 From: Vladimir Voronkov Date: Fri, 17 Mar 2023 08:14:08 +0200 Subject: [PATCH 6/7] Save triggeredSyncAfterUpdatesVer config value after triggering --- src/trigger-sync-after-updates/index.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/trigger-sync-after-updates/index.js b/src/trigger-sync-after-updates/index.js index 2e100317..1d87d4ac 100644 --- a/src/trigger-sync-after-updates/index.js +++ b/src/trigger-sync-after-updates/index.js @@ -23,8 +23,13 @@ module.exports = async () => { } const wasRequested = await _requestSyncAfterUpdates() + const wasSaved = await configsKeeper + .saveConfigs({ triggeredSyncAfterUpdatesVer: version }) - if (wasRequested) { + if ( + wasRequested && + wasSaved + ) { return } From aa48a074b635a4af1c9109ea9c3c600b97ee98a5 Mon Sep 17 00:00:00 2001 From: Vladimir Voronkov Date: Fri, 17 Mar 2023 11:44:40 +0200 Subject: [PATCH 7/7] Add ability to request sync after updates --- src/trigger-sync-after-updates/index.js | 58 ++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/src/trigger-sync-after-updates/index.js b/src/trigger-sync-after-updates/index.js index 1d87d4ac..5673555f 100644 --- a/src/trigger-sync-after-updates/index.js +++ b/src/trigger-sync-after-updates/index.js @@ -1,5 +1,16 @@ 'use strict' +const PROCESS_MESSAGES = require( + '../../bfx-reports-framework/workers/loc.api/process.message.manager/process.messages' +) +const PROCESS_STATES = require( + '../../bfx-reports-framework/workers/loc.api/process.message.manager/process.states' +) + +const ipcs = require('../ipcs') +const { + deserializeError +} = require('../helpers/utils') const { getConfigsKeeperByName } = require('../configs-keeper') @@ -8,8 +19,51 @@ const { TriggeringSyncAfterUpdatesError } = require('../errors') -// TODO: -const _requestSyncAfterUpdates = async () => {} +const _requestSyncAfterUpdates = (opts) => { + return new Promise((resolve, reject) => { + try { + const { + msTimeout = 30 * 1000 + } = opts ?? {} + + let timeout = null + + const rmHandler = () => { + ipcs.serverIpc.off('message', handler) + clearTimeout(timeout) + } + const handler = (mess) => { + const { state, data } = mess ?? {} + + if (state !== PROCESS_MESSAGES.RESPONSE_UPDATE_USERS_SYNC_ON_STARTUP_REQUIRED_STATE) { + return + } + + timeout = setTimeout(() => { + rmHandler() + reject(new TriggeringSyncAfterUpdatesError()) + }, msTimeout).unref() + + if (data?.err) { + rmHandler() + reject(deserializeError(data.err)) + + return + } + + rmHandler() + resolve(data?.isDone) + } + + ipcs.serverIpc.on('message', handler) + ipcs.serverIpc.send({ + state: PROCESS_STATES.REQUEST_UPDATE_USERS_SYNC_ON_STARTUP_REQUIRED_STATE + }) + } catch (err) { + reject(err) + } + }) +} module.exports = async () => { try {