54 lines
1.7 KiB
JavaScript
54 lines
1.7 KiB
JavaScript
'use strict';
|
|
|
|
const { SpanKind } = require('@opentelemetry/types');
|
|
const opentelemetry = require('@opentelemetry/core');
|
|
|
|
/**
|
|
* The trace instance needs to be initialized first, if you want to enable
|
|
* automatic tracing for built-in plugins (gRPC in this case).
|
|
*/
|
|
const config = require('./setup');
|
|
config.setupTracerAndExporters('grpc-server-service');
|
|
|
|
const path = require('path');
|
|
const grpc = require('grpc');
|
|
const protoLoader = require('@grpc/proto-loader');
|
|
|
|
const PROTO_PATH = path.join(__dirname, 'protos/defs.proto');
|
|
const PROTO_OPTIONS = { keepCase: true, enums: String, defaults: true, oneofs: true };
|
|
const definition = protoLoader.loadSync(PROTO_PATH, PROTO_OPTIONS);
|
|
const rpcProto = grpc.loadPackageDefinition(definition).rpc;
|
|
|
|
const tracer = opentelemetry.getTracer('example-grpc-capitalize-server');
|
|
|
|
/** Implements the Capitalize RPC method. */
|
|
function capitalize(call, callback) {
|
|
const currentSpan = tracer.getCurrentSpan();
|
|
// display traceid in the terminal
|
|
console.log(`traceid: ${currentSpan.context().traceId}`);
|
|
|
|
const span = tracer.startSpan('tutorials.FetchImpl.capitalize', {
|
|
parent: currentSpan,
|
|
kind: SpanKind.SERVER,
|
|
});
|
|
|
|
const data = call.request.data.toString('utf8');
|
|
const capitalized = data.toUpperCase();
|
|
for (let i = 0; i < 100000000; i++) {}
|
|
span.end();
|
|
callback(null, { data: Buffer.from(capitalized) });
|
|
}
|
|
|
|
/**
|
|
* Starts an RPC server that receives requests for the Fetch service at the
|
|
* sample server port.
|
|
*/
|
|
function main() {
|
|
const server = new grpc.Server();
|
|
server.addService(rpcProto.Fetch.service, { capitalize: capitalize });
|
|
server.bind('0.0.0.0:50051', grpc.ServerCredentials.createInsecure());
|
|
server.start();
|
|
}
|
|
|
|
main();
|