UNPKG

roar-sdk

Version:

Node.js SDK for developing Roar inspectors

335 lines (278 loc) 9.21 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.LEVELS = undefined; var _stringify = require('babel-runtime/core-js/json/stringify'); var _stringify2 = _interopRequireDefault(_stringify); var _assign = require('babel-runtime/core-js/object/assign'); var _assign2 = _interopRequireDefault(_assign); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs); var _microprofiler = require('microprofiler'); var _microprofiler2 = _interopRequireDefault(_microprofiler); var _os = require('os'); var _os2 = _interopRequireDefault(_os); var _requestretry = require('requestretry'); var _requestretry2 = _interopRequireDefault(_requestretry); var _configure = require('../configure'); var _configure2 = _interopRequireDefault(_configure); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // ASCII ESCAPE SEQUENCE http://www5c.biglobe.ne.jp/~ecb/assembler2/b_2.html var levelToColor = { '6': '[N]', // no color v: '[V]', // purple d: '[D]', // blue w: '[W]', // yellow '1': '[E]' // red }; // --- Modules // --- Libraries var LEVELS = exports.LEVELS = { 'ERROR': 0, 'WARNING': 1, 'INFO': 2, 'DEBUG': 3 }; var LEVEL_COLORS = { 'DEBUG': '[V]', // purple 'INFO': '[D]', // blue 'WARNING': '[W]', // yellow 'ERROR': '[E]' // red }; function getFormattedDate() { var d = new Date(); var month = d.getMonth() + 1; if (month < 10) month = '0' + month; var date = d.getDate(); if (date < 10) date = '0' + date; var hour = d.getHours(); if (hour < 10) hour = '0' + hour; var minutes = d.getMinutes(); if (minutes < 10) minutes = '0' + minutes; var sec = d.getSeconds(); if (sec < 10) sec = '0' + sec; return d.getFullYear() + '-' + month + '-' + date + 'T' + hour + ':' + minutes + ':' + sec + '.' + d.getMilliseconds() + 'Z'; } /** * Logger for use with roar-sdk * * format: * ``[LogLevel] [Time] [File] log text`` * * log levels: * - verbose * - debug * - info * - warning * - error * * @example * import { Logger } from 'roar-sdk' * * // simple usage * Logger.verbose('verbose log'); * */ var Logger = function () { function Logger() { (0, _classCallCheck3.default)(this, Logger); this.profiles = {}; } /** * Get log information. * @return {String} Info string containing the file name and line number. * @private */ (0, _createClass3.default)(Logger, [{ key: 'getInfo', value: function getInfo() { var info = void 0; try { throw new Error(); } catch (e) { var lines = e.stack.split('\n'); var line = lines[4]; var matched = line.match(/([\w\d\-_.]*:\d+:\d+)/); info = matched[1]; } return info; } }, { key: 'log', value: function log(uid, key, options, cb) { //level, msg, status) { var info = this.getInfo(); if (process.env.NODE_ENV === 'dev' || process.env.NODE_ENV === 'test') { var color = LEVEL_COLORS['' + (options.level || 'INFO')]; var log = color + ' [' + _configure2.default.version + '] [' + getFormattedDate() + '] [' + info + '] ' + (options.msg || '') + '\x1B[0m'; console.log(log); } else { (0, _requestretry2.default)({ method: 'POST', url: _configure2.default.apiURL() + '/job/' + uid, json: true, body: options, gzip: true, maxAttempts: 1, // (default) try 5 times retryDelay: 20000, // (default) wait for 20s before trying again retryStrategy: _requestretry2.default.RetryStrategies.HTTPOrNetworkError, // (default) retry on 5xx or network errors headers: { 'Authorization': key, 'Accept': 'application/json' } }, function (error, response, body) { if (error) { console.error('[WARN] [' + _configure2.default.version + '] [' + new Date().toLocaleString() + '] [' + info + '] Failed to send log messge to Roar API', error); } if (cb) { cb(); } }); } } /** * Displays the log * @param {String} level The log level, v, d, i, w, e * @param {...*} msg The message to log * @returns {String} The formatted log message. * @private */ }, { key: 'output', value: function output(level, msg, details, msgCode, extra) { var info = this.getInfo(); if (process.env.NODE_ENV === 'dev' || process.env.NODE_ENV === 'test') { var color = levelToColor['' + level]; var log = color + ' [' + _configure2.default.version + '] [' + getFormattedDate() + '] [' + info + '] ' + (details || '') + '\x1B[0m'; console.log(log); } else { var _log = { 'version': _configure2.default.version, 'host': require('os').hostname(), 'short_message': msg, 'full_message': details || '', 'timestamp': new Date().getTime() / 1000, 'level': level, 'facility': 'roar-agent', 'file': info ? info[0] : 'N/A', 'line': info ? info[1] : 'N/A', '_msgCode': msgCode }; if (extra) { _log = (0, _assign2.default)(_log, extra); } (0, _requestretry2.default)({ method: 'POST', url: _configure2.default.apiURL() + '/sdk/log', json: true, body: _log, gzip: true, maxAttempts: 1, // (default) try 5 times retryDelay: 20000, // (default) wait for 20s before trying again retryStrategy: _requestretry2.default.RetryStrategies.HTTPOrNetworkError, // (default) retry on 5xx or network errors headers: { 'Authorization': global.ACCESS_KEY, 'Accept': 'application/json' } }, function (error, response, body) { _fs2.default.appendFileSync('./scanners.log', (0, _stringify2.default)(_log)); if (error) { console.error('[WARN] [' + _configure2.default.version + '] [' + getFormattedDate() + '] [' + info + '] Failed to send log messge to Roar API', error); } }); } } /** * Logs a verbose message * @param {...*} msg Message to log * @returns {string} Formatted log message. */ }, { key: 'verbose', value: function verbose() { for (var _len = arguments.length, msg = Array(_len), _key = 0; _key < _len; _key++) { msg[_key] = arguments[_key]; } return this.output.apply(this, ['v'].concat(msg)); } /** * Logs a debug message * @param {...*} msg Message to log * @returns {string} Formatted log message. */ }, { key: 'debug', value: function debug() { for (var _len2 = arguments.length, msg = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { msg[_key2] = arguments[_key2]; } return this.output.apply(this, ['d'].concat(msg)); } /** * Logs an informative message * @param {...*} msg Message to log * @returns {string} Formatted log message. */ }, { key: 'info', value: function info() { for (var _len3 = arguments.length, msg = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { msg[_key3] = arguments[_key3]; } return this.output.apply(this, ['i'].concat(msg)); } /** * Logs a warning message * @param {...*} msg Message to log * @returns {string} Formatted log message. */ }, { key: 'warn', value: function warn() { for (var _len4 = arguments.length, msg = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { msg[_key4] = arguments[_key4]; } return this.output.apply(this, ['w'].concat(msg)); } /** * Logs an error message * @param {...*} msg Message to log * @returns {string} Formatted log message. */ }, { key: 'error', value: function error() { for (var _len5 = arguments.length, msg = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { msg[_key5] = arguments[_key5]; } return this.output.apply(this, ['e'].concat(msg)); } /** * Starts profiling the code block to follow * @param {String} tag Tag to identify the code block by */ }, { key: 'startProfile', value: function startProfile(tag) { this.profiles[tag] = _microprofiler2.default.start(); } /** * Ends profiling the previous code block * @param {String} tag Tag to identify the code block to stop profiling */ }, { key: 'endProfile', value: function endProfile(tag) { _microprofiler2.default.measureFrom(this.profiles[tag], tag); } }]); return Logger; }(); var logger = new Logger(); exports.default = logger; // our default logger //# sourceMappingURL=Logger.js.map