1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const core_1 = require("@opencensus/core");
|
4 | exports.openCensusTracer = Symbol("OpenCensus Tracer");
|
5 | exports.openCensusSpanMap = Symbol("OpenCensus Span Map");
|
6 | async function openCensusTracingGraphQLMiddleware(resolve, parent, args, context, info) {
|
7 | const tracer = context[exports.openCensusTracer];
|
8 | if (!tracer || !tracer.currentRootSpan) {
|
9 | return resolve(parent, args, context, info);
|
10 | }
|
11 | let span;
|
12 | const spanMap = (context[exports.openCensusSpanMap] =
|
13 | context[exports.openCensusSpanMap] || new Map());
|
14 | const parentSpan = info.path.prev && spanMap.get(info.path.prev);
|
15 | if (parentSpan) {
|
16 | span = tracer.startChildSpan({
|
17 | name: info.fieldName,
|
18 | kind: core_1.SpanKind.UNSPECIFIED,
|
19 | childOf: parentSpan
|
20 | });
|
21 | span.addAttribute("parentId", (parent && parent.id) || null);
|
22 | span.addAttribute("parentType", info.parentType.toString());
|
23 | span.addAttribute("fieldName", info.fieldName);
|
24 | span.addAttribute("returnType", info.returnType.toString());
|
25 | }
|
26 | try {
|
27 | return await resolve(parent, args, context, info);
|
28 | }
|
29 | finally {
|
30 | if (span)
|
31 | span.end();
|
32 | }
|
33 | }
|
34 | exports.openCensusTracingGraphQLMiddleware = openCensusTracingGraphQLMiddleware;
|
35 |
|
\ | No newline at end of file |