Merge pull request #4119 from studykik/fix/appdynamics-proxy
Support middleware injected by AppDynamics
This commit is contained in:
commit
c38900b785
|
@ -221,12 +221,15 @@ proto.middleware = function(name, paths, handler) {
|
||||||
*/
|
*/
|
||||||
proto._findLayerByHandler = function(handler) {
|
proto._findLayerByHandler = function(handler) {
|
||||||
// Other handlers can be added to the stack, for example,
|
// Other handlers can be added to the stack, for example,
|
||||||
// NewRelic adds sentinel handler. We need to search the stack
|
// NewRelic adds sentinel handler, and AppDynamics adds
|
||||||
|
// some additional proxy info. We need to search the stack
|
||||||
for (var k = this._router.stack.length - 1; k >= 0; k--) {
|
for (var k = this._router.stack.length - 1; k >= 0; k--) {
|
||||||
if (this._router.stack[k].handle === handler ||
|
const isOriginal = this._router.stack[k].handle === handler;
|
||||||
// NewRelic replaces the handle and keeps it as __NR_original
|
const isNewRelic = this._router.stack[k].handle['__NR_original'] === handler;
|
||||||
this._router.stack[k].handle['__NR_original'] === handler
|
const isAppDynamics = this._router.stack[k].handle['__appdynamicsProxyInfo__'] &&
|
||||||
) {
|
this._router.stack[k].handle['__appdynamicsProxyInfo__']['orig'] === handler;
|
||||||
|
|
||||||
|
if (isOriginal || isNewRelic || isAppDynamics) {
|
||||||
return this._router.stack[k];
|
return this._router.stack[k];
|
||||||
} else {
|
} else {
|
||||||
// Aggressively check if the original handler has been wrapped
|
// Aggressively check if the original handler has been wrapped
|
||||||
|
|
|
@ -124,6 +124,28 @@ describe('app', function() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('allows handlers to be wrapped as __appdynamicsProxyInfo__ on express stack',
|
||||||
|
function(done) {
|
||||||
|
var myHandler = namedHandler('my-handler');
|
||||||
|
var wrappedHandler = function(req, res, next) {
|
||||||
|
myHandler(req, res, next);
|
||||||
|
};
|
||||||
|
wrappedHandler['__appdynamicsProxyInfo__'] = {
|
||||||
|
orig: myHandler,
|
||||||
|
};
|
||||||
|
app.middleware('routes:before', wrappedHandler);
|
||||||
|
var found = app._findLayerByHandler(myHandler);
|
||||||
|
expect(found).to.be.an('object');
|
||||||
|
expect(found).have.property('phase', 'routes:before');
|
||||||
|
executeMiddlewareHandlers(app, function(err) {
|
||||||
|
if (err) return done(err);
|
||||||
|
|
||||||
|
expect(steps).to.eql(['my-handler']);
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('allows handlers to be wrapped as a property on express stack',
|
it('allows handlers to be wrapped as a property on express stack',
|
||||||
function(done) {
|
function(done) {
|
||||||
var myHandler = namedHandler('my-handler');
|
var myHandler = namedHandler('my-handler');
|
||||||
|
|
Loading…
Reference in New Issue