1 | # microkit [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Dependency Status][daviddm-image]][daviddm-url] [![Coverage percentage][coveralls-image]][coveralls-url]
|
2 | > Node.js microservice toolkit
|
3 |
|
4 | Abstraction toolkit for microservices, to make nodejs developers happy again.
|
5 |
|
6 | ## Installation
|
7 |
|
8 | ```sh
|
9 | $ npm install --save microkit
|
10 | ```
|
11 |
|
12 | ## Usage
|
13 |
|
14 | ```js
|
15 | var MicroKit = require('microkit');
|
16 |
|
17 | // Instantiate MicroKit
|
18 | var microkit = new MicroKit({
|
19 | name: 'myAwesomeService',
|
20 | logLevel: 'info',
|
21 | catchGlobal: true, // catch global errors
|
22 | queue: {
|
23 | name: 'amqp',
|
24 | url: "amqp://localhost",
|
25 | queue: 'myAwesomeService'
|
26 | }, // queue provider config
|
27 | error: {name: 'raven', url: "https://dd..ba:d8..35@app.getsentry.com/24343"}, // error reporter config
|
28 | stats: {name: 'statsd', host: "statsd.example.com"}, // stats reporter config
|
29 | api: {
|
30 | name: 'swagger',
|
31 | services: {
|
32 | serviceA: {url: 'http://api.domain.com/swagger.yaml'},
|
33 | }
|
34 | }
|
35 | });
|
36 |
|
37 | /** or for development it will log on stdout
|
38 | * var microkit = new MicroKit({name: 'myAwesomeService'});
|
39 | **/
|
40 |
|
41 | // Logging
|
42 | microkit.logger.debug('message', {key: 'value'});
|
43 | microkit.logger.info('message', {key: 'value'});
|
44 | microkit.logger.warn('message', {key: 'value'});
|
45 | microkit.logger.fatal(new Error("some error"));
|
46 | microkit.logger.error('message', {key: 'value', err: new Error("some error")});
|
47 |
|
48 | var logger = microkit.logger.create('componentName', {some: 'context'});
|
49 | logger.info('message', {key: 'value'});
|
50 |
|
51 | // Queue
|
52 | microkit.queue.publish({key: 'value'}, {some: 'data'});
|
53 | microkit.queue.publish({key: {key: 'value'}, message: {key: 'value'}});
|
54 | microkit.queue.subscribe({key: 'value'}, (msg, info) => {
|
55 | console.log("message", msg);
|
56 | console.log("key", info.key);
|
57 | });
|
58 |
|
59 | // Error reporting
|
60 | microkit.error.capture(new Error('some error'));
|
61 |
|
62 | // Metrics
|
63 | microkit.metrics.send('some.metric', 10, {tag1: 'value', tag2: 'value2'});
|
64 |
|
65 | // Exit handling
|
66 | microkit.onExit(() => server.close());
|
67 |
|
68 | // Express integration (logging, error reporting)
|
69 | app.use(microkit.express.preHandler); // before all middlewares
|
70 | app.use(microkit.express.postHandler); // after middlewares
|
71 |
|
72 | // API calling
|
73 | microkit.api.call('serviceA', 'getUser', {id: '123-456'});
|
74 |
|
75 | // config
|
76 | microkit.config.get('key.value');
|
77 |
|
78 | // common errors
|
79 | const MyConnectionError = microkit.errors.ConnectionError.extend({
|
80 | name: 'MyConnectionError'
|
81 | });
|
82 | throw new MyConnectionError({code: 'database_error', error: err});
|
83 | ```
|
84 |
|
85 | ## License
|
86 |
|
87 | MIT © [ProteusLabs](https://proteuslabs.io)
|
88 |
|
89 | [npm-image]: https://badge.fury.io/js/microkit.svg
|
90 | [npm-url]: https://npmjs.org/package/microkit
|
91 | [travis-image]: https://travis-ci.org/proteuslabs/microkit.svg?branch=master
|
92 | [travis-url]: https://travis-ci.org/proteuslabs/microkit
|
93 | [daviddm-image]: https://david-dm.org/proteuslabs/microkit.svg?theme=shields.io
|
94 | [daviddm-url]: https://david-dm.org/proteuslabs/microkit
|
95 | [coveralls-image]: https://coveralls.io/repos/proteuslabs/microkit/badge.svg
|
96 | [coveralls-url]: https://coveralls.io/r/proteuslabs/microkit
|