main.js - graph support from mtuity, modified to pull data from Cloud Scrutiny/Big Query
diff --git a/planetstack/core/static/main.js b/planetstack/core/static/main.js
new file mode 100644
index 0000000..f6f7475
--- /dev/null
+++ b/planetstack/core/static/main.js
@@ -0,0 +1,153 @@
+$(document).ready(function() {
+
+
+ function getServerData(url, label, value) {
+ var jqxhr = $.getJSON( url, function(data) {
+ if (value == 'nodesValue') {
+ var unit = '';
+ window.nodesCnt = data;
+ } else if (value == 'cpuValue'){
+ var unit = '%';
+ window.cpuCnt = data;
+ } else if (value == 'bandwidthValue'){
+ var unit = '';
+ window.bandData = data;
+ }
+ var legend = data.legend;
+ var data = data.data;
+ var dataLength = data.length - 1;
+ $('.'+label).text(legend).show();
+ $('.'+value).text(Math.round(data[dataLength][1])+unit).show();
+ })
+
+ }
+ var selectedNodeTxt = $('.currentOriginalNode').text();
+ selectedNodeTxt = selectedNodeTxt.trim();
+ selectedNodeTxt = selectedNodeTxt.split(' ').join('');//selectedNodeTxt.replace(" ", "")
+ var parentNodeTxt = $('.selectedMainNav').text();
+ parentNodeTxt = parentNodeTxt.replace("/\n","");
+ parentNodeTxt = parentNodeTxt.replace("»","");
+ parentNodeTxt = parentNodeTxt.trim();
+
+ baseNodeQuery = 'SELECT Minute(time) as Minute,COUNT(distinct %hostname) FROM [vicci.demoevents]';
+ baseCpuQuery = 'SELECT Minute(time) as Minute,AVG(i0) as Cpu FROM [vicci.demoevents]';
+ baseBwQuery = 'SELECT Minute(time) as Minute,AVG(i1) as Requests FROM [vicci.demoevents]';
+ groupByClause = ' GROUP BY Minute ORDER BY Minute';
+
+ if (selectedNodeTxt ) {
+ if (parentNodeTxt.length > 0 && parentNodeTxt.charAt(parentNodeTxt.length-1)=='s') {
+ parentNodeTxt = parentNodeTxt.substring(0, parentNodeTxt.length-1);
+ }
+ if (parentNodeTxt=='Slice') {
+ whereClause = " WHERE s3='"+selectedNodeTxt+"'";
+ }
+ else if (parentNodeTxt=='Site') {
+ whereClause = " WHERE s2='"+selectedNodeTxt+"' OR %hostname CONTAINS '"+selectedNodeTxt+"'";
+ }
+ else if (parentNodeTxt=='Node') {
+ whereClause = " WHERE %hostname='"+selectedNodeTxt+"'";
+ alert(whereClause);
+ } else {
+ console.log('Error: Unkown object type:'+parentNodeTxt)
+ }
+ } else {
+ whereClause = ''
+ }
+ finalNodeQuery = encodeURIComponent(baseNodeQuery + whereClause + groupByClause)
+ finalCpuQuery = encodeURIComponent(baseCpuQuery + whereClause + groupByClause)
+ finalBwQuery = encodeURIComponent(baseBwQuery + whereClause + groupByClause)
+ getServerData('http://cloud-scrutiny.appspot.com/command?action=send_query&legend=Node+Count&tqx=saber&q='+finalNodeQuery,'nodesLabel','nodesValue')
+ getServerData('http://cloud-scrutiny.appspot.com/command?action=send_query&legend=Load&tqx=saber&q='+finalCpuQuery,'cpuLabel','cpuValue')
+ getServerData('http://cloud-scrutiny.appspot.com/command?action=send_query&legend=Bandwidth&tqx=saber&q='+finalBwQuery,'bandwidthLabel','bandwidthValue')
+
+ $('.nodesLabel, .nodesValue').click(function() {
+ var jsonData = window.nodesCnt;
+ renderChart(jsonData);
+ });
+ $('.cpuLabel, .cpuValue').click(function() {
+ var jsonData = window.cpuCnt;
+ renderChart(jsonData);
+ });
+ $('.bandwidthLabel, .bandwidthValue').click(function() {
+ var jsonData = window.bandData;
+ renderChart(jsonData);
+ });
+
+ function renderChart(jsonData) {
+ $('#graph').empty();
+ $('#chartsModal').modal('show');
+ $('.modal-body').scrollTop(0)
+ var margin = {top: 0, right: 100, bottom: 100, left: 175},
+ width = 520 - margin.left - margin.right,
+ height = 300 - margin.top - margin.bottom;
+
+ var parseDate = d3.time.format("%Y-%m-%m-%H-%M").parse;
+
+ var x = d3.time.scale()
+ .range([0, width]);
+
+ var y = d3.scale.linear()
+ .range([height, 0]);
+
+ var xAxis = d3.svg.axis()
+ .scale(x)
+ .ticks(d3.time.minutes, 15)
+ .orient("bottom");
+
+ var yAxis = d3.svg.axis()
+ .scale(y)
+ .ticks(4)
+ .orient("left");
+
+ var line = d3.svg.line()
+ .x(function(d) { return x(d.date); })
+ .y(function(d) { return y(d.value); });
+
+ var svg = d3.select("#graph").append("svg")
+ .attr("width", width + margin.left + margin.right)
+ .attr("height", height + margin.top + margin.bottom)
+ .append("g")
+ .attr("transform", "translate(" + margin.left + "," + margin.top + ")");
+
+ /*var data_path = "http://sabertooth.cs.princeton.edu/graphs/UpNodes";
+ d3.json(data_path, function(error, input) {*/
+ //jsonData = JSON.stringify(eval("(" + jsonData + ")"));
+ data = jsonData.data;//input['data'];
+ legend = jsonData.legend;//input['legend']
+ $('#chartHeading').text(legend);
+ data.forEach(function(d) {
+ d.date = new Date(d[0]*1000);
+ d.value = +d[1];
+ });
+ x.domain(d3.extent(data, function(d) { return d.date; }));
+
+ var e = d3.extent(data, function(d) { return d.value;});
+ e = [e[0]-1,e[1]+1];
+
+ y.domain(e);
+
+ svg.append("g")
+ .attr("class", "x axis")
+ .attr("transform", "translate(0," + height + ")")
+ .attr("x", 5)
+ .call(xAxis);
+
+ svg.append("g")
+ .attr("class", "y axis")
+ .call(yAxis)
+ .append("text")
+ .attr("transform", "rotate(-90)")
+ .attr("y", 6)
+ .attr("dy", ".71em")
+ .style("text-anchor", "end")
+ .text(legend)
+ .attr("class", "legend");
+
+ svg.append("path")
+ .datum(data)
+ .attr("class", "line")
+ .attr("d", line);
+ //});
+ }
+
+})