@cryptotaxi247 / netdata-1 / commits / 03ef71ee5

javascript code cleanup

Costa Tsaousis (ktsaou) committed Apr 3, 2014 at 01:37 UTC 03ef71ee595651abbf21e7f515dd1a6ebfb5d6a9
2 files changed +53 -55
web/index.html
+15 -44
@@ -65,9 +65,6 @@
65
66 if(mainchart.chartOptions.isStacked) mainchart.group = 15;
67
68 - // calculate the time to refresh each chart
69 - mainchart.chart_update_every = mainchart.group * 1000; // milliseconds
70 -
68 // calculate how many point to show for each chart
69 mainchart.points_to_show = Math.round(mainchart.entries / mainchart.group) - 1;
70
@@ -95,13 +92,7 @@
92 return;
93 }
94
98 - var now = new Date().getTime();
99 -
100 - if((now - mainchart.last_updated) >= mainchart.chart_update_every) {
101 - refreshChart(mainchart, triggerRefresh);
102 - mainchart.last_updated = now;
103 - }
104 - else triggerRefresh();
95 + if(!refreshChart(mainchart, triggerRefresh)) triggerRefresh();
96 }
97
98 function screenWidth() {
@@ -174,13 +165,9 @@
165 // create an array for grouping all same-type graphs together
166 var categories = new Array();
167 $.each(mycharts, function(i, c) {
177 - c.last_updated = 0;
168 c.chartOptions.width = width;
169 c.chartOptions.height = height;
170
181 - // calculate the time to refresh each chart
182 - c.chart_update_every = c.group * 1000; // milliseconds
183 -
171 // calculate how many point to show for each chart
172 c.points_to_show = Math.round(c.entries / c.group) - 1;
173
@@ -201,7 +188,7 @@
188 }
189
190 if(j == categories.length) {
204 - var t = "(as " + c.group_method + " every " + (c.group*c.update_every) + " seconds)";
191 + var t = "(as " + c.group_method + " every " + (c.group * c.update_every) + " seconds)";
192 categories.push({name: c.type, title: c.category, description: t, priority: 0, count: 1, glyphicon: c.glyphicon, html: h});
193 }
194 }
@@ -238,41 +225,25 @@
225 });
226 }
227
241 - var last_mini = 0;
242 - function thumbChartsRefreshInternal(howmany) {
228 + var last_thumb_updated = 0;
229 + function thumbChartsRefresh() {
230 if(mycharts.length == 0 || mode != MODE_THUMBS) return;
231
245 - var now = new Date().getTime();
246 -
247 - // refresh the mini charts
248 - var wanted = howmany;
249 - var did = 0;
250 - var count = mycharts.length - 1;
251 - while(did < wanted && count >= 0) {
252 - count--;
253 - last_mini++;
254 - if(last_mini >= mycharts.length) last_mini = 0;
232 + // find a chart to refresh
233 + var orig = last_thumb_updated;
234 + last_thumb_updated++;
235 + if(last_thumb_updated >= mycharts.length) last_thumb_updated = 0;
236
256 - if(!mycharts[last_mini].enabled) continue;
257 - if((now - mycharts[last_mini].last_updated) < mycharts[last_mini].chart_update_every) continue;
237 + while(last_thumb_updated != orig) {
238 + if(refreshChart(mycharts[last_thumb_updated], chartsRefresh)) break;
239
259 - if(mycharts[last_mini].chart != null)
260 - if(mycharts[last_mini].chart.getSelection()[0]) continue;
261 -
262 - if($('#' + mycharts[last_mini].div).visible(true) == false) continue;
263 -
264 - refreshChart(mycharts[last_mini], chartsRefresh);
265 - mycharts[last_mini].last_updated = now;
266 -
267 - did++;
240 + last_thumb_updated++;
241 + if(last_thumb_updated >= mycharts.length) last_thumb_updated = 0;
242 }
243
270 - if(did == 0) triggerRefresh();
271 - }
272 -
273 - // default thumbs charts refresh
274 - function thumbChartsRefresh() {
275 - thumbChartsRefreshInternal(1);
244 + // no chart refreshed
245 + if(last_thumb_updated == orig)
246 + triggerRefresh();
247 }
248
249 // refresh the proper chart
web/netdata.js
+38 -11
@@ -4,16 +4,28 @@ if(!window.console){ window.console = {log: function(){} }; }
4 // Load the Visualization API and the piechart package.
5 google.load('visualization', '1', {'packages':['corechart']});
6
7 +function canChartBeRefreshed(chart) {
8 + // is it enabled?
9 + if(!chart.enabled) return false;
10 +
11 + // is there something selected on the chart?
12 + if(chart.chart && chart.chart.getSelection()[0]) return false;
13 +
14 + // is it too soon for a refresh?
15 + var now = new Date().getTime();
16 + if((now - chart.last_updated) < (chart.group * chart.update_every * 1000)) return false;
17 +
18 + // is the chart in the visible area?
19 + if($('#' + chart.div).visible(true) == false) return false;
20 +
21 + // ok, do it
22 + return true;
23 +}
24 +
25 function refreshChart(chart, doNext) {
8 - chart.refreshCount++;
9 -
10 - if(chart.chart != null) {
11 - if(chart.chart.getSelection()[0]) {
12 - if(typeof doNext == "function") doNext();
13 - return;
14 - }
15 - }
16 -
26 + if(canChartBeRefreshed(chart) == false) return false;
27 +
28 + // build the data URL
29 var url = chart.url;
30 url += chart.points_to_show?chart.points_to_show.toString():"all";
31 url += "/";
@@ -48,11 +60,17 @@ function refreshChart(chart, doNext) {
60 chart.chart = new google.visualization.AreaChart(document.getElementById(chart.div));
61 }
62
51 - if(chart.chart) chart.chart.draw(chart.datatable, chart.chartOptions);
63 + if(chart.chart) {
64 + chart.chart.draw(chart.datatable, chart.chartOptions);
65 + chart.refreshCount++;
66 + chart.last_updated = new Date().getTime();
67 + }
68 else console.log('Cannot create chart for ' + chart.url);
69
70 if(typeof doNext == "function") doNext();
71 });
72 +
73 + return true;
74 }
75
76 // loadCharts()
@@ -71,6 +89,10 @@ function loadCharts(doNext) {
89 json.charts[i].div = json.charts[i].div.replace(/\-/g,"_");
90 json.charts[i].div = json.charts[i].div + "_div";
91
92 + // make sure we have the proper values
93 + if(!json.charts[i].update_every) chart.update_every = 1;
94 +
95 + json.charts[i].last_updated = 0;
96 json.charts[i].thumbnail = false;
97 json.charts[i].refreshCount = 0;
98 json.charts[i].group = 1;
@@ -92,6 +114,8 @@ function loadCharts(doNext) {
114
115 // set default chart options
116 json.charts[i].chartOptions = {
117 + width: 400,
118 + height: 200,
119 lineWidth: 2,
120 title: json.charts[i].title,
121 hAxis: {title: "Time of Day", viewWindowMode: 'maximized', format:'HH:mm:ss'},
@@ -215,7 +239,10 @@ function addChart(name, div, width, height, jsonurl, title, vtitle) {
239 charts[i].div = div;
240
241 charts[i].refreshCount = 0;
218 - charts[i].thumbnail = false;
242 + charts[i].update_every = 1;
243 + charts[i].last_updated = 0;
244 + charts[i].enabled = true;
245 + charts[i].group = 1;
246
247 charts[i].chart = null;
248 charts[i].jsondata = null;