harness 0.9.1 → 1.0.0

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 (62) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -0
  3. data/README.md +108 -323
  4. data/harness.gemspec +3 -12
  5. data/lib/harness.rb +69 -68
  6. data/lib/harness/async_queue.rb +29 -0
  7. data/lib/harness/fake_collector.rb +40 -0
  8. data/lib/harness/instrumentation.rb +21 -6
  9. data/lib/harness/null_collector.rb +23 -0
  10. data/lib/harness/subscription.rb +7 -0
  11. data/lib/harness/sync_queue.rb +14 -0
  12. data/lib/harness/version.rb +1 -1
  13. data/test/acceptance_test.rb +20 -0
  14. data/test/active_support_notifications_test.rb +93 -0
  15. data/test/async_queue_test.rb +14 -0
  16. data/test/instrumentation_test.rb +54 -0
  17. data/test/null_collector_test.rb +29 -0
  18. data/test/test_helper.rb +38 -34
  19. metadata +21 -196
  20. data/lib/harness/adapters/librato_adapter.rb +0 -90
  21. data/lib/harness/adapters/memory_adapter.rb +0 -27
  22. data/lib/harness/adapters/null_adapter.rb +0 -11
  23. data/lib/harness/adapters/stathat_adapter.rb +0 -75
  24. data/lib/harness/adapters/statsd_adapter.rb +0 -50
  25. data/lib/harness/consumer.rb +0 -35
  26. data/lib/harness/counter.rb +0 -29
  27. data/lib/harness/gauge.rb +0 -23
  28. data/lib/harness/integration/action_controller.rb +0 -9
  29. data/lib/harness/integration/action_mailer.rb +0 -9
  30. data/lib/harness/integration/action_view.rb +0 -9
  31. data/lib/harness/integration/active_model_serializers.rb +0 -9
  32. data/lib/harness/integration/active_support.rb +0 -9
  33. data/lib/harness/integration/sidekiq.rb +0 -47
  34. data/lib/harness/job.rb +0 -23
  35. data/lib/harness/measurement.rb +0 -43
  36. data/lib/harness/queues/delayed_job_queue.rb +0 -7
  37. data/lib/harness/queues/resque_queue.rb +0 -29
  38. data/lib/harness/queues/sidekiq_queue.rb +0 -31
  39. data/lib/harness/queues/synchronous_queue.rb +0 -18
  40. data/lib/harness/railtie.rb +0 -71
  41. data/lib/harness/tasks.rake +0 -6
  42. data/test/integration/counters_with_redis_test.rb +0 -67
  43. data/test/integration/instrumentation_test.rb +0 -50
  44. data/test/integration/integrations/action_controller_test.rb +0 -51
  45. data/test/integration/integrations/action_mailer_test.rb +0 -22
  46. data/test/integration/integrations/action_view_test.rb +0 -32
  47. data/test/integration/integrations/active_model_serializers_test.rb +0 -22
  48. data/test/integration/integrations/active_support_test.rb +0 -41
  49. data/test/integration/integrations/sidekiq_test.rb +0 -54
  50. data/test/integration/logging_test.rb +0 -17
  51. data/test/integration/queues/delayed_job_test.rb +0 -59
  52. data/test/integration/queues/resque_test.rb +0 -24
  53. data/test/integration/queues/sidekiq_test.rb +0 -34
  54. data/test/integration/railtie_test.rb +0 -26
  55. data/test/unit/adapters/librato_adapter_test.rb +0 -169
  56. data/test/unit/adapters/memory_adapter_test.rb +0 -22
  57. data/test/unit/adapters/stathat_adapter_test.rb +0 -144
  58. data/test/unit/adapters/statsd_adapter_test.rb +0 -74
  59. data/test/unit/counter_test.rb +0 -84
  60. data/test/unit/gauge_test.rb +0 -93
  61. data/test/unit/harness_test.rb +0 -39
  62. data/test/unit/measurement_test.rb +0 -76
