pulse-meter 0.4.9 → 0.4.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (192) hide show
  1. data/Rakefile +1 -48
  2. data/lib/pulse-meter.rb +1 -68
  3. data/lib/pulse-meter/visualizer.rb +1 -40
  4. data/pulse-meter.gemspec +4 -26
  5. metadata +10 -558
  6. data/Procfile +0 -3
  7. data/bin/pulse +0 -6
  8. data/examples/basic.ru +0 -145
  9. data/examples/basic_sensor_data.rb +0 -96
  10. data/examples/udp_benchmark.rb +0 -29
  11. data/lib/cmd.rb +0 -171
  12. data/lib/pulse-meter/command_aggregator/async.rb +0 -83
  13. data/lib/pulse-meter/command_aggregator/sync.rb +0 -18
  14. data/lib/pulse-meter/command_aggregator/udp.rb +0 -48
  15. data/lib/pulse-meter/extensions/enumerable.rb +0 -24
  16. data/lib/pulse-meter/mixins/cmd.rb +0 -46
  17. data/lib/pulse-meter/mixins/dumper.rb +0 -87
  18. data/lib/pulse-meter/mixins/utils.rb +0 -155
  19. data/lib/pulse-meter/observer.rb +0 -120
  20. data/lib/pulse-meter/observer/extended.rb +0 -34
  21. data/lib/pulse-meter/sensor.rb +0 -61
  22. data/lib/pulse-meter/sensor/base.rb +0 -88
  23. data/lib/pulse-meter/sensor/configuration.rb +0 -106
  24. data/lib/pulse-meter/sensor/counter.rb +0 -39
  25. data/lib/pulse-meter/sensor/hashed_counter.rb +0 -36
  26. data/lib/pulse-meter/sensor/hashed_indicator.rb +0 -24
  27. data/lib/pulse-meter/sensor/indicator.rb +0 -35
  28. data/lib/pulse-meter/sensor/multi.rb +0 -97
  29. data/lib/pulse-meter/sensor/timeline.rb +0 -236
  30. data/lib/pulse-meter/sensor/timeline_reduce.rb +0 -68
  31. data/lib/pulse-meter/sensor/timelined/average.rb +0 -32
  32. data/lib/pulse-meter/sensor/timelined/counter.rb +0 -23
  33. data/lib/pulse-meter/sensor/timelined/hashed_counter.rb +0 -31
  34. data/lib/pulse-meter/sensor/timelined/hashed_indicator.rb +0 -30
  35. data/lib/pulse-meter/sensor/timelined/indicator.rb +0 -23
  36. data/lib/pulse-meter/sensor/timelined/max.rb +0 -19
  37. data/lib/pulse-meter/sensor/timelined/median.rb +0 -14
  38. data/lib/pulse-meter/sensor/timelined/min.rb +0 -19
  39. data/lib/pulse-meter/sensor/timelined/multi_percentile.rb +0 -34
  40. data/lib/pulse-meter/sensor/timelined/percentile.rb +0 -22
  41. data/lib/pulse-meter/sensor/timelined/uniq_counter.rb +0 -22
  42. data/lib/pulse-meter/sensor/timelined/zset_based.rb +0 -38
  43. data/lib/pulse-meter/sensor/uniq_counter.rb +0 -24
  44. data/lib/pulse-meter/server.rb +0 -0
  45. data/lib/pulse-meter/server/command_line_options.rb +0 -0
  46. data/lib/pulse-meter/server/config_options.rb +0 -0
  47. data/lib/pulse-meter/server/sensors.rb +0 -0
  48. data/lib/pulse-meter/udp_server.rb +0 -45
  49. data/lib/pulse-meter/version.rb +0 -3
  50. data/lib/pulse-meter/visualize/app.rb +0 -78
  51. data/lib/pulse-meter/visualize/base.rb +0 -15
  52. data/lib/pulse-meter/visualize/coffee/application.coffee +0 -40
  53. data/lib/pulse-meter/visualize/coffee/collections/page_info_list.coffee +0 -17
  54. data/lib/pulse-meter/visualize/coffee/collections/sensor_info_list.coffee +0 -4
  55. data/lib/pulse-meter/visualize/coffee/collections/widget_list.coffee +0 -14
  56. data/lib/pulse-meter/visualize/coffee/extensions.coffee +0 -26
  57. data/lib/pulse-meter/visualize/coffee/models/dinamic_widget.coffee +0 -34
  58. data/lib/pulse-meter/visualize/coffee/models/page_info.coffee +0 -2
  59. data/lib/pulse-meter/visualize/coffee/models/sensor_info.coffee +0 -2
  60. data/lib/pulse-meter/visualize/coffee/models/widget.coffee +0 -54
  61. data/lib/pulse-meter/visualize/coffee/presenters/area.coffee +0 -2
  62. data/lib/pulse-meter/visualize/coffee/presenters/gauge.coffee +0 -11
  63. data/lib/pulse-meter/visualize/coffee/presenters/line.coffee +0 -2
  64. data/lib/pulse-meter/visualize/coffee/presenters/pie.coffee +0 -20
  65. data/lib/pulse-meter/visualize/coffee/presenters/series.coffee +0 -44
  66. data/lib/pulse-meter/visualize/coffee/presenters/table.coffee +0 -10
  67. data/lib/pulse-meter/visualize/coffee/presenters/timeline.coffee +0 -13
  68. data/lib/pulse-meter/visualize/coffee/presenters/widget.coffee +0 -65
  69. data/lib/pulse-meter/visualize/coffee/router.coffee +0 -21
  70. data/lib/pulse-meter/visualize/coffee/views/dynamic_chart.coffee +0 -91
  71. data/lib/pulse-meter/visualize/coffee/views/dynamic_widget.coffee +0 -58
  72. data/lib/pulse-meter/visualize/coffee/views/page_title.coffee +0 -17
  73. data/lib/pulse-meter/visualize/coffee/views/page_titles.coffee +0 -15
  74. data/lib/pulse-meter/visualize/coffee/views/sensor_info_list.coffee +0 -19
  75. data/lib/pulse-meter/visualize/coffee/views/widget.coffee +0 -99
  76. data/lib/pulse-meter/visualize/coffee/views/widget_chart.coffee +0 -13
  77. data/lib/pulse-meter/visualize/coffee/views/widget_list.coffee +0 -15
  78. data/lib/pulse-meter/visualize/dsl/base.rb +0 -131
  79. data/lib/pulse-meter/visualize/dsl/errors.rb +0 -40
  80. data/lib/pulse-meter/visualize/dsl/layout.rb +0 -27
  81. data/lib/pulse-meter/visualize/dsl/page.rb +0 -33
  82. data/lib/pulse-meter/visualize/dsl/sensor.rb +0 -20
  83. data/lib/pulse-meter/visualize/dsl/widget.rb +0 -37
  84. data/lib/pulse-meter/visualize/dsl/widgets/area.rb +0 -20
  85. data/lib/pulse-meter/visualize/dsl/widgets/gauge.rb +0 -12
  86. data/lib/pulse-meter/visualize/dsl/widgets/line.rb +0 -21
  87. data/lib/pulse-meter/visualize/dsl/widgets/pie.rb +0 -16
  88. data/lib/pulse-meter/visualize/dsl/widgets/table.rb +0 -19
  89. data/lib/pulse-meter/visualize/layout.rb +0 -79
  90. data/lib/pulse-meter/visualize/page.rb +0 -25
  91. data/lib/pulse-meter/visualize/public/css/application.css +0 -56
  92. data/lib/pulse-meter/visualize/public/css/bootstrap.css +0 -4883
  93. data/lib/pulse-meter/visualize/public/css/bootstrap.min.css +0 -729
  94. data/lib/pulse-meter/visualize/public/css/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  95. data/lib/pulse-meter/visualize/public/css/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  96. data/lib/pulse-meter/visualize/public/css/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  97. data/lib/pulse-meter/visualize/public/css/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  98. data/lib/pulse-meter/visualize/public/css/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  99. data/lib/pulse-meter/visualize/public/css/images/ui-bg_glass_75_ffffff_1x400.png +0 -0
  100. data/lib/pulse-meter/visualize/public/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  101. data/lib/pulse-meter/visualize/public/css/images/ui-bg_inset-soft_95_fef1ec_1x100.png +0 -0
  102. data/lib/pulse-meter/visualize/public/css/images/ui-icons_222222_256x240.png +0 -0
  103. data/lib/pulse-meter/visualize/public/css/images/ui-icons_2e83ff_256x240.png +0 -0
  104. data/lib/pulse-meter/visualize/public/css/images/ui-icons_454545_256x240.png +0 -0
  105. data/lib/pulse-meter/visualize/public/css/images/ui-icons_888888_256x240.png +0 -0
  106. data/lib/pulse-meter/visualize/public/css/images/ui-icons_cd0a0a_256x240.png +0 -0
  107. data/lib/pulse-meter/visualize/public/css/images/ui-icons_f6cf3b_256x240.png +0 -0
  108. data/lib/pulse-meter/visualize/public/css/jquery-ui-1.8.16.bootstrap.css +0 -1320
  109. data/lib/pulse-meter/visualize/public/favicon.ico +0 -208
  110. data/lib/pulse-meter/visualize/public/img/glyphicons-halflings-white.png +0 -0
  111. data/lib/pulse-meter/visualize/public/img/glyphicons-halflings.png +0 -0
  112. data/lib/pulse-meter/visualize/public/js/application.js +0 -973
  113. data/lib/pulse-meter/visualize/public/js/backbone-min.js +0 -38
  114. data/lib/pulse-meter/visualize/public/js/bootstrap.js +0 -1835
  115. data/lib/pulse-meter/visualize/public/js/jquery-1.7.2.min.js +0 -4
  116. data/lib/pulse-meter/visualize/public/js/jquery-ui-1.8.16.bootstrap.min.js +0 -791
  117. data/lib/pulse-meter/visualize/public/js/jquery-ui-1.8.23.custom.min.js +0 -21
  118. data/lib/pulse-meter/visualize/public/js/jquery-ui-timepicker-addon.js +0 -1687
  119. data/lib/pulse-meter/visualize/public/js/json2.js +0 -487
  120. data/lib/pulse-meter/visualize/public/js/underscore-min.js +0 -32
  121. data/lib/pulse-meter/visualize/sensor.rb +0 -63
  122. data/lib/pulse-meter/visualize/series_extractor.rb +0 -107
  123. data/lib/pulse-meter/visualize/views/main.haml +0 -30
  124. data/lib/pulse-meter/visualize/views/sensors.haml +0 -76
  125. data/lib/pulse-meter/visualize/views/widgets/area.haml +0 -53
  126. data/lib/pulse-meter/visualize/views/widgets/extend_options.haml +0 -11
  127. data/lib/pulse-meter/visualize/views/widgets/gauge.haml +0 -13
  128. data/lib/pulse-meter/visualize/views/widgets/line.haml +0 -54
  129. data/lib/pulse-meter/visualize/views/widgets/pie.haml +0 -13
  130. data/lib/pulse-meter/visualize/views/widgets/table.haml +0 -45
  131. data/lib/pulse-meter/visualize/widget.rb +0 -38
  132. data/lib/pulse-meter/visualize/widgets/gauge.rb +0 -47
  133. data/lib/pulse-meter/visualize/widgets/pie.rb +0 -36
  134. data/lib/pulse-meter/visualize/widgets/timeline.rb +0 -114
  135. data/spec/pulse_meter/command_aggregator/async_spec.rb +0 -53
  136. data/spec/pulse_meter/command_aggregator/sync_spec.rb +0 -25
  137. data/spec/pulse_meter/command_aggregator/udp_spec.rb +0 -45
  138. data/spec/pulse_meter/extensions/enumerable_spec.rb +0 -58
  139. data/spec/pulse_meter/mixins/cmd_spec.rb +0 -117
  140. data/spec/pulse_meter/mixins/dumper_spec.rb +0 -162
  141. data/spec/pulse_meter/mixins/utils_spec.rb +0 -212
  142. data/spec/pulse_meter/observer/extended_spec.rb +0 -92
  143. data/spec/pulse_meter/observer_spec.rb +0 -207
  144. data/spec/pulse_meter/sensor/base_spec.rb +0 -106
  145. data/spec/pulse_meter/sensor/configuration_spec.rb +0 -103
  146. data/spec/pulse_meter/sensor/counter_spec.rb +0 -54
  147. data/spec/pulse_meter/sensor/hashed_counter_spec.rb +0 -43
  148. data/spec/pulse_meter/sensor/hashed_indicator_spec.rb +0 -39
  149. data/spec/pulse_meter/sensor/indicator_spec.rb +0 -43
  150. data/spec/pulse_meter/sensor/multi_spec.rb +0 -137
  151. data/spec/pulse_meter/sensor/timeline_spec.rb +0 -88
  152. data/spec/pulse_meter/sensor/timelined/average_spec.rb +0 -6
  153. data/spec/pulse_meter/sensor/timelined/counter_spec.rb +0 -6
  154. data/spec/pulse_meter/sensor/timelined/hashed_counter_spec.rb +0 -8
  155. data/spec/pulse_meter/sensor/timelined/hashed_indicator_spec.rb +0 -8
  156. data/spec/pulse_meter/sensor/timelined/indicator_spec.rb +0 -6
  157. data/spec/pulse_meter/sensor/timelined/max_spec.rb +0 -7
  158. data/spec/pulse_meter/sensor/timelined/median_spec.rb +0 -7
  159. data/spec/pulse_meter/sensor/timelined/min_spec.rb +0 -7
  160. data/spec/pulse_meter/sensor/timelined/multi_percentile_spec.rb +0 -21
  161. data/spec/pulse_meter/sensor/timelined/percentile_spec.rb +0 -17
  162. data/spec/pulse_meter/sensor/timelined/uniq_counter_spec.rb +0 -9
  163. data/spec/pulse_meter/sensor/uniq_counter_spec.rb +0 -28
  164. data/spec/pulse_meter/udp_server_spec.rb +0 -36
  165. data/spec/pulse_meter/visualize/app_spec.rb +0 -27
  166. data/spec/pulse_meter/visualize/dsl/layout_spec.rb +0 -64
  167. data/spec/pulse_meter/visualize/dsl/page_spec.rb +0 -62
  168. data/spec/pulse_meter/visualize/dsl/sensor_spec.rb +0 -30
  169. data/spec/pulse_meter/visualize/dsl/widget_spec.rb +0 -6
  170. data/spec/pulse_meter/visualize/dsl/widgets/area_spec.rb +0 -44
  171. data/spec/pulse_meter/visualize/dsl/widgets/gauge_spec.rb +0 -22
  172. data/spec/pulse_meter/visualize/dsl/widgets/line_spec.rb +0 -44
  173. data/spec/pulse_meter/visualize/dsl/widgets/pie_spec.rb +0 -35
  174. data/spec/pulse_meter/visualize/dsl/widgets/table_spec.rb +0 -36
  175. data/spec/pulse_meter/visualize/layout_spec.rb +0 -54
  176. data/spec/pulse_meter/visualize/page_spec.rb +0 -153
  177. data/spec/pulse_meter/visualize/sensor_spec.rb +0 -120
  178. data/spec/pulse_meter/visualize/series_extractor_spec.rb +0 -80
  179. data/spec/pulse_meter/visualize/widgets/area_spec.rb +0 -6
  180. data/spec/pulse_meter/visualize/widgets/gauge_spec.rb +0 -63
  181. data/spec/pulse_meter/visualize/widgets/line_spec.rb +0 -6
  182. data/spec/pulse_meter/visualize/widgets/pie_spec.rb +0 -73
  183. data/spec/pulse_meter/visualize/widgets/table_spec.rb +0 -6
  184. data/spec/pulse_meter/visualizer_spec.rb +0 -42
  185. data/spec/pulse_meter_spec.rb +0 -73
  186. data/spec/shared_examples/dsl_widget.rb +0 -106
  187. data/spec/shared_examples/timeline_sensor.rb +0 -439
  188. data/spec/shared_examples/timelined_subclass.rb +0 -23
  189. data/spec/shared_examples/widget.rb +0 -97
  190. data/spec/spec_helper.rb +0 -40
  191. data/spec/support/matchers.rb +0 -34
  192. data/spec/support/observered.rb +0 -40
