nice-grpc-opentelemetry
Version:
OpenTelemetry instrumentation for nice-grpc
38 lines • 1.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.tracer = void 0;
exports.getSpanName = getSpanName;
exports.emitSpanEvents = emitSpanEvents;
const api_1 = require("@opentelemetry/api");
const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
const version_1 = require("./version");
exports.tracer = api_1.trace.getTracer('nice-grpc-opentelemetry', version_1.VERSION);
/**
* @param methodPath Full method path in form `/package.service/method`
*
* @see https://opentelemetry.io/docs/reference/specification/trace/semantic_conventions/rpc/#span-name
*/
function getSpanName(methodPath) {
return methodPath.slice(1);
}
/**
* Wrap call request or response iterable and emit `message` span event for each
* item.
*
* @param iterable request or response iterable
* @param span call span
* @param type `SENT` or `RECEIVED`
*
* @see https://opentelemetry.io/docs/reference/specification/trace/semantic_conventions/rpc/#events
*/
async function* emitSpanEvents(iterable, span, type) {
let nextId = 1;
for await (const item of iterable) {
span.addEvent('message', {
[semantic_conventions_1.SEMATTRS_MESSAGE_TYPE]: type,
[semantic_conventions_1.SEMATTRS_MESSAGE_ID]: nextId++,
});
yield item;
}
}
//# sourceMappingURL=traces.js.map