Authored by 周奇琪

add timer util to log,and add a unit test example

... ... @@ -12,7 +12,8 @@ let API = require('../../library/api');
// Your controller here
router.get('/',function(req,res){
let api = new API();
api.get('/v2/book/1220562',{}).then(function(body){
let name = '/productColor/queryProductColors';
api.get(name,{}).then(function(body){
res.send(body);
}).catch(function (error) {
res.send('some thing wrong');
... ...
... ... @@ -7,7 +7,7 @@
module.exports = {
domains: {
api:'http://api.douban.com'
api:'http://192.168.102.202:8088/platform'
},
loggers: {
file:{
... ...
... ... @@ -10,6 +10,7 @@ const rp = require('request-promise');
const _ = require('lodash');
const log = require('./logger');
const api = require('../config/common').domains.api;
const Timer = require('./timer');
const ApiUrl = api;
... ... @@ -22,20 +23,22 @@ class API {
*/
get(url, data) {
log.info('API GET: %s, parms: %j',url,data,{});
log.profile('%s %j',url,data);
let ret = rp({
let options = {
url: `${ApiUrl}${url}`,
qs: data
});
};
let timer = new Timer();
timer.put('getApi');//统计时间开始
let ret = rp(options);
ret.then((body)=>{
log.profile('%s %j',url,data);
log.info('API GET: %s, parms: %j ',url,data,body);
let duration = timer.put('getApi');//接口返回
log.info('API GET: %s, parms: %j , durationMs: %d ms , body: %s',options.url,options.qs,duration,body);
}).catch((error)=>{
log.profile('%s %j',url,data);
log.error('API GET: %s, parms: %j ',url,data,error);
let duration = timer.put('getApi');//接口返回
log.error('API GET: %s, parms: %j , durationMs: %d ms error: %s , statusCode: %d',options.url,options.qs,duration,error.message,error.statusCode);
});
return ret;
... ...
'use strict';
/**
* 计时类
* @example
* let timer = new Timer();
* timer.put('profile');
* timer.put('proflie'); // console output: 12.14
*
* @author: hbomb<qiqi.zhou@yoho.cn>
* @date: 2016/05/07
*/
class Timer {
constructor() {
this.timers = {};
}
/**
* 打点计时
*/
put(label) {
let labelTime = this.timers[label];
if (labelTime) {
let duration = process.hrtime(labelTime);
return this._round(duration[1]);
} else {
this.timers[label] = process.hrtime();
}
}
/**
* 格式化成毫秒
* @param {Number} value 纳秒
*/
_round(value) {
return Math.round(value / 10000) / 100;
}
}
module.exports = Timer;
\ No newline at end of file
... ...
... ... @@ -13,7 +13,7 @@
"online": "NODE_ENV=\"production\" node app.js",
"debug": "DEBUG=\"express:*\" node app.js",
"lint-js": "node_modules/.bin/eslint -c .eslintrc --cache --fix \"git diff --cached --name-only --diff-filter=ACM | grep .js$\" app.js",
"lint-css": "node_modules/.bin/stylelint --config .stylelintrc \"git diff --cached --name-only --diff-filter=ACM | grep .css$\" public/css/*.css&",
"lint-css": "node_modules/.bin/stylelint --config .stylelintrc \"git diff --cached --name-only --diff-filter=ACM | grep .css$\" &",
"precommit": "npm run lint-js && npm run lint-css"
},
"license": "MIT",
... ... @@ -40,6 +40,8 @@
"gulp-sourcemaps": "^2.0.0-alpha",
"gulp-util": "^3.0.7",
"husky": "^0.11.4",
"mocha": "^2.4.5",
"nodemon": "1.9.2",
"postcss-assets": "^4.0.1",
"postcss-cachebuster": "^0.1.2",
"postcss-calc": "^5.2.1",
... ... @@ -52,11 +54,12 @@
"postcss-sprites": "^3.1.2",
"postcss-use": "^2.0.2",
"precss": "^1.4.0",
"rewire": "^2.5.1",
"shelljs": "^0.7.0",
"stylelint": "^6.2.2",
"stylelint-config-yoho": "^1.2.0",
"webpack": "^1.13.0",
"webpack-dev-server": "^1.14.1",
"webpack-stream": "^3.1.0",
"shelljs": "^0.7.0"
"webpack-stream": "^3.1.0"
}
}
... ...
let expect = require("expect.js");
let Timer = require("../../library/timer");
describe('/library/timer',function(){
it('延迟100ms,期望大于或等于100ms',function(done){
let t = new Timer();
t.put('aa');
setTimeout(function(){
let time = t.put('aa');
expect(Math.round(time)>=100).to.be.ok();
done();
},100)
});
});
\ No newline at end of file
... ...
require('./library/timer.test');
\ No newline at end of file
... ...