Skip to content
This repository has been archived by the owner on Aug 25, 2021. It is now read-only.

Commit

Permalink
Merge pull request #235 from midwayjs/feat/http_request_abort
Browse files Browse the repository at this point in the history
feat: finish when request aborted
  • Loading branch information
czy88840616 committed Apr 25, 2018
2 parents d56e61f + d1620fa commit 4450840
Show file tree
Hide file tree
Showing 5 changed files with 85 additions and 16 deletions.
44 changes: 28 additions & 16 deletions packages/hook/src/patch/HttpServer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -162,24 +162,36 @@ export class HttpServerPatcher extends Patcher {
tracer.named(`HTTP-${tags['http.method'].value}:${tags['http.url'].value}`);
tracer.setCurrentSpan(span);

res.once('finish', () => {
function onFinishedFactory(eventName) {
return function onFinished() {
res.removeListener('finish', onFinished);
req.removeListener('aborted', onFinished);

if (eventName !== 'aborted' && options.recordPostData && req.method && req.method.toUpperCase() === 'POST') {
const transformer = options.bufferTransformer || self.bufferTransformer;
const postData = transformer(chunks);

span.log({
data: postData
});
// clear cache
chunks = [];
}

span.setTag('http.aborted', {
type: 'bool',
value: eventName === 'aborted'
});

if (options.recordPostData && req.method && req.method.toUpperCase() === 'POST') {
const transformer = options.bufferTransformer || self.bufferTransformer;
const postData = transformer(chunks);
self.beforeFinish(span, res);
span.finish();
tracer.finish(options);
self.afterFinish(span, res);
};
}

span.log({
data: postData
});
// clear cache
chunks = [];
}

self.beforeFinish(span, res);
span.finish();
tracer.finish(options);
self.afterFinish(span, res);
});
res.once('finish', onFinishedFactory('finish'));
req.once('aborted', onFinishedFactory('aborted'));

return requestListener(req, res);
});
Expand Down
42 changes: 42 additions & 0 deletions packages/hook/test/fixtures/http-when-request-abort/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import { RunUtil } from '../../RunUtil';
import * as assert from 'assert';
import { HttpServerPatcher } from '../../../src/patch/HttpServer';

const httpServerPatcher = new HttpServerPatcher();

RunUtil.run(function(done) {
httpServerPatcher.run();
const http = require('http');
const httpclient = require('urllib').create();

process.on(<any> 'PANDORA_PROCESS_MESSAGE_TRACE', (report: any) => {
assert(report.name === 'HTTP-GET:/');
assert(report.spans.length === 1);
assert(report.duration <= 1000);
const span = report.spans[0];
const tag = span.tags['http.aborted'];
assert(tag.value);

done();
});

const server = http.createServer((req, res) => {

setTimeout(function() {
res.end('hello');
}, 3000);

});

server.listen(0, () => {
const port = server.address().port;

const req = httpclient.request(`http://localhost:${port}`, function(err, body) {
console.log('body size: %d', body.length);
});

setTimeout(function() {
req.abort();
}, 1000);
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"name": "http-trace-test",
"version": "1.0.0",
"main": "index.js",
"dependencies": {
"urllib": "^2.25.1"
}
}
3 changes: 3 additions & 0 deletions packages/hook/test/fixtures/http/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ RunUtil.run(function(done) {
assert(report.name === 'HTTP-GET:/');
assert(report.spans.length > 0);
assert(report.status === NORMAL_TRACE);
const span = report.spans[0];
const tag = span.tags['http.aborted'];
assert(!tag.value);

done();
});
Expand Down
4 changes: 4 additions & 0 deletions packages/hook/test/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,10 @@ describe('unit test', () => {
it('should record http post data and query params', done => {
fork('http-record-query-and-data', done);
});

it('should finish span when request aborted', done => {
fork('http-when-request-abort', done);
});
});

describe('http client', () => {
Expand Down

0 comments on commit 4450840

Please sign in to comment.