pulse-meter 0.4.9 → 0.4.11

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.
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