@plugandtrade/diescheite v0.1.4
NodeJS Die Scheite client
NodeJS Die Scheite client.
Documentation
Overview
This library is implemented with nact, basic actor pattern suuport library.
nact has to be started, either outside Die Scheite or by Die Scheite.
Using default nact system:
const DieScheite = require('die-scheite');
const dieSchieteActParent = DieScheite.start(); // Starts a new nact systemUsing custom nact system:
const DieScheite = require('die-scheite'),
{ start } = require('nact');
const actSystem = start(); // Start the nact system.
const dieSchieteActParent = DieScheite.start(actSystem);Publishers
Console Publisher
A simple publisher writing entries as json to stdout is available.
Example:
const publisher = DieScheite.publishers.console.start(actSystem);
const prettyPublisher = DieScheite.publishers.console.start(actSystem, { pretty: true });It takes the optioanl pretty argument, if set to true it will stringify entries with
JSON.stringify(entry, null, 2).
Custom publishers
A publisher is a nact process handling the PUBLISH message type, { type: 'PUBLISH', entry: { /* ... */ } }. The
entry contains the entire log entry object. The publish action on a publisher process must respond with a promise,
resolving after successful publish, to the sender.
Example publisher writing each log entry to stdout with a pretty option:
const { spawn } = require('nact');
function createPublisher(actorParent, opts) {
return spawn(
actorParent,
(state, msg, ctx) => {
if (msg.type === 'PUBLISH') {
let data = JSON.stringify(entry, null, state.pretty ? 2 : null);
dispatch(
ctx.sender,
new Promise((resolve) => setImmediate(() => {
console.log(data);
resolve();
}))
);
}
return state;
},
uuid(), // Publisher process id
{ initialState: opts }
);
}Logged Action
A full example is found here. The fundamentals are:
const DieScheite = require('../index'),
{ start } = require('nact'),
const actSystem = start();
const logPublisher = DieScheite.publishers.console.start(actSystem);
const ds = DieScheite.generic(
{
serviceId: 'example-console',
serviceVersion: '0.1.0',
serviceInstanceId: '01'
},
logPublisher
);
ds.loggedAction(tracingScope.generic({}), entry => {
// Do your work here
entry.info("Some info log...");
return 1;
})
.then({ result } => result === 1); // trueExpress
const express = require('express'),
{ start } = require('nact'),
DieScheite = require('../index');
const actSystem = start();
const logPublisher = DieScheite.publishers.console.start(actSystem, { pretty: true }); // Pretty print json
const app = express();
app.use(DieScheite.express.middleware(
{
serviceId: 'example-express',
serviceVersion: '0.1.0',
serviceInstanceId: '01',
publisher,
ignoredRoutes: [ '/healthcheck', /ignored/ ],
ignoredHeaders: [ 'date' ],
censoredHeaders: [ 'user-agent', 'foo' ]
},
app,
));
/*
...
...
*/
app.use(DieScheite.express.errorHandler);
app.listen(3000, (...args) => {
// ...
});