aboutsummaryrefslogblamecommitdiff
path: root/assets/js/monitor.js
blob: 05a3708aa888762f7c2a764214f6ff6915cbf44f (plain) (tree)


























































                                                                     


                                             


                                          

                                                                                       

                       




                                                                      



                                                          


                                                                    





                                              




                                                               





                                                



                                          
     









                                                                                             
         























                                                                                  
         












                                                                            

                                             

                                                                   
                              









                                                                                    












                                                     











                                                                         


                                                  

                                   









                                                                          
















                                                         












                                         





                                                                    























                                                                                         



























































































                                                                                                    


















                                                                                 
var ajax_site = 'ajax';
var refresh_rate = 3000;
var send_timeout = 20000;
var retry_rate = 3000;

function Blocker(sleeper) {
    this.counter = 0;
    this.waiting = false;
    this.sleeper = sleeper;
}

Blocker.prototype.setHook = function() {
    var blocker = this;
    return function() {
        blocker.counter++;
    }
}
Blocker.prototype.setNotifier = function(cb) {
    var blocker = this;
    return function() {
        cb.apply(this, arguments);
        if (--blocker.counter == 0 && blocker.waiting)
            blocker.sleeper();
    }
};

Blocker.prototype.go = function() {
    if (this.counter == 0)
        this.sleeper();
    this.waiting = true;
}

function send_request(on_success) {
    $.ajax({
            url: ajax_site,
            type: 'GET',
            cache: false,
            dataType: 'json',
            async: true,
            success: on_success,
            timeout: send_timeout,
            error: function(a, b, c) {
                console.log("failed while connecting, reason: " + b);
                setTimeout(function() {
                        send_request(on_success);
                }, retry_rate);
            }
    });
}

function hex(x) {
    return ("0" + parseInt(x).toString(16)).slice(-2);
}

function random_range(min, max) {
    return Math.random() * (max - min) + min;
}

function random_color() {
    var r = (random_range(0, 200) + 150) / 2;
    var g = (random_range(0, 200) + 150) / 2;
    var b = (random_range(0, 200) + 150) / 2;
    return "#" + hex(r) + hex(g) + hex(b);
}

var freeze_var = function(cont, i, val) { return cont[i] = function(){ return val }; };

function LineGraph() {}

LineGraph.prototype.recalc_y_domain = function(mdata) {
    var min = d3.min($.map(mdata, function (data) {
                return d3.min(data, function(d) { return d.y; }); }));
    var max = d3.max($.map(mdata, function (data) {
                return d3.max(data, function(d) { return d.y; }); }));
    var delta = max - min;
    this.y.domain([min - delta / 2.0, max + delta / 3.0]);
}

LineGraph.prototype.recalc_domain = function(mdata) {
    this.x.domain(d3.extent(mdata[0], function(d) { return d.x; }));
    this.recalc_y_domain(mdata);
}

LineGraph.prototype.parse_data = function(d) {
    var data = [];
    for (var i = 0; i < d.records.length; i++)
    {
        var row = d.records[i];
        while (data.length < row.rec.length)
            data.push([]);
        for (var j = 0; j < row.rec.length; j++)
            data[j].push({x: i, y: +row.rec[j], rid: row.rid});
    }
    return data;
}

LineGraph.prototype.update = function(d, i, b) {
    var graph = this;
    var mdata = this.parse_data(d);
    var freezed_i = [];
    var recalced = false;
    for (var i = 0; i < mdata.length; i++)
    {
        var data = mdata[i];
        if (data.length == 0) continue;
        var pdata = this.pdata[i];
        var svg = d3.select(this.elem).select("svg");
        var path = this.line[i];

        var shift = pdata.length ? data[0].rid - pdata[0].rid : 0;
        var add = pdata.length ? data[data.length - 1].rid - pdata[pdata.length - 1].rid : 0;
        if (pdata.length == 0 || pdata[pdata.length - 1].rid < data[0].rid ||
            pdata[0] > data[data.length - 1].rid || shift < 0 || add < 0)
        {
            if (data