Socket
Socket
Sign inDemoInstall

egg-opentracing

Package Overview
Dependencies
2
Maintainers
3
Versions
4
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    egg-opentracing

opentracing plugin for egg


Version published
Maintainers
3
Install size
228 kB
Created

Readme

Source

egg-opentracing

NPM version build status Test coverage David deps Known Vulnerabilities npm download

Implementation of opentracing in Egg.js

  • Integrate httpserver and httpclient span
  • Customize carrier
  • Customize collector

Install

$ npm i egg-opentracing --save

Usage

// {app_root}/config/plugin.js
exports.opentracing = {
  enable: true,
  package: 'egg-opentracing',
};

Configuration

see config/config.default.js for more detail.

Start a span

You can start a span by startSpan with operationName

const span = ctx.tracer.startSpan('request_egg');
await ctx.curl('https://eggjs.org');
span.finish();

Note: httpclient has been supported by default

Customize carrier

Carrier can be injected and extracted, so you can define a class for that.

// lib/rpc_carrier.js
class RPCCarrier {
  inject(spanContext) {
    return {};
  }

  extract(carrier) {
    return {
      // traceId,
      // spanId,
      // baggage,
    }
  }
}

Then configure it in config/config.default.js with a format name.

// config/config.default.js
exports.opentracing = {
  carrier: {
    RPC: require('../lib/rpc_carrier'),
  },
};

After that, you can use the format to inject or extract.

// inject
const span = ctx.tracer.startSpan('rpc');
const carrier = {};
ctx.tracer.inject(span, 'RPC', carrier);
await ctx.rpc.invoke({}, { carrier });
span.finish();

Customize collector

Collector will be triggered when span finished, you can implement it to write logs or report to server.

// lib/log_collector.js
class LogCollector {
  constructor(app) {
    this.app = app;
  }

  collect(span) {
    this.app.logger.info('%s,%s', span.traceId, span.spanId);
  }
}

Then configure it in config/config.default.js.

// config/config.default.js
exports.opentracing = {
  collector: {
    log: require('../lib/log_collector'),
  },
};

Note: zipkin collector has been implemented in egg-zipkin.

API

Tracer

Tracer extends Tracer of opentracing, you can get the instance by ctx.tracer.

Span

Span extends Span of opentracing, it's instantiated by ctx.tracer.startSpan.

  • {String} name: operation name
  • {String} traceId: the traceId of the span
  • {String} spanId: the id of the span
  • {String} parentSpanId: the id of parent span, it will be '' if there's no parent span.
  • {String} getTag(key): return the value of the specified tag
  • {Object} getTags(): return all tags

SpanContext

SpanContext extends SpanContext of opentracing, it's instantiated by span.context().

  • {String} traceId: the traceId of the span
  • {String} spanId: the id of the span
  • {Void} setBaggage(key, value): set one baggage
  • {String} getBaggage(key): return the value of the specified baggage
  • {Void} setBaggages(baggages): set multiple baggages
  • {Object} getBaggages(): return all baggages

Carrier

Carrier is a class that transform between SpanContext and carrier.

  • {Object} inject(SpanContext): implement this method that transform SpanContext to carrier object.
  • {Object} extract(carrier): implement this method that transform carrier object to SpanContext, extract must return traceId and spanId.

Collector

  • {Void} collect(span): implement this method that report span.

Questions & Suggestions

Please open an issue here.

License

MIT

FAQs

Last updated on 30 Sep 2018

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc