-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
36 lines (31 loc) · 1.03 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
function streamLogStats (options = {}) {
const stats = require('./lib/stats')
const view = require('./lib/view')
const throttle = require('lodash.throttle')
const throttledRender = throttle(view.render, options.refreshRate || 500)
function renderLogObject (logObject) {
const requestSplit = logObject.request.split(' ')
stats.addBytes(logObject.bytes)
stats.requests++
stats.addClient(logObject.remoteHost)
let resourceLine
try {
resourceLine = decodeURI(requestSplit[1])
} catch (err) {
resourceLine = requestSplit[1]
}
stats.addResource(logObject.status + ' ' + requestSplit[0] + ' ' + resourceLine, logObject.bytes)
throttledRender(stats)
return logObject
}
const Clf = require('common-log-format')
const JSONStream = require('JSONStream')
const streamVia = require('stream-via')
const clf = new Clf(options)
clf
.pipe(JSONStream.parse())
.pipe(streamVia(renderLogObject, { objectMode: true }))
.resume()
return clf
}
module.exports = streamLogStats