@@ -1,22 +0,0 @@
1
- require 'test_helper'
2
-
3
- class MemoryAdapterTest < MiniTest::Unit::TestCase
4
- def setup
5
- Harness::MemoryAdapter.counters.clear
6
- Harness::MemoryAdapter.gauges.clear
7
-
8
- @adapter = Harness::MemoryAdapter.new
9
- end
10
-
11
- def test_log_gauge_adds_to_gauges
12
- @adapter.log_gauge :foo
13
-
14
- assert_includes @adapter.gauges, :foo
15
- end
16
-
17
- def test_log_counter_adds_to_counters
18
- @adapter.log_counter :bar
19
-
20
- assert_includes @adapter.counters, :bar
21
- end
22
- end
@@ -1,144 +0,0 @@
1
- require 'test_helper'
2
- require 'harness/adapters/stathat_adapter'
3
-
4
- class StathatAdapterTest < MiniTest::Unit::TestCase
5
- def setup
6
- @adapter = Harness::StathatAdapter.new
7
-
8
- @gauge = Harness::Gauge.new
9
- @gauge.id = "fake-gauge"
10
- @gauge.name = "Fake Gauge"
11
- @gauge.source = "minitest"
12
- @gauge.time = Time.now
13
- @gauge.value = "55"
14
-
15
- @counter = Harness::Counter.new
16
- @counter.id = "fake-counter"
17
- @counter.name = "Fake Counter"
18
- @counter.source = "minitest"
19
- @counter.time = Time.now
20
- @counter.value = "55"
21
- @counter.units = :bytes
22
-
23
- Harness::StathatAdapter.config.ezkey = token
24
- Harness.config.namespace = nil
25
- end
26
-
27
- def test_gauge_is_logged
28
- args = {
29
- :stat => @gauge.id,
30
- :ezkey => token,
31
- :value => @gauge.value,
32
- }
33
-
34
- expected_request = stub_request(:post, "https://api.stathat.com/ez").
35
- with(:body => args, :headers => {'Content-Type'=>'application/x-www-form-urlencoded'}).
36
- to_return(:status => 200)
37
-
38
- assert @adapter.log_gauge(@gauge)
39
- assert_requested expected_request
40
- end
41
-
42
- def test_gauge_is_logged_with_namespace
43
- Harness.config.namespace = :foo
44
-
45
- args = {
46
- :stat => "#{@gauge.id}.foo",
47
- :ezkey => token,
48
- :value => @gauge.value,
49
- }
50
-
51
- expected_request = stub_request(:post, "https://api.stathat.com/ez").
52
- with(:body => args, :headers => {'Content-Type'=>'application/x-www-form-urlencoded'}).
53
- to_return(:status => 200)
54
-
55
- assert @adapter.log_gauge(@gauge)
56
- assert_requested expected_request
57
- end
58
-
59
- def test_logging_gauge_raises_an_exception
60
- stub_request(:post, %r{stathat}).to_return(:status => 500, :body => "message")
61
-
62
- assert_raises Harness::LoggingError do
63
- @adapter.log_gauge @gauge
64
- end
65
- end
66
-
67
- def test_logging_gauge_raises_an_exception_when_id_is_too_long
68
- @gauge.id = "f" * 256
69
-
70
- assert_raises Harness::LoggingError do
71
- @adapter.log_gauge @gauge
72
- end
73
- end
74
-
75
- def test_logging_gauge_raises_an_exception_when_not_configured
76
- Harness::StathatAdapter.config.ezkey = nil
77
-
78
- assert_raises RuntimeError do
79
- @adapter.log_gauge @gauge
80
- end
81
- end
82
-
83
- def test_counter_is_logged
84
- args = {
85
- :stat => @counter.id,
86
- :ezkey => token,
87
- :count => @counter.value,
88
- }
89
-
90
- expected_request = stub_request(:post, "https://api.stathat.com/ez").
91
- with(:body => args, :headers => {'Content-Type'=>'application/x-www-form-urlencoded'}).
92
- to_return(:status => 200)
93
-
94
- assert @adapter.log_counter(@counter)
95
- assert_requested expected_request
96
- end
97
-
98
- def test_counter_is_logged_with_namespace
99
- Harness.config.namespace = :foo
100
-
101
- args = {
102
- :stat => "#{@counter.id}.foo",
103
- :ezkey => token,
104
- :count => @counter.value,
105
- }
106
-
107
- expected_request = stub_request(:post, "https://api.stathat.com/ez").
108
- with(:body => args, :headers => {'Content-Type'=>'application/x-www-form-urlencoded'}).
109
- to_return(:status => 200)
110
-
111
- assert @adapter.log_counter(@counter)
112
- assert_requested expected_request
113
- end
114
-
115
- def test_logging_counter_raises_an_exception
116
- stub_request(:post, %r{stathat}).to_return(:status => 500, :body => "message")
117
-
118
- assert_raises Harness::LoggingError do
119
- @adapter.log_counter @counter
120
- end
121
- end
122
-
123
- def test_logging_counter_raises_an_exception_when_not_configured
124
- Harness::StathatAdapter.config.ezkey = nil
125
-
126
- assert_raises RuntimeError do
127
- @adapter.log_counter @counter
128
- end
129
- end
130
-
131
- def test_logging_counter_raises_an_exception_when_id_is_too_long
132
- @counter.id = "f" * 256
133
-
134
- assert_raises Harness::LoggingError do
135
- @adapter.log_counter @counter
136
- end
137
- end
138
-
139
- private
140
-
141
- def token
142
- 'example@example.com'
143
- end
144
- end
@@ -1,74 +0,0 @@
1
- require 'test_helper'
2
- require 'ostruct'
3
- require 'harness/adapters/statsd_adapter'
4
-
5
- class StatsdAdapterTest < MiniTest::Unit::TestCase
6
- def setup
7
- @adapter = Harness::StatsdAdapter.new
8
-
9
- @gauge = Harness::Gauge.new
10
- @gauge.id = "fake-gauge"
11
- @gauge.name = "Fake Gauge"
12
- @gauge.source = "minitest"
13
- @gauge.time = Time.now
14
- @gauge.value = 55
15
-
16
- @counter = Harness::Counter.new
17
- @counter.id = "fake-counter"
18
- @counter.name = "Fake Counter"
19
- @counter.source = "minitest"
20
- @counter.time = Time.now
21
- @counter.value = 1337
22
- @counter.units = :bytes
23
- Harness.config.namespace = nil
24
- end
25
-
26
- def test_gauge_is_logged
27
- mock_backend = MiniTest::Mock.new
28
- mock_backend.expect :host, 'foo'
29
- mock_backend.expect :port, 'bar'
30
-
31
- Harness::StatsdAdapter.config.backend = mock_backend
32
- mock_backend.expect :gauge, true, [String, 55]
33
-
34
- assert @adapter.log_gauge(@gauge)
35
- assert mock_backend.verify
36
- end
37
-
38
- def test_logging_gauge_raises_an_exception_when_not_configured
39
- mock_backend = MiniTest::Mock.new
40
- mock_backend.expect :host, nil
41
- mock_backend.expect :port, nil
42
-
43
- Harness::StatsdAdapter.config.backend = mock_backend
44
- mock_backend.expect :gauge, true, [String, 55]
45
-
46
- assert_raises RuntimeError do
47
- @adapter.log_gauge @gauge
48
- end
49
- end
50
-
51
- def test_counter_is_logged
52
- mock_backend = MiniTest::Mock.new
53
- mock_backend.expect :host, 'foo'
54
- mock_backend.expect :port, 'bar'
55
-
56
- Harness::StatsdAdapter.config.backend = mock_backend
57
- mock_backend.expect :increment, true, [String, 1337]
58
-
59
- assert @adapter.log_counter(@counter)
60
- assert mock_backend.verify
61
- end
62
-
63
- def test_logging_counter_raises_an_exception_when_not_configured
64
- mock_backend = MiniTest::Mock.new
65
- mock_backend.expect :host, nil
66
- mock_backend.expect :port, nil
67
-
68
- Harness::StatsdAdapter.config.backend = mock_backend
69
-
70
- assert_raises RuntimeError do
71
- @adapter.log_counter @counter
72
- end
73
- end
74
- end
@@ -1,84 +0,0 @@
1
- require 'test_helper'
2
-
3
- class CounterTest < MiniTest::Unit::TestCase
4
- def setup
5
- @counter = Harness::Counter.new
6
- Harness.redis.flushall
7
- end
8
-
9
- def test_sets_id_from_event
10
- event = ActiveSupport::Notifications::Event.new "name", Time.now, Time.now, nil, {}
11
-
12
- counter = Harness::Counter.from_event event
13
-
14
- assert_equal "name", counter.id
15
- end
16
-
17
- def tests_sets_source_from_event_payload
18
- event = ActiveSupport::Notifications::Event.new "name", Time.now, Time.now, nil, :counter => { :source => 'box1' }
19
-
20
- counter = Harness::Counter.from_event event
21
-
22
- assert_equal "box1", counter.source
23
- end
24
-
25
- def test_sets_value_from_event_payload
26
- base = Time.now
27
-
28
- event = ActiveSupport::Notifications::Event.new "name", base - 1, Time.now, nil, :counter => {:value => 5 }
29
-
30
- counter = Harness::Counter.from_event event
31
-
32
- assert_equal 5, counter.value
33
- end
34
-
35
- def test_sets_value_from_event_payload_with_number
36
- base = Time.now
37
-
38
- event = ActiveSupport::Notifications::Event.new "name", base - 1, Time.now, nil, :counter => 5
39
-
40
- counter = Harness::Counter.from_event event
41
-
42
- assert_equal 5, counter.value
43
- end
44
-
45
- def test_sets_name_from_event
46
- base = Time.now
47
-
48
- event = ActiveSupport::Notifications::Event.new "name", base - 1, Time.now, nil, :counter => { :name => 'foo' }
49
-
50
- counter = Harness::Counter.from_event event
51
-
52
- assert_equal 'foo', counter.name
53
- end
54
-
55
- def test_sets_id_from_payload_if_symbol
56
- base = Time.now
57
-
58
- event = ActiveSupport::Notifications::Event.new "name", base - 1, Time.now, nil, :counter => :foo
59
-
60
- counter = Harness::Counter.from_event event
61
-
62
- assert_equal 'foo', counter.id
63
- end
64
-
65
- def test_sets_id_from_payload_if_string
66
- base = Time.now
67
-
68
- event = ActiveSupport::Notifications::Event.new "name", base - 1, Time.now, nil, :counter => 'foo'
69
-
70
- counter = Harness::Counter.from_event event
71
-
72
- assert_equal 'foo', counter.id
73
- end
74
-
75
- def test_sets_the_period_from_the_event
76
- base = Time.now
77
-
78
- event = ActiveSupport::Notifications::Event.new "name", base - 1, Time.now, nil, :counter => {period: 30}
79
-
80
- counter = Harness::Counter.from_event event
81
-
82
- assert_equal 30, counter.period
83
- end
84
- end
@@ -1,93 +0,0 @@
1
- require 'test_helper'
2
-
3
- class GaugeTest < MiniTest::Unit::TestCase
4
- def setup
5
- @gauge = Harness::Gauge.new
6
- end
7
-
8
- def test_initializes_units
9
- assert_equal :ms, @gauge.units
10
- end
11
-
12
- def test_sets_name_id_event
13
- event = ActiveSupport::Notifications::Event.new "name", Time.now, Time.now, nil, {}
14
-
15
- gauge = Harness::Gauge.from_event event
16
-
17
- assert_equal "name", gauge.id
18
- end
19
-
20
- def tests_sets_source_from_event_payload
21
- event = ActiveSupport::Notifications::Event.new "name", Time.now, Time.now, nil, :gauge => { :source => 'box1' }
22
-
23
- gauge = Harness::Gauge.from_event event
24
-
25
- assert_equal "box1", gauge.source
26
- end
27
-
28
- def test_sets_duration_from_event
29
- base = Time.now
30
-
31
- event = ActiveSupport::Notifications::Event.new "name", base - 1, Time.now, nil, {}
32
-
33
- gauge = Harness::Gauge.from_event event
34
-
35
- assert_in_delta 1000, 0.01, gauge.value
36
- end
37
-
38
- def test_sets_name_from_event
39
- base = Time.now
40
-
41
- event = ActiveSupport::Notifications::Event.new "name", base - 1, Time.now, nil, :gauge => { :name => 'foo' }
42
-
43
- gauge = Harness::Gauge.from_event event
44
-
45
- assert_equal 'foo', gauge.name
46
- end
47
-
48
- def test_sets_id_from_payload_if_symbol
49
- base = Time.now
50
-
51
- event = ActiveSupport::Notifications::Event.new "name", base - 1, Time.now, nil, :gauge => :foo
52
-
53
- gauge = Harness::Gauge.from_event event
54
-
55
- assert_equal 'foo', gauge.id
56
- end
57
-
58
- def test_sets_id_from_payload_if_string
59
- base = Time.now
60
-
61
- event = ActiveSupport::Notifications::Event.new "name", base - 1, Time.now, nil, :gauge => 'foo'
62
-
63
- gauge = Harness::Gauge.from_event event
64
-
65
- assert_equal 'foo', gauge.id
66
- end
67
-
68
- def test_sets_value_from_payload_if_number
69
- base = Time.now
70
-
71
- event = ActiveSupport::Notifications::Event.new "name", base - 1, Time.now, nil, :gauge => {value: 42}
72
-
73
- gauge = Harness::Gauge.from_event event
74
-
75
- assert_equal 42, gauge.value
76
- end
77
-
78
- def test_sets_the_period_from_the_event
79
- base = Time.now
80
-
81
- event = ActiveSupport::Notifications::Event.new "name", base - 1, Time.now, nil, :gauge => {period: 30}
82
-
83
- gauge = Harness::Gauge.from_event event
84
-
85
- assert_equal 30, gauge.period
86
- end
87
-
88
- def test_initializes_time_if_not_set
89
- gauge = Harness::Gauge.new
90
-
91
- assert gauge.time
92
- end
93
- end
@@ -1,39 +0,0 @@
1
- require 'test_helper'
2
-
3
- class HarnessModuleTest < MiniTest::Unit::TestCase
4
- def test_can_set_the_adapter_with_a_symbol
5
- Harness.config.adapter = :memory
6
-
7
- assert_kind_of Harness::MemoryAdapter, Harness.config.adapter
8
- end
9
-
10
- def test_can_set_the_adapter_with_an_adapter_instance
11
- Harness.config.adapter = Harness::MemoryAdapter.new
12
-
13
- assert_kind_of Harness::MemoryAdapter, Harness.config.adapter
14
- end
15
-
16
- def test_can_set_the_queue_with_a_symbol
17
- Harness.config.queue = :synchronous
18
-
19
- assert_kind_of Harness::SynchronousQueue, Harness.config.queue
20
- end
21
-
22
- def test_can_set_the_queue_with_a_queue_instance
23
- Harness.config.queue = Harness::SynchronousQueue.new
24
-
25
- assert_kind_of Harness::SynchronousQueue, Harness.config.queue
26
- end
27
-
28
- def test_uses_method_missing_to_configure_adapters
29
- Harness.config.librato.email = 'foo'
30
-
31
- assert_equal 'foo', Harness.config.librato.email
32
- end
33
-
34
- def test_blows_up_when_calling_an_unknown_adapter
35
- assert_raises NoMethodError do
36
- Harness.config.foo_bar
37
- end
38
- end
39
- end