4.0.2 • Published 8 months ago
@vizydrop/correlation-id v4.0.2
Correlation Id
How to use
Create correlation id instance
const {createCorrelationId} = require(`@vizydrop/correlation-id`);
const correlationId = createCorrelationId();
Integrate with @vizydrop/logger
const {createLogger} = require(`@vizydrop/logger`);
const logger = createLogger({
correlationId: {
enabled: true,
getCorrelationId: () => correlationId.correlator.getId(),
emptyValue: `nocorrelation`,
},
});
Register middleware. Support koa
and express
// koa
app.use(correlationId.koaMiddleware);
// express
app.use(correlationId.expressMiddleware);
Enhance request so each request will contain correlation id http header.
const request = require(`request`);
const correlatedRequest = correlationId.enhanceRequest(request);
correlatedRequest.get(`http://anotherservice:10020/data`);
Enhance http proxy so each proxied request will contain correlation id http header.
const httpProxy = require(`http-proxy`);
const proxy = 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.
function jobTask() {}
function runJob() {
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 defaultuuid
is used.namespaceName
- namespace for cls hook. Default value iscorrelation-id-namespace
httpHeaderParamName
- name of http header that contains correlation id value. Default value isx-correlationid
Correlation ID API
expressMiddleware
- express middleware that runs next middlewares in scope of correlation id async hookkoaMiddleware
- koa middleware that runs next middlewares in scope of correlation id async hookenhanceHttpRequest
- takes request and return new request instance that adds correlation id header by defaultenhanceHttpProxy
- register additional listener that adds correlation id header by defaultcorrelator.getId()
- returns current correlation idcorrelator.withId(id, fn)
- run function and all subsequent function with specified correlation idcorrelator.bindEmitter()
- see https://github.com/jeff-lewis/cls-hooked#namespacebindemitteremittercorrelator.bind()
- see https://github.com/jeff-lewis/cls-hooked#namespacebindemitteremittercorrelator.generateId()
- generates new correlation id
Known issues
- does not work well with
bluebird.promisifyAll
. Alternative solution is to explicitly promisify using native promise
const redis = require(`redis`);
const util = require(`util`);
const client = 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.
const mongoose = require(`mongooose`);
mongoose.Promise = global.Promise;
EntityModel.find({name: `name`}).then((value) => {
// do something
});
4.0.1
8 months ago
4.0.2
8 months ago
3.0.1-ci.21
2 years ago
3.0.1-ci.19
3 years ago
3.0.1-us352069-migrate-to-gitlab.21
3 years ago
3.0.1-us352069-migrate-to-gitlab.1
3 years ago
4.0.0
4 years ago
3.2.5
4 years ago
3.2.4
4 years ago
3.2.3
4 years ago
3.2.2
4 years ago
3.2.1
4 years ago
3.2.0
4 years ago
3.1.2
4 years ago
3.1.1
5 years ago
3.1.0
5 years ago
3.0.1
5 years ago
3.0.0
5 years ago
2.0.0
5 years ago