diff --git a/src/fireedge/package-lock.json b/src/fireedge/package-lock.json index b312878e2d..ab153c2670 100644 --- a/src/fireedge/package-lock.json +++ b/src/fireedge/package-lock.json @@ -998,6 +998,16 @@ "to-fast-properties": "^2.0.0" } }, + "@dabh/diagnostics": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", + "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", + "requires": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, "@discoveryjs/json-ext": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", @@ -1758,6 +1768,11 @@ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, + "async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + }, "async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", @@ -2496,6 +2511,15 @@ "object-visit": "^1.0.0" } }, + "color": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", + "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -2509,11 +2533,34 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "color-string": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", + "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "colorette": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + }, + "colorspace": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", + "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "requires": { + "color": "3.0.x", + "text-hex": "1.0.x" + } + }, "commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -3121,6 +3168,11 @@ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" }, + "enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -4074,6 +4126,11 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fast-safe-stringify": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz", + "integrity": "sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag==" + }, "fastest-levenshtein": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", @@ -4087,6 +4144,11 @@ "reusify": "^1.0.4" } }, + "fecha": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", + "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" + }, "file-entry-cache": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", @@ -4249,6 +4311,11 @@ "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", "dev": true }, + "fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, "follow-redirects": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", @@ -5364,6 +5431,11 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, + "kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -5492,6 +5564,18 @@ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" }, + "logform": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", + "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==", + "requires": { + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "triple-beam": "^1.3.0" + } + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -6197,6 +6281,14 @@ "wrappy": "1" } }, + "one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "requires": { + "fn.name": "1.x.x" + } + }, "onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", @@ -7501,6 +7593,21 @@ "simple-concat": "^1.0.0" } }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, "slash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", @@ -7838,6 +7945,11 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, "stackframe": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-0.3.1.tgz", @@ -8167,6 +8279,11 @@ } } }, + "text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -8289,6 +8406,11 @@ "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=" }, + "triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + }, "ts-toolbelt": { "version": "6.15.5", "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.15.5.tgz", @@ -8833,6 +8955,43 @@ "resolved": "https://registry.npmjs.org/window-or-global/-/window-or-global-1.0.1.tgz", "integrity": "sha1-2+RboqKRqrxW1iz2bEW3+jIpRt4=" }, + "winston": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", + "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==", + "requires": { + "@dabh/diagnostics": "^2.0.2", + "async": "^3.1.0", + "is-stream": "^2.0.0", + "logform": "^2.2.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "winston-transport": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", + "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", + "requires": { + "readable-stream": "^2.3.7", + "triple-beam": "^1.2.0" + } + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", diff --git a/src/fireedge/package.json b/src/fireedge/package.json index a169caacc3..b0b5389260 100644 --- a/src/fireedge/package.json +++ b/src/fireedge/package.json @@ -135,6 +135,7 @@ "webpack-cli": "4.7.2", "webpack-node-externals": "2.5.2", "window-or-global": "1.0.1", + "winston": "3.3.3", "worker-loader": "3.0.8", "xml2js": "0.4.23", "xmlrpc": "1.3.2", diff --git a/src/fireedge/src/server/index.js b/src/fireedge/src/server/index.js index 95bd84cb40..ff9ba39576 100644 --- a/src/fireedge/src/server/index.js +++ b/src/fireedge/src/server/index.js @@ -17,16 +17,10 @@ import compression from 'compression' import cors from 'cors' import express from 'express' -import { - accessSync, - constants, - createWriteStream, - readFileSync -} from 'fs-extra' +import { readFileSync } from 'fs-extra' import helmet from 'helmet' import http from 'http' import https from 'https' -import morgan from 'morgan' import { resolve } from 'path' import { env } from 'process' import webpack from 'webpack' @@ -42,11 +36,11 @@ import { getConfig, messageTerminal } from './utils' import { defaultAppName, defaultApps, defaultEvents, defaultHost, - defaultPort, defaultTypeLog, defaultWebpackMode + defaultPort, defaultWebpackMode } from './utils/constants/defaults' +import { getLoggerMiddleware, initLogger } from './utils/logger' import { - genFireedgeKey, genPathResources, getCert, - getKey, validateServerIsSecure + genFireedgeKey, genPathResources, getCert, getKey, validateServerIsSecure } from './utils/server' // set paths @@ -55,6 +49,9 @@ genPathResources() // set fireedge_key genFireedgeKey() +// set logger +initLogger() + // destructure imports const unsecureServer = http.createServer const secureServer = https.createServer @@ -68,7 +65,6 @@ let frontPath = 'client' const appConfig = getConfig() const host = appConfig.host || defaultHost const port = appConfig.port || defaultPort -const userLog = appConfig.log || 'dev' if (env && env.NODE_ENV && env.NODE_ENV === defaultWebpackMode) { try { @@ -101,31 +97,16 @@ if (env && env.NODE_ENV && env.NODE_ENV === defaultWebpackMode) { } frontPath = '../client' } - -let log = morgan('dev') -if (userLog === defaultTypeLog && global && global.paths && global.paths.FIREEDGE_LOG) { - try { - accessSync(global.paths.FIREEDGE_LOG, constants.W_OK) - const logStream = createWriteStream(global.paths.FIREEDGE_LOG, { - flags: 'a' - }) - log = morgan('combined', { stream: logStream }) - } catch (err) { - const config = { - color: 'red', - message: 'Error: %s', - error: err.message || '' - } - messageTerminal(config) - } -} - app.use(helmet.hidePoweredBy()) app.use(compression()) app.use(`${basename}/client`, express.static(resolve(__dirname, frontPath))) app.use(`${basename}/client/*`, express.static(resolve(__dirname, frontPath))) -// log request -app.use(log) + +const loggerMiddleware = getLoggerMiddleware() +if (loggerMiddleware) { + app.use(loggerMiddleware) +} + // cors if (appConfig.cors) { app.use(cors()) @@ -136,7 +117,7 @@ app.use(express.json()) app.use(`${basename}/api`, entrypointApi) // opennebula Api routes const frontApps = Object.keys(defaultApps) -frontApps.map(frontApp => { +frontApps.forEach(frontApp => { app.get(`${basename}/${frontApp}`, entrypointApp) app.get(`${basename}/${frontApp}/*`, entrypointApp) }) diff --git a/src/fireedge/src/server/routes/entrypoints/Api.js b/src/fireedge/src/server/routes/entrypoints/Api.js index 5b64f528d5..ac71e2a995 100644 --- a/src/fireedge/src/server/routes/entrypoints/Api.js +++ b/src/fireedge/src/server/routes/entrypoints/Api.js @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * * limitations under the License. * * ------------------------------------------------------------------------- */ +/* eslint-disable indent */ const { env } = require('process') const express = require('express') @@ -33,6 +34,8 @@ const { fillResourceforHookConnection } = require('../../utils') +const { writeInLogger } = require('../../utils/logger') + const { validateResourceAndSession, setOptionalParameters, @@ -189,13 +192,14 @@ router.all( } const worker = new Worker(resolve(...workerPath, 'index.worker.js')) worker.onmessage = function (result) { + worker.terminate() const err = result && result.data && result.data.err const value = result && result.data && result.data.value if (!err) { fillResourceforHookConnection(user, command, paramsCommand) } + writeInLogger(`command: ${command} response for worker: ${JSON.stringify(value)}`) responseOpennebula(updaterResponse, err, value, response, next) - worker.terminate() } worker.postMessage( { diff --git a/src/fireedge/src/server/routes/entrypoints/App.js b/src/fireedge/src/server/routes/entrypoints/App.js index 43a4c3a0c8..3dde78010c 100644 --- a/src/fireedge/src/server/routes/entrypoints/App.js +++ b/src/fireedge/src/server/routes/entrypoints/App.js @@ -19,7 +19,7 @@ const { Router } = require('express') const { env } = require('process') const { renderToString } = require('react-dom/server') const root = require('window-or-global') -const path = require('path') +const { resolve } = require('path') const { createStore, compose, applyMiddleware } = require('redux') const thunk = require('redux-thunk').default const { ServerStyleSheets } = require('@material-ui/core/styles') @@ -72,7 +72,7 @@ router.get('*', (req, res) => { const composeEnhancer = (root && root.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) || compose // loadable - const statsFile = path.resolve(__dirname, 'client', app + defaultFileStats) + const statsFile = resolve(__dirname, 'client', app + defaultFileStats) const extractor = new ChunkExtractor({ statsFile }) // SSR redux store diff --git a/src/fireedge/src/server/utils/logger.js b/src/fireedge/src/server/utils/logger.js new file mode 100644 index 0000000000..0cc2bc6635 --- /dev/null +++ b/src/fireedge/src/server/utils/logger.js @@ -0,0 +1,92 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ + +const { env } = require('process') +const { global } = require('window-or-global') +const winston = require('winston') +const morgan = require('morgan') +const { defaultWebpackMode } = require('./constants/defaults') + +let logger = null + +/** + * Initialize logger. + */ +const initLogger = () => { + if (global && global.paths && global.paths.FIREEDGE_LOG) { + logger = winston.createLogger({ + transports: [ + new winston.transports.File({ + level: 'info', + filename: global.paths.FIREEDGE_LOG, + handleExceptions: true, + json: true, + maxsize: 5242880, // 5MB + maxFiles: 5, + colorize: false + }) + ], + exitOnError: false + }) + + logger.stream = { + write: function (message, encoding) { + logger.info(message) + } + } + if (env && env.NODE_ENV && env.NODE_ENV === defaultWebpackMode) { + logger.add(new winston.transports.Console({ + format: winston.format.simple() + })) + } + } +} + +/** + * Get logger. + * + * @returns {object} - logger + */ +const getLogger = () => logger + +/** + * Get Logger middleware. + * + * @returns {object} - morgan middleware + */ +const getLoggerMiddleware = () => { + const logger = getLogger() + if (logger) { + return morgan('combined', { stream: logger.stream }) + } +} + +/** + * Write in logger. + * + * @param {string} message - message for logger file + */ +const writeInLogger = (message = '') => { + const logger = getLogger() + if (logger) { + logger.log({ + level: 'info', + message + }) + } +} + +module.exports = { initLogger, getLogger, getLoggerMiddleware, writeInLogger } diff --git a/src/fireedge/src/server/utils/server.js b/src/fireedge/src/server/utils/server.js index aced44b98a..ddcc3dc718 100644 --- a/src/fireedge/src/server/utils/server.js +++ b/src/fireedge/src/server/utils/server.js @@ -24,6 +24,7 @@ const { existsSync, readFileSync, createWriteStream, readdirSync, statSync } = r const { internalServerError } = require('./constants/http-codes') const { messageTerminal } = require('server/utils/general') const { validateAuth } = require('server/utils/jwt') +const { writeInLogger } = require('server/utils/logger') const { from: fromData, defaultAppName, @@ -251,6 +252,7 @@ const encrypt = (data = '', key = '', iv = '') => { rtn = encryptData } catch (err) { const errorData = (err && err.message) || '' + writeInLogger(errorData) messageTerminal({ color: 'red', message: 'Error: %s', @@ -279,6 +281,7 @@ const decrypt = (data = '', key = '', iv = '') => { rtn = decryptData } catch (err) { const errorData = (err && err.message) || '' + writeInLogger(errorData) messageTerminal({ color: 'red', message: 'Error: %s', @@ -309,6 +312,7 @@ const existsFile = (path = '', success = defaultEmptyFunction, error = defaultEm } } catch (err) { errorData = (err && err.message) || '' + writeInLogger(errorData) messageTerminal({ color: 'red', message: 'Error: %s', @@ -364,10 +368,12 @@ const genFireedgeKey = () => { () => { createFile( global.paths.FIREEDGE_KEY_PATH, uuidv4.replace(/-/g, ''), () => undefined, err => { + const errorData = (err && err.message) || '' + writeInLogger(errorData) messageTerminal({ color: 'red', message: 'Error: %s', - error: (err && err.message) || '' + error: errorData }) }) } @@ -413,11 +419,13 @@ const getSunstoneAuth = () => { } } }, err => { + const errorData = err.message || '' const config = { color: 'red', message: 'Error: %s', - error: err.message || '' + error: errorData } + writeInLogger(errorData) messageTerminal(config) }) } @@ -554,7 +562,9 @@ const getFiles = (path = '', recursive = false, files = []) => { } }) } catch (error) { - messageTerminal(defaultError(error && error.message)) + const errorData = (error && error.message) || '' + writeInLogger(errorData) + messageTerminal(defaultError(errorData)) } } return files @@ -586,6 +596,7 @@ const getFilesbyEXT = (dir = '', ext = '', errorCallback = defaultEmptyFunction) }) } catch (error) { const errorMsg = (error && error.message) || '' + writeInLogger(errorMsg) messageTerminal(defaultError(errorMsg)) errorCallback(errorMsg) } @@ -613,6 +624,7 @@ const getDirectories = (dir = '', errorCallback = () => undefined) => { }) } catch (error) { const errorMsg = (error && error.message) || '' + writeInLogger(errorMsg) messageTerminal(defaultError(errorMsg)) errorCallback(errorMsg) }