@@ -1,35 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe PulseMeter::Visualize::DSL::Widgets::Pie do
4
- it_should_behave_like "dsl widget"
5
-
6
- let(:interval){ 100 }
7
- let(:name) { "some_sensor" }
8
- let!(:sensor){ PulseMeter::Sensor::Timelined::Max.new(name, :ttl => 1000, :interval => interval) }
9
-
10
- let(:widget_name){ "some_widget" }
11
- let(:w){ described_class.new(widget_name) }
12
-
13
- describe "#to_data" do
14
- it "should produce PulseMeter::Visualize::Widgets::Pie class" do
15
- w.to_data.should be_kind_of(PulseMeter::Visualize::Widgets::Pie)
16
- end
17
- end
18
-
19
- describe "#values_label" do
20
- it "should set values_label" do
21
- w.values_label "some y-axis legend"
22
- w.to_data.values_label.should == "some y-axis legend"
23
- end
24
- end
25
-
26
- describe "#show_last_point" do
27
- it "should set show_last_point" do
28
- w.show_last_point true
29
- w.to_data.show_last_point.should be_true
30
- end
31
- end
32
-
33
- end
34
-
35
-
@@ -1,36 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe PulseMeter::Visualize::DSL::Widgets::Table do
4
- it_should_behave_like "dsl widget"
5
-
6
- let(:interval){ 100 }
7
- let(:name) { "some_sensor" }
8
- let!(:sensor){ PulseMeter::Sensor::Timelined::Max.new(name, :ttl => 1000, :interval => interval) }
9
-
10
- let(:widget_name){ "some_widget" }
11
- let(:w){ described_class.new(widget_name) }
12
-
13
- describe "#to_data" do
14
- it "should produce PulseMeter::Visualize::Widgets::Area class" do
15
- w.to_data.should be_kind_of(PulseMeter::Visualize::Widgets::Table)
16
- end
17
- end
18
-
19
- describe "#show_last_point" do
20
- it "should set show_last_point" do
21
- w.show_last_point true
22
- w.to_data.show_last_point.should be_true
23
- end
24
- end
25
-
26
- describe "#timespan" do
27
- it "should set timespan" do
28
- w.timespan 5
29
- w.to_data.timespan.should == 5
30
- end
31
- it "should raise exception if timespan is negative" do
32
- expect{ w.timespan(-1) }.to raise_exception(PulseMeter::Visualize::DSL::BadWidgetTimeSpan)
33
- end
34
- end
35
- end
36
-
@@ -1,54 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe PulseMeter::Visualize::Layout do
4
- let(:layout) do
5
- l = PulseMeter::Visualize::DSL::Layout.new
6
- l.page "page1" do |p|
7
- p.line "w1"
8
- p.line "w2"
9
- p.gchart_options({a: 1})
10
- end
11
- l.page "page2" do |p|
12
- p.line "w3"
13
- p.line "w4"
14
- end
15
- l.to_data
16
- end
17
-
18
- describe "#page_infos" do
19
- it "should return list of page infos with ids" do
20
- layout.page_infos.should == [
21
- {title: "page1", id: 1, gchart_options: {a: 1}},
22
- {title: "page2", id: 2, gchart_options: {}}
23
- ]
24
- end
25
- end
26
-
27
- describe "#options" do
28
- it "should return layout options" do
29
- ldsl = PulseMeter::Visualize::DSL::Layout.new
30
- ldsl.use_utc true
31
- ldsl.gchart_options({a: 1})
32
- l = ldsl.to_data
33
- l.options.should == {use_utc: true, gchart_options: {a: 1}}
34
- end
35
- end
36
-
37
- describe "#widget" do
38
- it "should return data for correct widget" do
39
- w = layout.widget(1, 0)
40
- w.should include(id: 1, title: "w3")
41
- w = layout.widget(0, 1, timespan: 123)
42
- w.should include(id: 2, title: "w2")
43
- end
44
- end
45
-
46
- describe "#widgets" do
47
- it "should return data for correct widgets of a page" do
48
- datas = layout.widgets(1)
49
- datas[0].should include(id: 1, title: "w3")
50
- datas[1].should include(id: 2, title: "w4")
51
- end
52
- end
53
-
54
- end
@@ -1,153 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe PulseMeter::Visualize::Page do
4
- let(:interval){ 100 }
5
- let!(:a_sensor){ PulseMeter::Sensor::Timelined::Counter.new(:a_sensor, :ttl => 1000, :interval => interval, annotation: 'A') }
6
- let!(:b_sensor){ PulseMeter::Sensor::Timelined::Counter.new(:b_sensor, :ttl => 1000, :interval => interval, annotation: 'B') }
7
-
8
- let(:type) { :some_type }
9
- let(:widget_name){ "some_widget" }
10
-
11
- let(:redraw_interval){5}
12
- let(:values_label){'xxxx'}
13
- let(:width){6}
14
- let(:show_last_point){false}
15
- let(:timespan){interval * 2}
16
- let(:a_color){'#FF0000'}
17
- let(:b_color){'#FFFF00'}
18
-
19
- let(:interval_start){ Time.at((Time.now.to_i / interval) * interval) }
20
- let(:page_title){"Dashboard"}
21
-
22
-
23
- let(:page) do
24
- p = PulseMeter::Visualize::DSL::Page.new(page_title)
25
- p.pie(widget_name) do |w|
26
- w.redraw_interval redraw_interval
27
- w.values_label values_label
28
- w.width width
29
- w.show_last_point show_last_point
30
- w.timespan timespan
31
-
32
- w.sensor :a_sensor, color: a_color
33
- w.sensor :b_sensor, color: b_color
34
- end
35
- p.line(widget_name) do |w|
36
- w.redraw_interval redraw_interval
37
- w.values_label values_label
38
- w.width width
39
- w.show_last_point show_last_point
40
- w.timespan timespan
41
-
42
- w.sensor :a_sensor, color: a_color
43
- w.sensor :b_sensor, color: b_color
44
- end
45
- p.to_data
46
- end
47
-
48
- before(:each) do
49
- Timecop.freeze(interval_start + 1) do
50
- a_sensor.event(12)
51
- b_sensor.event(33)
52
- end
53
- Timecop.freeze(interval_start + interval + 1) do
54
- a_sensor.event(111)
55
- end
56
- end
57
-
58
- describe "#widget_data" do
59
-
60
- it "should generate correct data of single widget" do
61
- Timecop.freeze(interval_start + 2 * interval - 1) do
62
- page.widget_data(0)[:id].should == 1
63
- page.widget_data(1)[:id].should == 2
64
- end
65
- end
66
-
67
- it "should generate correct data of single widget" do
68
- Timecop.freeze(interval_start + 2 * interval - 1) do
69
- page.widget_data(0)[:series].should ==
70
- {
71
- data: [
72
- [a_sensor.annotation, 12],
73
- [b_sensor.annotation, 33]
74
- ],
75
- options: [
76
- {color: a_color},
77
- {color: b_color}
78
- ]
79
- }
80
- page.widget_data(1)[:series].should ==
81
- {
82
- titles: [a_sensor.annotation, b_sensor.annotation],
83
- rows: [[interval_start.to_i * 1000, 12, 33]],
84
- options: [
85
- {color: a_color},
86
- {color: b_color}
87
- ]
88
- }
89
- end
90
-
91
- Timecop.freeze(interval_start + 2 * interval - 1) do
92
- page.widget_data(0, timespan: 0)[:series].should ==
93
- {
94
- data: [
95
- [a_sensor.annotation, 12],
96
- [b_sensor.annotation, 33]
97
- ],
98
- options: [
99
- {color: a_color},
100
- {color: b_color}
101
- ]
102
- }
103
- page.widget_data(1, timespan: 1)[:series].should ==
104
- {
105
- titles: [a_sensor.annotation, b_sensor.annotation],
106
- rows: [],
107
- options: [
108
- {color: a_color},
109
- {color: b_color}
110
- ]
111
- }
112
-
113
- end
114
-
115
-
116
- end
117
- end
118
-
119
- describe "#widget_datas" do
120
- it "should generate correct ids for all widgets" do
121
- Timecop.freeze(interval_start + 2 * interval - 1) do
122
- page.widget_datas.map{|h| h[:id]}.should == [1,2]
123
- end
124
- end
125
-
126
- it "should generate correct series data of all widgets" do
127
- Timecop.freeze(interval_start + 2 * interval - 1) do
128
-
129
- page.widget_datas.map{|h| h[:series]}.should == [
130
- {
131
- data: [
132
- [a_sensor.annotation, 12],
133
- [b_sensor.annotation, 33]
134
- ],
135
- options: [
136
- {color: a_color},
137
- {color: b_color}
138
- ]
139
- },
140
- {
141
- titles: [a_sensor.annotation, b_sensor.annotation],
142
- rows: [[interval_start.to_i * 1000, 12, 33]],
143
- options: [
144
- {color: a_color},
145
- {color: b_color}
146
- ]
147
- }
148
- ]
149
- end
150
-
151
- end
152
- end
153
- end
@@ -1,120 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe PulseMeter::Visualize::Sensor do
4
- let(:interval){ 100 }
5
- let(:name) { "some_sensor" }
6
- let(:annotation) { 'sensor descr' }
7
- let!(:real_sensor){ PulseMeter::Sensor::Timelined::Counter.new(name, ttl: 1000, interval: interval, annotation: annotation) }
8
- let(:sensor) { described_class.new(name: name) }
9
-
10
- let(:color){ '#ABCDEF' }
11
- let(:sensor_with_color) { described_class.new(name: name, color: color) }
12
-
13
- let(:bad_sensor) { described_class.new(name: "bad_sensor_name") }
14
- let(:interval_start){ Time.at((Time.now.to_i / interval) * interval) }
15
-
16
- describe '#last_value' do
17
- context "when sensor does not exist" do
18
- it "should raise RestoreError" do
19
- expect{ bad_sensor.last_value(Time.now) }.to raise_exception(PulseMeter::RestoreError)
20
- end
21
- end
22
-
23
-
24
- context "when sensor has no data" do
25
- it "should return nil" do
26
- sensor.last_value(Time.now).should be_nil
27
- end
28
- end
29
-
30
- context "when sensor has data" do
31
- context "when need_incomplete arg is true" do
32
- it "should return last value" do
33
- Timecop.freeze(interval_start) do
34
- real_sensor.event(101)
35
- end
36
- Timecop.freeze(interval_start+1) do
37
- sensor.last_value(Time.now, true).should == 101
38
- end
39
- end
40
- end
41
-
42
- context "when need_incomplete arg is false" do
43
- it "should return last complete value" do
44
- Timecop.freeze(interval_start) do
45
- real_sensor.event(101)
46
- end
47
- Timecop.freeze(interval_start + 1) do
48
- sensor.last_value(Time.now).should be_nil
49
- end
50
- Timecop.freeze(interval_start + interval + 1) do
51
- sensor.last_value(Time.now).should == 101
52
- end
53
- end
54
- end
55
-
56
- end
57
- end
58
-
59
- describe "#last_point_data" do
60
-
61
- context "when sensor does not exist" do
62
- it "should raise RestoreError" do
63
- expect{ bad_sensor.last_point_data(Time.now) }.to raise_exception(PulseMeter::RestoreError)
64
- end
65
- end
66
-
67
- it "should return last value with annotation (and color)" do
68
- Timecop.freeze(interval_start) do
69
- real_sensor.event(101)
70
- end
71
- Timecop.freeze(interval_start + 1) do
72
- sensor.last_point_data(Time.now, true).should == [{name: annotation, y: 101}]
73
- sensor.last_point_data(Time.now).should == [{name: annotation, y: nil}]
74
- sensor_with_color.last_point_data(Time.now, true).should == [{name: annotation, y: 101, color: color}]
75
- sensor_with_color.last_point_data(Time.now).should == [{name: annotation, y: nil, color: color}]
76
- end
77
- end
78
- end
79
-
80
- describe "#timeline_data" do
81
- before(:each) do
82
- Timecop.freeze(interval_start) do
83
- real_sensor.event(101)
84
- end
85
- Timecop.freeze(interval_start + interval) do
86
- real_sensor.event(55)
87
- end
88
- end
89
-
90
- context "when sensor does not exist" do
91
- it "should raise RestoreError" do
92
- expect{ bad_sensor.timeline_data(Time.now - interval, Time.now) }.to raise_exception(PulseMeter::RestoreError)
93
- end
94
- end
95
-
96
-
97
- describe "returned value" do
98
- it "should contain sensor annotation" do
99
- Timecop.freeze(interval_start + interval + 1) do
100
- sensor.timeline_data(Time.now - interval, Time.now).first[:name].should == annotation
101
- end
102
- end
103
- it "should contain sensor color" do
104
- Timecop.freeze(interval_start + interval + 1) do
105
- sensor_with_color.timeline_data(Time.now - interval, Time.now).first[:color].should == color
106
- end
107
- end
108
-
109
- it "should contain [interval_start, value] pairs for each interval" do
110
- Timecop.freeze(interval_start + interval + 1) do
111
- data = sensor.timeline_data(Time.now - interval * 2, Time.now)
112
- data.first[:data].should == [{x: interval_start.to_i * 1000, y: 101}]
113
- data = sensor.timeline_data(Time.now - interval * 2, Time.now, true)
114
- data.first[:data].should == [{x: interval_start.to_i * 1000, y: 101}, {x: (interval_start + interval).to_i * 1000, y: 55}]
115
- end
116
- end
117
- end
118
- end
119
-
120
- end
@@ -1,80 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe PulseMeter::Visualize::SeriesExtractor do
4
- let(:interval){ 100 }
5
- let!(:real_simple_sensor){ PulseMeter::Sensor::Timelined::Counter.new(:simple_sensor,
6
- ttl: 1000,
7
- interval: interval,
8
- annotation: 'simple sensor'
9
- ) }
10
- let!(:real_hashed_sensor){ PulseMeter::Sensor::Timelined::HashedCounter.new(:hashed_sensor,
11
- ttl: 1000,
12
- interval: interval,
13
- annotation: 'hashed sensor'
14
- ) }
15
-
16
- let!(:simple_sensor){PulseMeter::Visualize::Sensor.new(name: :simple_sensor)}
17
- let!(:hashed_sensor){PulseMeter::Visualize::Sensor.new(name: :hashed_sensor)}
18
-
19
- describe "simple extractor" do
20
-
21
- let(:extractor) {PulseMeter::Visualize.extractor(simple_sensor)}
22
-
23
- it "should be created for simple sensors" do
24
- extractor.should be_kind_of(PulseMeter::Visualize::SeriesExtractor::Simple)
25
- end
26
-
27
- it "should create point data correctly" do
28
- extractor.point_data(123).should == [{y: 123, name: 'simple sensor'}]
29
- end
30
-
31
- it "should create timeline data correctly" do
32
- tl_data = [
33
- PulseMeter::SensorData.new(Time.at(1), 11),
34
- PulseMeter::SensorData.new(Time.at(2), "22")
35
- ]
36
- extractor.series_data(tl_data).should == [{
37
- name: 'simple sensor',
38
- data: [{x: 1000, y: 11}, {x: 2000, y: 22}]
39
- }]
40
- end
41
-
42
- end
43
-
44
- describe "hash extractor" do
45
- let(:extractor) {PulseMeter::Visualize.extractor(hashed_sensor)}
46
-
47
- it "should be created for hash sensors" do
48
- extractor.should be_kind_of(PulseMeter::Visualize::SeriesExtractor::Hashed)
49
- end
50
-
51
- it "should create point data correctly" do
52
- extractor.point_data('{"x": 123, "y": 321}').should == [
53
- {y: 123, name: 'hashed sensor: x'},
54
- {y: 321, name: 'hashed sensor: y'}
55
- ]
56
- end
57
-
58
- it "should create timeline data correctly" do
59
- tl_data = [
60
- PulseMeter::SensorData.new(Time.at(1), {"a" => 5, "b" => 6}),
61
- PulseMeter::SensorData.new(Time.at(2), '{"c": 7, "b": 6}')
62
- ]
63
- extractor.series_data(tl_data).should == [
64
- {
65
- name: 'hashed sensor: a',
66
- data: [{x: 1000, y: 5}, {x: 2000, y: nil}]
67
- },
68
- {
69
- name: 'hashed sensor: b',
70
- data: [{x: 1000, y: 6}, {x: 2000, y: 6}]
71
- },
72
- {
73
- name: 'hashed sensor: c',
74
- data: [{x: 1000, y: nil}, {x: 2000, y: 7}]
75
- }
76
- ]
77
- end
78
- end
79
-
80
- end