dd-trace
Version:
Datadog APM tracing client for JavaScript
40 lines (33 loc) • 1.07 kB
JavaScript
const dc = require('dc-polyfill')
const shimmer = require('../../datadog-shimmer')
const { addHook } = require('./helpers/instrument')
const serializeChannel = dc.channel('apm:avsc:serialize-start')
const deserializeChannel = dc.channel('apm:avsc:deserialize-end')
function wrapSerialization (Type) {
shimmer.wrap(Type.prototype, 'toBuffer', original => function () {
if (!serializeChannel.hasSubscribers) {
return original.apply(this, arguments)
}
serializeChannel.publish({ messageClass: this })
return original.apply(this, arguments)
})
}
function wrapDeserialization (Type) {
shimmer.wrap(Type.prototype, 'fromBuffer', original => function () {
if (!deserializeChannel.hasSubscribers) {
return original.apply(this, arguments)
}
const result = original.apply(this, arguments)
deserializeChannel.publish({ messageClass: result })
return result
})
}
addHook({
name: 'avsc',
versions: ['>=5.0.0']
}, avro => {
wrapDeserialization(avro.Type)
wrapSerialization(avro.Type)
return avro
})