@@ -19,6 +19,7 @@ var once = require('once');
1919var tunnelAgent = require ( 'tunnel-agent' ) ;
2020
2121var dtrace = require ( './helpers/dtrace' ) ;
22+ var auditor = require ( './helpers/auditor' ) ;
2223var errors = require ( 'restify-errors' ) ;
2324var serializers = require ( './helpers/bunyan' ) . serializers ;
2425
@@ -152,9 +153,22 @@ function rawRequest(opts, cb) {
152153
153154 var emitResult = once ( function _emitResult ( _err , _req , _res ) {
154155 _req . emit ( 'result' , _err , _res ) ;
156+
157+ // Use the default auditor with the switch "opts.audit: true | false"
158+ if ( opts . audit . defaultEnabled ) {
159+ auditor ( _err , _req , _res ) ;
160+
161+ } else if ( opts . audit . func && typeof opts . audit . func === 'function' ) {
162+ // Use the function provided by the user through "opts.auditor"
163+ opts . audit . func ( _err , _req , _res ) ;
164+ }
155165 } ) ;
156166
167+ var requestTime = new Date ( ) . getTime ( ) ;
157168 req = proto . request ( opts , function onResponse ( res ) {
169+ var latency = Date . now ( ) - requestTime ;
170+ res . headers [ 'x-request-received' ] = requestTime ;
171+ res . headers [ 'x-request-processing-time' ] = latency ;
158172 clearTimeout ( connectionTimer ) ;
159173 clearTimeout ( requestTimer ) ;
160174
@@ -343,6 +357,11 @@ function HttpClient(options) {
343357 this . requestTimeout = options . requestTimeout || false ;
344358 this . headers = options . headers || { } ;
345359 this . log = options . log ;
360+ this . audit = {
361+ func : options . auditor || null ,
362+ defaultEnabled : options . audit || false
363+ } ;
364+
346365
347366 if ( ! this . log . serializers ) {
348367 // Ensure logger has a reasonable serializer for `client_res`
@@ -570,6 +589,8 @@ HttpClient.prototype.request = function request(opts, cb) {
570589 cb = once ( cb ) ;
571590 /* eslint-enable no-param-reassign */
572591
592+ opts . audit = this . audit ;
593+
573594 if ( opts . retry === false ) {
574595 rawRequest ( opts , cb ) ;
575596 return ;
0 commit comments