red and green observer status icons
[plstackapi.git] / planetstack / core / static / planetstack_graphs.js
1 google.load('visualization', '1', {'packages' : ['controls','table','corechart','geochart']});
2
3 function renderChart(newStyle, dialog, container, dataSourceUrl, yColumn, xColumn, aggFunc, options) {
4     if ( newStyle ) {
5         $(dialog).dialog("open");
6     }
7     else {
8         $(container).empty();
9         $(dialog).modal('show');
10         $('.modal-body').scrollTop(0);
11     }
12
13     startQuery(container, dataSourceUrl, yColumn, xColumn, aggFunc, options)
14 }
15
16 function startQuery(container, dataSourceUrl, yColumn, xColumn, aggFunc, options) {
17     var query = new google.visualization.Query(dataSourceUrl);
18     query && query.abort();
19     query.send(function(response) {handleResponse_psg(container, dataSourceUrl, response, yColumn, xColumn, aggFunc, options);});
20 }
21
22 // NOTE: appended _psg to showLine() and handleResponse() to prevent conflict
23 //       with Sapan's analytics page.
24
25 function agg_bandwidth(arr) {
26         var ret = 0;
27         for (var i = 0; i < arr.length; i++) {
28                 ret+=arr[i]*8.0/1024.0/1024.0/1024.0;
29         }
30         return ret;
31 }
32
33 function showLine_psg(container, dt, options) {
34     var base_options = {
35             'width': 520,
36             'height': 300,
37             'pages': true,
38             'numRows': 9,
39             'backgroundColor': 'transparent',
40             'titleTextStyle': {"color": "black"},
41             'legend': 'none',
42             'hAxis': {"baselineColor": "darkBlue",
43                       "textStyle": {"color": "black"}},
44             'vAxis': {"baselineColor": "darkBlue",
45                       "textStyle": {"color": "black"}},
46           }
47
48     options = $.extend(true, {}, base_options, options);
49
50     var lineChart = new google.visualization.ChartWrapper({
51           'chartType': 'LineChart',
52           'containerId': container.substring(1),
53           'view': {'columns': [0, 1]},
54           'options': options
55         });
56         lineChart.setDataTable(dt);
57         lineChart.draw();
58
59 }
60
61 function fixDate(unixDate) {
62     return new Date(unixDate*1000);
63 }
64
65 function fixDate2(unixDate) {
66     return new Date(unixDate);
67 }
68
69 function handleResponse_psg(container, dataSourceUrl, response, yColumn, xColumn, aggFunc, options) {
70     var supportedClasses = {
71                     'Table':google.visualization.Table,
72                     'LineChart':google.visualization.LineChart,
73                     'ScatterChart':google.visualization.ScatterChart,
74                     'ColumnChart':google.visualization.ColumnChart,
75                     'GeoChart':google.visualization.GeoChart,
76                     'PieChart':google.visualization.PieChart,
77                     'Histogram':google.visualization.Histogram};
78
79     if (response.isError()) {
80         //console.log("retry chart");
81         setTimeout(function () { startQuery(container, dataSourceUrl, yColumn, xColumn, aggFunc, options) }, 5000);
82         return
83     }
84
85     var proxy = new google.visualization.ChartWrapper({
86       'chartType': 'Table',
87       'containerId': 'graph_work',
88       'options': {
89         'width': 800,
90         'height': 300,
91          pageSize:5,
92          page:'enable',
93         'legend': 'none',
94         'title': 'Nodes'
95       },
96       'view': {'columns': [0,1]}
97     });
98
99     google.visualization.events.addListener(proxy, 'ready', function () {
100         var dt = proxy.getDataTable();
101         var groupedData1 = google.visualization.data.group(dt, [{
102            column: yColumn,
103            type: 'datetime',
104            modifier: fixDate2,
105            }],
106            [{
107             column: xColumn,
108             type: 'number',
109             label: dt.getColumnLabel(xColumn),
110             aggregation: aggFunc}]);
111
112         showLine_psg(container, groupedData1, options);
113     });
114
115     proxy.setDataTable(response.getDataTable());
116
117     proxy.draw();
118 }
119
120