Skip to content
This repository was archived by the owner on Apr 12, 2021. It is now read-only.

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Correlation Id

How to use

Create correlation id instance

const{createCorrelationId}=require(`@vizydrop/correlation-id`);constcorrelationId=createCorrelationId();

Integrate with @vizydrop/logger

const{createLogger}=require(`@vizydrop/logger`);constlogger=createLogger({correlationId: {enabled: true,getCorrelationId: ()=>correlationId.correlator.getId(),emptyValue: `nocorrelation`,},});

Register middleware. Support koa and express

// koaapp.use(correlationId.koaMiddleware);// expressapp.use(correlationId.expressMiddleware);

Enhance request so each request will contain correlation id http header.

constrequest=require(`request`);constcorrelatedRequest=correlationId.enhanceRequest(request);correlatedRequest.get(`http://anotherservice:10020/data`);

Enhance http proxy so each proxied request will contain correlation id http header.

consthttpProxy=require(`http-proxy`);constproxy=httpProxy.createProxyServer({target: `http://anotherservice:10020/`});correlationId.enhanceHttpProxy(proxy);

Run jobs. Jobs usually do not go through express/koa middleware so correlation id should be generated manually.

functionjobTask(){}functionrunJob(){correlationId.correlator.withId(correlator.generateDefaultId(),()=>{jobTask();});}

Settings

Custom settings can be passed as an object to createCorrelationId function.

  • generateDefaultId - function that should return new correlation id. By default uuid is used.
  • namespaceName - namespace for cls hook. Default value is correlation-id-namespace
  • httpHeaderParamName - name of http header that contains correlation id value. Default value is x-correlationid

Correlation ID API

  • expressMiddleware - express middleware that runs next middlewares in scope of correlation id async hook
  • koaMiddleware - koa middleware that runs next middlewares in scope of correlation id async hook
  • enhanceHttpRequest - takes request and return new request instance that adds correlation id header by default
  • enhanceHttpProxy - register additional listener that adds correlation id header by default
  • correlator.getId() - returns current correlation id
  • correlator.withId(id, fn) - run function and all subsequent function with specified correlation id
  • correlator.bindEmitter() - see https://github.com/jeff-lewis/cls-hooked#namespacebindemitteremitter
  • correlator.bind() - see https://github.com/jeff-lewis/cls-hooked#namespacebindemitteremitter
  • correlator.generateId() - generates new correlation id

Known issues

  • does not work well with bluebird.promisifyAll. Alternative solution is to explicitly promisify using native promise
constredis=require(`redis`);constutil=require(`util`);constclient=redis.createClient();client.setAsync=util.promisify(client.set).bind(client);client.getAsync=util.promisify(client.get).bind(client);
  • does not work well with mongoose callbacks. Alternative solution is to use promisified functions.
constmongoose=require(`mongooose`);mongoose.Promise=global.Promise;EntityModel.find({name: `name`}).then((value)=>{// do something});

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages