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;