forked from open-telemetry/opentelemetry-js-contrib
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathcapitalize_server.js
101 lines (86 loc) · 2.66 KB
/
capitalize_server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
'use strict';
/* eslint-disable global-require */
const binaryPropagator = process.env.BINARY_PROPAGATOR === 'true';
const censusTracer = process.env.CENSUS_TRACER === 'true';
let tracer;
let SpanKind;
if (censusTracer) {
tracer = require('./tracer_census')();
({ SpanKind } = require('@opencensus/core'));
} else {
tracer = require('./tracer')('example-grpc-capitalize-server', binaryPropagator);
({ SpanKind } = require('@opentelemetry/api'));
}
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;
/**
* Implements the Capitalize RPC method.
*/
function capitalize(call, callback) {
if (call.metadata) {
// output the gRPC metadata to see headers e.g. traceparent or grpc-trace-bin
console.dir(call.metadata, { depth: null });
}
let capitalized;
if (censusTracer) {
capitalized = capitalizeWithCensusTracing(call);
} else {
capitalized = capitalizeWithOTelTracing(call);
}
callback(null, { data: Buffer.from(capitalized) });
}
/**
* Capitalize wrapped with Census tracing
*/
function capitalizeWithCensusTracing(call) {
const currentSpan = tracer.currentRootSpan;
// display traceid in the terminal
console.log(`traceid: ${currentSpan.traceId}`);
const span = tracer.startChildSpan({
name: 'tutorials.FetchImpl.capitalize',
kind: SpanKind.SERVER,
});
const data = call.request.data.toString('utf8');
const capitalized = data.toUpperCase();
for (let i = 0; i < 100000000; i += 1) {
// empty
}
span.end();
return capitalized;
}
/**
* Capitalize wrapped with OpenTelemetry tracing
*/
function capitalizeWithOTelTracing(call) {
const currentSpan = tracer.getCurrentSpan();
// display traceid in the terminal
console.log(`traceid: ${currentSpan.spanContext().traceId}`);
const span = tracer.startSpan('tutorials.FetchImpl.capitalize', {
kind: SpanKind.SERVER,
});
const data = call.request.data.toString('utf8');
const capitalized = data.toUpperCase();
for (let i = 0; i < 100000000; i += 1) {
// empty
}
span.end();
return 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 });
server.bind('0.0.0.0:50051', grpc.ServerCredentials.createInsecure());
server.start();
}
main();