fnordmetric 0.5.5 → 0.5.6
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +335 -0
- data/VERSION +1 -1
- data/fnordmetric.gemspec +7 -4
- data/haml/app.haml +6 -1
- data/lib/fnordmetric.rb +1 -1
- data/lib/fnordmetric/app.rb +5 -1
- data/lib/fnordmetric/inbound_stream.rb +1 -1
- data/lib/fnordmetric/worker.rb +1 -1
- data/pub/fnordmetric.css +10 -2
- data/pub/fnordmetric.js +138 -133
- metadata +166 -158
- data/readme.rdoc +0 -337
data/pub/fnordmetric.css
CHANGED
@@ -1,9 +1,17 @@
|
|
1
1
|
body, html{ height:100%; padding:0px;}
|
2
2
|
body{ background:#3b3e45; color:#333; margin:0; padding:0; overflow-y:scroll; font: 12px/20px "Helvetica Neue", Helvetica, Arial, sans-serif; }
|
3
3
|
|
4
|
-
.
|
4
|
+
.shown{ display: block; }
|
5
|
+
.hidden{ display: none; }
|
5
6
|
|
6
|
-
|
7
|
+
.topbar{ height:38px; background:#24272c; position:fixed; top:0px; width:100%;}
|
8
|
+
.topbar ul { list-style-type:none; margin:0; }
|
9
|
+
.topbar ul li { padding: 5px 10px 5px 10px; background-color:#3b3e45; display:inline; height:38px; line-height:38px; border-radius:3px; margin-right:5px;}
|
10
|
+
.topbar ul li a { color:#ccc; font-size:13px; text-decoration:none; }
|
11
|
+
.topbar ul li a:hover { color:#fff; }
|
12
|
+
.topbar ul li.active a { color:#fff; }
|
13
|
+
|
14
|
+
#wrap{ margin:25px 20px; }
|
7
15
|
|
8
16
|
#tabs{ width:150px; position:fixed; height:100%; margin-top:70px; }
|
9
17
|
#tabs ul{ list-style-type:none; padding:0; margin:0; width:156px;}
|
data/pub/fnordmetric.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
var FnordMetric = (function(){
|
2
|
-
|
2
|
+
|
3
3
|
var canvasElem = false;
|
4
4
|
|
5
5
|
var currentNamespace = false;
|
@@ -33,7 +33,7 @@ var FnordMetric = (function(){
|
|
33
33
|
return parseInt(range/(3600*24)) + ' days';
|
34
34
|
}
|
35
35
|
}
|
36
|
-
|
36
|
+
|
37
37
|
function formatTimeSince(time){
|
38
38
|
var now = new Date().getTime()/1000;
|
39
39
|
var since = now - time;
|
@@ -57,13 +57,13 @@ var FnordMetric = (function(){
|
|
57
57
|
}
|
58
58
|
|
59
59
|
function formatValue(value){
|
60
|
-
if(value < 10){
|
61
|
-
return value.toFixed(2);
|
62
|
-
} else if(value > 1000){
|
63
|
-
return (value/1000.0).toFixed(1) + "k";
|
60
|
+
if(value < 10){
|
61
|
+
return value.toFixed(2);
|
62
|
+
} else if(value > 1000){
|
63
|
+
return (value/1000.0).toFixed(1) + "k";
|
64
64
|
} else {
|
65
|
-
return value.toFixed(0);
|
66
|
-
}
|
65
|
+
return value.toFixed(0);
|
66
|
+
}
|
67
67
|
}
|
68
68
|
|
69
69
|
function getNextWidgetUID(){
|
@@ -95,8 +95,8 @@ var FnordMetric = (function(){
|
|
95
95
|
.attr('rel', k)
|
96
96
|
.append(
|
97
97
|
$('<span></span>').html(opts.gauges[k].title)
|
98
|
-
).click(function(){
|
99
|
-
loadGauge($(this).attr('rel'));
|
98
|
+
).click(function(){
|
99
|
+
loadGauge($(this).attr('rel'));
|
100
100
|
}
|
101
101
|
)
|
102
102
|
);
|
@@ -116,15 +116,15 @@ var FnordMetric = (function(){
|
|
116
116
|
|
117
117
|
$('body').bind('fm_dashboard_close', function(){
|
118
118
|
window.clearInterval(autoupdate_interval);
|
119
|
-
});
|
119
|
+
});
|
120
120
|
}
|
121
121
|
};
|
122
|
-
|
122
|
+
|
123
123
|
function loadGauge(gkey, silent){
|
124
124
|
if(!gkey){ gkey = current_gauge; }
|
125
125
|
current_gauge = gkey;
|
126
126
|
if(!silent){ $('.toplist_inner', opts.elem).addClass('loading'); }
|
127
|
-
var _url = '/' + currentNamespace + '/gauge/' + gkey;
|
127
|
+
var _url = FnordMetric.p + '/' + currentNamespace + '/gauge/' + gkey;
|
128
128
|
$.get(_url, function(_resp){
|
129
129
|
var resp = JSON.parse(_resp);
|
130
130
|
renderGauge(gkey, resp);
|
@@ -147,14 +147,14 @@ var FnordMetric = (function(){
|
|
147
147
|
|
148
148
|
|
149
149
|
return {
|
150
|
-
render: render
|
150
|
+
render: render
|
151
151
|
};
|
152
152
|
|
153
153
|
};
|
154
154
|
|
155
155
|
var numbersWidget = function(){
|
156
156
|
|
157
|
-
|
157
|
+
|
158
158
|
function render(opts){
|
159
159
|
|
160
160
|
opts.elem.append(
|
@@ -165,20 +165,20 @@ var FnordMetric = (function(){
|
|
165
165
|
});
|
166
166
|
|
167
167
|
for(k in opts.gauges){
|
168
|
-
var gtick = parseInt(opts.gauges[k].tick);
|
168
|
+
var gtick = parseInt(opts.gauges[k].tick);
|
169
169
|
var gtitle = opts.gauges[k].title;
|
170
170
|
|
171
171
|
var container = $('<div></div>')
|
172
172
|
.addClass('numbers_container')
|
173
173
|
.addClass('size_'+opts.offsets.length)
|
174
|
-
.attr('rel', k)
|
174
|
+
.attr('rel', k)
|
175
175
|
.append(
|
176
176
|
$('<div></div>')
|
177
177
|
.addClass('title')
|
178
178
|
.html(gtitle)
|
179
179
|
);
|
180
180
|
|
181
|
-
|
181
|
+
|
182
182
|
$(opts.offsets).each(function(n, offset){
|
183
183
|
var _off, _nextoff, _sum;
|
184
184
|
if (offset[0]=="s"){
|
@@ -187,8 +187,8 @@ var FnordMetric = (function(){
|
|
187
187
|
} else {
|
188
188
|
_sum = 0;
|
189
189
|
_off = offset*gtick;
|
190
|
-
_nextoff = gtick;
|
191
|
-
}
|
190
|
+
_nextoff = gtick;
|
191
|
+
}
|
192
192
|
container.append(
|
193
193
|
$('<div></div>')
|
194
194
|
.addClass('number')
|
@@ -218,14 +218,14 @@ var FnordMetric = (function(){
|
|
218
218
|
|
219
219
|
$('body').bind('fm_dashboard_close', function(){
|
220
220
|
window.clearInterval(autoupdate_interval);
|
221
|
-
});
|
221
|
+
});
|
222
222
|
|
223
223
|
}
|
224
224
|
|
225
225
|
};
|
226
226
|
|
227
227
|
updateValues(opts);
|
228
|
-
|
228
|
+
|
229
229
|
}
|
230
230
|
|
231
231
|
function updateValues(opts){
|
@@ -235,15 +235,15 @@ var FnordMetric = (function(){
|
|
235
235
|
var _sum = parseInt($(this).attr('data-sum'));
|
236
236
|
var num = this;
|
237
237
|
var at = parseInt(new Date().getTime()/1000);
|
238
|
-
var url = '/' + currentNamespace + '/gauge/' + $(this).attr('rel');
|
238
|
+
var url = FnordMetric.p + '/' + currentNamespace + '/gauge/' + $(this).attr('rel');
|
239
239
|
if(_sum > 0){
|
240
240
|
url += '?at='+(at-_sum)+'-'+at+'&sum=true';
|
241
241
|
} else {
|
242
242
|
at -= parseInt($(this).attr('data-offset'));
|
243
243
|
url += '?at='+at;
|
244
244
|
}
|
245
|
-
|
246
|
-
$.get(url, function(_resp){
|
245
|
+
|
246
|
+
$.get(url, function(_resp){
|
247
247
|
var resp = JSON.parse(_resp);
|
248
248
|
for(_k in resp){
|
249
249
|
$(num).attr('data', (resp[_k]||0));
|
@@ -261,9 +261,9 @@ var FnordMetric = (function(){
|
|
261
261
|
var target_val = parseFloat($(this).attr('data'));
|
262
262
|
var current_val = parseFloat($(this).attr('data-current'));
|
263
263
|
if(!current_val){ current_val=0; }
|
264
|
-
var diff = (target_val-current_val)/diff_factor;
|
264
|
+
var diff = (target_val-current_val)/diff_factor;
|
265
265
|
if(diff < 1){ diff=1; }
|
266
|
-
if(target_val > current_val){
|
266
|
+
if(target_val > current_val){
|
267
267
|
still_running = true;
|
268
268
|
var new_val = current_val+diff;
|
269
269
|
if(new_val > target_val){ new_val = target_val; }
|
@@ -271,7 +271,7 @@ var FnordMetric = (function(){
|
|
271
271
|
$('.value', this).html(formatValue(new_val));
|
272
272
|
}
|
273
273
|
});
|
274
|
-
if(still_running){
|
274
|
+
if(still_running){
|
275
275
|
(function(df){
|
276
276
|
window.setTimeout(function(){ updateDisplay(opts, df); }, 30);
|
277
277
|
})(diff_factor);
|
@@ -279,53 +279,53 @@ var FnordMetric = (function(){
|
|
279
279
|
}
|
280
280
|
|
281
281
|
return {
|
282
|
-
render: render
|
282
|
+
render: render
|
283
283
|
};
|
284
284
|
|
285
285
|
};
|
286
286
|
|
287
287
|
var timelineWidget = function(){
|
288
|
-
|
288
|
+
|
289
289
|
function render(opts){
|
290
|
-
|
290
|
+
|
291
291
|
var widget_uid = getNextWidgetUID();
|
292
292
|
var chart=false;
|
293
293
|
var max_y=0;
|
294
294
|
|
295
295
|
function redrawWithRange(first_time, silent){
|
296
296
|
if(!silent){ $(opts.elem).css('opacity', 0.5); }
|
297
|
-
redrawDatepicker();
|
298
|
-
var _query = '?at='+opts.start_timestamp+'-'+opts.end_timestamp;
|
297
|
+
redrawDatepicker();
|
298
|
+
var _query = '?at='+opts.start_timestamp+'-'+opts.end_timestamp;
|
299
299
|
//chart.series = [];
|
300
300
|
max_y=0;
|
301
301
|
//metrics_completed = 0;
|
302
302
|
$(opts.gauges).each(function(i,gauge){
|
303
303
|
$.ajax({
|
304
|
-
url: '/'+currentNamespace+'/gauge/'+gauge+_query,
|
304
|
+
url: FnordMetric.p + '/' + currentNamespace +'/gauge/'+gauge+_query,
|
305
305
|
success: redrawGauge(first_time, gauge)
|
306
|
-
});
|
306
|
+
});
|
307
307
|
});
|
308
308
|
}
|
309
309
|
|
310
310
|
function redrawGauge(first_time, gauge){
|
311
|
-
return (function(json){
|
311
|
+
return (function(json){
|
312
312
|
var raw_data = JSON.parse(json);
|
313
313
|
var series_data = [];
|
314
314
|
|
315
|
-
for(p in raw_data){
|
316
|
-
series_data.push([parseInt(p)*1000, raw_data[p]||0]);
|
315
|
+
for(p in raw_data){
|
316
|
+
series_data.push([parseInt(p)*1000, raw_data[p]||0]);
|
317
317
|
max_y = Math.max(max_y, raw_data[p]);
|
318
318
|
}
|
319
|
-
|
320
|
-
if(!first_time){
|
321
|
-
chart.get('series-'+gauge).setData(series_data);
|
319
|
+
|
320
|
+
if(!first_time){
|
321
|
+
chart.get('series-'+gauge).setData(series_data);
|
322
322
|
} else {
|
323
323
|
chart.addSeries({
|
324
|
-
name: opts.gauge_titles[gauge],
|
325
|
-
data: series_data,
|
326
|
-
id: 'series-'+gauge
|
327
|
-
});
|
328
|
-
}
|
324
|
+
name: opts.gauge_titles[gauge],
|
325
|
+
data: series_data,
|
326
|
+
id: 'series-'+gauge
|
327
|
+
});
|
328
|
+
}
|
329
329
|
|
330
330
|
chart.yAxis[0].setExtremes(0,max_y);
|
331
331
|
chart.redraw();
|
@@ -337,9 +337,9 @@ var FnordMetric = (function(){
|
|
337
337
|
|
338
338
|
function redrawDatepicker(){
|
339
339
|
$('.datepicker', opts.elem).html(
|
340
|
-
Highcharts.dateFormat('%d.%m.%y %H:%M', parseInt(opts.start_timestamp)*1000) +
|
340
|
+
Highcharts.dateFormat('%d.%m.%y %H:%M', parseInt(opts.start_timestamp)*1000) +
|
341
341
|
' ‐ ' +
|
342
|
-
Highcharts.dateFormat('%d.%m.%y %H:%M', parseInt(opts.end_timestamp)*1000)
|
342
|
+
Highcharts.dateFormat('%d.%m.%y %H:%M', parseInt(opts.end_timestamp)*1000)
|
343
343
|
);
|
344
344
|
}
|
345
345
|
|
@@ -349,7 +349,7 @@ var FnordMetric = (function(){
|
|
349
349
|
opts.end_timestamp += v;
|
350
350
|
redrawWithRange();
|
351
351
|
}
|
352
|
-
|
352
|
+
|
353
353
|
function drawLayout(){
|
354
354
|
$(opts.elem).append( $('<div></div>').attr('class', 'headbar').append(
|
355
355
|
$('<div></div>').attr('class', 'button mr').append($('<span></span>').html('refresh')).click(
|
@@ -367,7 +367,7 @@ var FnordMetric = (function(){
|
|
367
367
|
)
|
368
368
|
).append(
|
369
369
|
$('<h2></h2>').html(opts.title)
|
370
|
-
) ).append(
|
370
|
+
) ).append(
|
371
371
|
$('<div></div>').attr('id', 'container-'+widget_uid).css({
|
372
372
|
height: 256,
|
373
373
|
marginBottom: 20,
|
@@ -377,21 +377,21 @@ var FnordMetric = (function(){
|
|
377
377
|
}
|
378
378
|
|
379
379
|
function drawChart(){
|
380
|
-
chart = new Highcharts.Chart({
|
381
|
-
chart: {
|
382
|
-
renderTo: 'container-'+widget_uid,
|
383
|
-
defaultSeriesType: opts.plot_style,
|
384
|
-
height: 270
|
380
|
+
chart = new Highcharts.Chart({
|
381
|
+
chart: {
|
382
|
+
renderTo: 'container-'+widget_uid,
|
383
|
+
defaultSeriesType: opts.plot_style,
|
384
|
+
height: 270
|
385
385
|
},
|
386
386
|
series: [],
|
387
387
|
title: { text: '' },
|
388
|
-
xAxis: {
|
388
|
+
xAxis: {
|
389
389
|
type: 'datetime',
|
390
|
-
tickInterval: opts.tick * 1000,
|
391
|
-
title: (opts.x_title||''),
|
392
|
-
labels: { step: 2 }
|
390
|
+
tickInterval: opts.tick * 1000,
|
391
|
+
title: (opts.x_title||''),
|
392
|
+
labels: { step: 2 }
|
393
393
|
},
|
394
|
-
yAxis: {
|
394
|
+
yAxis: {
|
395
395
|
title: (opts.y_title||''),
|
396
396
|
min: 0,
|
397
397
|
max: 1000
|
@@ -437,7 +437,7 @@ var FnordMetric = (function(){
|
|
437
437
|
|
438
438
|
$('body').bind('fm_dashboard_close', function(){
|
439
439
|
window.clearInterval(autoupdate_interval);
|
440
|
-
});
|
440
|
+
});
|
441
441
|
|
442
442
|
}
|
443
443
|
};
|
@@ -445,16 +445,16 @@ var FnordMetric = (function(){
|
|
445
445
|
}
|
446
446
|
|
447
447
|
return {
|
448
|
-
render: render
|
448
|
+
render: render
|
449
449
|
};
|
450
450
|
|
451
451
|
};
|
452
452
|
|
453
453
|
|
454
454
|
var barsWidget = function(){
|
455
|
-
|
455
|
+
|
456
456
|
function render(opts){
|
457
|
-
|
457
|
+
|
458
458
|
var widget_uid = getNextWidgetUID();
|
459
459
|
var chart=false;
|
460
460
|
var max_y=0;
|
@@ -464,14 +464,14 @@ var FnordMetric = (function(){
|
|
464
464
|
max_y=0;
|
465
465
|
$(opts.gauges).each(function(i,gauge){
|
466
466
|
$.ajax({
|
467
|
-
url: '/'+currentNamespace+'/gauge/'+gauge,
|
467
|
+
url: FnordMetric.p + '/' + currentNamespace +'/gauge/'+gauge,
|
468
468
|
success: redrawGauge(first_time, gauge)
|
469
|
-
});
|
469
|
+
});
|
470
470
|
});
|
471
471
|
}
|
472
472
|
|
473
473
|
function redrawGauge(first_time, gauge){
|
474
|
-
return (function(json){
|
474
|
+
return (function(json){
|
475
475
|
var raw_data = JSON.parse(json);
|
476
476
|
var series_data = [];
|
477
477
|
var series_type;
|
@@ -487,28 +487,28 @@ var FnordMetric = (function(){
|
|
487
487
|
raw_data.values.sort(function(a,b){
|
488
488
|
if(a[0] == b[0]){
|
489
489
|
return 0;
|
490
|
-
}else if(a[0] > b[0]){
|
490
|
+
}else if(a[0] > b[0]){
|
491
491
|
return 1;
|
492
492
|
} else {
|
493
493
|
return -1;
|
494
494
|
}
|
495
495
|
});
|
496
496
|
}
|
497
|
-
|
498
|
-
for(p in raw_data.values){
|
499
|
-
label_data.push(raw_data.values[p][0]||'?');
|
500
|
-
series_data.push(parseInt(raw_data.values[p][1]||0));
|
497
|
+
|
498
|
+
for(p in raw_data.values){
|
499
|
+
label_data.push(raw_data.values[p][0]||'?');
|
500
|
+
series_data.push(parseInt(raw_data.values[p][1]||0));
|
501
501
|
//max_y = Math.max(max_y, raw_data[p]);
|
502
502
|
}
|
503
|
-
|
504
|
-
chart = new Highcharts.Chart({
|
505
|
-
chart: {
|
506
|
-
renderTo: 'container-'+widget_uid,
|
507
|
-
defaultSeriesType: series_type,
|
508
|
-
height: 270
|
503
|
+
|
504
|
+
chart = new Highcharts.Chart({
|
505
|
+
chart: {
|
506
|
+
renderTo: 'container-'+widget_uid,
|
507
|
+
defaultSeriesType: series_type,
|
508
|
+
height: 270
|
509
509
|
},
|
510
510
|
title: { text: '' },
|
511
|
-
xAxis: {
|
511
|
+
xAxis: {
|
512
512
|
categories: label_data
|
513
513
|
},
|
514
514
|
yAxis: {
|
@@ -540,7 +540,7 @@ var FnordMetric = (function(){
|
|
540
540
|
$(opts.elem).css('opacity', 1);
|
541
541
|
});
|
542
542
|
}
|
543
|
-
|
543
|
+
|
544
544
|
function drawLayout(){
|
545
545
|
$(opts.elem).append( $('<div></div>').attr('class', 'headbar').append(
|
546
546
|
$('<div></div>').attr('class', 'button mr').append($('<span></span>').html('refresh')).click(
|
@@ -548,7 +548,7 @@ var FnordMetric = (function(){
|
|
548
548
|
)
|
549
549
|
).append(
|
550
550
|
$('<h2></h2>').html(opts.title)
|
551
|
-
) ).append(
|
551
|
+
) ).append(
|
552
552
|
$('<div></div>').attr('id', 'container-'+widget_uid).css({
|
553
553
|
height: 256,
|
554
554
|
marginBottom: 20,
|
@@ -560,29 +560,29 @@ var FnordMetric = (function(){
|
|
560
560
|
drawLayout();
|
561
561
|
redraw(true);
|
562
562
|
|
563
|
-
if(opts.autoupdate){
|
563
|
+
if(opts.autoupdate){
|
564
564
|
var autoupdate_interval = window.setInterval(function(){
|
565
565
|
redraw(false, true);
|
566
566
|
}, opts.autoupdate*1000);
|
567
567
|
|
568
568
|
$('body').bind('fm_dashboard_close', function(){
|
569
569
|
window.clearInterval(autoupdate_interval);
|
570
|
-
});
|
570
|
+
});
|
571
571
|
}
|
572
572
|
|
573
573
|
}
|
574
574
|
|
575
575
|
return {
|
576
|
-
render: render
|
576
|
+
render: render
|
577
577
|
};
|
578
578
|
|
579
579
|
};
|
580
580
|
|
581
581
|
|
582
582
|
var pieWidget = function(){
|
583
|
-
|
583
|
+
|
584
584
|
function render(opts){
|
585
|
-
|
585
|
+
|
586
586
|
var widget_uid = getNextWidgetUID();
|
587
587
|
var chart=false;
|
588
588
|
|
@@ -593,36 +593,36 @@ var FnordMetric = (function(){
|
|
593
593
|
var at = parseInt(new Date().getTime()/1000);
|
594
594
|
$(opts.gauges).each(function(i,gauge){
|
595
595
|
$.ajax({
|
596
|
-
url: '/'+currentNamespace+'/gauge/'+gauge+'?at='+at,
|
596
|
+
url: FnordMetric.p + '/' + currentNamespace+'/gauge/'+gauge+'?at='+at,
|
597
597
|
success: function(_resp){
|
598
598
|
var resp = JSON.parse(_resp);
|
599
599
|
gauges_left -= 1;
|
600
|
-
for(_tk in resp){
|
600
|
+
for(_tk in resp){
|
601
601
|
gauge_values[gauge] = parseInt(resp[_tk]||0);
|
602
602
|
}
|
603
603
|
if(gauges_left==0){
|
604
604
|
redrawChart(first_time, gauge_values);
|
605
605
|
}
|
606
606
|
}
|
607
|
-
});
|
607
|
+
});
|
608
608
|
});
|
609
609
|
}
|
610
610
|
|
611
|
-
function redrawChart(first_time, gauge_values){
|
612
|
-
|
611
|
+
function redrawChart(first_time, gauge_values){
|
612
|
+
|
613
613
|
var series_data = [];
|
614
|
-
|
614
|
+
|
615
615
|
for(_gkey in gauge_values){
|
616
616
|
series_data.push([
|
617
617
|
opts.gauge_titles[_gkey],
|
618
618
|
gauge_values[_gkey]
|
619
619
|
]);
|
620
|
-
}
|
621
|
-
|
622
|
-
chart = new Highcharts.Chart({
|
623
|
-
chart: {
|
624
|
-
renderTo: 'container-'+widget_uid,
|
625
|
-
defaultSeriesType: 'pie',
|
620
|
+
}
|
621
|
+
|
622
|
+
chart = new Highcharts.Chart({
|
623
|
+
chart: {
|
624
|
+
renderTo: 'container-'+widget_uid,
|
625
|
+
defaultSeriesType: 'pie',
|
626
626
|
height: 270,
|
627
627
|
spacingTop: 5,
|
628
628
|
spacingBottom: 30
|
@@ -664,11 +664,11 @@ var FnordMetric = (function(){
|
|
664
664
|
//chart.redraw();
|
665
665
|
$(opts.elem).css('opacity', 1);
|
666
666
|
}
|
667
|
-
|
667
|
+
|
668
668
|
function drawLayout(){
|
669
669
|
$(opts.elem).append( $('<div></div>').attr('class', 'headbar small').append(
|
670
670
|
$('<span></span>').html(opts.title)
|
671
|
-
) ).append(
|
671
|
+
) ).append(
|
672
672
|
$('<div></div>').attr('id', 'container-'+widget_uid).css({
|
673
673
|
height: 270
|
674
674
|
})
|
@@ -678,27 +678,27 @@ var FnordMetric = (function(){
|
|
678
678
|
drawLayout();
|
679
679
|
redraw(true);
|
680
680
|
|
681
|
-
if(opts.autoupdate){
|
681
|
+
if(opts.autoupdate){
|
682
682
|
var autoupdate_interval = window.setInterval(function(){
|
683
683
|
redraw(false, true);
|
684
684
|
}, opts.autoupdate*1000);
|
685
685
|
|
686
686
|
$('body').bind('fm_dashboard_close', function(){
|
687
687
|
window.clearInterval(autoupdate_interval);
|
688
|
-
});
|
688
|
+
});
|
689
689
|
}
|
690
690
|
|
691
691
|
}
|
692
692
|
|
693
693
|
return {
|
694
|
-
render: render
|
694
|
+
render: render
|
695
695
|
};
|
696
696
|
|
697
697
|
};
|
698
698
|
|
699
699
|
|
700
700
|
var sessionView = (function(){
|
701
|
-
|
701
|
+
|
702
702
|
var listElem = $('<ul class="session_list"></ul>');
|
703
703
|
var feedInnerElem = $('<ul class="feed_inner"></ul>');
|
704
704
|
var typeListElem = $('<ul class="event_type_list"></ul>');
|
@@ -745,7 +745,7 @@ var FnordMetric = (function(){
|
|
745
745
|
function doSessionPoll(){
|
746
746
|
return (function(){
|
747
747
|
$.ajax({
|
748
|
-
url: '/'+currentNamespace+'/sessions',
|
748
|
+
url: FnordMetric.p + '/' + currentNamespace+'/sessions',
|
749
749
|
success: callbackSessionPoll()
|
750
750
|
});
|
751
751
|
});
|
@@ -754,7 +754,7 @@ var FnordMetric = (function(){
|
|
754
754
|
function loadEventHistory(event_type){
|
755
755
|
feedInnerElem.html('');
|
756
756
|
$.ajax({
|
757
|
-
url: '/'+currentNamespace+'/events?type='+event_type,
|
757
|
+
url: FnordMetric.p + '/' + currentNamespace+'/events?type='+event_type,
|
758
758
|
success: function(_data, _status){
|
759
759
|
var data = JSON.parse(_data).events;
|
760
760
|
for(var n=data.length; n >= 0; n--){
|
@@ -767,7 +767,7 @@ var FnordMetric = (function(){
|
|
767
767
|
function callbackSessionPoll(){
|
768
768
|
return (function(_data, _status){
|
769
769
|
$.each(JSON.parse(_data).sessions, function(i,v){
|
770
|
-
updateSession(v);
|
770
|
+
updateSession(v);
|
771
771
|
});
|
772
772
|
sortSessions();
|
773
773
|
});
|
@@ -775,11 +775,13 @@ var FnordMetric = (function(){
|
|
775
775
|
|
776
776
|
function loadEventTypes(){
|
777
777
|
$.ajax({
|
778
|
-
url: '/'+currentNamespace+'/event_types',
|
778
|
+
url: FnordMetric.p + '/' + currentNamespace+'/event_types',
|
779
779
|
success: function(_data){
|
780
780
|
var data = JSON.parse(_data);
|
781
781
|
$(data.types).each(function(i,v){
|
782
|
-
if(v.slice(0,5)!='_set_'){
|
782
|
+
if((v.length > 0) && (v.slice(0,5)!='_set_')){
|
783
|
+
addEventType(v,v);
|
784
|
+
}
|
783
785
|
});
|
784
786
|
}
|
785
787
|
});
|
@@ -789,10 +791,10 @@ var FnordMetric = (function(){
|
|
789
791
|
typeListElem.append(
|
790
792
|
$('<li class="event_type"></li>').append(
|
791
793
|
$('<span class="history"></span>').html('history')
|
792
|
-
.click(function(){
|
794
|
+
.click(function(){
|
793
795
|
$('.event_type_list .event_type input').attr('checked', false);
|
794
796
|
$('input', $(this).parent()).attr('checked', true);
|
795
|
-
updateEventFilter(); loadEventHistory(type);
|
797
|
+
updateEventFilter(); loadEventHistory(type);
|
796
798
|
})
|
797
799
|
).append(
|
798
800
|
$('<input type="checkbox" />').attr('checked', true)
|
@@ -814,9 +816,9 @@ var FnordMetric = (function(){
|
|
814
816
|
}
|
815
817
|
|
816
818
|
function doEventsPoll(){
|
817
|
-
return (function(){
|
819
|
+
return (function(){
|
818
820
|
$.ajax({
|
819
|
-
url: '/'+currentNamespace+'/events?since='+eventsPolledUntil,
|
821
|
+
url: FnordMetric.p + '/' + currentNamespace+'/events?since='+eventsPolledUntil,
|
820
822
|
success: callbackEventsPoll()
|
821
823
|
});
|
822
824
|
});
|
@@ -828,15 +830,15 @@ var FnordMetric = (function(){
|
|
828
830
|
var events = data.events;
|
829
831
|
var timout = 1000;
|
830
832
|
var maxevents = 200;
|
831
|
-
if(events.length > 0){
|
832
|
-
timeout = 200;
|
833
|
+
if(events.length > 0){
|
834
|
+
timeout = 200;
|
833
835
|
eventsPolledUntil = parseInt(events[0]._time)-1;
|
834
836
|
}
|
835
837
|
for(var n=events.length-1; n >= 0; n--){
|
836
838
|
var v = events[n];
|
837
839
|
if(eventsFilter.indexOf(v._type) == -1){
|
838
840
|
if(parseInt(v._time)<=eventsPolledUntil){
|
839
|
-
renderEvent(v);
|
841
|
+
renderEvent(v);
|
840
842
|
}
|
841
843
|
}
|
842
844
|
};
|
@@ -874,21 +876,21 @@ var FnordMetric = (function(){
|
|
874
876
|
if(session_name){
|
875
877
|
$('.name', session_elem).html(session_name);
|
876
878
|
}
|
877
|
-
|
879
|
+
|
878
880
|
$('.time', session_elem).html(session_time);
|
879
881
|
|
880
882
|
} else {
|
881
|
-
|
883
|
+
|
882
884
|
var session_picture = $('<img width="18" />');
|
883
885
|
|
884
|
-
if(!session_name){
|
886
|
+
if(!session_name){
|
885
887
|
session_name = session_data["session_key"].substr(0,15)
|
886
888
|
};
|
887
889
|
|
888
|
-
if(session_data["_picture"]){
|
890
|
+
if(session_data["_picture"]){
|
889
891
|
session_picture.attr('src', session_data["_picture"]);
|
890
892
|
};
|
891
|
-
|
893
|
+
|
892
894
|
listElem.append(
|
893
895
|
$('<li class="session"></li>').append(
|
894
896
|
$('<div class="picture"></div>').html(session_picture)
|
@@ -909,7 +911,7 @@ var FnordMetric = (function(){
|
|
909
911
|
var event_picture = $('<div class="picture"></picture>');
|
910
912
|
|
911
913
|
var event_type = event_data._type;
|
912
|
-
|
914
|
+
|
913
915
|
if(!event_type){ return true; }
|
914
916
|
|
915
917
|
if(event_data._message){
|
@@ -923,15 +925,15 @@ var FnordMetric = (function(){
|
|
923
925
|
}
|
924
926
|
|
925
927
|
event_time.html(formatTimeOfDay(event_data._time));
|
926
|
-
|
928
|
+
|
927
929
|
if(event_data._session_key && event_data._session_key.length > 0){
|
928
930
|
if(session_data=sessionData[event_data._session_key]){
|
929
|
-
if(session_data._name){
|
931
|
+
if(session_data._name){
|
930
932
|
event_props.append(
|
931
933
|
$('<strong></strong>').html(session_data._name)
|
932
934
|
);
|
933
935
|
}
|
934
|
-
if(session_data._picture){
|
936
|
+
if(session_data._picture){
|
935
937
|
event_picture.append(
|
936
938
|
$('<img width="40" />').attr('src', session_data._picture)
|
937
939
|
)
|
@@ -959,7 +961,7 @@ var FnordMetric = (function(){
|
|
959
961
|
};
|
960
962
|
|
961
963
|
});
|
962
|
-
|
964
|
+
|
963
965
|
|
964
966
|
var dashboardView = (function(dashboard_name){
|
965
967
|
|
@@ -969,7 +971,7 @@ var FnordMetric = (function(){
|
|
969
971
|
function load(_viewport){
|
970
972
|
viewport = _viewport.html('');
|
971
973
|
$.ajax({
|
972
|
-
url: '/'+currentNamespace+'/dashboard/'+dashboard_name,
|
974
|
+
url: FnordMetric.p + '/' + currentNamespace+'/dashboard/'+dashboard_name,
|
973
975
|
success: function(resp, status){
|
974
976
|
var conf = JSON.parse(resp);
|
975
977
|
renderWidgets(conf.widgets);
|
@@ -1007,17 +1009,17 @@ var FnordMetric = (function(){
|
|
1007
1009
|
if(wwperc==100){
|
1008
1010
|
widgets[wkey].elem.addClass('full_width');
|
1009
1011
|
} else { wwidth -= 1; }
|
1010
|
-
widget.elem.width(wwidth);
|
1012
|
+
widget.elem.width(wwidth);
|
1011
1013
|
}
|
1012
1014
|
|
1013
1015
|
function resize(){
|
1014
1016
|
for(wkey in widgets){
|
1015
|
-
resizeWidget(wkey);
|
1017
|
+
resizeWidget(wkey);
|
1016
1018
|
};
|
1017
1019
|
};
|
1018
1020
|
|
1019
1021
|
function close(){
|
1020
|
-
$('body').trigger('fm_dashboard_close');
|
1022
|
+
$('body').trigger('fm_dashboard_close');
|
1021
1023
|
};
|
1022
1024
|
|
1023
1025
|
return {
|
@@ -1029,7 +1031,7 @@ var FnordMetric = (function(){
|
|
1029
1031
|
});
|
1030
1032
|
|
1031
1033
|
|
1032
|
-
function renderDashboard(_dash){
|
1034
|
+
function renderDashboard(_dash){
|
1033
1035
|
loadView(dashboardView(_dash));
|
1034
1036
|
};
|
1035
1037
|
|
@@ -1047,19 +1049,22 @@ var FnordMetric = (function(){
|
|
1047
1049
|
|
1048
1050
|
function resizeView(){
|
1049
1051
|
currentView.resize(
|
1050
|
-
canvasElem.innerWidth(),
|
1052
|
+
canvasElem.innerWidth(),
|
1051
1053
|
canvasElem.innerHeight()
|
1052
1054
|
);
|
1053
1055
|
};
|
1054
1056
|
|
1055
1057
|
function init(_namespace, _canvasElem){
|
1058
|
+
if (FnordMetric.p == ''){
|
1059
|
+
FnordMetric.p = '/';
|
1060
|
+
}
|
1056
1061
|
canvasElem = _canvasElem;
|
1057
1062
|
currentNamespace = _namespace;
|
1058
1063
|
loadView(sessionView());
|
1059
1064
|
};
|
1060
1065
|
|
1061
1066
|
return {
|
1062
|
-
p: '/fnordmetric/',
|
1067
|
+
p: '/fnordmetric/',
|
1063
1068
|
renderDashboard: renderDashboard,
|
1064
1069
|
renderSessionView: renderSessionView,
|
1065
1070
|
resizeView: resizeView,
|