code: function monitorHttp (ctx, req, res) {
    var stopwatch = ctx.timer.start()
  
    function endOfConnectionHandler () {
      // cached vars
      var stats = ctx.stats
      var histogram = ctx.histogram
  
      // capture duration
      var duration = stopwatch.end()
      stopwatch = null
      stats.meter('requests').mark()
  
      // duration is in ms as float with nanosecond precision,
      // but we use microseconds with the backend
      histogram.update(Math.round(duration * 1000), Date.now())
      if (res.getHeader) {
        ctx.resSize += ((res.getHeader('Content-Length') || 0) * 1)
      }
  
      if (req.headers) {
        ctx.reqSize += (req.headers['content-length'] || 0) * 1
      }
  
      // capture special response codes
      if (res.statusCode >= 300) {
        if (res.statusCode < 400) {
          stats.meter('3xxRate').mark()
        } else if (res.statusCode < 500) {
          stats.meter('errRate').mark()
          stats.meter('4xxRate').mark()
        } else {
          stats.meter('errRate').mark()
          stats.meter('5xxRate').mark()
        }
      }
  
      res.removeListener(FINISH_EVENT_NAME, endOfConnectionHandler)
      res.removeListener(ABRUPT_CLOSE_EVENT_NAME, endOfConnectionHandler)
  
      // this is invoked to cleanup domains from possible timers bound to it
      cleanDomainNamespace()
    }
  
    res.on(FINISH_EVENT_NAME, endOfConnectionHandler)
    res.on(ABRUPT_CLOSE_EVENT_NAME, endOfConnectionHandler)
  }
docs: Req/res handler for monitoring
  @param  {Object} ctx
  @param  {http.IncomingMessage} req
  @param  {http.ServerResponse} res