Skip to content

Commit 7d7adbf

Browse files
express-http-proxy ^1.6.0 compatibility
1 parent b3b5a0c commit 7d7adbf

File tree

4 files changed

+256
-64
lines changed

4 files changed

+256
-64
lines changed

packages/zipkin-instrumentation-express/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
"zipkin": "^0.19.1"
1818
},
1919
"devDependencies": {
20-
"express-http-proxy": "^0.11.0",
20+
"express-http-proxy": "^1.6.0",
2121
"node-fetch": "^2.6.0"
2222
}
2323
}

packages/zipkin-instrumentation-express/src/wrapExpressHttpProxy.js

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -50,33 +50,33 @@ class ExpressHttpProxyInstrumentation {
5050

5151
function wrapProxy(proxy, {tracer, serviceName, remoteServiceName}) {
5252
return function zipkinProxy(host, options = {}) {
53-
function wrapDecorateRequest(instrumentation, decorateRequest) {
53+
function wrapProxyReqOptDecorator(instrumentation, proxyReqOptDecorator) {
5454
return (proxyReq, serverReq) => {
5555
const serverTraceId = serverReq._trace_id;
5656
let wrappedProxyReq = proxyReq;
57-
if (typeof decorateRequest === 'function') {
57+
if (typeof proxyReqOptDecorator === 'function') {
5858
tracer.letId(serverTraceId, () => {
59-
wrappedProxyReq = decorateRequest(proxyReq, serverReq);
59+
wrappedProxyReq = proxyReqOptDecorator(proxyReq, serverReq);
6060
});
6161
}
6262

6363
return instrumentation.decorateAndRecordRequest(serverReq, wrappedProxyReq, serverTraceId);
6464
};
6565
}
6666

67-
function wrapIntercept(instrumentation, intercept) {
68-
return (rsp, data, serverReq, res, callback) => {
69-
const instrumentedCallback = (err, rspd, sent) => {
70-
instrumentation.recordResponse(rsp, serverReq._trace_id_proxy);
71-
return callback(err, rspd, sent);
72-
};
73-
67+
function wrapUserResDecorator(instrumentation, userResDecorator) {
68+
return (rsp, data, serverReq, res) => {
7469
const serverTraceId = serverReq._trace_id;
75-
if (typeof intercept === 'function') {
76-
tracer.letId(serverTraceId,
77-
() => intercept(rsp, data, serverReq, res, instrumentedCallback));
70+
if (typeof userResDecorator === 'function') {
71+
let decoratedResponse;
72+
tracer.letId(serverTraceId, () => {
73+
decoratedResponse = userResDecorator(rsp, data, serverReq, res);
74+
instrumentation.recordResponse(rsp, serverReq._trace_id_proxy);
75+
});
76+
return decoratedResponse;
7877
} else {
79-
instrumentedCallback(null, data);
78+
instrumentation.recordResponse(rsp, serverReq._trace_id_proxy);
79+
return data;
8080
}
8181
};
8282
}
@@ -87,11 +87,13 @@ function wrapProxy(proxy, {tracer, serviceName, remoteServiceName}) {
8787

8888
const wrappedOptions = options;
8989

90-
const {decorateRequest} = wrappedOptions;
91-
wrappedOptions.decorateRequest = wrapDecorateRequest(instrumentation, decorateRequest);
90+
const {proxyReqOptDecorator} = wrappedOptions;
91+
wrappedOptions.proxyReqOptDecorator = wrapProxyReqOptDecorator(
92+
instrumentation, proxyReqOptDecorator
93+
);
9294

93-
const {intercept} = wrappedOptions;
94-
wrappedOptions.intercept = wrapIntercept(instrumentation, intercept);
95+
const {userResDecorator} = wrappedOptions;
96+
wrappedOptions.userResDecorator = wrapUserResDecorator(instrumentation, userResDecorator);
9597

9698
return proxy(host, wrappedOptions);
9799
};

packages/zipkin-instrumentation-express/test/wrapExpressHttpProxyIntegrationTest.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,13 @@ describe('express proxy instrumentation - integration test', () => {
3131
const zipkinProxy = wrapProxy(proxy, {tracer: tracer.tracer(), remoteServiceName});
3232
frontendApp.use(middleware({tracer: tracer.tracer()}));
3333
frontendApp.use(zipkinProxy(`127.0.0.1:${backend.address().port}`, {
34-
decorateRequest: (proxyReq) => {
35-
tracer.tracer().recordBinary('decorateRequest', '');
34+
proxyReqOptDecorator: (proxyReq) => {
35+
tracer.tracer().recordBinary('proxyReqOptDecorator', '');
3636
return proxyReq;
3737
},
38-
intercept: (rsp, data, serverReq, res, callback) => {
39-
tracer.tracer().recordBinary('intercept', '');
40-
callback(null, data);
38+
userResDecorator: (rsp, data, serverReq, res) => {
39+
tracer.tracer().recordBinary('userResDecorator', '');
40+
return data;
4141
}
4242
}));
4343

@@ -61,8 +61,8 @@ describe('express proxy instrumentation - integration test', () => {
6161
tags: {
6262
'http.path': path,
6363
'http.status_code': '200',
64-
intercept: '',
65-
decorateRequest: ''
64+
userResDecorator: '',
65+
proxyReqOptDecorator: ''
6666
}
6767
});
6868
}
@@ -154,7 +154,7 @@ describe('express proxy instrumentation - integration test', () => {
154154
'http.path': path,
155155
'http.status_code': '500',
156156
error: '500', // TODO: better error message
157-
decorateRequest: ''
157+
proxyReqOptDecorator: ''
158158
}
159159
}));
160160
});

0 commit comments

Comments
 (0)