fnordmetric 0.7.5 → 0.9.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. data/doc/V1.0-ROADMAP +97 -0
  2. data/doc/full_example.rb +95 -511
  3. data/doc/legacy_example.rb +640 -0
  4. data/doc/minimal_example.rb +26 -0
  5. data/doc/preview3.png +0 -0
  6. data/fnordmetric.gemspec +3 -2
  7. data/lib/fnordmetric/acceptors/acceptor.rb +29 -0
  8. data/lib/fnordmetric/{inbound_stream.rb → acceptors/tcp_acceptor.rb} +8 -5
  9. data/lib/fnordmetric/{inbound_datagram.rb → acceptors/udp_acceptor.rb} +9 -8
  10. data/lib/fnordmetric/api.rb +2 -2
  11. data/lib/fnordmetric/context.rb +37 -18
  12. data/lib/fnordmetric/defaults.rb +9 -0
  13. data/lib/fnordmetric/ext.rb +72 -0
  14. data/lib/fnordmetric/gauge.rb +37 -10
  15. data/lib/fnordmetric/gauge_calculations.rb +38 -16
  16. data/lib/fnordmetric/gauge_modifiers.rb +67 -0
  17. data/lib/fnordmetric/gauge_rendering.rb +40 -0
  18. data/lib/fnordmetric/gauge_validations.rb +15 -0
  19. data/lib/fnordmetric/gauges/distribution_gauge.rb +85 -0
  20. data/lib/fnordmetric/gauges/timeseries_gauge.rb +143 -0
  21. data/lib/fnordmetric/gauges/toplist_gauge.rb +44 -0
  22. data/lib/fnordmetric/histogram.rb +57 -0
  23. data/lib/fnordmetric/logger.rb +42 -36
  24. data/lib/fnordmetric/namespace.rb +47 -23
  25. data/lib/fnordmetric/session.rb +6 -6
  26. data/lib/fnordmetric/standalone.rb +15 -35
  27. data/lib/fnordmetric/timeseries.rb +79 -0
  28. data/lib/fnordmetric/toplist.rb +61 -0
  29. data/lib/fnordmetric/version.rb +1 -1
  30. data/lib/fnordmetric/web/app.rb +122 -0
  31. data/lib/fnordmetric/web/app_helpers.rb +42 -0
  32. data/lib/fnordmetric/{dashboard.rb → web/dashboard.rb} +4 -0
  33. data/lib/fnordmetric/{event.rb → web/event.rb} +7 -2
  34. data/lib/fnordmetric/web/reactor.rb +87 -0
  35. data/lib/fnordmetric/web/web.rb +53 -0
  36. data/lib/fnordmetric/web/websocket.rb +38 -0
  37. data/lib/fnordmetric/widgets/bars_widget.rb +44 -0
  38. data/lib/fnordmetric/{html_widget.rb → widgets/html_widget.rb} +0 -0
  39. data/lib/fnordmetric/widgets/numbers_widget.rb +56 -0
  40. data/lib/fnordmetric/{pie_widget.rb → widgets/pie_widget.rb} +0 -0
  41. data/lib/fnordmetric/widgets/timeseries_widget.rb +55 -0
  42. data/lib/fnordmetric/widgets/toplist_widget.rb +64 -0
  43. data/lib/fnordmetric/worker.rb +26 -25
  44. data/lib/fnordmetric.rb +85 -115
  45. data/readme.md +362 -0
  46. data/spec/gauge_like_shared.rb +54 -0
  47. data/spec/gauge_spec.rb +2 -36
  48. data/spec/namespace_spec.rb +25 -11
  49. data/spec/spec_helper.rb +4 -0
  50. data/spec/{inbound_stream_spec.rb → tcp_acceptor_spec.rb} +3 -3
  51. data/spec/timeseries_gauge_spec.rb +54 -0
  52. data/spec/{inbound_datagram_spec.rb → udp_acceptor_spec.rb} +3 -3
  53. data/web/fnordmetric.css +786 -0
  54. data/web/haml/app.haml +38 -0
  55. data/web/haml/distribution_gauge.haml +118 -0
  56. data/web/haml/timeseries_gauge.haml +80 -0
  57. data/web/haml/toplist_gauge.haml +194 -0
  58. data/web/img/head.png +0 -0
  59. data/web/img/list.png +0 -0
  60. data/web/img/list_active.png +0 -0
  61. data/web/img/list_hover.png +0 -0
  62. data/web/img/loader_white.gif +0 -0
  63. data/web/img/navbar.png +0 -0
  64. data/web/img/navbar_btn.png +0 -0
  65. data/web/img/picto_gauge.png +0 -0
  66. data/web/js/fnordmetric.bars_widget.js +178 -0
  67. data/web/js/fnordmetric.dashboard_view.js +99 -0
  68. data/web/js/fnordmetric.gauge_view.js +260 -0
  69. data/web/js/fnordmetric.html_widget.js +21 -0
  70. data/web/js/fnordmetric.js +255 -0
  71. data/web/js/fnordmetric.numbers_widget.js +121 -0
  72. data/web/js/fnordmetric.overview_view.js +35 -0
  73. data/web/js/fnordmetric.pie_widget.js +118 -0
  74. data/web/js/fnordmetric.realtime_timeline_widget.js +175 -0
  75. data/web/js/fnordmetric.session_view.js +343 -0
  76. data/web/js/fnordmetric.timeline_widget.js +333 -0
  77. data/web/js/fnordmetric.timeseries_widget.js +388 -0
  78. data/web/js/fnordmetric.toplist_widget.js +112 -0
  79. data/web/js/fnordmetric.ui.js +91 -0
  80. data/web/js/fnordmetric.util.js +244 -0
  81. data/{pub → web}/loader.gif +0 -0
  82. data/web/vendor/d3.v2.js +9382 -0
  83. data/web/vendor/font-awesome/css/font-awesome.css +239 -0
  84. data/web/vendor/font-awesome/font/fontawesome-webfont.eot +0 -0
  85. data/web/vendor/font-awesome/font/fontawesome-webfont.svg +175 -0
  86. data/web/vendor/font-awesome/font/fontawesome-webfont.svgz +0 -0
  87. data/web/vendor/font-awesome/font/fontawesome-webfont.ttf +0 -0
  88. data/web/vendor/font-awesome/font/fontawesome-webfont.woff +0 -0
  89. data/web/vendor/jquery-1.6.2.min.js +18 -0
  90. data/web/vendor/jquery-ui.min.js +413 -0
  91. data/web/vendor/jquery.maskedinput.js +252 -0
  92. data/web/vendor/rickshaw.css +286 -0
  93. data/web/vendor/rickshaw.fnordmetric.js +2676 -0
  94. metadata +129 -79
  95. data/Gemfile +0 -6
  96. data/README.md +0 -404
  97. data/Rakefile +0 -6
  98. data/doc/version +0 -1
  99. data/haml/app.haml +0 -79
  100. data/haml/widget.haml +0 -9
  101. data/lib/fnordmetric/app.rb +0 -163
  102. data/lib/fnordmetric/average_metric.rb +0 -7
  103. data/lib/fnordmetric/bars_widget.rb +0 -26
  104. data/lib/fnordmetric/combine_metric.rb +0 -7
  105. data/lib/fnordmetric/count_metric.rb +0 -13
  106. data/lib/fnordmetric/funnel_widget.rb +0 -2
  107. data/lib/fnordmetric/metric.rb +0 -80
  108. data/lib/fnordmetric/metric_api.rb +0 -37
  109. data/lib/fnordmetric/numbers_widget.rb +0 -26
  110. data/lib/fnordmetric/report.rb +0 -29
  111. data/lib/fnordmetric/sum_metric.rb +0 -13
  112. data/lib/fnordmetric/timeline_widget.rb +0 -30
  113. data/lib/fnordmetric/toplist_widget.rb +0 -25
  114. data/pub/fnordmetric.css +0 -145
  115. data/pub/fnordmetric.js +0 -1179
  116. data/pub/vendor/highcharts.js +0 -170
  117. data/pub/vendor/jquery-1.6.1.min.js +0 -18
