diff --git a/package-lock.json b/package-lock.json index ed97315..8228e0f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "3.1.0", "license": "Apache-2.0", "dependencies": { - "@clevercloud/client": "^8.0.2", + "@clevercloud/client": "^8.1.0", "clf-date": "^0.2.0", "cliparse": "^0.3.3", "colors": "1.4.0", @@ -178,9 +178,9 @@ } }, "node_modules/@clevercloud/client": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@clevercloud/client/-/client-8.0.2.tgz", - "integrity": "sha512-smSsmX2GAYed96k8n+qVRxEtc8hvfuvwPW0c5sW/R9x9Z8OsorS+Xpe2OFc0ADsEbJhGqbEHr84TKuIuSUu7dw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@clevercloud/client/-/client-8.1.0.tgz", + "integrity": "sha512-JhwqxON/w0R+0l+4Jig7JJTsuW8ZyNYVjd7DmDRB7B86YIfDcWwikD2aLj5BTm2AsedNjAx1RDePY3rl7fK2Jg==", "dependencies": { "component-emitter": "^1.3.0", "oauth-1.0a": "^2.2.6" @@ -8360,9 +8360,9 @@ } }, "@clevercloud/client": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@clevercloud/client/-/client-8.0.2.tgz", - "integrity": "sha512-smSsmX2GAYed96k8n+qVRxEtc8hvfuvwPW0c5sW/R9x9Z8OsorS+Xpe2OFc0ADsEbJhGqbEHr84TKuIuSUu7dw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@clevercloud/client/-/client-8.1.0.tgz", + "integrity": "sha512-JhwqxON/w0R+0l+4Jig7JJTsuW8ZyNYVjd7DmDRB7B86YIfDcWwikD2aLj5BTm2AsedNjAx1RDePY3rl7fK2Jg==", "requires": { "component-emitter": "^1.3.0", "oauth-1.0a": "^2.2.6" diff --git a/package.json b/package.json index 3b06db5..f8fe1b0 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "scripts/*.sh" ], "dependencies": { - "@clevercloud/client": "^8.0.2", + "@clevercloud/client": "^8.1.0", "clf-date": "^0.2.0", "cliparse": "^0.3.3", "colors": "1.4.0", diff --git a/src/models/log-v4.js b/src/models/log-v4.js index 6a047ba..ac2902c 100644 --- a/src/models/log-v4.js +++ b/src/models/log-v4.js @@ -1,4 +1,4 @@ -const { getHostAndTokens } = require('./send-to-api.js'); +const { getHostAndTokens, processError } = require('./send-to-api.js'); const colors = require('colors/safe'); const { Deferred } = require('./utils.js'); const Logger = require('../logger.js'); @@ -9,6 +9,11 @@ const { ApplicationLogStream } = require('@clevercloud/client/cjs/streams/applic const THROTTLE_ELEMENTS = 2000; const THROTTLE_PER_IN_MILLISECONDS = 100; +const retryConfiguration = { + enabled: true, + maxRetryCount: 6, +}; + async function displayLogs (params) { const deferred = params.deferred || new Deferred(); @@ -20,6 +25,8 @@ async function displayLogs (params) { tokens, ownerId, appId, + connectionTimeout: 10_000, + retryConfiguration, since, until, deploymentId, @@ -33,10 +40,10 @@ async function displayLogs (params) { logStream .on('open', (event) => { - Logger.debug(`stream opened! ${JSON.stringify({ appId, filter, deploymentId })}`); + Logger.debug(colors.blue(`Logs stream (open) ${JSON.stringify({ appId, filter, deploymentId })}`)); }) .on('error', (event) => { - Logger.error(`an error occured: ${event.detail}`); + Logger.debug(colors.red(`Logs stream (error) ${event.error.message}`)); }) .onLog((log) => { Logger.println(formatLogLine(log)); @@ -45,6 +52,7 @@ async function displayLogs (params) { // start() is blocking until end of stream logStream.start() .then((reason) => deferred.resolve()) + .catch(processError) .catch((error) => deferred.reject(error)); return logStream; diff --git a/src/models/send-to-api.js b/src/models/send-to-api.js index fa2eff2..2b8fd73 100644 --- a/src/models/send-to-api.js +++ b/src/models/send-to-api.js @@ -23,12 +23,22 @@ async function sendToApi (requestParams) { .then(prefixUrl(conf.API_HOST)) .then(addOauthHeader(tokens)) .then((requestParams) => { - if (process.env.CLEVER_VERBOSE) { - Logger.debug(`${requestParams.method.toUpperCase()} ${requestParams.url} ? ${JSON.stringify(requestParams.queryParams)}`); - } + Logger.debug(`${requestParams.method.toUpperCase()} ${requestParams.url} ? ${JSON.stringify(requestParams.queryParams)}`); return requestParams; }) - .then((requestParams) => request(requestParams, { retry: 1 })); + .then(request) + .catch(processError); +} + +function processError (error) { + const code = error.code ?? error?.cause?.code; + if (code === 'EAI_AGAIN') { + throw new Error('Cannot reach the Clever Cloud API, please check your internet connection.', { cause: error }); + } + if (code === 'ECONNRESET') { + throw new Error('The connection to the Clever Cloud API was closed abruptly, please try again.', { cause: error }); + } + throw error; } function sendToWarp10 (requestParams) { @@ -45,4 +55,4 @@ async function getHostAndTokens () { }; } -module.exports = { sendToApi, sendToWarp10, getHostAndTokens }; +module.exports = { sendToApi, sendToWarp10, getHostAndTokens, processError };