opentelemetry-js/packages/opentelemetry-context-zone
Gerhard Stöbich d5517812b3
chore: update typescript to 4.3 and enable noImplicitOverride (#2241)
Co-authored-by: Daniel Dyla <dyladan@users.noreply.github.com>
2021-06-01 15:40:04 -04:00
..
src chore: 0.19.0 release proposal (#2107) 2021-04-22 08:13:36 -04:00
.eslintignore fix(lint): move tslint to eslint (#892) 2020-05-20 20:42:17 -07:00
.eslintrc.js fix(lint): move tslint to eslint (#892) 2020-05-20 20:42:17 -07:00
LICENSE Rename scope to context (#853) 2020-03-13 15:01:07 -04:00
README.md chore: upgrading to api ver. 0.20.0 (#2225) 2021-05-25 23:32:54 +02:00
package.json chore: update typescript to 4.3 and enable noImplicitOverride (#2241) 2021-06-01 15:40:04 -04:00
tsconfig.esm.json feat: add ESM builds for packages used in browser (#2112) 2021-04-22 20:36:29 +02:00
tsconfig.json chore: speed up builds (#1748) 2020-12-18 09:16:18 -05:00

README.md

OpenTelemetry Context Zone

NPM Published Version dependencies devDependencies Apache License

This module provides Zone Context Manager with bundled zone-js for Web applications. If you have your own zone-js please use @opentelemetry/context-zone-peer-dep If you use Angular it means you already have the zone-js and you should use @opentelemetry/context-zone-peer-dep

Installation

npm install --save @opentelemetry/context-zone

Usage

import { context, trace } from '@opentelemetry/api';
import { ConsoleSpanExporter, SimpleSpanProcessor } from '@opentelemetry/tracing';
import { WebTracerProvider } from '@opentelemetry/web';
import { ZoneContextManager } from '@opentelemetry/context-zone';

const providerWithZone = new WebTracerProvider();
providerWithZone.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
provider.register({
  contextManager: new ZoneContextManager()
});

// Example how the ZoneContextManager keeps the reference to the correct context during async operations
const webTracerWithZone = providerWithZone.getTracer('default');
const span1 = webTracerWithZone.startSpan('foo1');

context.with(trace.setSpan(context.active(), span1), () => {
  console.log('Current span is span1', trace.getSpan(context.active()) === span1);
  setTimeout(() => {
    const span2 = webTracerWithZone.startSpan('foo2');
    console.log('Current span is span1', trace.getSpan(context.active()) === span1);
    context.with(trace.setSpan(context.active(), span2), () => {
      console.log('Current span is span2', trace.getSpan(context.active()) === span2);
      setTimeout(() => {
        console.log('Current span is span2', trace.getSpan(context.active()) === span2);
      }, 500);
    });
    // there is a timeout which still keeps span2 active
    console.log('Current span is span2', trace.getSpan(context.active()) === span2);
  }, 500);
  console.log('Current span is span1', trace.getSpan(context.active()) === span1);
});

License

Apache 2.0 - See LICENSE for more information.