var mqtt = require('mqtt'); var fs = require('fs'); var _ = require('underscore'); var winston = require('winston'); var bunyan = require('bunyan'); var pg = require('pg'); var config = require('./src/config'); function configureLogging(config) { var cfg = { name: 'main' }; if (config.isProd()) { cfg.streams = [ { level: 'warn', stream: process.stdout }, { level: 'debug', path: 'log/diller.log' } ]; var stat; try { stat = fs.lstatSync('log'); } catch(e) { // Assume this to to be ENOENT fs.mkdirSync('log'); } if (stat && !stat.isDirectory()) { throw 'Not a directory: log'; } } return bunyan.createLogger(cfg); } var log = configureLogging(config); var pgClient = new pg.Client(config.postgresqlUrl); pgClient.connect(); pgClient.on('connect', function () { log.info('connected to pg'); }); var apps = [ './apps/logger', './apps/device', './apps/values' ]; appConfig = { pg: { connect: function (cb) { pg.connect(config.postgresqlUrl, cb); } } }; apps = _.map(apps, function (name) { log.info('Loading app: ' + name); var app = require(name); var cfg = _.clone(appConfig); cfg.log = log.child({app: name}); app.init(cfg); return {name: name, instance: app}; }); log.info('Connecting to ' + config.mqttUrl); var mqttClient = mqtt.connect(config.mqttUrl); mqttClient.on('offline', function () { log.info('offline'); }); mqttClient.on('error', function (error) { log.info('error', {error: error}); }); mqttClient.on('connect', function () { log.info('Connected'); mqttClient.subscribe('/diller/#'); }); mqttClient.on('message', function (topic, message, payload) { log.info('got message', {message: message.toString()}); _.each(apps, function (app) { app.instance.onMessage(topic, message, payload); }); });