in lib/instrumentation/modules/graphql.js [67:132]
function wrapGraphql(orig) {
return function wrappedGraphql(args) {
agent.logger.debug('intercepted call to graphql.graphql');
const span = ins.createSpan(
'GraphQL: Unknown Query',
'db',
'graphql',
'execute',
);
if (!span) {
return orig.apply(this, arguments);
}
let schema;
let source;
let operationName;
const singleArgForm =
onlySupportsSingleArg ||
(!onlySupportsPositionalArgs && arguments.length === 1);
if (singleArgForm) {
schema = args.schema;
source = args.source;
operationName = args.operationName;
} else {
schema = arguments[0];
source = arguments[1];
operationName = arguments[5];
}
const sourceObj =
typeof source === 'string'
? new graphql.Source(source || '', 'GraphQL request')
: source;
if (sourceObj) {
var documentAST;
try {
documentAST = graphql.parse(sourceObj);
} catch (syntaxError) {
agent.logger.debug(
'graphql.parse(source) failed - skipping graphql query extraction',
);
}
if (documentAST) {
var validationErrors = graphql.validate(schema, documentAST);
if (validationErrors && validationErrors.length === 0) {
var queries = extractDetails(documentAST, operationName).queries;
if (queries.length > 0)
span.name = 'GraphQL: ' + queries.join(', ');
}
}
} else {
agent.logger.debug(
'graphql.Source(query) failed - skipping graphql query extraction',
);
}
const spanRunContext = ins.currRunContext().enterSpan(span);
const p = ins.withRunContext(spanRunContext, orig, this, ...arguments);
p.then(function () {
span.end();
});
return p;
};
}