@@ -34,8 +34,15 @@ const {
34
34
} = require ( '@opentelemetry/sdk-trace-node' ) ;
35
35
const { SimpleSpanProcessor} = require ( '@opentelemetry/sdk-trace-base' ) ;
36
36
import { humanizeBytes , humanizeTime , runBenchmarks } from './benchmark' ;
37
+ const { diag, DiagConsoleLogger, DiagLogLevel} = require ( '@opentelemetry/api' ) ;
38
+ // diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.DEBUG);
37
39
38
- const { ObservabilityOptions} = require ( '../src/instrument' ) ;
40
+ const {
41
+ getTracer,
42
+ startTrace,
43
+ traceConfig,
44
+ ObservabilityOptions,
45
+ } = require ( '../src/instrument' ) ;
39
46
40
47
const selectSql = 'SELECT 1' ;
41
48
const updateSql = 'UPDATE FOO SET BAR=1 WHERE BAZ=2' ;
@@ -124,6 +131,16 @@ async function setup(
124
131
} ) ;
125
132
}
126
133
134
+ interface percentiles {
135
+ p50 : number ;
136
+ p50_s : string ;
137
+ }
138
+
139
+ interface description {
140
+ ram : percentiles ;
141
+ timeSpent : percentiles ;
142
+ }
143
+
127
144
describe ( 'Benchmarking Database' , ( ) => {
128
145
if ( ! process . env . SPANNER_RUN_BENCHMARKS ) {
129
146
console . log (
@@ -207,23 +224,6 @@ describe('Benchmarking Database', () => {
207
224
} ) ;
208
225
} ,
209
226
210
- /*
211
- async function databaseGetTransactionAsync() {
212
- const tx = await database.getTransction();
213
-
214
- try {
215
- await tx!.begin();
216
- return await tx!.runUpdate(updateSql);
217
- } catch (e) {
218
- console.log(e);
219
- return null;
220
- } finally {
221
- console.log('tx.end');
222
- tx!.end();
223
- console.log('exiting');
224
- }
225
- },
226
- */
227
227
async function databaseRunTransactionAsyncTxRunUpdate ( ) {
228
228
const withTx = async tx => {
229
229
await tx ! . begin ( ) ;
@@ -274,16 +274,6 @@ describe('Benchmarking Database', () => {
274
274
} ) ;
275
275
}
276
276
277
- interface percentiles {
278
- p50 : number ;
279
- p50_s : string ;
280
- }
281
-
282
- interface description {
283
- ram : percentiles ;
284
- timeSpent : percentiles ;
285
- }
286
-
287
277
it ( 'Database runs compared' , async ( ) => {
288
278
const traced = await setItUp ( true ) ;
289
279
const untraced = await setItUp ( false ) ;
@@ -327,3 +317,151 @@ describe('Benchmarking Database', () => {
327
317
function percentDiff ( orig , fresh ) {
328
318
return ( ( Number ( fresh ) - Number ( orig ) ) * 100.0 ) / Number ( orig ) ;
329
319
}
320
+
321
+ describe ( 'Benchmark getTracer' , ( ) => {
322
+ it ( 'No tracerProvider/global tracerProvider' , async ( ) => {
323
+ console . log ( 'tracerProvider' ) ;
324
+ const results = await benchmarkStartTrace ( ) ;
325
+
326
+ console . log (
327
+ `Total Runs: ${ results [ '_totalRuns' ] } \nWarm up runs: ${ results [ '_warmRuns' ] } `
328
+ ) ;
329
+
330
+ for ( const method in results ) {
331
+ const values = results [ method ] ;
332
+ if ( typeof values !== 'object' ) {
333
+ continue ;
334
+ }
335
+ const desc = values as description ;
336
+ const ram = desc . ram ;
337
+ const timeSpent = desc ! . timeSpent ;
338
+ console . log ( `${ method } ` ) ;
339
+ console . log ( `\tRAM (${ ram . p50_s } )` ) ;
340
+ console . log ( `\tTimeSpent (${ timeSpent . p50_s } )` ) ;
341
+ }
342
+ } ) ;
343
+ } ) ;
344
+
345
+ function benchmarkGetTracer ( ) : Promise < Map < string , unknown > > {
346
+ const customTracerProvider = new NodeTracerProvider ( ) ;
347
+ let trapDoorCalled = false ;
348
+
349
+ const runners : Function [ ] = [
350
+ function getTracerNullTracerProviderUnsetGlobalTracerProvider ( ) {
351
+ return getTracer ( null ) ;
352
+ } ,
353
+
354
+ function getTracerDefinedTracerProvider ( ) {
355
+ return getTracer ( customTracerProvider ) ;
356
+ } ,
357
+
358
+ function getTracerRegisteredGlobally ( ) {
359
+ if ( ! trapDoorCalled ) {
360
+ customTracerProvider . register ( ) ;
361
+ trapDoorCalled = true ;
362
+ }
363
+ return getTracer ( null ) ;
364
+ } ,
365
+ ] ;
366
+
367
+ return new Promise ( resolve => {
368
+ runBenchmarks ( runners , results => {
369
+ resolve ( results ) ;
370
+ } ) ;
371
+ } ) ;
372
+ }
373
+
374
+ function benchmarkStartSpan ( ) : Promise < Map < string , unknown > > {
375
+ const customTracerProvider = new NodeTracerProvider ( ) ;
376
+ let trapDoorCalled = false ;
377
+
378
+ const runners : Function [ ] = [
379
+ function withNullTracerProviderUnsetGlobalTracerProvider ( ) {
380
+ return new Promise ( resolve => {
381
+ getTracer ( null ) . startActiveSpan ( 'aSpan' , { } , span => {
382
+ resolve ( span ) ;
383
+ } ) ;
384
+ } ) ;
385
+ } ,
386
+
387
+ function withTracerDefinedTracerProvider ( ) {
388
+ return new Promise ( resolve => {
389
+ getTracer ( customTracerProvider ) . startActiveSpan ( 'aSpan' , { } , span => {
390
+ resolve ( span ) ;
391
+ } ) ;
392
+ } ) ;
393
+ } ,
394
+
395
+ function getTracerRegisteredGlobally ( ) {
396
+ if ( ! trapDoorCalled ) {
397
+ customTracerProvider . register ( ) ;
398
+ trapDoorCalled = true ;
399
+ }
400
+ return new Promise ( resolve => {
401
+ getTracer ( null ) . startActiveSpan ( 'aSpan' , { } , span => {
402
+ resolve ( span ) ;
403
+ } ) ;
404
+ } ) ;
405
+ } ,
406
+ ] ;
407
+
408
+ return new Promise ( resolve => {
409
+ runBenchmarks ( runners , results => {
410
+ resolve ( results ) ;
411
+ } ) ;
412
+ } ) ;
413
+ }
414
+
415
+ function benchmarkStartTrace ( ) : Promise < Map < string , unknown > > {
416
+ const customTracerProvider = new NodeTracerProvider ( ) ;
417
+ let trapDoorCalled = false ;
418
+
419
+ const runners : Function [ ] = [
420
+ async function withNullTracerProviderUnsetGlobalTracerProvider ( ) {
421
+ const promise = new Promise ( ( resolve , reject ) => {
422
+ const opts : typeof traceConfig = {
423
+ opts : { tracerProvider : null } ,
424
+ } ;
425
+ startTrace ( 'aspan' , null , span => {
426
+ span . end ( ) ;
427
+ resolve ( span ) ;
428
+ } ) ;
429
+ } ) ;
430
+ return promise ;
431
+ } ,
432
+
433
+ function withTracerDefinedTracerProvider ( ) {
434
+ return new Promise ( resolve => {
435
+ const opts : typeof traceConfig = {
436
+ opts : { tracerProvider : customTracerProvider } ,
437
+ } ;
438
+ startTrace ( 'aspan' , opts , span => {
439
+ span . end ( ) ;
440
+ resolve ( span ) ;
441
+ } ) ;
442
+ } ) ;
443
+ } ,
444
+
445
+ function withTracerRegisteredGlobally ( ) {
446
+ if ( ! trapDoorCalled ) {
447
+ customTracerProvider . register ( ) ;
448
+ trapDoorCalled = true ;
449
+ }
450
+ return new Promise ( resolve => {
451
+ const opts : typeof traceConfig = {
452
+ opts : { tracerProvider : null } ,
453
+ } ;
454
+ startTrace ( 'aspan' , opts , span => {
455
+ span . end ( ) ;
456
+ resolve ( span ) ;
457
+ } ) ;
458
+ } ) ;
459
+ } ,
460
+ ] ;
461
+
462
+ return new Promise ( resolve => {
463
+ runBenchmarks ( runners , results => {
464
+ resolve ( results ) ;
465
+ } ) ;
466
+ } ) ;
467
+ }
0 commit comments