app.use(function*(next) { const ctx = this; const start = Date.now(); yield * next; const statusCode = ctx.status; const use = Date.now() - start; const tags = { status: _.sortedIndex([99, 199, 299, 399, 499, 599], statusCode), spdy: _.sortedIndex([100, 300, 1000, 3000], use) }; const fields = { use: use, code: statusCode }; client.writePoint('http', fields, tags).then(() => { console.info('write point to http measurement success'); }).catch(err => { console.error(err); }); });
function httpStats(req, res, next) { const start = Date.now(); onHeaders(res, () => { const code = res.statusCode; const use = Date.now() - start; const method = req.method; const bytes = parseInt(res.get('Content-Length') || 0, 10); const tags = { spdy: _.sortedIndex([100, 300, 1000, 3000], use), type: code / 100 | 0, method, }; const fields = { use, code, bytes, url: req.url, route: req.route.path }; // use queue for better performance client.write('http') .tag(tags) .field(fields) .queue(); }); next(); }
function simulateClientRequest() { const code = getRandomHTTPCode(); const use = getRandomHTTPUse(); const tags = { method: getRandomHTTPMethod(), spdy: _.sortedIndex([300, 1000, 3000, 6000], use), type: code / 100 | 0, }; const fields = { code, use, }; const interval = _.random(0, 10 / getBase() * 10) * 1000; client.write('request') .tag(tags) .field(fields) .then(() => { // console.info('simulateClientRequest success'); setTimeout(simulateClientRequest, interval); }).catch(err => { console.error(err); setTimeout(simulateClientRequest, interval); }); }
app.use((req, res, next) => { const start = Date.now(); onHeaders(res, () => { const statusCode = res.statusCode; const use = Date.now() - start; const tags = { status: _.sortedIndex([99, 199, 299, 399, 499, 599], statusCode), spdy: _.sortedIndex([100, 300, 1000, 3000], use) }; const fields = { use: use, code: statusCode }; // add to the queue // all batch point has the same time client.write('http') .field(fields) .tag(tags) .queue(); }); next(); });
app.use((req, res, next) => { const start = Date.now(); onHeaders(res, () => { const statusCode = res.statusCode; const use = Date.now() - start; const tags = { status: _.sortedIndex([99, 199, 299, 399, 499, 599], statusCode), spdy: _.sortedIndex([100, 300, 1000, 3000], use) }; const fields = { use: use, code: statusCode }; // add to the queue // set the time for every point client.write('http') .field(fields) .tag(tags) .time(Date.now(), 'ms') .queue(); // batch post to influxdb when queue length gte 5 if (client.writeQueueLength >= 5) { client.syncWrite() .then(() => console.info('sync write queue success')) .catch(console.error); } }); next(); });