@live-change/server 0.9.171 → 0.9.174

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.js CHANGED
@@ -12,6 +12,7 @@ import { setupApiEndpoints, setupEndpointsProxyPaths } from './lib/setupApiEndpo
12
12
  import setupDbServer from './lib/setupDbServer.js'
13
13
  import setupDbClient from './lib/setupDbClient.js'
14
14
  import setupApp from './lib/setupApp.js'
15
+ import setupTelemetry from './lib/setupTelemetry.js'
15
16
 
16
17
  import serverDao from './lib/serverDao.js'
17
18
 
@@ -31,5 +32,6 @@ export {
31
32
  setupEndpointsProxyPaths,
32
33
  setupDbServer,
33
34
  setupDbClient,
34
- setupApp
35
+ setupApp,
36
+ setupTelemetry
35
37
  }
@@ -0,0 +1,112 @@
1
+ import { NodeSDK } from '@opentelemetry/sdk-node'
2
+
3
+ import {
4
+ getNodeAutoInstrumentations,
5
+ } from '@opentelemetry/auto-instrumentations-node'
6
+
7
+ import { ConsoleSpanExporter } from '@opentelemetry/sdk-trace-node'
8
+ import {
9
+ PeriodicExportingMetricReader,
10
+ ConsoleMetricExporter,
11
+ } from '@opentelemetry/sdk-metrics'
12
+
13
+ import {
14
+ OTLPTraceExporter,
15
+ } from '@opentelemetry/exporter-trace-otlp-proto'
16
+ import {
17
+ OTLPMetricExporter,
18
+ } from '@opentelemetry/exporter-metrics-otlp-proto'
19
+
20
+ import { Resource } from '@opentelemetry/resources'
21
+
22
+ import {
23
+ SEMRESATTRS_SERVICE_NAME,
24
+ SEMRESATTRS_SERVICE_VERSION,
25
+ } from '@opentelemetry/semantic-conventions'
26
+
27
+ import { logs } from '@opentelemetry/api-logs'
28
+ import {
29
+ LoggerProvider,
30
+ SimpleLogRecordProcessor,
31
+ ConsoleLogRecordExporter,
32
+ BatchLogRecordProcessor,
33
+ } from '@opentelemetry/sdk-logs'
34
+
35
+ import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http'
36
+
37
+ export default async function setupTelemetry(settings, appConfig = {}) {
38
+
39
+ const { otelUrl, otelHeaders, otelServiceName } = settings
40
+
41
+ if(!otelUrl) {
42
+ console.log("no telemetry DSN provided - skipping telemetry setup")
43
+ return;
44
+ }
45
+
46
+ const resource = new Resource({
47
+ [SEMRESATTRS_SERVICE_NAME]: otelServiceName || appConfig.clientConfig.name,
48
+ [SEMRESATTRS_SERVICE_VERSION]: appConfig.clientConfig.version,
49
+ })
50
+
51
+ if(otelUrl === 'console') {
52
+ const sdk = new NodeSDK({
53
+ resource,
54
+ traceExporter: new ConsoleSpanExporter(),
55
+ metricReader: new PeriodicExportingMetricReader({
56
+ exporter: new ConsoleMetricExporter(),
57
+ }),
58
+ instrumentations: [getNodeAutoInstrumentations()],
59
+ })
60
+ const loggerProvider = new LoggerProvider({
61
+ resource,
62
+ })
63
+ loggerProvider.addLogRecordProcessor(
64
+ new SimpleLogRecordProcessor(new ConsoleLogRecordExporter())
65
+ )
66
+ logs.setGlobalLoggerProvider(loggerProvider)
67
+ await sdk.start()
68
+
69
+ console.log('OpenTelemetry console setup complete')
70
+ return
71
+ }
72
+
73
+
74
+ const address = otelUrl
75
+ const headers = Object.fromEntries(otelHeaders.split(';').map(item => [
76
+ item.slice(0, item.indexOf('=')),
77
+ item.slice(item.indexOf('=') + 1)
78
+ ])) // parse headers
79
+
80
+ console.log("OpenTelemetry setup with URL", address, 'and headers', headers)
81
+
82
+ const sdk = new NodeSDK({
83
+ resource,
84
+ traceExporter: new OTLPTraceExporter({
85
+ url: address + '/v1/traces',
86
+ headers,
87
+ }),
88
+ metricReader: new PeriodicExportingMetricReader({
89
+ exporter: new OTLPMetricExporter({
90
+ url: address + '/v1/metrics',
91
+ headers,
92
+ concurrencyLimit: 1
93
+ }),
94
+ }),
95
+
96
+ instrumentations: [getNodeAutoInstrumentations()],
97
+ })
98
+ const loggerProvider = new LoggerProvider({
99
+ resource,
100
+ })
101
+ loggerProvider.addLogRecordProcessor(
102
+ new BatchLogRecordProcessor(new OTLPLogExporter({
103
+ url: address + '/v1/logs',
104
+ headers, // an optional object containing custom headers to be sent with each request
105
+ concurrencyLimit: 1, // an optional limit on pending requests
106
+ }))
107
+ )
108
+ logs.setGlobalLoggerProvider(loggerProvider)
109
+ await sdk.start()
110
+
111
+ console.log("OpenTelemetry setup complete")
112
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@live-change/server",
3
- "version": "0.9.171",
3
+ "version": "0.9.174",
4
4
  "description": "Live Change Framework - server",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -22,12 +22,20 @@
22
22
  "type": "module",
23
23
  "homepage": "https://github.com/live-change/live-change-stack",
24
24
  "dependencies": {
25
- "@live-change/dao": "^0.9.171",
26
- "@live-change/dao-sockjs": "^0.9.171",
27
- "@live-change/db-server": "^0.9.171",
28
- "@live-change/framework": "^0.9.171",
25
+ "@live-change/dao": "^0.9.174",
26
+ "@live-change/dao-sockjs": "^0.9.174",
27
+ "@live-change/db-server": "^0.9.174",
28
+ "@live-change/framework": "^0.9.174",
29
29
  "@live-change/sockjs": "0.4.1",
30
- "@live-change/uid": "^0.9.171",
30
+ "@live-change/uid": "^0.9.174",
31
+ "@opentelemetry/api": "^1.8.0",
32
+ "@opentelemetry/auto-instrumentations-node": "^0.43.0",
33
+ "@opentelemetry/exporter-logs-otlp-http": "^0.52.0",
34
+ "@opentelemetry/exporter-metrics-otlp-proto": "^0.52.0",
35
+ "@opentelemetry/exporter-trace-otlp-proto": "^0.52.0",
36
+ "@opentelemetry/sdk-metrics": "^1.22.0",
37
+ "@opentelemetry/sdk-node": "^0.49.1",
38
+ "@opentelemetry/sdk-trace-node": "^1.22.0",
31
39
  "dotenv": "^17.2.1",
32
40
  "express": "^4.18.2",
33
41
  "express-static-gzip": "2.1.7",
@@ -39,5 +47,5 @@
39
47
  "websocket": "^1.0.34",
40
48
  "yargs": "^17.7.2"
41
49
  },
42
- "gitHead": "2a684f9d6b097ef5b8e1e08edb4995949ee33330"
50
+ "gitHead": "6ebdadad702526df240bd3aa7ac3d97324a0308a"
43
51
  }