From 68abef4da2226fd4b3030730d2d51779bbe8c761 Mon Sep 17 00:00:00 2001 From: Andrey Yatskov Date: Tue, 26 Jul 2016 20:42:59 +0300 Subject: [PATCH] The ability to set log --- lib/cloudapi.js | 72 +++++++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 42 deletions(-) diff --git a/lib/cloudapi.js b/lib/cloudapi.js index ffd3581..e34f0ab 100644 --- a/lib/cloudapi.js +++ b/lib/cloudapi.js @@ -4,7 +4,6 @@ var assert = require('assert-plus'); var cli = require('./cli'); -var crypto = require('crypto'); var qs = require('querystring'); var util = require('util'); var sprintf = util.format; @@ -170,9 +169,7 @@ function _addToQuery(req, obj) { * @param {Object} options object (required): * - {String} url (required) CloudAPI location. * - {String} account (optional) the login name to use (default my). - * - {Object} logFields (optional) the additional fields to include - * into the log records. - * - {Number} logLevel (optional) an enum value for the logging level. + * - {Object} log (optional). * - {String} version (optional) api version (default ~7.2). * - {Function} sign (required) callback function to use for signing * (authenticated requests) @@ -189,26 +186,14 @@ function CloudAPI(options) { assert.string(options.url, 'options.url'); assert.func(options.sign, 'options.sign'); assert.optionalString(options.account, 'options.account'); - assert.optionalObject(options.logFields, 'options.logFields'); + assert.optionalObject(options.log, 'options.log'); - if (options.logFields) { - options.log = log.child(options.logFields); - } else { - options.log = log.child(); - } - - if (options.logLevel) { - options.log.level(options.logLevel); - } - - if (options.api_version) - options.version = options.api_version; - - if (!options.version) - options.version = API_VERSION; + options.log = options.log || log; + options.version = options.api_version || options.version || API_VERSION; this.account = options.account || 'my'; this.sign = options.sign; + this.log = options.log; options.contentType = 'application/json'; @@ -1032,7 +1017,7 @@ function countMachines(account, options, callback) { var done = true; var count = parseInt(headers['x-resource-count'], 10); - log.debug('CloudAPI._head(%s) -> err=%o, count=%d, done=%s', + self.log.debug('CloudAPI._head(%s) -> err=%o, count=%d, done=%s', req.path, err, count, done); return callback(err, count, done); }); @@ -1121,21 +1106,23 @@ function listMachines(account, options, tags, callback) { return self.client.get(req, function getCb(err, request, res, obj) { if (err) { - log.error({err: err}, sprintf('CloudAPI._get(%s)', req.path)); + self.log.error({err: err}, + sprintf('CloudAPI._get(%s)', req.path)); return callback(self._error(err)); } var done = true; + var headers = res.headers; if (typeof (req.query.offset) === 'undefined') { req.query.offset = 0; } - if (res.headers['x-resource-count'] && - res.headers['x-query-limit']) - done = (parseInt(res.headers['x-resource-count'], 10) < - parseInt(res.headers['x-query-limit'], 10) + req.query.offset); + if (headers['x-resource-count'] && headers['x-query-limit']) { + done = (parseInt(headers['x-resource-count'], 10) < + parseInt(headers['x-query-limit'], 10) + req.query.offset); + } - log.debug({err: err, obj: obj, done: done}, 'CloudAPI._get(%s)', - req.path); + self.log.debug({err: err, obj: obj, done: done}, + 'CloudAPI._get(%s)', req.path); return callback(err, obj, done); }); }); @@ -4258,7 +4245,7 @@ function _error(err) { if (response && response.code && response.message) return _newError(response.code, response.message); } catch (e) { - log.warn({err: err, exception: e}, 'Invalid JSON for err'); + this.log.warn({err: err, exception: e}, 'Invalid JSON for err'); } } } @@ -4278,7 +4265,7 @@ function _get(req, callback, noCache) { if (!noCache) { var cached = this._cacheGet(req.path, req.cacheTTL); if (cached && cached.obj) { - log.debug('Getting %s from cache', req.path); + self.log.debug('Getting %s from cache', req.path); if (cached.obj instanceof Error) return callback(cached.obj); @@ -4290,10 +4277,10 @@ function _get(req, callback, noCache) { return this.client.get(req, function getCb(err, request, res, obj) { if (err) { err = self._error(err); - log.error({err: err}, sprintf('CloudAPI._get(%s)', req.path)); + self.log.error({err: err}, sprintf('CloudAPI._get(%s)', req.path)); } else if (obj) { self._cachePut(req.path, {obj: obj, headers: res && res.headers}); - log.debug({obj: obj}, sprintf('CloudAPI._get(%s)', req.path)); + self.log.debug({obj: obj}, sprintf('CloudAPI._get(%s)', req.path)); } return callback(err, obj, res && res.headers); @@ -4314,9 +4301,9 @@ function _post(req, callback) { return this.client.post(req, body, function postCb(err, request, res, obj) { if (err) { err = self._error(err); - log.error({err: err}, sprintf('CloudAPI._post(%s)', req.path)); + self.log.error({err: err}, sprintf('CloudAPI._post(%s)', req.path)); } else { - log.debug({obj: obj}, sprintf('CloudAPI._post(%s)', req.path)); + self.log.debug({obj: obj}, sprintf('CloudAPI._post(%s)', req.path)); } return callback(err, obj); }); @@ -4336,9 +4323,9 @@ function _put(req, callback) { return this.client.put(req, body, function putCb(err, request, res, obj) { if (err) { err = self._error(err); - log.error({err: err}, sprintf('CloudAPI._put(%s)', req.path)); + self.log.error({err: err}, sprintf('CloudAPI._put(%s)', req.path)); } else { - log.debug({obj: obj}, sprintf('CloudAPI._put(%s)', req.path)); + self.log.debug({obj: obj}, sprintf('CloudAPI._put(%s)', req.path)); } return callback(err, obj, res && res.headers); }); @@ -4356,10 +4343,10 @@ function _del(req, callback) { return this.client.del(req, function delCb(err, request, res, obj) { if (err) { err = self._error(err); - log.debug({err: err}, 'CloudAPI._del(%s) -> err', req.path); + self.log.debug({err: err}, 'CloudAPI._del(%s) -> err', req.path); } else { self._cachePut(req.path, null); - log.debug('CloudAPI._del(%s)', req.path); + self.log.debug('CloudAPI._del(%s)', req.path); } return callback(err); @@ -4417,7 +4404,7 @@ function _cachePut(key, value) { if (value === null) { // Do a purge - log.debug('CloudAPI._cachePut(%s): purging', key); + this.log.debug('CloudAPI._cachePut(%s): purging', key); return this.cache.set(key, null); } @@ -4425,7 +4412,7 @@ function _cachePut(key, value) { value: value, ctime: new Date().getTime() }; - log.debug({obj: obj}, 'CloudAPI._cachePut(%s)', key); + this.log.debug({obj: obj}, 'CloudAPI._cachePut(%s)', key); this.cache.set(key, obj); return true; }; @@ -4446,12 +4433,13 @@ function _cacheGet(key, expiry) { assert.ok(obj.value); var now = new Date().getTime(); if ((now - obj.ctime) <= maxAge) { - log.debug({obj: obj}, 'CloudAPI._cacheGet(%s): cache hit', key); + this.log.debug({obj: obj}, + 'CloudAPI._cacheGet(%s): cache hit', key); return obj.value; } } - log.debug('CloudAPI._cacheGet(%s): cache miss', key); + this.log.debug('CloudAPI._cacheGet(%s): cache miss', key); return null; };