retry chart if it fails
[plstackapi.git] / planetstack / core / static / planetstack_graphs.js
index ca8458e..5f7977c 100644 (file)
@@ -1,59 +1,74 @@
 google.load('visualization', '1', {'packages' : ['controls','table','corechart','geochart']});
 
-function renderChart(origQuery, yColumn, xColumn, title) {
-    $('#graph').empty();
-    $('#chartsModal').modal('show');
-    $('.modal-body').scrollTop(0)
-
-    var queryString = encodeURIComponent(origQuery);
-    var serverPart = "http://cloud-scrutiny.appspot.com/command?table=demoevents&action=send_query&force=ColumnChart&q=";
-    var dataSourceUrl = serverPart + queryString;
-
-    //var dataSourceUrl = "http://node36.princeton.vicci.org:8000/analytics/bigquery/?avg=%25cpu&count=%25hostname&format=raw";
+function renderChart(newStyle, dialog, container, dataSourceUrl, yColumn, xColumn, aggFunc, options) {
+    if ( newStyle ) {
+        $(dialog).dialog("open");
+    }
+    else {
+        $(container).empty();
+        $(dialog).modal('show');
+        $('.modal-body').scrollTop(0);
+    }
+
+    startQuery(container, dataSourceUrl, yColumn, xColumn, aggFunc, options)
+}
 
-    var query = new google.visualization.Query(dataSourceUrl)
+function startQuery(container, dataSourceUrl, yColumn, xColumn, aggFunc, options) {
+    var query = new google.visualization.Query(dataSourceUrl);
     query && query.abort();
-    console.log("query.send")
-    query.send(function(response) {handleResponse_psg(response, yColumn, xColumn, title);});
-    console.log("query.sent")
+    query.send(function(response) {handleResponse_psg(container, dataSourceUrl, response, yColumn, xColumn, aggFunc, options);});
 }
 
 // NOTE: appended _psg to showLine() and handleResponse() to prevent conflict
 //       with Sapan's analytics page.
 
-function showLine_psg(dt, title) {
-    console.log("showline")
-    var lineChart = new google.visualization.ChartWrapper({
-          'chartType': 'LineChart',
-          'containerId': 'graph',
-          'options': {
+function agg_bandwidth(arr) {
+        var ret = 0;
+        for (var i = 0; i < arr.length; i++) {
+                ret+=arr[i]*8.0/1024.0/1024.0/1024.0;
+        }
+        return ret;
+}
+
+function showLine_psg(container, dt, options) {
+    console.log("showline_psg");
+
+    var base_options = {
             'width': 520,
             'height': 300,
-            'title': title,
            'pages': true,
            'numRows': 9,
             'backgroundColor': 'transparent',
-            'titleTextStyle': {"color": "white"},
+            'titleTextStyle': {"color": "black"},
             'legend': 'none',
-//            'legend': {"textStyle": {"color": "white"}},
-            'hAxis': {"baselineColor": "white",
-                      "textStyle": {"color": "white"}},
-            'vAxis': {"baselineColor": "white",
-                      "textStyle": {"color": "white"}},
-          },
-          'view': {'columns': [0, 1]}
+            'hAxis': {"baselineColor": "darkBlue",
+                      "textStyle": {"color": "black"}},
+            'vAxis': {"baselineColor": "darkBlue",
+                      "textStyle": {"color": "black"}},
+          }
+
+    options = $.extend(true, {}, base_options, options);
+
+    var lineChart = new google.visualization.ChartWrapper({
+          'chartType': 'LineChart',
+          'containerId': container.substring(1),
+          'view': {'columns': [0, 1]},
+          'options': options
         });
         lineChart.setDataTable(dt);
         lineChart.draw();
+
 }
 
 function fixDate(unixDate) {
     return new Date(unixDate*1000);
 }
 
-function handleResponse_psg(response, yColumn, xColumn, title) {
-    console.log("handleResponse")
+function fixDate2(unixDate) {
+    return new Date(unixDate);
+}
 
+function handleResponse_psg(container, dataSourceUrl, response, yColumn, xColumn, aggFunc, options) {
     var supportedClasses = {
                     'Table':google.visualization.Table,
                     'LineChart':google.visualization.LineChart,
@@ -63,6 +78,12 @@ function handleResponse_psg(response, yColumn, xColumn, title) {
                     'PieChart':google.visualization.PieChart,
                     'Histogram':google.visualization.Histogram};
 
+    if (response.isError()) {
+        #console.log("retry chart");
+        setTimeout(function () { startQuery(container, dataSourceUrl, yColumn, xColumn, aggFunc, options) }, 5000);
+        return
+    }
+
     var proxy = new google.visualization.ChartWrapper({
       'chartType': 'Table',
       'containerId': 'graph_work',
@@ -82,40 +103,22 @@ function handleResponse_psg(response, yColumn, xColumn, title) {
         var groupedData1 = google.visualization.data.group(dt, [{
            column: yColumn,
            type: 'datetime',
-           modifier: fixDate,
+           modifier: fixDate2,
            }],
            [{
             column: xColumn,
             type: 'number',
             label: dt.getColumnLabel(xColumn),
-            aggregation: google.visualization.data.sum}]);
-
-        showLine_psg(groupedData1, title);
+            aggregation: aggFunc}]);
 
-        console.log(xColumn);
+        console.log(groupedData1.getColumnRange(0))
+        console.log(groupedData1.getColumnRange(1))
+        showLine_psg(container, groupedData1, options);
     });
 
-    console.log(response.getReasons());
-    console.log(response.getDataTable());
-    console.log(response.getDetailedMessage());
-    console.log(response.getMessage());
-
     proxy.setDataTable(response.getDataTable());
 
     proxy.draw();
 }
 
-$('.nodesLabel, .nodesValue').click(function() {
-        var jsonData = window.pageAnalyticsData;
-        renderChart(jsonData.query, 0, 2, "Node Count");
-        //renderChartJson(jsonData, "MinuteTime", "count_hostname", "Node Count");
-});
-
-$('.cpuLabel, .cpuValue').click(function() {
-        var jsonData = window.pageAnalyticsData;
-        renderChart(jsonData.query, 0, 1, "Average CPU");
-});
-$('.bandwidthLabel, .bandwidthValue').click(function() {
-        var jsonData = window.pageBandData;
-        renderChart(jsonData.query, 0, 1, "Total Bandwidth");
-});
+