refs #4823 Minor changes

This commit is contained in:
Guillermo Bonet 2023-06-15 12:50:58 +02:00
parent 79c3582bb4
commit 9b5922b241
3 changed files with 59 additions and 46 deletions

View File

@ -10,6 +10,7 @@ DB_SCHEMA = schema
DB_USER = root
DB_PWD = root
DB_HOST = localhost
DB_PORT = 3306
DB_DIALECT = mariadb
DB_RECON_TIMEOUT = 30000
DB_MAX_CONN_POOL = 40

View File

@ -11,7 +11,7 @@ class Floriday {
async start() {
try {
await utils.checkConfig();
await utils.requestToken();
await utils.checkToken();
} catch (err) {
utils.criticalError(err);
}
@ -49,10 +49,13 @@ class Floriday {
async trunk() {
try{
/*
for (let model of flModels)
await utils.syncModel(model);
await utils.checkConnections();
*/
await utils.deleteConnections();
} catch (err) {
if (['SequelizeConnectionRefusedError', 'SequelizeConnectionError'].includes(err.name))
throw err;

View File

@ -13,24 +13,25 @@ const flModels = yml.load(fs.readFileSync('./models/models.yml', 'utf8'));
let spinner;
/**
* Gets the Access Token.
* Check if the token is valid, and if it
* is not, get a new one.
*
* @param {Boolean} isForce Force to request new token
*/
export async function requestToken(isForce = false) {
await startSpin(`Checking token...`, true);
let optionalMsg;
export async function checkToken(isForce) {
try {
await startSpin(`Checking token...`, true);
const clientConfigData = await models.config.findOne();
let tokenExpiration, token;
let tokenExpiration, token, optionalMsg;
if (clientConfigData) {
token = clientConfigData.currentToken;
tokenExpiration = clientConfigData.tokenExpiration;
}
if (isForce || !token || !tokenExpiration || moment().isAfter(tokenExpiration)) {
await txtSpin(`Requesting new token...`, false);
await txtSpin(`Requesting new token...`);
const clientId = JSON.parse(env.USE_SECRETS_DB) ? clientConfigData.clientId || env.CLIENT_ID : env.CLIENT_ID;
const clientSecret = JSON.parse(env.USE_SECRETS_DB) ? clientConfigData.clientSecret || env.CLIENT_SECRET : env.CLIENT_SECRET;
@ -41,16 +42,16 @@ export async function requestToken(isForce = false) {
scope: 'role:app catalog:read supply:read organization:read network:write network:read'
}).toString();
const headers = { 'Content-Type': 'application/x-www-form-urlencoded' };
const response = (await vnRequest('POST', env.API_ENDPOINT, data, headers)).data;
const res = (await vnRequest('POST', env.API_ENDPOINT, data, headers)).data;
const tokenExpiration = moment()
.add(response.expires_in, 's')
.add(res.expires_in, 's')
.format('YYYY-MM-DD HH:mm:ss');
await updateClientConfig({
clientId,
clientSecret,
currentToken: response.access_token,
currentToken: res.access_token,
tokenExpiration,
});
} else
@ -134,10 +135,9 @@ export async function sleep(ms) {
*/
export async function syncModel(model) {
await startSpin(`Syncing ${model}...`, true);
let i = 0;
try {
const dbSeqNum = await models.sequenceNumber.findOne({ where: { model } })
let curSeqNum = dbSeqNum?.maxSequenceNumber ?? 0;
let curSeqNum = dbSeqNum?.maxSequenceNumber ?? 0, i = 0;
if (!flModels.includes(model))
throw new Error('Unsupported model');
@ -158,7 +158,7 @@ export async function syncModel(model) {
const data = res.results;
curSeqNum = res.maximumSequenceNumber;
misSeqNum = maxSeqNum - curSeqNum;
await insertModel(model, data)
await insertModel(model, data);
txtSpin(`Syncing ${i = i + data.length} ${model}, ${misSeqNum} missing...`);
await insertSequenceNumber(model, curSeqNum);
}
@ -173,29 +173,36 @@ export async function syncModel(model) {
};
/**
* Insert a model.
* Insert data to a model.
*
* @param {String} model Supported models (./models/methods.yml)
* @param {Array} data An array containing the data to be inserted
*/
export async function insertModel(model, data) {
switch (model) {
case 'organizations':
await insertOrganizations(data);
break;
case 'warehouses':
await insertWarehouses(data);
break;
case 'tradeItems':
await insertTradeItems(data);
break;
case 'supplyLines':
await insertSupplyLines(data);
break;
case 'clockPresalesSupply':
await insertClockPresalesSupply(data);
break;
default:
throw new Error('Unsupported model');
try {
switch (model) {
case 'organizations':
await insertOrganizations(data);
break;
case 'warehouses':
await insertWarehouses(data);
break;
case 'tradeItems':
await insertTradeItems(data);
break;
case 'supplyLines':
await insertSupplyLines(data);
break;
case 'clockPresalesSupply':
await insertClockPresalesSupply(data);
break;
default:
throw new Error('Unsupported model');
}
} catch (err) {
throw err;
}
}
};
/**
* Check (create and/or remove) the connections in Floriday.
@ -689,8 +696,11 @@ export async function deleteConnections() {
for (let connection of ghostConnections) {
await vnRequest('DELETE', `${env.API_URL}/connections/${connection}`);
txtSpin(`Deleting ${i++} connections, ${ghostConnections.length - i} missing...`);
(spinner)
? txtSpin(`Deleting ${i++} connections, ${ghostConnections.length - i} missing...`)
: startSpin(`Deleting ${i++} connections, ${ghostConnections.length - i} missing...`, true);
}
if (spinner) okSpin(null, true);
} catch (err) {
await criticalSpin(err);
}
@ -725,7 +735,7 @@ export async function vnRequest(method, url, data, headers) {
case 'EAI_AGAIN': // getaddrinfo
await warnSpin(null, err, false);
await sleep(1000);
await startSpin(null, false);
await startSpin(null, true);
break;
case 'ECONNABORTED':
case 'ECONNREFUSED':
@ -737,32 +747,32 @@ export async function vnRequest(method, url, data, headers) {
case 502:
await warnSpin(null, err, false);
await sleep(1000);
await startSpin(null, false);
await startSpin(null, true);
break;
case 429: // Too Many Requests
await warnSpin(null, err, false);
await sleep(60000);
await startSpin(null, false);
await startSpin(null, true);
break;
case 401: // Unauthorized
await warnSpin(null, err, false);
await requestToken(true);
await checkToken(true);
headers.Authorization
? headers.Authorization = `Bearer ${await getCurrentToken()}`
: criticalError(err);
await startSpin(null, false);
await startSpin(null, true);
break;
default:
await warnSpin(null, err, false);
await sleep(env.MS_RETRY_UNHANDLED_ERROR);
await startSpin(null, false);
await startSpin(null, true);
break;
}
break;
default:
await warnSpin(null, err, false);
await sleep(env.MS_RETRY_UNHANDLED_ERROR);
await startSpin(null, false);
await startSpin(null, true);
break;
}
}
@ -793,7 +803,6 @@ export async function startSpin(msg, isNew) {
* Sets the text of spinner.
*
* @param {String} msg Text of spinner
* @param {Boolean} clear Clean the instance
**/
export async function txtSpin(msg) {
if (JSON.parse(env.TIME_STAMPS) && msg)
@ -815,7 +824,7 @@ export async function okSpin(msg, clear) {
if (spinner) {
spinner.succeed(msg);
if (clear)
spinner.clear();
spinner = null;
}
};
@ -833,7 +842,7 @@ export async function warnSpin(msg, err, clear) {
if (spinner) {
spinner.warn(msg);
if (clear)
spinner.clear();
spinner = null;
}
if (err) await warning(err);
};
@ -848,7 +857,7 @@ export async function failSpin(err, clear) {
if (spinner) {
spinner.fail();
if (clear)
spinner.clear();
spinner = null;
}
if (err) throw err;
};
@ -861,7 +870,7 @@ export async function failSpin(err, clear) {
export async function criticalSpin(err) {
if (spinner) {
spinner.fail();
spinner.clear();
spinner = null;
}
await criticalError(err);
};