dabatoric

1.0.0 • Public • Published

dabatoric

Overview

Provides a way to manipulate plain Object data in some data-bases:

Documentation

A pre-generated version of the documentation is located in ./artifacts/jsdoc/dabatoric/<VERSION>/index.html. Primarily check the globals namespace and the class DataModels.

WoW

Install with:

npm install dabatoric --save

The index of the modules exports functions:

  • init the mongo controller with initMongoController
  • init the redis controller with initRedisController

Mongo

Mongo instances save documents in collections. So, you insert:

{
    'a': 2,
    'b': 3,
    'id': 'ab'
}

... under the collection data-a with the query

{
    'id': 'ab'
}

Redis

For Redis, the term collection is mapped to a hash. So, if you insert:

{
    'a': 2,
    'b': 3,
    'id': 'ab'
}

... under the collection data-a with the query

'ab'

... you will get a hash named data-a with a key ab and the stringified object as the value.


For both instances, you need to define:

  • MongoDB/RedisDB URI
  • ObjectValidationScheme - user defined scheme as described (documentation)
  • Array<DataModelIdentifier> - array of identifiers as described (documentation)
  • Array<CollectionName> - strings to be used as Regular Expression as to validate a name of a collection on each action (documentation)

Example:

    const dabatoric = require('dabatoric'))
    let redisController = dabatoric.initRedisController(
        'redis://localhost:6379',
        {
            'content': {
                'videos': path to a user-defined object validation sheme,
                'images': path to a user-defined object validation sheme
            }
        },
        [
            'content.videos',
            'content.images',
        ],
        [
            'content\\-.*'
        ]
    );

And you have access to some DB actions:

  • find
    redisController.find([{
        'collection': 'content-images',
        'model': 'content.images',
        'query': '...'
    }, {
        'collection': 'content-images',
        'model': 'content.images',
        'query': '...'
    }], (results) => {
        ...
    });
  • insert only if the document does not exist
    redisController.insert([{
        'collection': 'content-images',
        'model': 'content.images',
        'query': '...',
        'data': { ... }
    }], (results) => {
        ...
    });
  • upsert; insert (if new) or modify (if existing); works with partial data if the document exists
    redisController.upsert([{
        'collection': 'content-images',
        'model': 'content.images',
        'query': '...',
        'data': { ... }
    }], (results) => {
        ...
    });
  • remove
    redisController.remove([{
        'collection': 'content-images',
        'model': 'content.images',
        'query': '...'
    }], (results) => {
        ...
    });

For all of those, the first parameter is a array of objects that describe the action:

  • collection to reference the collection (hash for Redis)
  • model to reference the model (as defined during the initialization)
  • query to identify the document:
    • for MongoDB is a query object
    • for RedisDB is a string that is a key in a hash (collection)
  • data - insert and upsert require data

No more than ten actions can be performed in one go. Each action is checked against the corresponding data-model. Callback result is always an array of individual results - check individual docs.

Additionally, you have:

  • getConnectionClient()
  • getDataModels()
  • closeConnection()
  • isReady()

There are some examples in the tests:

  • ./src/test/tests/data_base_controllers/mongo_test
  • ./src/test/tests/data_base_controllers/redis_test

Logging

The module has the capability to log to:

  • the terminal
  • the Linux system log

Terminal

The terminal logging is to be enabled with a environmental variable:

DBTRC_TERM_F=OK

Syslog

The Linux system log logging is to be enabled with a environmental variable:

DBTRC_SYSLOG_F=OK

To enable this, open /etc/rsyslog.conf and enable UDP on port 514. This is usually just commented and needs uncommenting:

# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")

... and restart the service with ./etc/init.d/rsyslog restart. The logs should appear in /var/log/syslog. This was tested on Ubuntu 16.04.

Source

The source is located on bitbucket

Tests

To run the tests, run (in the root of the project):

npm test

You need to have installed (and running) both Redis and Mongo locally on default URIS.

Besides unit, functionality and regression tests, a static analysis is performed with the help of plato module. This creates a folder ./artifacts/plato_analysis/. There, the file index.html is to be opened in a browser.

Package Sidebar

Install

npm i dabatoric

Weekly Downloads

1

Version

1.0.0

License

MIT

Last publish

Collaborators

  • larsonvonh