static/hosts.js
author Tero Marttila <terom@paivola.fi>
Sun, 13 Jan 2013 02:16:12 +0200
changeset 120 d342506c3ef3
parent 40 bc8ab048b208
permissions -rw-r--r--
pvl.socket: fix recv/send None
26
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
     1
/* http://fgnass.github.com/spin.js/ */
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
     2
$.fn.spin = function(opts) {
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
     3
  this.each(function() {
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
     4
    var $this = $(this),
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
     5
        data = $this.data();
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
     6
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
     7
    if (data.spinner) {
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
     8
      data.spinner.stop();
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
     9
      delete data.spinner;
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    10
    }
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    11
    if (opts !== false) {
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    12
      data.spinner = new Spinner($.extend({color: $this.css('color')}, opts)).spin(this);
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    13
    }
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    14
  });
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    15
  return this;
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    16
};
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    17
37
9039238f8885 hosts realtime: pause button
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
    18
$.fn.disabled = function (disabled) {
9039238f8885 hosts realtime: pause button
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
    19
    if (disabled)
26
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    20
        this.attr('disabled', 'disabled');
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    21
    else
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    22
        this.removeAttr('disabled');
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    23
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    24
    return this;
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    25
};
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    26
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    27
var Timer = function (interval, cb) {
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    28
    var handle = null;
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    29
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    30
    this.enable = function () {
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    31
        if (handle) return;
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    32
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    33
        handle = window.setInterval(cb, interval);
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    34
    };
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    35
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    36
    this.disable = function () {
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    37
        if (!handle) return;
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    38
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    39
        window.clearInterval(handle);
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    40
        handle = null;
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    41
    };
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    42
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    43
    return this;
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    44
};
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    45
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    46
function html (tag, params, html) {
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    47
    return $("<" + tag + " />", $.extend({html: html}, params));
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    48
};
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    49
25
47faf2ac32d0 hosts: pseudo-realtime list
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    50
function hosts_realtime (params) {
47faf2ac32d0 hosts: pseudo-realtime list
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    51
    var t = params.t;
26
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    52
    var refreshTimer = Timer(2 * 1000, refresh);
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    53
    var animate = false; // true;
25
47faf2ac32d0 hosts: pseudo-realtime list
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    54
47faf2ac32d0 hosts: pseudo-realtime list
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    55
    function render_host (host) {
29
38265b7d8f62 hosts.RealtimeHandler: refactor COLUMNS handling
Tero Marttila <terom@paivola.fi>
parents: 28
diff changeset
    56
        var columns = [
26
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    57
            html("td", {}, 
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    58
                html("a", { href: params.host.replace('0', host.id) }, "#" )
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    59
            ),
29
38265b7d8f62 hosts.RealtimeHandler: refactor COLUMNS handling
Tero Marttila <terom@paivola.fi>
parents: 28
diff changeset
    60
        ];
38265b7d8f62 hosts.RealtimeHandler: refactor COLUMNS handling
Tero Marttila <terom@paivola.fi>
parents: 28
diff changeset
    61
38265b7d8f62 hosts.RealtimeHandler: refactor COLUMNS handling
Tero Marttila <terom@paivola.fi>
parents: 28
diff changeset
    62
        $.each(params.columns, function (i, name) {
38265b7d8f62 hosts.RealtimeHandler: refactor COLUMNS handling
Tero Marttila <terom@paivola.fi>
parents: 28
diff changeset
    63
            column = html("td", { class: name }, host[name]);
38265b7d8f62 hosts.RealtimeHandler: refactor COLUMNS handling
Tero Marttila <terom@paivola.fi>
parents: 28
diff changeset
    64
38265b7d8f62 hosts.RealtimeHandler: refactor COLUMNS handling
Tero Marttila <terom@paivola.fi>
parents: 28
diff changeset
    65
            if (name == 'state')
38265b7d8f62 hosts.RealtimeHandler: refactor COLUMNS handling
Tero Marttila <terom@paivola.fi>
parents: 28
diff changeset
    66
                column.addClass(host['state_class']);
38265b7d8f62 hosts.RealtimeHandler: refactor COLUMNS handling
Tero Marttila <terom@paivola.fi>
parents: 28
diff changeset
    67
38265b7d8f62 hosts.RealtimeHandler: refactor COLUMNS handling
Tero Marttila <terom@paivola.fi>
parents: 28
diff changeset
    68
            columns.push(column);
38265b7d8f62 hosts.RealtimeHandler: refactor COLUMNS handling
Tero Marttila <terom@paivola.fi>
parents: 28
diff changeset
    69
        });
38265b7d8f62 hosts.RealtimeHandler: refactor COLUMNS handling
Tero Marttila <terom@paivola.fi>
parents: 28
diff changeset
    70
38265b7d8f62 hosts.RealtimeHandler: refactor COLUMNS handling
Tero Marttila <terom@paivola.fi>
parents: 28
diff changeset
    71
        return html("tr", {id: host.id}, columns);
25
47faf2ac32d0 hosts: pseudo-realtime list
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    72
    }
47faf2ac32d0 hosts: pseudo-realtime list
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    73
40
bc8ab048b208 fixfix + docdoc
Tero Marttila <terom@paivola.fi>
parents: 37
diff changeset
    74
    // XXX: refresh > interval?
25
47faf2ac32d0 hosts: pseudo-realtime list
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    75
    function refresh () {
47faf2ac32d0 hosts: pseudo-realtime list
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    76
        console.log("refresh: " + t);
26
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    77
        
37
9039238f8885 hosts realtime: pause button
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
    78
        var refresh = $('#refresh').disabled(true);
26
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    79
        var spinner = $('#wrapper').spin();
25
47faf2ac32d0 hosts: pseudo-realtime list
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    80
30
841d856293a1 hosts: refactor ListHandler filter support up into BaseHandler, adding support for filters in RealtimeHandler
Tero Marttila <terom@paivola.fi>
parents: 29
diff changeset
    81
        var url = params.url;
841d856293a1 hosts: refactor ListHandler filter support up into BaseHandler, adding support for filters in RealtimeHandler
Tero Marttila <terom@paivola.fi>
parents: 29
diff changeset
    82
        var query = $.param($.extend(params.filters, {t: t }), true);   // using traditional encoding for multi-values
841d856293a1 hosts: refactor ListHandler filter support up into BaseHandler, adding support for filters in RealtimeHandler
Tero Marttila <terom@paivola.fi>
parents: 29
diff changeset
    83
841d856293a1 hosts: refactor ListHandler filter support up into BaseHandler, adding support for filters in RealtimeHandler
Tero Marttila <terom@paivola.fi>
parents: 29
diff changeset
    84
        $.getJSON(url, query, function (data) {
26
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    85
            var t1 = data.t;
25
47faf2ac32d0 hosts: pseudo-realtime list
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    86
            var hosts = data.hosts;
47faf2ac32d0 hosts: pseudo-realtime list
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    87
26
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    88
            console.log("refresh: " + t + " -> " + t1 + ": " + hosts.length);
25
47faf2ac32d0 hosts: pseudo-realtime list
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    89
47faf2ac32d0 hosts: pseudo-realtime list
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    90
            $.each(hosts, function (i, host) {
47faf2ac32d0 hosts: pseudo-realtime list
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    91
                var item = $('#' + host.id);
47faf2ac32d0 hosts: pseudo-realtime list
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    92
26
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    93
                if (item.length) {
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    94
                    if (animate) item.slideUp();
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    95
                } else {
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    96
                    item = render_host(host)
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    97
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    98
                    if (animate) item.hide();
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
    99
                }
25
47faf2ac32d0 hosts: pseudo-realtime list
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   100
                
47faf2ac32d0 hosts: pseudo-realtime list
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   101
                // move to top
26
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   102
                item.prependTo($('#hosts tbody'));
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   103
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   104
                if (animate)
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   105
                    item.slideDown();
28
9940bc6c0a34 hosts: use jquery ui background color animation instead of position
Tero Marttila <terom@paivola.fi>
parents: 26
diff changeset
   106
                else
9940bc6c0a34 hosts: use jquery ui background color animation instead of position
Tero Marttila <terom@paivola.fi>
parents: 26
diff changeset
   107
                    item.effect("highlight", {}, 'slow');
25
47faf2ac32d0 hosts: pseudo-realtime list
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   108
            });
26
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   109
            
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   110
            // update
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   111
            t = t1;
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   112
        }).error(function () {
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   113
            alert("Error :("); 
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   114
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   115
            // disable auto-refresh
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   116
            refreshTimer.disable();
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   117
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   118
        }).complete(function () {
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   119
            spinner.spin(false);
37
9039238f8885 hosts realtime: pause button
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
   120
            refresh.disabled(false);
25
47faf2ac32d0 hosts: pseudo-realtime list
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   121
        });
47faf2ac32d0 hosts: pseudo-realtime list
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   122
    }
47faf2ac32d0 hosts: pseudo-realtime list
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   123
47faf2ac32d0 hosts: pseudo-realtime list
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   124
    return function () {
26
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   125
        // init
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   126
        if (animate)
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   127
            $("#hosts").css('display', 'block');
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   128
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   129
        $("#refresh").click(function () {
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   130
            // in case diabled on error
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   131
            refreshTimer.enable();
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   132
            refresh();
37
9039238f8885 hosts realtime: pause button
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
   133
            $("#pause").disabled(false);
9039238f8885 hosts realtime: pause button
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
   134
        });
9039238f8885 hosts realtime: pause button
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
   135
9039238f8885 hosts realtime: pause button
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
   136
        $("#pause").click(function () {
9039238f8885 hosts realtime: pause button
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
   137
            console.log("pause");
9039238f8885 hosts realtime: pause button
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
   138
            refreshTimer.disable();
9039238f8885 hosts realtime: pause button
Tero Marttila <terom@paivola.fi>
parents: 30
diff changeset
   139
            $("#pause").disabled(true);
26
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   140
        });
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   141
        
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   142
        // start auto-refresh
589249097230 hosts: convert realtime list into table; breaks animations :(
Tero Marttila <terom@paivola.fi>
parents: 25
diff changeset
   143
        refreshTimer.enable();
25
47faf2ac32d0 hosts: pseudo-realtime list
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   144
    }
47faf2ac32d0 hosts: pseudo-realtime list
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   145
}