var mqtt = require('mqtt'); var _ = require('underscore'); var winston = require('winston'); var bunyan = require('bunyan'); var pg = require('pg'); var connectionString = process.env.DATABASE_URL || 'postgres://diller:diller@localhost:5432/diller'; var mqttUrl = process.env.MQTT_URL || 'mqtt://trygvis.io'; var pgClient = new pg.Client(connectionString); pgClient.connect(); pgClient.on('connect', function () { log.info('connected to pg'); }); var log = bunyan.createLogger({name: 'main'}); var apps = [ './apps/logger', './apps/device', './apps/values' ]; appConfig = { pg: { connect: function (cb) { pg.connect(connectionString, cb); } } }; apps = _.map(apps, function (name) { log.info('Loading app: ' + name); var app = require(name); var cfg = _.clone(appConfig); cfg.log = bunyan.createLogger({name: name}); app.init(cfg); return {name: name, instance: app}; }); log.info('Connecting to ' + mqttUrl); var mqttClient = mqtt.connect(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); }); });