Get stats on your Node.js HTTP server requests
npm install request-stats

Get stats on your Node.js HTTP server requests.
Emits two events:
- request when ever a request starts: Passes a Request object that can later be used to query for the progress of a long running request
- complete when ever a request completes: Passes a stats object containing the overall stats for the entire HTTP request
```
npm install request-stats --save
Get stats for each completed HTTP request:
`javascript
var requestStats = require('request-stats')
var server = http.createServer(...)
requestStats(server, function (stats) {
// this function will be called every time a request to the server completes
console.log(stats)
})
`
Get periodic stats for long running requests:
`javascript
var server = http.createServer(...)
var stats = requestStats(server)
stats.on('request', function (req) {
// evey second, print stats
var interval = setInterval(function () {
var progress = req.progress()
console.log(progress)
if (progress.completed) clearInterval(interval)
}, 1000)
})
`
#### requestStats(server[, callback])
Attach request-stats to a HTTP server.
Initialize request-stats with an instance a HTTP server. Returns a
StatsEmitter object. Optionally provide a callback which will be called
for each completed HTTP request with a stats object (see stats object
details below).
If no callback is provided, you can later attach a listener on the
"complete" event.
#### requestStats(req, res[, callback])
Attach request-stats to a single HTTP request.
Initialize request-stats with an instance a HTTP request and response.
Returns a StatsEmitter object. Optionally provide a callback which will
be called with a stats object when the HTTP request completes (see stats
object details below).
If no callback is provided, you can later attach a listener on the
"complete" event.
#### .on('complete', callback)
Calls the callback function with a stats object when a HTTP request
completes:
`javascripttrue
{
ok: true, // if the connection was closed correctly and false otherwisehttp.IncomingMessage
time: 0, // The milliseconds it took to serve the request
req: {
bytes: 0, // Number of bytes sent by the client
headers: { ... }, // The headers sent by the client
method: 'POST', // The HTTP method used by the client
path: '...', // The path part of the request URL
ip: '...', // The remote ip
raw: [Object] // The original objecthttp.ServerResponse
},
res: {
bytes: 0, // Number of bytes sent back to the client
headers: { ... }, // The headers sent back to the client
status: 200, // The HTTP status code returned to the client
raw: [Object] // The original object`
}
}
#### .on('request', callback)
Calls the callback function with a special Request
object when a HTTP request is made to the server.
The Request object should not be confused with the Node.js
http.IncomingMessage
object. The request-stats Request object provides only a single
but powerfull function:
#### .progress()
Returns a progress object if called while a HTTP request is in progress.
If called multiple times, the returned progress object will contain the
delta of the previous call to .progress().
`javascriptfalse
{
completed: false, // if the request is still in progress``
time: 0, // The total time the reuqest have been in progress
timeDelta: 0, // The time since previous call to .progress()
req: {
bytes: 0, // Total bytes received
bytesDelta: 0, // Bytes received since previous call to .progress()
speed: 0, // Bytes per second calculated since previous call to .progress()
bytesLeft: 0, // If the request contains a Content-Size header
timeLeft: 0 // If the request contains a Content-Size header
},
res: {
bytes: 0, // Total bytes send back to the client
bytesDelta: 0, // Bytes sent back to the client since previous call to .progress()
speed: 0 // Bytes per second calculated since previous call to .progress()
}
}
Thanks to mafintosh for coming up with
the initial concept and pointing me in the right direction.
MIT