index.js 2 KB
var _ = require('lodash');
var moment = require('moment');
var log = require('./model/log');
var stat = require('./model/stat');
var alarm = require('./model/alarm');
var validate = require('./lib/validate');
var joi = require('joi');

module.exports = {

    /*
     * opts: {
     * 	 log: [dirname, rotation, maxsize]
     * 	 stat: [dirname, rotation, maxsize, interval, key]
     * 	 alarm: [dirname, rotation, maxsize]
     * }
     */
    init: function (opts) {
        var logstatalarm = undefined;
        validate.joi(opts, this.getSchema(), function (err, opts) {
            if (err) {
                throw new Error(err);
            }
        });
        return {
            log: new log(opts.dirname, opts.log),
            stat: new stat(opts.dirname, opts.stat, opts.alarm)
        };
    },

    /*
     * Pre-define schema
     */
    getSchema: function () {
        return joi.object().keys({
            dirname: joi.string().required(),
            log: joi.object().keys({
                rotation: joi.number().min(0),
                maxsize: joi.number().min(0),
                filename: joi.string()
            }).required(),
            stat: joi.object().keys({
                rotation: joi.number().min(0),
                maxsize: joi.number().min(0),
                filename: joi.string(),
                interval: joi.number().min(0),
                data: joi.array().items(joi.object().keys({
                    key: joi.string().required(),
                    threshold: joi.number().min(0),
                    threshold_inv: joi.number().min(0)
                }))
            }).required(),
            alarm: joi.object().keys({
                rotation: joi.number().min(0),
                maxsize: joi.number().min(0),
                filename: joi.string(),
                external: joi.array().items(joi.object().keys({
                    fn: joi.func().required(),
                    args: joi.array().items(joi.any())
                }))
            }).required()
        });
    }
};