@@ -21,6 +21,7 @@ import {
2121} from '@opentelemetry/sdk-metrics' ;
2222import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node' ;
2323import {
24+ ATTR_ERROR_TYPE ,
2425 ATTR_HTTP_REQUEST_METHOD ,
2526 ATTR_HTTP_RESPONSE_STATUS_CODE ,
2627 ATTR_HTTP_ROUTE ,
@@ -196,10 +197,10 @@ describe('metrics', () => {
196197 ) ;
197198 }
198199 await metricReader . collectAndExport ( ) ;
199- const resourceMetrics = metricsMemoryExporter . getMetrics ( ) ;
200- const scopeMetrics = resourceMetrics [ 0 ] . scopeMetrics ;
200+ let resourceMetrics = metricsMemoryExporter . getMetrics ( ) ;
201+ let scopeMetrics = resourceMetrics [ 0 ] . scopeMetrics ;
201202 assert . strictEqual ( scopeMetrics . length , 1 , 'scopeMetrics count' ) ;
202- const metrics = scopeMetrics [ 0 ] . metrics ;
203+ let metrics = scopeMetrics [ 0 ] . metrics ;
203204 assert . strictEqual ( metrics . length , 2 , 'metrics count' ) ;
204205 assert . strictEqual ( metrics [ 0 ] . dataPointType , DataPointType . HISTOGRAM ) ;
205206 assert . strictEqual (
@@ -247,6 +248,43 @@ describe('metrics', () => {
247248 [ ATTR_NETWORK_PROTOCOL_VERSION ] : '1.1' ,
248249 [ ATTR_HTTP_RESPONSE_STATUS_CODE ] : 200 ,
249250 } ) ;
251+
252+ metricsMemoryExporter . reset ( ) ;
253+
254+ assert . throws ( ( ) =>
255+ http . request ( {
256+ hostname,
257+ port : serverPort ,
258+ pathname,
259+ headers : { cookie : undefined } ,
260+ } )
261+ ) ;
262+
263+ await metricReader . collectAndExport ( ) ;
264+ resourceMetrics = metricsMemoryExporter . getMetrics ( ) ;
265+ scopeMetrics = resourceMetrics [ 0 ] . scopeMetrics ;
266+ assert . strictEqual ( scopeMetrics . length , 1 , 'scopeMetrics count' ) ;
267+ metrics = scopeMetrics [ 0 ] . metrics ;
268+ assert . strictEqual ( metrics . length , 1 , 'metrics count' ) ;
269+ assert . strictEqual ( metrics [ 0 ] . dataPointType , DataPointType . HISTOGRAM ) ;
270+ assert . strictEqual (
271+ metrics [ 0 ] . descriptor . description ,
272+ 'Duration of HTTP client requests.'
273+ ) ;
274+ assert . strictEqual (
275+ metrics [ 0 ] . descriptor . name ,
276+ 'http.client.request.duration'
277+ ) ;
278+ assert . strictEqual ( metrics [ 0 ] . descriptor . unit , 's' ) ;
279+ assert . strictEqual ( metrics [ 0 ] . dataPoints . length , 1 ) ;
280+ assert . strictEqual ( ( metrics [ 0 ] . dataPoints [ 0 ] . value as any ) . count , 1 ) ;
281+
282+ assert . deepStrictEqual ( metrics [ 0 ] . dataPoints [ 0 ] . attributes , {
283+ [ ATTR_HTTP_REQUEST_METHOD ] : 'GET' ,
284+ [ ATTR_SERVER_ADDRESS ] : 'localhost' ,
285+ [ ATTR_SERVER_PORT ] : 22346 ,
286+ [ ATTR_ERROR_TYPE ] : 'TypeError' ,
287+ } ) ;
250288 } ) ;
251289 } ) ;
252290
@@ -263,10 +301,10 @@ describe('metrics', () => {
263301 ) ;
264302 }
265303 await metricReader . collectAndExport ( ) ;
266- const resourceMetrics = metricsMemoryExporter . getMetrics ( ) ;
267- const scopeMetrics = resourceMetrics [ 0 ] . scopeMetrics ;
304+ let resourceMetrics = metricsMemoryExporter . getMetrics ( ) ;
305+ let scopeMetrics = resourceMetrics [ 0 ] . scopeMetrics ;
268306 assert . strictEqual ( scopeMetrics . length , 1 , 'scopeMetrics count' ) ;
269- const metrics = scopeMetrics [ 0 ] . metrics ;
307+ let metrics = scopeMetrics [ 0 ] . metrics ;
270308 assert . strictEqual ( metrics . length , 4 , 'metrics count' ) ;
271309
272310 // old metrics
@@ -387,6 +425,64 @@ describe('metrics', () => {
387425 [ ATTR_NETWORK_PROTOCOL_VERSION ] : '1.1' ,
388426 [ ATTR_HTTP_RESPONSE_STATUS_CODE ] : 200 ,
389427 } ) ;
428+
429+ metricsMemoryExporter . reset ( ) ;
430+
431+ assert . throws ( ( ) =>
432+ http . request ( {
433+ hostname,
434+ port : serverPort ,
435+ pathname,
436+ headers : { cookie : undefined } ,
437+ } )
438+ ) ;
439+
440+ await metricReader . collectAndExport ( ) ;
441+ resourceMetrics = metricsMemoryExporter . getMetrics ( ) ;
442+ scopeMetrics = resourceMetrics [ 0 ] . scopeMetrics ;
443+ assert . strictEqual ( scopeMetrics . length , 1 , 'scopeMetrics count' ) ;
444+ metrics = scopeMetrics [ 0 ] . metrics ;
445+ assert . strictEqual ( metrics . length , 2 , 'metrics count' ) ;
446+
447+ // Old metrics
448+ assert . strictEqual ( metrics [ 0 ] . dataPointType , DataPointType . HISTOGRAM ) ;
449+ assert . strictEqual (
450+ metrics [ 0 ] . descriptor . description ,
451+ 'Measures the duration of outbound HTTP requests.'
452+ ) ;
453+ assert . strictEqual ( metrics [ 0 ] . descriptor . name , 'http.client.duration' ) ;
454+ assert . strictEqual ( metrics [ 0 ] . descriptor . unit , 'ms' ) ;
455+ assert . strictEqual ( metrics [ 0 ] . dataPoints . length , 1 ) ;
456+ assert . strictEqual ( ( metrics [ 0 ] . dataPoints [ 0 ] . value as any ) . count , 1 ) ;
457+ assert . strictEqual (
458+ metrics [ 0 ] . dataPoints [ 0 ] . attributes [ ATTR_HTTP_METHOD ] ,
459+ 'GET'
460+ ) ;
461+ assert . strictEqual (
462+ metrics [ 0 ] . dataPoints [ 0 ] . attributes [ ATTR_NET_PEER_NAME ] ,
463+ 'localhost'
464+ ) ;
465+
466+ // Stable metrics
467+ assert . strictEqual ( metrics [ 1 ] . dataPointType , DataPointType . HISTOGRAM ) ;
468+ assert . strictEqual (
469+ metrics [ 1 ] . descriptor . description ,
470+ 'Duration of HTTP client requests.'
471+ ) ;
472+ assert . strictEqual (
473+ metrics [ 1 ] . descriptor . name ,
474+ 'http.client.request.duration'
475+ ) ;
476+ assert . strictEqual ( metrics [ 1 ] . descriptor . unit , 's' ) ;
477+ assert . strictEqual ( metrics [ 1 ] . dataPoints . length , 1 ) ;
478+ assert . strictEqual ( ( metrics [ 1 ] . dataPoints [ 0 ] . value as any ) . count , 1 ) ;
479+
480+ assert . deepStrictEqual ( metrics [ 1 ] . dataPoints [ 0 ] . attributes , {
481+ [ ATTR_HTTP_REQUEST_METHOD ] : 'GET' ,
482+ [ ATTR_SERVER_ADDRESS ] : 'localhost' ,
483+ [ ATTR_SERVER_PORT ] : 22346 ,
484+ [ ATTR_ERROR_TYPE ] : 'TypeError' ,
485+ } ) ;
390486 } ) ;
391487 } ) ;
392488} ) ;
0 commit comments