Skip to content
Snippets Groups Projects
brand.js 1.63 KiB
Newer Older
Kasalehlia's avatar
Kasalehlia committed
var httpreq = require('httpreq');
var Mustache = require('mustache');

var URL = 'https://status.stratum0.org/status.json';
Kasalehlia's avatar
Kasalehlia committed
var TEMPLATES = {};
Kasalehlia's avatar
Kasalehlia committed
require('fs').readFile('modules/brand/template.mustache', 'utf-8', function (err, data) {
Kasalehlia's avatar
Kasalehlia committed
    TEMPLATES.template = data;
});
require('fs').readFile('modules/brand/status.mustache', 'utf-8', function (err, data) {
    TEMPLATES.status = data;
Kasalehlia's avatar
Kasalehlia committed
});

var status = {};

Kasalehlia's avatar
Kasalehlia committed
function renderStatus(sock, everything) {
    var sendInner = function () {
        sock.emit('brand.status', Mustache.render(TEMPLATES.status, status));
    }
    if (everything) {
        sock.emit('brand', Mustache.render(TEMPLATES.template, status));
        setTimeout(sendInner, 3000);
    } else {
        sendInner();
    }
Kasalehlia's avatar
Kasalehlia committed
}

Kasalehlia's avatar
Kasalehlia committed
function fetchStatus(cb) {
Kasalehlia's avatar
Kasalehlia committed
    httpreq.get(URL, function (err, res) {
        var state = JSON.parse(res.body).state;
        cb(state);
    });
}

module.exports = function (io) {
    function update() {
Kasalehlia's avatar
Kasalehlia committed
        var firstTime = true;
Kasalehlia's avatar
Kasalehlia committed
        fetchStatus(function (state) {
            if (status.lastchange != state.lastchange) {
                var d = new Date(state.lastchange*1000);
                state.since = DOW[d.getDay()]+', '+pad(d.getHours(),2)+':'
                    +pad(d.getMinutes(),2);
                status = state;
Kasalehlia's avatar
Kasalehlia committed
                renderStatus(io);
Kasalehlia's avatar
Kasalehlia committed
            }
            if (firstTime && status) {
                io.on('connection', function (sock) {
                    renderStatus(sock, true);
                });
                renderStatus(io, true);
                firstTime = false;
Kasalehlia's avatar
Kasalehlia committed
            }
        });
    }
    setInterval(update, 2*60*1000); //every 2 minutes
    update();
}