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() }); } };