forked from open-telemetry/opentelemetry-demo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
83 lines (70 loc) · 2.04 KB
/
index.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
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
const grpc = require("@grpc/grpc-js");
const protoLoader = require("@grpc/proto-loader");
const health = require("grpc-js-health-check");
const opentelemetry = require("@opentelemetry/api");
const { SeverityNumber } = require("@opentelemetry/api-logs");
const charge = require("./charge");
const logger = require("./logger");
async function chargeServiceHandler(call, callback) {
const span = opentelemetry.trace.getActiveSpan();
try {
const amount = call.request.amount;
span.setAttributes({
"app.payment.amount": parseFloat(`${amount.units}.${amount.nanos}`),
});
logger.emit({
severityNumber: SeverityNumber.INFO,
severityText: "INFO",
body: "Charge request received.",
attributes: { request: call.request },
});
const response = await charge.charge(call.request);
callback(null, response);
} catch (err) {
logger.emit({
severityNumber: SeverityNumber.WARN,
severityText: "ERROR",
body: "Charge request failed.",
attributes: { request: call.request },
});
span.recordException(err);
span.setStatus({ code: opentelemetry.SpanStatusCode.ERROR });
callback(err);
}
}
async function closeGracefully(signal) {
server.forceShutdown();
process.kill(process.pid, signal);
}
const otelDemoPackage = grpc.loadPackageDefinition(
protoLoader.loadSync("demo.proto")
);
const server = new grpc.Server();
server.addService(
health.service,
new health.Implementation({
"": health.servingStatus.SERVING,
})
);
server.addService(otelDemoPackage.oteldemo.PaymentService.service, {
charge: chargeServiceHandler,
});
server.bindAsync(
`0.0.0.0:${process.env["PAYMENT_SERVICE_PORT"]}`,
grpc.ServerCredentials.createInsecure(),
(err, port) => {
if (err) {
return logger.error({ err });
}
logger.emit({
severityNumber: SeverityNumber.INFO,
severityText: "INFO",
body: `PaymentService gRPC server started on port ${port}.`,
});
server.start();
}
);
process.once('SIGINT', closeGracefully);
process.once('SIGTERM', closeGracefully);