fnordmetric 0.5.5 → 0.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
- .topbar{ height:43px; background:#24272c; display:none; }
4
+ .shown{ display: block; }
5
+ .hidden{ display: none; }
5
6
 
6
- #wrap{ margin:0 20px; }
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
  '&nbsp;&dash;&nbsp;' +
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_'){ addEventType(v,v); }
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,