pulse-meter-client-backport 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/pulse-meter/sensor.rb +2 -0
- data/lib/pulse-meter/sensor/timelined/uniq_counter.rb +16 -0
- data/lib/pulse-meter/sensor/uniq_counter.rb +22 -0
- data/lib/pulse-meter/version.rb +1 -1
- data/spec/pulse_meter/sensor/timelined/uniq_counter_spec.rb +9 -0
- data/spec/pulse_meter/sensor/uniq_counter_spec.rb +28 -0
- metadata +10 -4
data/lib/pulse-meter/sensor.rb
CHANGED
@@ -2,6 +2,7 @@ require 'pulse-meter/sensor/base'
|
|
2
2
|
require 'pulse-meter/sensor/counter'
|
3
3
|
require 'pulse-meter/sensor/hashed_counter'
|
4
4
|
require 'pulse-meter/sensor/indicator'
|
5
|
+
require 'pulse-meter/sensor/uniq_counter'
|
5
6
|
require 'pulse-meter/sensor/timeline'
|
6
7
|
require 'pulse-meter/sensor/timelined/average'
|
7
8
|
require 'pulse-meter/sensor/timelined/counter'
|
@@ -10,6 +11,7 @@ require 'pulse-meter/sensor/timelined/min'
|
|
10
11
|
require 'pulse-meter/sensor/timelined/max'
|
11
12
|
require 'pulse-meter/sensor/timelined/percentile'
|
12
13
|
require 'pulse-meter/sensor/timelined/median'
|
14
|
+
require 'pulse-meter/sensor/timelined/uniq_counter'
|
13
15
|
|
14
16
|
# Top level sensor module
|
15
17
|
module PulseMeter
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module PulseMeter
|
2
|
+
module Sensor
|
3
|
+
module Timelined
|
4
|
+
# Counts unique events per interval
|
5
|
+
class UniqCounter < Timeline
|
6
|
+
def aggregate_event(key, value)
|
7
|
+
redis.sadd(key, value)
|
8
|
+
end
|
9
|
+
|
10
|
+
def summarize(key)
|
11
|
+
redis.scard(key)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
# Static counter to count unique values
|
4
|
+
module PulseMeter
|
5
|
+
module Sensor
|
6
|
+
class UniqCounter < Counter
|
7
|
+
|
8
|
+
# Processes event
|
9
|
+
# @param name [String] value to be counted
|
10
|
+
def event(name)
|
11
|
+
redis.sadd(value_key, name)
|
12
|
+
end
|
13
|
+
|
14
|
+
# Returs number of unique values ever sent to counter
|
15
|
+
# @return [Fixnum]
|
16
|
+
def value
|
17
|
+
redis.scard(value_key)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/pulse-meter/version.rb
CHANGED
@@ -0,0 +1,9 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe PulseMeter::Sensor::Timelined::UniqCounter do
|
4
|
+
it_should_behave_like "timeline sensor"
|
5
|
+
it_should_behave_like "timelined subclass", [:foo, :bar], 2
|
6
|
+
it_should_behave_like "timelined subclass", [:foo, :bar, :foo], 2
|
7
|
+
data = (1..100).map {rand(200)}
|
8
|
+
it_should_behave_like "timelined subclass", data, data.uniq.count
|
9
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe PulseMeter::Sensor::UniqCounter 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 count unique values" do
|
10
|
+
expect{ sensor.event(:first) }.to change{sensor.value}.to(1)
|
11
|
+
expect{ sensor.event(:first) }.not_to change{sensor.value}
|
12
|
+
expect{ sensor.event(:second) }.to change{sensor.value}.from(1).to(2)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "#value" do
|
17
|
+
it "should have initial value 0" do
|
18
|
+
sensor.value.should == 0
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should return count of unique values" do
|
22
|
+
data = (1..100).map {rand(200)}
|
23
|
+
data.each {|e| sensor.event(e)}
|
24
|
+
sensor.value.should == data.uniq.count
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pulse-meter-client-backport
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 4
|
10
|
+
version: 0.1.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ilya Averyanov
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2012-06-
|
19
|
+
date: 2012-06-21 00:00:00 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|
@@ -212,6 +212,8 @@ files:
|
|
212
212
|
- lib/pulse-meter/sensor/timelined/median.rb
|
213
213
|
- lib/pulse-meter/sensor/timelined/min.rb
|
214
214
|
- lib/pulse-meter/sensor/timelined/percentile.rb
|
215
|
+
- lib/pulse-meter/sensor/timelined/uniq_counter.rb
|
216
|
+
- lib/pulse-meter/sensor/uniq_counter.rb
|
215
217
|
- lib/pulse-meter/version.rb
|
216
218
|
- pulse-meter-client-backport.gemspec
|
217
219
|
- spec/pulse_meter/mixins/dumper_spec.rb
|
@@ -229,6 +231,8 @@ files:
|
|
229
231
|
- spec/pulse_meter/sensor/timelined/median_spec.rb
|
230
232
|
- spec/pulse_meter/sensor/timelined/min_spec.rb
|
231
233
|
- spec/pulse_meter/sensor/timelined/percentile_spec.rb
|
234
|
+
- spec/pulse_meter/sensor/timelined/uniq_counter_spec.rb
|
235
|
+
- spec/pulse_meter/sensor/uniq_counter_spec.rb
|
232
236
|
- spec/pulse_meter_spec.rb
|
233
237
|
- spec/shared_examples/timeline_sensor.rb
|
234
238
|
- spec/shared_examples/timelined_subclass.rb
|
@@ -285,6 +289,8 @@ test_files:
|
|
285
289
|
- spec/pulse_meter/sensor/timelined/median_spec.rb
|
286
290
|
- spec/pulse_meter/sensor/timelined/min_spec.rb
|
287
291
|
- spec/pulse_meter/sensor/timelined/percentile_spec.rb
|
292
|
+
- spec/pulse_meter/sensor/timelined/uniq_counter_spec.rb
|
293
|
+
- spec/pulse_meter/sensor/uniq_counter_spec.rb
|
288
294
|
- spec/pulse_meter_spec.rb
|
289
295
|
- spec/shared_examples/timeline_sensor.rb
|
290
296
|
- spec/shared_examples/timelined_subclass.rb
|