@@ -0,0 +1,244 @@
1
+ FnordMetric.util.getNextWidgetUID = function(){
2
+ return (FnordMetric.currentWidgetUID += 1);
3
+ }
4
+
5
+ FnordMetric.util.decPrint = function(val){
6
+ return (val < 10 ? '0'+val : val);
7
+ }
8
+
9
+ FnordMetric.util.formatTimeOfDay = function(_time){
10
+ if(_time === null) {
11
+ return "";
12
+ } else {
13
+ var time = new Date();
14
+ time.setTime(_time*1000);
15
+ return FnordMetric.util.decPrint(time.getHours()) + ':' +
16
+ FnordMetric.util.decPrint(time.getMinutes()) + ':' +
17
+ FnordMetric.util.decPrint(time.getSeconds());
18
+ }
19
+ }
20
+
21
+ FnordMetric.util.formatTimeRange = function(range){
22
+ if (range < 60){
23
+ return parseInt(range) + ' sec';
24
+ } else if(range<3600){
25
+ return parseInt(range/60) + ' min';
26
+ } else if(range==3600){
27
+ return '1 hour';
28
+ } else if(range<(3600*24)){
29
+ return parseInt(range/3600) + ' hours';
30
+ } else if(range==(3600*24)){
31
+ return '1 day';
32
+ } else {
33
+ return parseInt(range/(3600*24)) + ' days';
34
+ }
35
+ }
36
+
37
+ FnordMetric.util.formatTimeRangePre = function(range, offset){
38
+ if(!offset){ offset=0; } else { offset=parseInt(offset); }
39
+ if((offset == 0) && (range==(3600*24))){
40
+ return 'Today';
41
+ } else if((offset==-1) && (range==3600*24)){
42
+ return 'Yesterday';
43
+ } else if((offset == 0) && (range==3600)){
44
+ return 'This hour';
45
+ } else if((offset==-1) && (range==3600)){
46
+ return 'Last hour';
47
+ } else if((offset == 0) && (range==60)){
48
+ return 'This minute';
49
+ } else if((offset==-1) && (range==60)){
50
+ return 'Last minute';
51
+ } else if(offset==0) {
52
+ return "This " + FnordMetric.util.formatTimeRange(range);
53
+ } else if(offset==-1) {
54
+ return "Last " + FnordMetric.util.formatTimeRange(range);
55
+ } else{
56
+ return FnordMetric.util.formatTimeRange(range) + " (-" +
57
+ FnordMetric.util.formatTimeRange(range * (offset*-1)) + ")";
58
+ }
59
+ }
60
+
61
+ FnordMetric.util.formatTimeSince = function(time){
62
+ var now = new Date().getTime()/1000;
63
+ var since = now - time;
64
+ return FnordMetric.util.formatTimeRange(since);
65
+ }
66
+
67
+ FnordMetric.util.formatOffset = function(offset, next_offset){
68
+ if((offset == 0) && (next_offset==(3600*24))){
69
+ return 'Today';
70
+ } if((offset == 0) && (next_offset==3600)){
71
+ return 'This hour';
72
+ } else if(offset == 0){
73
+ return 'Last ' + FnordMetric.util.formatTimeRange(next_offset||0);
74
+ } else if(offset==(3600*24)){
75
+ return 'Yesterday';
76
+ } else if(offset==3600){
77
+ return 'Last hour';
78
+ } else {
79
+ return FnordMetric.util.formatTimeRange(offset) + ' ago';
80
+ }
81
+ }
82
+
83
+ FnordMetric.util.formatValue = function(value){
84
+ if(value < 10){
85
+ return value.toFixed(2);
86
+ }
87
+ if(value < 100){
88
+ return value.toFixed(1);
89
+ } else if(value > 1000){
90
+ return (value/1000.0).toFixed(1) + "k";
91
+ } else {
92
+ return value.toFixed(0);
93
+ }
94
+ }
95
+
96
+ FnordMetric.util.formatTimeValue = function(value){
97
+ if (value < 60){
98
+ return parseFloat(value).toFixed(1) + 's';
99
+ } else if(value<3600){
100
+ return parseFloat(value/60).toFixed(1) + 'm';
101
+ } else if(value<(3600*24)){
102
+ return parseFloat(value/3600).toFixed(1) + 'h';
103
+ } else {
104
+ return parseFloat(value/(3600*24)).toFixed(1) + 'd';
105
+ }
106
+ }
107
+
108
+ FnordMetric.util.formatPercentValue = function(value){
109
+ value = parseFloat(value);
110
+ if(value < 10){
111
+ return value.toFixed(2) + '%';
112
+ } else if(value < 100){
113
+ return value.toFixed(1) + '%';
114
+ } else {
115
+ return '100%';
116
+ }
117
+ }
118
+
119
+ FnordMetric.util.formatGaugeValue = function(gauge_key, value){
120
+ if(!gauge_key){ gauge_key = ""; }
121
+ if(gauge_key.slice(0,8) === '__time__'){
122
+ return FnordMetric.util.formatTimeValue(value);
123
+ } else if(gauge_key.slice(0,11) === '__percent__'){
124
+ return FnordMetric.util.formatPercentValue(value);
125
+ } else {
126
+ return FnordMetric.util.formatValue(value);
127
+ }
128
+ }
129
+
130
+ FnordMetric.util.updateNumbers = function(trgt_elem, diff_factor){
131
+ var still_running = false;
132
+ if(!diff_factor){ diff_factor = 4; }
133
+ $('.number', $(trgt_elem)).each(function(){
134
+ var target_val = parseFloat($(this).attr('data'));
135
+ var current_val = parseFloat($(this).attr('data-current'));
136
+ if(!current_val){ current_val=0; }
137
+ if(!target_val){ target_val=0; }
138
+ var diff = (target_val-current_val)/diff_factor;
139
+ if((diff > 0) && (diff < 1)){ diff=1; }
140
+ if((diff < 0) && (diff > -1)){ diff=-1; }
141
+ if(target_val != current_val){
142
+ still_running = true;
143
+ var new_val = current_val+diff;
144
+ if((diff > 0) && (new_val > target_val)){ new_val = target_val; }
145
+ if((diff < 0) && (new_val < target_val)){ new_val = target_val; }
146
+ $(this).attr('data-current', new_val);
147
+ $('.value', this).html(FnordMetric.util.formatGaugeValue($(this).attr('rel'), new_val));
148
+ }
149
+ });
150
+ if(still_running){
151
+ (function(te, df){
152
+ window.setTimeout(function(){
153
+ FnordMetric.util.updateNumbers(te, df);
154
+ }, 30);
155
+ })(trgt_elem, diff_factor);
156
+ }
157
+ }
158
+
159
+ FnordMetric.util.dateFormat = function(timestamp){
160
+ var t = new Date(timestamp*1000);
161
+ return FnordMetric.util.decPrint(t.getDate()) + "." +
162
+ FnordMetric.util.decPrint((t.getMonth()+1)) + "." +
163
+ FnordMetric.util.decPrint(t.getFullYear()) + " " +
164
+ FnordMetric.util.decPrint(t.getHours()) + ":" +
165
+ FnordMetric.util.decPrint(t.getMinutes()) + " ";
166
+ }
167
+
168
+ FnordMetric.util.format = function(elem){
169
+ $('.ui_trend, .ui_value', $(elem)).each(function(){
170
+
171
+ if($(this).attr('data-value')){
172
+ $(this).html(FnordMetric.util.formatGaugeValue('', parseFloat($(this).attr('data-value'))));
173
+ }
174
+
175
+ else if($(this).attr('data-percent')){
176
+ $(this).html(FnordMetric.util.formatGaugeValue('__percent__', parseFloat($(this).attr('data-percent'))));
177
+ }
178
+
179
+ else if($(this).attr('data-time')){
180
+ $(this).html(FnordMetric.util.formatGaugeValue('__time__', parseFloat($(this).attr('data-time'))));
181
+ }
182
+
183
+ else if($(this).attr('data-euro')){
184
+ $(this).html(FnordMetric.util.formatGaugeValue('__euro__', parseFloat($(this).attr('data-euro'))));
185
+ }
186
+
187
+ else if($(this).attr('data-dollar')){
188
+ $(this).html(FnordMetric.util.formatGaugeValue('__dollar__', parseFloat($(this).attr('data-dolar'))));
189
+ }
190
+
191
+ else if($(this).attr('data-timerange-offset')){
192
+ $(this).html(FnordMetric.util.formatTimeRangePre(
193
+ parseInt($(this).attr('data-timerange-offset')),
194
+ $(this).attr('data-offset')
195
+ ));
196
+ }
197
+ else if($(this).attr('data-timerange')){
198
+ $(this).html(FnordMetric.util.formatTimeRange(parseInt($(this).attr('data-timerange'))));
199
+ }
200
+
201
+ else if($(this).attr('data-date')){
202
+ $(this).html(FnordMetric.util.dateFormat(parseInt($(this).attr('data-date'))));
203
+ }
204
+
205
+ else if($(this).attr('data-trend')){
206
+ var delta = parseFloat($(this).attr('data-trend'));
207
+ var deg = 0;
208
+
209
+ if(delta > 0){
210
+ $(this).css('color', '#2B2');
211
+ $(this).html('+' + delta.toFixed(1));
212
+ deg = -45;
213
+ } else if (delta < 0){
214
+ $(this).css('color', '#B22');
215
+ $(this).html(delta.toFixed(1));
216
+ deg = 45;
217
+ } else {
218
+ $(this).css('color', '#555');
219
+ $(this).html(delta);
220
+ }
221
+
222
+ $(this).append(
223
+ $('<i class="icon icon-arrow-right">').css({
224
+ 'marginLeft': '0.5em',
225
+ 'display': 'block',
226
+ 'font-size': '90%',
227
+ 'float': 'right',
228
+ '-webkit-transform': 'rotate('+deg+'deg)',
229
+ '-moz-transform': 'rotate('+deg+'deg)'
230
+ })
231
+ )
232
+ }
233
+
234
+ });
235
+ }
236
+
237
+ FnordMetric.util.evilFormat = function(str){
238
+ if(str.substring(0, 1) == "$"){
239
+ str = "FnordMetric.util."+str.substring(1)
240
+ return eval(str);
241
+ } else {
242
+ return str;
243
+ }
244
+ }
File without changes