index.js 1.62 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)
      }).required(),
      stat: joi.object().keys({
        rotation: joi.number().min(0),
        maxsize: joi.number().min(0),
        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),
        external: joi.array().items(joi.object().keys({
          fn: joi.func().required(),
          args: joi.array().items(joi.any())
        }))
      }).required()
    });
  }
};