dd-trace
Version:
Datadog APM tracing client for JavaScript
55 lines (42 loc) • 1.36 kB
JavaScript
const { CLIENT_PORT_KEY } = require('../../dd-trace/src/constants')
const CachePlugin = require('../../dd-trace/src/plugins/cache')
class MemcachedPlugin extends CachePlugin {
static id = 'memcached'
bindStart (ctx) {
const { client, server, query } = ctx
const address = getAddress(client, server, query)
const meta = {
'out.host': address[0],
[CLIENT_PORT_KEY]: address[1]
}
if (this.config.memcachedCommandEnabled) {
meta['memcached.command'] = query.command
}
this.startSpan({
service: this.serviceName({ pluginConfig: this.config, system: this.system }),
resource: query.type,
type: 'memcached',
meta
}, ctx)
return ctx.currentStore
}
}
function getAddress (client, server, query) {
if (!server) {
if (client.servers.length === 1) {
server = client.servers[0]
} else {
let redundancy = client.redundancy && client.redundancy < client.servers.length
const queryRedundancy = query.redundancyEnabled
if (redundancy && queryRedundancy) {
redundancy = client.HashRing.range(query.key, (client.redundancy + 1), true)
server = redundancy.shift()
} else {
server = client.HashRing.get(query.key)
}
}
}
return server && server.split(':')
}
module.exports = MemcachedPlugin