UNPKG

@apolitical/server

Version:

Node.js module to encapsulate Apolitical's express server setup

35 lines (31 loc) 1.33 kB
'use strict'; const { NodeSDK } = require('@opentelemetry/sdk-node'); const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-grpc'); const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node'); const { resourceFromAttributes } = require('@opentelemetry/resources'); const { ATTR_SERVICE_NAME } = require('@opentelemetry/semantic-conventions'); module.exports = ({ logger }) => { return async function load() { const otlpHost = process.env.OPENTELEMETRY_COLLECTOR_SERVICE_HOST; const otlpPort = process.env.OPENTELEMETRY_COLLECTOR_SERVICE_PORT; if (!otlpHost || !otlpPort) { return; } const oltpEndpoint = `http://${otlpHost}:${otlpPort}`; const serviceName = process.env.CONTAINER_NAME || 'unknown-v1-service'; const sdk = new NodeSDK({ resource: resourceFromAttributes({ [ATTR_SERVICE_NAME]: serviceName, }), traceExporter: new OTLPTraceExporter({ url: oltpEndpoint }), instrumentations: [getNodeAutoInstrumentations()], }); sdk.start(); const log = logger.where(__filename, 'load'); log.info(`OpenTelemetry SDK started with service name ${serviceName} and endpoint ${oltpEndpoint}`); process.on('SIGTERM', async () => { await sdk.shutdown(); process.exit(0); }); }; };