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,54 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe PulseMeter::Sensor::Counter do
4
- let(:name){ :some_counter }
5
- let(:sensor){ described_class.new(name) }
6
- let(:redis){ PulseMeter.redis }
7
-
8
- describe "#event" do
9
- it "should increment sensor value by passed value" do
10
- expect{ sensor.event(10) }.to change{ sensor.value }.from(0).to(10)
11
- expect{ sensor.event(15) }.to change{ sensor.value }.from(10).to(25)
12
- end
13
-
14
- it "should truncate increment value" do
15
- expect{ sensor.event(10.4) }.to change{ sensor.value }.from(0).to(10)
16
- expect{ sensor.event(15.1) }.to change{ sensor.value }.from(10).to(25)
17
- end
18
- end
19
-
20
- describe "#value_key" do
21
- it "should be composed of sensor name and pulse_meter:value: prefix" do
22
- sensor.value_key.should == "pulse_meter:value:#{name}"
23
- end
24
- end
25
-
26
- describe "#value" do
27
- it "should have initial value 0" do
28
- sensor.value.should == 0
29
- end
30
-
31
- it "should store stringified value by value_key" do
32
- sensor.event(123)
33
- sensor.value.should == 123
34
- redis.get(sensor.value_key).should == '123'
35
- end
36
- end
37
-
38
- describe "#incr" do
39
- it "should increment value by 1" do
40
- expect{ sensor.incr }.to change{ sensor.value }.from(0).to(1)
41
- expect{ sensor.incr }.to change{ sensor.value }.from(1).to(2)
42
- end
43
- end
44
-
45
- describe "#cleanup" do
46
- it "should remove all sensor data" do
47
- sensor.annotate("My Counter")
48
- sensor.event(123)
49
- sensor.cleanup
50
- redis.keys('*').should be_empty
51
- end
52
- end
53
-
54
- end
@@ -1,43 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe PulseMeter::Sensor::HashedCounter do
4
- let(:name){ :some_counter }
5
- let(:sensor){ described_class.new(name) }
6
- let(:redis){ PulseMeter.redis }
7
-
8
- describe "#event" do
9
- it "should increment sensor value by passed value" do
10
- expect{ sensor.event({"foo" => 10}) }.to change{ sensor.value["foo"] }.from(0).to(10)
11
- expect{ sensor.event({"foo" => 15}) }.to change{ sensor.value["foo"] }.from(10).to(25)
12
- end
13
-
14
- it "should truncate increment value" do
15
- expect{ sensor.event({"foo" => 10.4}) }.to change{ sensor.value["foo"] }.from(0).to(10)
16
- expect{ sensor.event({"foo" => 15.1}) }.to change{ sensor.value["foo"] }.from(10).to(25)
17
- end
18
-
19
- it "should increment total value" do
20
- expect{ sensor.event({"foo" => 1, "bar" => 2}) }.to change{sensor.value["total"]}.from(0).to(3)
21
- end
22
- end
23
-
24
- describe "#value" do
25
- it "should have initial value 0" do
26
- sensor.value["foo"].should == 0
27
- end
28
-
29
- it "should store redis hash by value_key" do
30
- sensor.event({"foo" => 1})
31
- sensor.value.should == {"foo" => 1, "total" => 1}
32
- redis.hgetall(sensor.value_key).should == {"foo" => "1", "total" => "1"}
33
- end
34
- end
35
-
36
- describe "#incr" do
37
- it "should increment key value by 1" do
38
- expect{ sensor.incr("foo") }.to change{ sensor.value["foo"] }.from(0).to(1)
39
- expect{ sensor.incr("foo") }.to change{ sensor.value["foo"] }.from(1).to(2)
40
- end
41
- end
42
-
43
- end
@@ -1,39 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe PulseMeter::Sensor::HashedIndicator do
4
- let(:name){ :some_counter }
5
- let(:sensor){ described_class.new(name) }
6
- let(:redis){ PulseMeter.redis }
7
-
8
- describe "#event" do
9
- it "should set sensor value to passed value" do
10
- expect{ sensor.event("foo" => 10.4) }.to change{ sensor.value["foo"] }.from(0).to(10.4)
11
- expect{ sensor.event("foo" => 15.1) }.to change{ sensor.value["foo"] }.from(10.4).to(15.1)
12
- end
13
-
14
- it "should take multiple events" do
15
- data = {"foo" => 1.1, "boo" => 2.2}
16
- sensor.event(data)
17
- sensor.value.should == data
18
- end
19
- end
20
-
21
- describe "#value_key" do
22
- it "should be composed of sensor name and pulse_meter:value: prefix" do
23
- sensor.value_key.should == "pulse_meter:value:#{name}"
24
- end
25
- end
26
-
27
- describe "#value" do
28
- it "should have initial value 0" do
29
- sensor.value["foo"].should == 0
30
- end
31
-
32
- it "should store redis hash by value_key" do
33
- sensor.event({"foo" => 1})
34
- sensor.value.should == {"foo" => 1}
35
- redis.hgetall(sensor.value_key).should == {"foo" => "1.0"}
36
- end
37
- end
38
-
39
- end
@@ -1,43 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe PulseMeter::Sensor::Indicator do
4
- let(:name){ :some_value }
5
- let(:sensor){ described_class.new(name) }
6
- let(:redis){ PulseMeter.redis }
7
-
8
- describe "#event" do
9
- it "should set sensor value to passed value" do
10
- expect{ sensor.event(10.4) }.to change{ sensor.value }.from(0).to(10.4)
11
- expect{ sensor.event(15.1) }.to change{ sensor.value }.from(10.4).to(15.1)
12
- end
13
- end
14
-
15
- describe "#value_key" do
16
- it "should be composed of sensor name and pulse_meter:value: prefix" do
17
- sensor.value_key.should == "pulse_meter:value:#{name}"
18
- end
19
- end
20
-
21
- describe "#value" do
22
- it "should have initial value 0" do
23
- sensor.value.should == 0
24
- end
25
-
26
- it "should store stringified value by value_key" do
27
- sensor.event(123)
28
- sensor.value.should == 123
29
- redis.get(sensor.value_key) == '123'
30
- end
31
- end
32
-
33
- describe "#cleanup" do
34
- it "should remove all sensor data" do
35
- sensor.annotate("My Indicator")
36
- sensor.event(123)
37
- sensor.cleanup
38
- redis.keys('*').should be_empty
39
- end
40
- end
41
-
42
- end
43
-
@@ -1,137 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe PulseMeter::Sensor::Multi do
4
- let(:name){ :foo }
5
- let(:annotation) { "Multi sensor" }
6
- let(:type) {'counter'}
7
- let(:factors) {[:f1, :f2]}
8
- let(:configuration) {
9
- {
10
- sensor_type: type,
11
- args: {
12
- annotation: annotation
13
- }
14
- }
15
- }
16
- let(:init_values) { { factors: factors, configuration: configuration } }
17
- let!(:sensor) { described_class.new(name, init_values) }
18
- let!(:redis){ PulseMeter.redis }
19
-
20
- describe '#initialize' do
21
- context "when factors are not corretly passed" do
22
- it "raises ArgumentError" do
23
- expect {described_class.new(name, {factors: :not_array, configuration: configuration})}.to raise_exception(ArgumentError)
24
- expect {described_class.new(name, {configuration: configuration})}.to raise_exception(ArgumentError)
25
- end
26
- end
27
-
28
- context "when configuration missing" do
29
- it "raises ArgumentError" do
30
- expect {described_class.new(name, {factors: factors})}.to raise_exception(ArgumentError)
31
- end
32
- end
33
- end
34
-
35
- describe "#factors" do
36
- it "returns factors passed to constructor" do
37
- sensor.factors.should == factors
38
- end
39
- end
40
-
41
- describe "#configuration_options" do
42
- it "returns configuration option passed to constructor" do
43
- sensor.configuration_options.should == configuration
44
- end
45
- end
46
-
47
- describe "#sensors" do
48
- it "returns PulseMeter::Sensor::Configuration instance" do
49
- sensor.sensors.should be_instance_of(PulseMeter::Sensor::Configuration)
50
- end
51
- end
52
-
53
- describe "#event" do
54
-
55
- it "raises ArgumentError unless all factors' values given" do
56
- expect {sensor.event({f1: :v1}, 1)}.to raise_exception(ArgumentError)
57
- end
58
-
59
-
60
- context "when sensors must be created" do
61
- let(:factor_values) { {f1: :v1, f2: :v2} }
62
-
63
- it "implicitly creates them" do
64
- expect {sensor.event(factor_values, 1)}.to change{sensor.sensors.to_a.count}
65
- end
66
-
67
- it "assigns names based on factors' names and values" do
68
- sensor.event(factor_values, 1)
69
- names = sensor.sensors.to_a.map(&:name)
70
- names.sort.should == [
71
- "#{name}",
72
- "#{name}_f1_v1",
73
- "#{name}_f2_v2",
74
- "#{name}_f1_v1_f2_v2"
75
- ].sort
76
- end
77
-
78
- it "creates sensors of given type with configuration options passed" do
79
- sensor.event(factor_values, 1)
80
- sensor.sensors.each do |s|
81
- s.should be_instance_of(PulseMeter::Sensor::Counter)
82
- s.annotation.should == annotation
83
- end
84
- end
85
- end
86
-
87
- it "sends event to all combinations of factors and values" do
88
- sensor.event({f1: :f1v1, f2: :f2v1}, 1)
89
- sensor.event({f1: :f1v2, f2: :f2v1}, 2)
90
- [
91
- ["#{name}", 3],
92
- ["#{name}_f1_f1v1", 1],
93
- ["#{name}_f1_f1v2", 2],
94
- ["#{name}_f2_f2v1", 3],
95
- ["#{name}_f1_f1v1_f2_f2v1", 1],
96
- ["#{name}_f1_f1v2_f2_f2v1", 2]
97
- ].each do |sensor_name, sum|
98
- sensor.sensor(sensor_name) { |s|
99
- s.value.should == sum
100
- }
101
- end
102
- end
103
- end
104
-
105
- describe "#each" do
106
- it "when used by Enumerable it lists all ever created subsensors of multisensor" do
107
- sensor.event({f1: :f1v1, f2: :f2v1}, 1)
108
- restored_sensor = PulseMeter::Sensor::Base.restore(name)
109
-
110
- restored_sensor.to_a.map(&:name).sort.should == [
111
- "#{name}",
112
- "#{name}_f1_f1v1",
113
- "#{name}_f2_f2v1",
114
- "#{name}_f1_f1v1_f2_f2v1",
115
- ].sort
116
- end
117
- end
118
-
119
- describe "#sensor_for_factors" do
120
- context "when sensor has already been created" do
121
- it "yields block with sensor for given combination of factors and their values" do
122
- sensor.event({f1: :f1v1, f2: :f2v1}, 1)
123
- sensor.sensor_for_factors([:f1, :f2], [:f1v1, :f2v1]){|s| s.name.should == "#{name}_f1_f1v1_f2_f2v1"}
124
- sensor.sensor_for_factors([:f1], [:f1v1]){|s| s.name.should == "#{name}_f1_f1v1"}
125
- end
126
- end
127
-
128
- context "when such a sensor was not created" do
129
- it "does not yields block" do
130
- yielded = false
131
- sensor.sensor_for_factors([:foo], [:bar]){ yielded = true }
132
- yielded.should be_false
133
- end
134
- end
135
- end
136
-
137
- end
@@ -1,88 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe PulseMeter::Sensor::Timeline do
4
- let(:name){ :some_value_with_history }
5
- let(:ttl){ 100 }
6
- let(:raw_data_ttl){ 10 }
7
- let(:interval){ 5 }
8
- let(:reduce_delay){ 3 }
9
- let(:good_init_values){ {:ttl => ttl, :raw_data_ttl => raw_data_ttl, :interval => interval, :reduce_delay => reduce_delay} }
10
- let(:sensor){ described_class.new(name, good_init_values) }
11
- let(:redis){ PulseMeter.redis }
12
-
13
- it_should_behave_like "timeline sensor"
14
-
15
- describe '#new' do
16
- INIT_VALUE_NAMES = {
17
- :with_defaults => [:raw_data_ttl, :reduce_delay],
18
- :without_defaults => [:ttl, :interval]
19
- }
20
-
21
- shared_examples_for "error raiser" do |value_names, bad_values|
22
- value_names.each do |value|
23
- bad_values.each do |bad_value|
24
- it "should raise exception if a bad value #{bad_value.inspect} passed for #{value.inspect}" do
25
- expect{ described_class.new(name, good_init_values.merge(value => bad_value)) }.to raise_exception(ArgumentError)
26
- end
27
- end
28
- end
29
- end
30
-
31
- it "should initialize #ttl #raw_data_ttl #interval and #name attributes" do
32
- sensor.name.should == name.to_s
33
-
34
- sensor.ttl.should == ttl
35
- sensor.raw_data_ttl.should == raw_data_ttl
36
- sensor.interval.should == interval
37
- end
38
-
39
- it_should_behave_like "error raiser", INIT_VALUE_NAMES[:without_defaults], [:bad, -1, nil]
40
- it_should_behave_like "error raiser", INIT_VALUE_NAMES[:with_defaults], [:bad, -1]
41
-
42
- INIT_VALUE_NAMES[:with_defaults].each do |value|
43
- it "should not raise exception if #{value.inspect} is not defined" do
44
- values = good_init_values
45
- values.delete(value)
46
- expect {described_class.new(name, good_init_values)}.not_to raise_exception(ArgumentError)
47
- end
48
-
49
- it "should assign default value to #{value.inspect} if it is not defined" do
50
- values = good_init_values
51
- values.delete(value)
52
- obj = described_class.new(name, good_init_values)
53
- obj.send(value).should be_kind_of(Fixnum)
54
- end
55
- end
56
-
57
- end
58
-
59
- describe "#deflate_safe" do
60
- class GoodSubclass < described_class
61
- def deflate(value)
62
- value.to_i
63
- end
64
- end
65
-
66
- class BadSubclass < described_class
67
- def deflate(value)
68
- raise "Any conversion error"
69
- end
70
- end
71
-
72
- let!(:good_instance) { GoodSubclass.new("good", good_init_values) }
73
- let!(:bad_instance) { BadSubclass.new("bad", good_init_values) }
74
-
75
- it "preserves nil values" do
76
- good_instance.deflate_safe(nil).should be_nil
77
- end
78
-
79
- it "converts value as defined in subclass" do
80
- good_instance.deflate_safe("10").should == 10
81
- end
82
-
83
- it "returns nil if conversion fails" do
84
- bad_instance.deflate_safe(:foo).should be_nil
85
- end
86
- end
87
-
88
- end
@@ -1,6 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe PulseMeter::Sensor::Timelined::Average do
4
- it_should_behave_like "timeline sensor"
5
- it_should_behave_like "timelined subclass", [1, 2], 1.5
6
- end
@@ -1,6 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe PulseMeter::Sensor::Timelined::Counter do
4
- it_should_behave_like "timeline sensor"
5
- it_should_behave_like "timelined subclass", [1, 2], 3
6
- end
@@ -1,8 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe PulseMeter::Sensor::Timelined::HashedCounter do
4
- it_should_behave_like "timeline sensor", {}, {:foo => 1}
5
- it_should_behave_like "timelined subclass", [{:foo => 1}, {:foo => 2}], {:foo => 3, :total => 3}.to_json
6
- it_should_behave_like "timelined subclass", [{:foo => 1}, {:foo => :bad_value}], {:foo => 1, :total => 1}.to_json
7
- it_should_behave_like "timelined subclass", [{:foo => 1}, {:boo => 2}], {:foo => 1, :boo => 2, :total => 3}.to_json
8
- end
@@ -1,8 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe PulseMeter::Sensor::Timelined::HashedIndicator do
4
- it_should_behave_like "timeline sensor", {}, {:foo => 1}
5
- it_should_behave_like "timelined subclass", [{:foo => 1}, {:foo => 2}], {:foo => 2}.to_json
6
- it_should_behave_like "timelined subclass", [{:foo => 1}, {:foo => :bad_value}], {:foo => 1}.to_json
7
- it_should_behave_like "timelined subclass", [{:foo => 1}, {:boo => 2}], {:foo => 1, :boo => 2}.to_json
8
- end
@@ -1,6 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe PulseMeter::Sensor::Timelined::Indicator do
4
- it_should_behave_like "timeline sensor"
5
- it_should_behave_like "timelined subclass", [1, 5, 2], 2
6
- end