drone 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,52 +0,0 @@
1
- require File.expand_path('../../core', __FILE__)
2
-
3
- module Drone
4
- class UniformSample
5
-
6
- ##
7
- # Create a new instance.
8
- #
9
- # @param [String] id A string which will be used by distributed
10
- # storage backend to use the same value for all instances with
11
- # the same id
12
- # @param [Number] size The size of the requested array
13
- #
14
- def initialize(id, size)
15
- @id = id
16
- @values = Drone::request_fixed_size_array("#{id}:values", size, 0)
17
- @count = Drone::request_number("#{id}:count", 0)
18
- end
19
-
20
- # def clear
21
- # @values.size.times do |n|
22
- # @values[n] = 0
23
- # end
24
- #
25
- # @count.set(0)
26
- # end
27
-
28
- def size
29
- c = @count.get
30
- (c > @values.size) ? @values.size : c
31
- end
32
-
33
- def update(val)
34
- @count.inc
35
- count = @count.get
36
- if count <= @values.size
37
- @values[count - 1] = val
38
- else
39
- r = rand(2**64 - 1) % count
40
- if r < @values.size
41
- @values[r] = val
42
- end
43
- end
44
- end
45
-
46
- def values
47
- # only return @count elements
48
- @values[0,@count.get]
49
- end
50
-
51
- end
52
- end
data/lib/drone/version.rb DELETED
@@ -1,3 +0,0 @@
1
- module Drone
2
- VERSION = "1.0.1"
3
- end
data/specs/all.rb DELETED
@@ -1,11 +0,0 @@
1
- # This file is a shortcut to run all tests in textmate
2
-
3
- ENV['COVERAGE'] = "1"
4
- require File.expand_path('../common', __FILE__)
5
-
6
-
7
- Dir.chdir( File.dirname(__FILE__) ) do
8
- Dir["**/*_spec.rb"].each do |path|
9
- load(path)
10
- end
11
- end
data/specs/common.rb DELETED
@@ -1,63 +0,0 @@
1
- $:.reject! { |e| e.include? 'TextMate' }
2
-
3
- require 'rubygems'
4
-
5
- puts "Testing with ruby #{RUBY_VERSION} and rubygems #{Gem::VERSION}"
6
-
7
- if (RUBY_VERSION >= "1.9") && ENV['COVERAGE']
8
- require 'simplecov'
9
- ROOT = File.expand_path('../../', __FILE__)
10
-
11
- puts "[[ SimpleCov enabled ]]"
12
-
13
- SimpleCov.start do
14
- add_filter '/gems/'
15
- add_filter '/specs/'
16
-
17
- root(ROOT)
18
- end
19
- end
20
-
21
- require 'bundler/setup'
22
-
23
- require 'bacon'
24
- require 'mocha'
25
- require 'delorean'
26
- require 'em-spec/bacon'
27
- EM.spec_backend = EventMachine::Spec::Bacon
28
-
29
- $LOAD_PATH << File.expand_path('../../lib', __FILE__)
30
-
31
- module Bacon
32
- module MochaRequirementsCounter
33
- def self.increment
34
- Counter[:requirements] += 1
35
- end
36
- end
37
-
38
- class Context
39
- include Mocha::API
40
-
41
- alias_method :it_before_mocha, :it
42
-
43
- def it(description)
44
- it_before_mocha(description) do
45
- begin
46
- mocha_setup
47
- yield
48
- mocha_verify(MochaRequirementsCounter)
49
- rescue Mocha::ExpectationError => e
50
- raise Error.new(:failed, "#{e.message}\n#{e.backtrace[0...10].join("\n")}")
51
- ensure
52
- mocha_teardown
53
- end
54
- end
55
- end
56
- end
57
- end
58
-
59
- def focus(test_label)
60
- Bacon.const_set(:RestrictName, %r{#{test_label}})
61
- end
62
-
63
- Bacon.summary_on_exit()
@@ -1,43 +0,0 @@
1
- require File.expand_path('../../common', __FILE__)
2
-
3
- require 'drone/core'
4
- require 'drone/metrics/counter'
5
- include Drone
6
-
7
- describe 'Counter Metrics' do
8
- before do
9
- Drone::init_drone()
10
- @counter = Metrics::Counter.new('something')
11
- end
12
-
13
- should "start at zero" do
14
- @counter.value.should == 0
15
- end
16
-
17
- should "increment by one" do
18
- @counter.inc()
19
- @counter.value.should == 1
20
- end
21
-
22
- should "increment by an arbitrary delta" do
23
- @counter.inc(3)
24
- @counter.value.should == 3
25
- end
26
-
27
- should "decrement by one" do
28
- @counter.dec()
29
- @counter.value.should == -1
30
- end
31
-
32
- should "decrement by an arbitrary delta" do
33
- @counter.dec(3)
34
- @counter.value.should == -3
35
- end
36
-
37
- should "be zero after being cleared" do
38
- @counter.inc(3)
39
- @counter.clear()
40
- @counter.value.should == 0
41
- end
42
-
43
- end
@@ -1,28 +0,0 @@
1
- require File.expand_path('../../common', __FILE__)
2
-
3
- require 'drone/metrics/gauge'
4
- include Drone
5
-
6
- describe 'Geuge Metric' do
7
- before do
8
- @n = 0
9
- @gauge = Metrics::Gauge.new("temperature"){ @n+= 1 }
10
- end
11
-
12
- should 'require a block' do
13
- err = proc{
14
- Metrics::Gauge.new('dummy')
15
- }.should.raise(RuntimeError)
16
-
17
- err.message.should.include?('Block expected')
18
- end
19
-
20
- should 'call block when value is asked' do
21
- @n.should == 0
22
- @gauge.value.should == 1
23
- @n.should == 1
24
-
25
- @gauge.value.should == 2
26
- end
27
-
28
- end
@@ -1,61 +0,0 @@
1
- require File.expand_path('../../common', __FILE__)
2
-
3
- require 'drone/metrics/meter'
4
-
5
- include Drone
6
-
7
- EM.describe 'Meter Metrics' do
8
- before do
9
- Drone::init_drone()
10
- Drone::start_monitoring()
11
- end
12
-
13
- describe "A meter metric with no events" do
14
- before do
15
- @meter = Metrics::Meter.new("thangs")
16
- end
17
-
18
- should "have a count of zero" do
19
- @meter.count.should == 0
20
- done
21
- end
22
-
23
- should "have a mean rate of 0 events/sec" do
24
- @meter.mean_rate.should == 0.0
25
- done
26
- end
27
-
28
- should "have a mean rate of zero" do
29
- @meter.mean_rate.should.be.close?(0, 0.001)
30
- done
31
- end
32
-
33
- should "have a one-minute rate of zero" do
34
- @meter.one_minute_rate.should.be.close?(0, 0.001)
35
- done
36
- end
37
-
38
- should "have a five-minute rate of zero" do
39
- @meter.five_minutes_rate.should.be.close?(0, 0.001)
40
- done
41
- end
42
-
43
- should "have a fifteen-minute rate of zero" do
44
- @meter.fifteen_minutes_rate.should.be.close?(0, 0.001)
45
- done
46
- end
47
- end
48
-
49
- describe "A meter metric with three events" do
50
- before do
51
- @meter = Metrics::Meter.new("thangs")
52
- @meter.mark(3)
53
- end
54
-
55
- should "have a count of three" do
56
- @meter.count.should == 3
57
- done
58
- end
59
- end
60
-
61
- end
@@ -1,111 +0,0 @@
1
- require File.expand_path('../../common', __FILE__)
2
-
3
- require 'drone/metrics/timer'
4
- include Drone
5
-
6
- EM.describe 'Timer Metrics' do
7
- before do
8
- Drone::init_drone()
9
- Drone::start_monitoring()
10
- end
11
-
12
- describe "A blank timer" do
13
- before do
14
- @timer = Metrics::Timer.new('id')
15
- end
16
-
17
- should "have a max of zero" do
18
- @timer.max.should.be.close?(0, 0.001)
19
- done
20
- end
21
-
22
- should "have a min of zero" do
23
- @timer.min.should.be.close?(0, 0.001)
24
- done
25
- end
26
-
27
- should "have a mean of zero" do
28
- @timer.mean.should.be.close?(0, 0.001)
29
- done
30
- end
31
-
32
- should "have a count of zero" do
33
- @timer.count.should == 0
34
- done
35
- end
36
-
37
- should "have a standard deviation of zero" do
38
- @timer.stdDev.should.be.close?(0, 0.001)
39
- done
40
- end
41
-
42
- should "have a median/p95/p98/p99/p999 of zero" do
43
- median, p95, p98, p99, p999 = @timer.percentiles(0.5, 0.95, 0.98, 0.99, 0.999)
44
- median.should.be.close?(0, 0.001)
45
- p95.should.be.close?(0, 0.001)
46
- p98.should.be.close?(0, 0.001)
47
- p99.should.be.close?(0, 0.001)
48
- p999.should.be.close?(0, 0.001)
49
- done
50
- end
51
-
52
- should "have no values" do
53
- @timer.values.should == []
54
- done
55
- end
56
- end
57
-
58
-
59
-
60
- describe "Timing a series of events" do
61
- before do
62
- @timer = Metrics::Timer.new('id')
63
- @timer.update(10)
64
- @timer.update(20)
65
- @timer.update(20)
66
- @timer.update(30)
67
- @timer.update(40)
68
- end
69
-
70
- should "record the count" do
71
- @timer.count.should == 5
72
- done
73
- end
74
-
75
- should "calculate the minimum duration" do
76
- @timer.min.should.be.close?(10, 0.001)
77
- done
78
- end
79
-
80
- should "calclate the maximum duration" do
81
- @timer.max.should.be.close?(40, 0.001)
82
- done
83
- end
84
-
85
- should "calclate the mean duration" do
86
- @timer.mean.should.be.close?(24, 0.001)
87
- done
88
- end
89
-
90
- should "calclate the standard deviation" do
91
- @timer.stdDev.should.be.close?(11.401, 0.001)
92
- done
93
- end
94
-
95
- should "calculate the median/p95/p98/p99/p999" do
96
- median, p95, p98, p99, p999 = @timer.percentiles(0.5, 0.95, 0.98, 0.99, 0.999)
97
- median.should.be.close?(20, 0.001)
98
- p95.should.be.close?(40, 0.001)
99
- p98.should.be.close?(40, 0.001)
100
- p99.should.be.close?(40, 0.001)
101
- p999.should.be.close?(40, 0.001)
102
- done
103
- end
104
-
105
- should "have a series of values" do
106
- @timer.values.sort.should == [10, 20, 20, 30, 40]
107
- done
108
- end
109
- end
110
-
111
- end
@@ -1,76 +0,0 @@
1
- require File.expand_path('../../common', __FILE__)
2
-
3
- require 'drone/schedulers/eventmachine'
4
-
5
- describe 'Eventmachine Scheduler' do
6
-
7
- describe 'in waiting state' do
8
- before do
9
- @scheduler = Drone::Schedulers::EMScheduler
10
- class << @scheduler
11
- def timers_periodic; @timers_periodic; end
12
- def timers_once; @timers_once; end
13
- end
14
-
15
- EM::reactor_running?.should == false
16
-
17
- @scheduler.reset()
18
- end
19
-
20
- should "enqueue timers" do
21
- n = 0
22
- @scheduler.schedule_once(1){ n = 10 }
23
- n.should == 0
24
- @scheduler.timers_once.size.should == 1
25
- end
26
-
27
- should "enqueue periodic timers" do
28
- n = 0
29
- @scheduler.schedule_periodic(1){ n = 10 }
30
- n.should == 0
31
- @scheduler.timers_periodic.size.should == 1
32
- end
33
-
34
- should "start timers when started" do
35
- EM::expects(:add_periodic_timer).once.with(12)
36
- @scheduler.schedule_periodic(12){ }
37
-
38
- EM.expects(:add_timer).once.with(1)
39
- @scheduler.schedule_once(1){ }
40
-
41
- @scheduler.timers_periodic.size.should == 1
42
- @scheduler.timers_once.size.should == 1
43
-
44
- @scheduler.start
45
- end
46
-
47
- end
48
-
49
-
50
- EM.describe 'in started state' do
51
- before do
52
- @scheduler = Drone::Schedulers::EMScheduler
53
- @scheduler.reset()
54
- EM::reactor_running?.should == true
55
- @scheduler.start()
56
- end
57
-
58
- should 'start a timer when a job is scheduled' do
59
- EM::expects(:add_timer).with(23)
60
- @scheduler.schedule_once(23){}
61
- done
62
- end
63
-
64
- should 'start run the job and start a periodic timer when a periodic job is scheduled' do
65
- n = 0
66
- proc = lambda do
67
- n+= 1
68
- done if n == 2
69
- end
70
-
71
- @scheduler.schedule_periodic(0.001, &proc)
72
- end
73
-
74
- end
75
-
76
- end