Skip to content

Commit

Permalink
Merge pull request newrelic#124 from bizob2828/fix-13-3-1
Browse files Browse the repository at this point in the history
fix: updated instrumentation to work in versions >= 13.3.1 as the methods we try to hook no longer have setters
  • Loading branch information
bizob2828 authored May 22, 2023
2 parents f0de11c + 4c5c41d commit 5a4c7da
Show file tree
Hide file tree
Showing 8 changed files with 136 additions and 232 deletions.
2 changes: 0 additions & 2 deletions merged/nextjs/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,3 @@ const newrelic = require('newrelic')
// See: https://github.com/vercel/next.js/blob/canary/packages/next/build/utils.ts#L1217
newrelic.instrumentWebframework('next/dist/server/next-server', require('./lib/next-server'))
newrelic.instrumentWebframework('./next-server', require('./lib/next-server'))
newrelic.instrumentWebframework('./render', require('./lib/render'))
newrelic.instrumentWebframework('./context', require('./lib/context'))
90 changes: 0 additions & 90 deletions merged/nextjs/lib/context.js

This file was deleted.

58 changes: 56 additions & 2 deletions merged/nextjs/lib/next-server.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,16 @@
*/

'use strict'

const semver = require('semver')
const { assignCLMAttrs } = require('./utils')
const SPAN_PREFIX = 'Nodejs/Nextjs'
// Version middleware is stable
// See: https://nextjs.org/docs/advanced-features/middleware
const MIN_MW_SUPPORTED_VERSION = '12.2.0'

module.exports = function initialize(shim, nextServer) {
const nextVersion = shim.require('./package.json').version
const { config } = shim.agent
shim.setFramework(shim.NEXT)

const Server = nextServer.default
Expand All @@ -31,7 +37,6 @@ module.exports = function initialize(shim, nextServer) {
)

shim.wrap(Server.prototype, 'runApi', function wrapRunApi(shim, originalFn) {
const { config } = shim.agent
return function wrappedRunApi() {
const [, , , params, page] = arguments

Expand All @@ -46,6 +51,55 @@ module.exports = function initialize(shim, nextServer) {
return originalFn.apply(this, arguments)
}
})

shim.record(
Server.prototype,
'renderHTML',
function renderHTMLRecorder(shim, renderToHTML, name, [req, res, page]) {
return {
inContext(segment) {
segment.addSpanAttributes({ 'next.page': page })
assignCLMAttrs(config, segment, {
'code.function': 'getServerSideProps',
'code.filepath': `pages${page}`
})
},
req,
res,
promise: true,
name: `${SPAN_PREFIX}/getServerSideProps/${page}`
}
}
)

if (semver.lt(nextVersion, MIN_MW_SUPPORTED_VERSION)) {
shim.logger.warn(
`Next.js middleware instrumentation only supported on >=${MIN_MW_SUPPORTED_VERSION}, got %s`,
nextVersion
)
return
}

shim.record(
Server.prototype,
'runMiddleware',
function runMiddlewareRecorder(shim, runMiddleware, name, [args]) {
const middlewareName = 'middleware'
return {
type: shim.MIDDLEWARE,
name: `${shim._metrics.MIDDLEWARE}${shim._metrics.PREFIX}/${middlewareName}`,
inContext(segment) {
assignCLMAttrs(config, segment, {
'code.function': middlewareName,
'code.filepath': middlewareName
})
},
req: args.request,
route: middlewareName,
promise: true
}
}
)
}

function assignParameters(shim, parameters) {
Expand Down
32 changes: 0 additions & 32 deletions merged/nextjs/lib/render.js

This file was deleted.

10 changes: 0 additions & 10 deletions merged/nextjs/nr-hooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,5 @@ module.exports = [
type: 'web-framework',
moduleName: './next-server',
onRequire: require('./lib/next-server')
},
{
type: 'web-framework',
moduleName: './render',
onRequire: require('./lib/render')
},
{
type: 'web-framework',
moduleName: './context',
onRequire: require('./lib/context')
}
]
94 changes: 0 additions & 94 deletions merged/nextjs/tests/unit/context.test.js

This file was deleted.

Loading

0 comments on commit 5a4c7da

Please sign in to comment.