@@ -6,9 +6,13 @@ const { join } = require('path')
66const { assert } = require ( 'chai' )
77const { satisfies } = require ( 'semver' )
88
9- function check ( agent , proc , timeout , onMessage = ( ) => { } ) {
9+ function check ( agent , proc , timeout , onMessage = ( ) => { } , isMetrics ) {
10+ const messageReceiver = isMetrics
11+ ? agent . assertTelemetryReceived ( onMessage , timeout , 'generate-metrics' )
12+ : agent . assertMessageReceived ( onMessage , timeout )
13+
1014 return Promise . all ( [
11- agent . assertMessageReceived ( onMessage , timeout ) ,
15+ messageReceiver ,
1216 new Promise ( ( resolve , reject ) => {
1317 const timer = setTimeout ( ( ) => {
1418 reject ( new Error ( 'Process timed out' ) )
@@ -38,6 +42,11 @@ function eachEqual (spans, expected, fn) {
3842 return spans . every ( ( span , i ) => fn ( span ) === expected [ i ] )
3943}
4044
45+ function nearNow ( ts , now = Date . now ( ) , range = 1000 ) {
46+ const delta = Math . abs ( now - ts )
47+ return delta < range && delta >= 0
48+ }
49+
4150describe ( 'opentelemetry' , ( ) => {
4251 let agent
4352 let proc
@@ -84,6 +93,49 @@ describe('opentelemetry', () => {
8493 } )
8594 } )
8695
96+ it ( 'should capture telemetry' , ( ) => {
97+ proc = fork ( join ( cwd , 'opentelemetry/basic.js' ) , {
98+ cwd,
99+ env : {
100+ DD_TRACE_AGENT_PORT : agent . port ,
101+ DD_TRACE_OTEL_ENABLED : 1 ,
102+ DD_TELEMETRY_HEARTBEAT_INTERVAL : 1 ,
103+ TIMEOUT : 1500
104+ }
105+ } )
106+
107+ return check ( agent , proc , timeout , ( { payload } ) => {
108+ assert . strictEqual ( payload . request_type , 'generate-metrics' )
109+
110+ const metrics = payload . payload
111+ assert . strictEqual ( metrics . namespace , 'tracers' )
112+
113+ const spanCreated = metrics . series . find ( ( { metric } ) => metric === 'span_created' )
114+ const spanFinished = metrics . series . find ( ( { metric } ) => metric === 'span_finished' )
115+
116+ // Validate common fields between start and finish
117+ for ( const series of [ spanCreated , spanFinished ] ) {
118+ assert . ok ( series )
119+
120+ assert . strictEqual ( series . points . length , 1 )
121+ assert . strictEqual ( series . points [ 0 ] . length , 2 )
122+
123+ const [ ts , value ] = series . points [ 0 ]
124+ assert . ok ( nearNow ( ts , Date . now ( ) / 1e3 ) )
125+ assert . strictEqual ( value , 1 )
126+
127+ assert . strictEqual ( series . type , 'count' )
128+ assert . strictEqual ( series . common , true )
129+ assert . deepStrictEqual ( series . tags , [
130+ 'integration_name:otel' ,
131+ 'otel_enabled:true' ,
132+ 'lib_language:nodejs' ,
133+ `version:${ process . version } `
134+ ] )
135+ }
136+ } , true )
137+ } )
138+
87139 it ( 'should work within existing datadog-traced http request' , async ( ) => {
88140 proc = fork ( join ( cwd , 'opentelemetry/server.js' ) , {
89141 cwd,
0 commit comments