Skip to content

Instantly share code, notes, and snippets.

@trentm
Created September 29, 2021 20:02
Show Gist options
  • Save trentm/924b0ec426b6c81a3e76fab04f846655 to your computer and use it in GitHub Desktop.
Save trentm/924b0ec426b6c81a3e76fab04f846655 to your computer and use it in GitHub Desktop.
#!/usr/bin/env node
'use strict'
const apm = require('elastic-apm-node').start({
serviceName: 'example-trace-hapi'
})
const Hapi = require('@hapi/hapi')
const init = async () => {
const server = Hapi.server({ port: 3000, host: 'localhost' })
server.route({
method: 'GET',
path: '/',
handler: (request, h) => {
server.log('info', 'hi to server.log from route /')
request.log('info', 'handling route /')
return 'hi'
}
})
server.events.on('log', (event, tags) => {
console.log('log event: traceIds=%j tags=%j %j', apm.currentTraceIds, tags, event.data)
})
server.events.on('request', (request, event, tags) => {
console.log('request event: traceIds=%j tags=%j %j', apm.currentTraceIds, tags, event.data)
})
// onPreResponse runs in the context of the APM transaction, so
// `apm.currentTraceIds` et al are available.
// For kibana, might need to make sure this runs after the
// `adoptToHapiOnPreResponseFormat` handler also added to 'onPreResponse'.
server.ext('onPreResponse', (request, h) => {
console.log('onPreResponse: traceIds=%j requestId=%s active=%s',
apm.currentTraceIds, request.info.id, request.active())
return h.continue
})
// The 'response' event is emitted after the Node HTTP response has ended
// and the APM instrumentation has ended the APM transaction.
server.events.on('response', (request) => {
console.log('response event: traceIds=%j requestId=%s active=%s',
apm.currentTraceIds, request.info.id, request.active())
})
await server.start()
console.log('Server running on %s', server.info.uri)
}
init()
@trentm
Copy link
Author

trentm commented Sep 29, 2021

Example run with a curl -i localhost:3000/ request:

% node examples/trace-hapi.js
Server running on http://localhost:3000
log event: traceIds={"trace.id":"eddac174e56be386c16c18a0ef23e1de","transaction.id":"05b1f3365706cb2f"} tags={"info":true} "hi to server.log from route /"
request event: traceIds={"trace.id":"eddac174e56be386c16c18a0ef23e1de","transaction.id":"05b1f3365706cb2f"} tags={"info":true} "handling route /"
onPreResponse: traceIds={"trace.id":"eddac174e56be386c16c18a0ef23e1de","transaction.id":"05b1f3365706cb2f"} requestId=1632945775165:pink.local:35097:ku5xqxkq:10000 active=true
response event: traceIds={} requestId=1632945775165:pink.local:35097:ku5xqxkq:10000 active=false

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment