nice-grpc-opentelemetry
Version:
OpenTelemetry instrumentation for nice-grpc
61 lines • 2.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getMethodAttributes = getMethodAttributes;
exports.getStatusAttributes = getStatusAttributes;
exports.getPeerAttributes = getPeerAttributes;
const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
const ipaddr = require("ipaddr.js");
const nice_grpc_common_1 = require("nice-grpc-common");
/**
* @param methodPath Full method path in form `/package.service/method`
*
* @see https://opentelemetry.io/docs/reference/specification/trace/semantic_conventions/rpc/#common-attributes
*/
function getMethodAttributes(methodPath) {
const [, service, method] = methodPath.split('/');
return {
[semantic_conventions_1.SEMATTRS_RPC_SYSTEM]: 'grpc',
[semantic_conventions_1.SEMATTRS_RPC_SERVICE]: service,
[semantic_conventions_1.SEMATTRS_RPC_METHOD]: method,
};
}
/**
* @see https://opentelemetry.io/docs/reference/specification/trace/semantic_conventions/rpc/#grpc-attributes
*/
function getStatusAttributes(status) {
return {
[semantic_conventions_1.SEMATTRS_RPC_GRPC_STATUS_CODE]: status,
'rpc.grpc.status_text': nice_grpc_common_1.Status[status],
};
}
/**
* @param peer Peer provided by `grpc-js`, usually `ip:port`
*
* @see https://opentelemetry.io/docs/reference/specification/trace/semantic_conventions/rpc/#common-attributes
*/
function getPeerAttributes(peer) {
const lastColonIndex = peer.lastIndexOf(':');
if (lastColonIndex === -1) {
return {
[semantic_conventions_1.SEMATTRS_NET_PEER_NAME]: peer,
};
}
const host = peer.slice(0, lastColonIndex);
const port = +peer.slice(lastColonIndex + 1);
if (Number.isNaN(port)) {
return {
[semantic_conventions_1.SEMATTRS_NET_PEER_NAME]: peer,
};
}
if (ipaddr.isValid(host)) {
return {
[semantic_conventions_1.SEMATTRS_NET_PEER_IP]: host,
[semantic_conventions_1.SEMATTRS_NET_PEER_PORT]: port,
};
}
return {
[semantic_conventions_1.SEMATTRS_NET_PEER_NAME]: host,
[semantic_conventions_1.SEMATTRS_NET_PEER_PORT]: port,
};
}
//# sourceMappingURL=attributes.js.map