@vidaxl/status-gatherer

@vidaxl/status-gatherer

Usage no npm install needed!

<script type="module">
  import vidaxlStatusGatherer from 'https://cdn.skypack.dev/@vidaxl/status-gatherer';
</script>

README

Status Gatherer

Summary

This is an private npm module that gather's statuses of services that are dependencies of service, where it used.

Usage

  • Install package npm i -S @vidaxl/status-gatherer
  • Use it for status route
const { StatusGatherer, strategies, enums } = require('@vidaxl/status-gatherer');

const {
    CouchbaseStrategy,
    ElasticsearchStrategy,
    HttpStrategy,
    MongoStrategy,
    MysqlStrategy,
    RedisStrategy,
    SolrStrategy,
} = strategies;

const deps = [
    new HttpStrategy('some-service', {
        url: 'http://0.0.0.0:3000/status',
    }),
    new ElasticsearchStrategy('elasticsearch', {
        node: ['http://0.0.0.0:9200'],
    }),
    new CouchbaseStrategy('some-couchbase', {
        host: '0.0.0.0',
        port: 3000,
        username: 'test',
        password: 'test',
    }),
    new MongoStrategy('some-mongodb-1', {
        url: 'mongodb://test:test@0.0.0.0:27017,0.0.0.1:27017/dbname',
    }),
    new MongoStrategy('some-mongodb-2', {
        host: [
            '0.0.0.0',
            '0.0.0.1'
        ],
        port: 27017,
        username: 'test',
        password: 'test',
        dbName: 'dbname',
    }),
    new MysqlStrategy('some-mysql', {
        host: '0.0.0.0',
        port: 3306,
        user: 'test',
        password: 'test',
        database: 'database',
    }),
    new RedisStrategy('some-redis', {
        host : '0.0.0.0',
        port : 6379
    }),
    new SolrStrategy('some-solr', {
        host: '0.0.0.0',
        port: 8983,
        core: 'test',
    })
];

async function statusRouteHandler(req, res, next) {
    if (!req.query.hasOwnProperty('verbose')) {
        res.json(200, {
            status: enums.statuses.OK,
        });
        return next();
    }

    const gatherer = new StatusGatherer(deps, {
        simpleMode: false,  // true by default
    });
    const result = await gatherer.getStatus();

    res.json(200, result);
    return next();
}

Status Gatherer API

  • Class StatusGatherer
    • constructor(strategiesArray, options) - Create a instance of class StatusGatherer.
      • strategiesArray type: Array - An array of strategies.
      • options type: Object - A configuration object for StatusGatherer. It has next options:
        • simpleMode type: Boolean - If false then .getStatus() result will contain full responses for all strategies. By default this option is true.
    • getStatus() - StatusGatherer instance method. Goes though all passed strategies and returns and result when all strategies checks is finished. When simpleMode: true - status objects will contain only name and status fields. Result object contains next fields:
{ 
  name: 'some-name-service', // name key from package.json of service where this module is used
  version: '1.0.0', // version key from package.json of service where this module is used
  description: '', // description key from package.json of service where this module is used
  dependencies: [{ // array with statuses for each passed strategy
    type: 'HTTP', // type of connection to some-service
    name: 'some-service',
    elapsedTime: 100, // time spent connecting to the service
    status: 'OK', // status of some-service, can be 'FAIL'
    serviceResponse: {}, // full response from service
  }],
  status: 'OK', // status of some-name-service
  timestamp: 1577098534797,
  date: "2019-12-23T10:55:46.959Z",
}

Status Strategies

This npm module provides few predefined strategies:

  • CouchbaseStrategy - configuration object: { host, port, username, password }
  • ElasticsearchStrategy - configuration object: { node, maxRetries, pingTimeout }
  • HttpStrategy - configuration object: { url }
  • MongoStrategy - configuration object: { url } OR { username, password, port, host }
  • MysqlStrategy - configuration object: { host, port, user, password, database }
  • RedisStrategy - configuration object: { host, port, password }
  • SolrStrategy - configuration object: { host, port, core, path, secure }

All of them extends from BaseStrategy, so you can create custom strategy based on your own requirements.