diff options
author | vmarchaud <contact@vmarchaud.fr> | 2019-06-30 22:37:18 +0200 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2019-07-12 00:36:27 +0200 |
commit | 0ebf01dc53b474ffca78c7ace023bb10341b6664 (patch) | |
tree | 47aa24677e1903e7a2d5f694b19ea12f59ad7d43 /test | |
parent | ca0884a60b2fc828b6ca35e9b46e6979d9024146 (diff) | |
download | android-node-v8-0ebf01dc53b474ffca78c7ace023bb10341b6664.tar.gz android-node-v8-0ebf01dc53b474ffca78c7ace023bb10341b6664.tar.bz2 android-node-v8-0ebf01dc53b474ffca78c7ace023bb10341b6664.zip |
perf_hooks: add HttpRequest statistics monitoring #28445
```js
const { PerformanceObserver, performance } = require('perf_hooks');
const http = require('http');
const obs = new PerformanceObserver((items) => {
const entry = items.getEntries()[0];
console.log(entry.name, entry.duration);
});
obs.observe({ entryTypes: ['http'] });
const server = http.Server(function(req, res) {
server.close();
res.writeHead(200);
res.end('hello world\n');
});
server.listen(0, function() {
const req = http.request({
port: this.address().port,
path: '/',
method: 'POST'
}).end();
});
```
PR-URL: https://github.com/nodejs/node/pull/28486
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Diffstat (limited to 'test')
-rw-r--r-- | test/parallel/test-http-perf_hooks.js | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/test/parallel/test-http-perf_hooks.js b/test/parallel/test-http-perf_hooks.js new file mode 100644 index 0000000000..f28885e436 --- /dev/null +++ b/test/parallel/test-http-perf_hooks.js @@ -0,0 +1,58 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const http = require('http'); + +const { PerformanceObserver } = require('perf_hooks'); + +const obs = new PerformanceObserver(common.mustCall((items) => { + const entry = items.getEntries()[0]; + assert.strictEqual(entry.entryType, 'http'); + assert.strictEqual(typeof entry.startTime, 'number'); + assert.strictEqual(typeof entry.duration, 'number'); +}, 2)); + +obs.observe({ entryTypes: ['http'] }); + +const expected = 'Post Body For Test'; +const makeRequest = (options) => { + return new Promise((resolve, reject) => { + http.request(options, common.mustCall((res) => { + resolve(); + })).on('error', reject).end(options.data); + }); +}; + +const server = http.Server(common.mustCall((req, res) => { + let result = ''; + + req.setEncoding('utf8'); + req.on('data', function(chunk) { + result += chunk; + }); + + req.on('end', common.mustCall(function() { + assert.strictEqual(result, expected); + res.writeHead(200); + res.end('hello world\n'); + })); +}, 2)); + +server.listen(0, common.mustCall(async () => { + await Promise.all([ + makeRequest({ + port: server.address().port, + path: '/', + method: 'POST', + data: expected + }), + makeRequest({ + port: server.address().port, + path: '/', + method: 'POST', + data: expected + }) + ]); + server.close(); +})); |