statsd-instrument 1.7.2 → 2.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.
- checksums.yaml +7 -0
- data/.travis.yml +5 -3
- data/Gemfile +1 -4
- data/README.md +97 -29
- data/lib/statsd/instrument/assertions.rb +46 -0
- data/lib/statsd/instrument/backend.rb +10 -0
- data/lib/statsd/instrument/backends/capture_backend.rb +17 -0
- data/lib/statsd/instrument/backends/logger_backend.rb +14 -0
- data/lib/statsd/instrument/backends/null_backend.rb +6 -0
- data/lib/statsd/instrument/backends/udp_backend.rb +88 -0
- data/lib/statsd/instrument/environment.rb +27 -0
- data/lib/statsd/instrument/metric.rb +50 -0
- data/lib/statsd/instrument/version.rb +1 -1
- data/lib/statsd/instrument.rb +36 -88
- data/statsd-instrument.gemspec +2 -1
- data/test/assertions_test.rb +126 -0
- data/test/capture_backend_test.rb +24 -0
- data/test/environment_test.rb +35 -0
- data/test/integration_test.rb +20 -0
- data/test/logger_backend_test.rb +20 -0
- data/test/metric_test.rb +38 -0
- data/test/statsd_instrumentation_test.rb +69 -46
- data/test/statsd_test.rb +76 -228
- data/test/test_helper.rb +5 -3
- data/test/udp_backend_test.rb +135 -0
- metadata +47 -17
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class UDPBackendTest < Minitest::Test
|
|
4
|
+
def setup
|
|
5
|
+
StatsD.stubs(:backend).returns(@backend = StatsD::Instrument::Backends::UDPBackend.new)
|
|
6
|
+
@backend.stubs(:rand).returns(0.0)
|
|
7
|
+
|
|
8
|
+
UDPSocket.stubs(:new).returns(@socket = mock('socket'))
|
|
9
|
+
@socket.stubs(:connect)
|
|
10
|
+
@socket.stubs(:send).returns(1)
|
|
11
|
+
|
|
12
|
+
StatsD.stubs(:logger).returns(@logger = mock('logger'))
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_changing_host_or_port_should_create_new_socket
|
|
16
|
+
@socket.expects(:connect).with('localhost', 1234).once
|
|
17
|
+
@socket.expects(:connect).with('localhost', 2345).once
|
|
18
|
+
@socket.expects(:connect).with('127.0.0.1', 2345).once
|
|
19
|
+
|
|
20
|
+
@backend.server = "localhost:1234"
|
|
21
|
+
@backend.socket
|
|
22
|
+
|
|
23
|
+
@backend.port = 2345
|
|
24
|
+
@backend.socket
|
|
25
|
+
|
|
26
|
+
@backend.host = '127.0.0.1'
|
|
27
|
+
@backend.socket
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_collect_respects_sampling_rate
|
|
31
|
+
@socket.expects(:send).once.returns(1)
|
|
32
|
+
metric = StatsD::Instrument::Metric.new(type: :c, name: 'test', sample_rate: 0.5)
|
|
33
|
+
|
|
34
|
+
@backend.stubs(:rand).returns(0.4)
|
|
35
|
+
@backend.collect_metric(metric)
|
|
36
|
+
|
|
37
|
+
@backend.stubs(:rand).returns(0.6)
|
|
38
|
+
@backend.collect_metric(metric)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_support_counter_syntax
|
|
42
|
+
@backend.expects(:write_packet).with('counter:1|c').once
|
|
43
|
+
StatsD.increment('counter', sample_rate: 1.0)
|
|
44
|
+
|
|
45
|
+
@backend.expects(:write_packet).with('counter:1|c|@0.5').once
|
|
46
|
+
StatsD.increment('counter', sample_rate: 0.5)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def test_supports_gauge_syntax
|
|
50
|
+
@backend.expects(:write_packet).with('fooy:1.23|g')
|
|
51
|
+
StatsD.gauge('fooy', 1.23)
|
|
52
|
+
|
|
53
|
+
@backend.expects(:write_packet).with('fooy:42|g|@0.01')
|
|
54
|
+
StatsD.gauge('fooy', 42, sample_rate: 0.01)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def test_supports_set_syntax
|
|
58
|
+
@backend.expects(:write_packet).with('unique:10.0.0.10|s')
|
|
59
|
+
StatsD.set('unique', '10.0.0.10')
|
|
60
|
+
|
|
61
|
+
@backend.expects(:write_packet).with('unique:10.0.0.10|s|@0.01')
|
|
62
|
+
StatsD.set('unique', '10.0.0.10', sample_rate: 0.01)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def test_support_measure_syntax
|
|
66
|
+
@backend.expects(:write_packet).with('duration:1.23|ms')
|
|
67
|
+
StatsD.measure('duration', 1.23)
|
|
68
|
+
|
|
69
|
+
@backend.expects(:write_packet).with('duration:0.42|ms|@0.01')
|
|
70
|
+
StatsD.measure('duration', 0.42, sample_rate: 0.01)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def test_histogram_syntax_on_datadog
|
|
74
|
+
@backend.implementation = :datadog
|
|
75
|
+
@backend.expects(:write_packet).with('fooh:42.4|h')
|
|
76
|
+
StatsD.histogram('fooh', 42.4)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def test_histogram_warns_if_not_using_datadog
|
|
80
|
+
@backend.implementation = :other
|
|
81
|
+
@backend.expects(:write_packet).never
|
|
82
|
+
@logger.expects(:warn)
|
|
83
|
+
StatsD.histogram('fooh', 42.4)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def test_supports_key_value_syntax_on_statsite
|
|
87
|
+
@backend.implementation = :statsite
|
|
88
|
+
@backend.expects(:write_packet).with("fooy:42|kv\n")
|
|
89
|
+
StatsD.key_value('fooy', 42)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def test_supports_key_value_with_timestamp_on_statsite
|
|
93
|
+
@backend.implementation = :statsite
|
|
94
|
+
@backend.expects(:write_packet).with("fooy:42|kv|@123456\n")
|
|
95
|
+
StatsD.key_value('fooy', 42, 123456)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def test_warn_when_using_key_value_and_not_on_statsite
|
|
99
|
+
@backend.implementation = :other
|
|
100
|
+
@backend.expects(:write_packet).never
|
|
101
|
+
@logger.expects(:warn)
|
|
102
|
+
StatsD.key_value('fookv', 3.33)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def test_support_tags_syntax_on_datadog
|
|
106
|
+
@backend.implementation = :datadog
|
|
107
|
+
@backend.expects(:write_packet).with("fooc:3|c|#topic:foo,bar")
|
|
108
|
+
StatsD.increment('fooc', 3, tags: ['topic:foo', 'bar'])
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def test_warn_when_using_tags_and_not_on_datadog
|
|
112
|
+
@backend.implementation = :other
|
|
113
|
+
@backend.expects(:write_packet).with("fooc:1|c")
|
|
114
|
+
@logger.expects(:warn)
|
|
115
|
+
StatsD.increment('fooc', tags: ['ignored'])
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def test_socket_error_should_not_raise_but_log
|
|
119
|
+
@socket.stubs(:connect).raises(SocketError)
|
|
120
|
+
@logger.expects(:error)
|
|
121
|
+
StatsD.increment('fail')
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def test_system_call_error_should_not_raise_but_log
|
|
125
|
+
@socket.stubs(:send).raises(Errno::ETIMEDOUT)
|
|
126
|
+
@logger.expects(:error)
|
|
127
|
+
StatsD.increment('fail')
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def test_io_error_should_not_raise_but_log
|
|
131
|
+
@socket.stubs(:send).raises(IOError)
|
|
132
|
+
@logger.expects(:error)
|
|
133
|
+
StatsD.increment('fail')
|
|
134
|
+
end
|
|
135
|
+
end
|
metadata
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: statsd-instrument
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
5
|
-
prerelease:
|
|
4
|
+
version: 2.0.0
|
|
6
5
|
platform: ruby
|
|
7
6
|
authors:
|
|
8
7
|
- Jesse Storimer
|
|
@@ -10,38 +9,48 @@ authors:
|
|
|
10
9
|
autorequire:
|
|
11
10
|
bindir: bin
|
|
12
11
|
cert_chain: []
|
|
13
|
-
date: 2014-
|
|
12
|
+
date: 2014-04-29 00:00:00.000000000 Z
|
|
14
13
|
dependencies:
|
|
15
14
|
- !ruby/object:Gem::Dependency
|
|
16
15
|
name: rake
|
|
17
16
|
requirement: !ruby/object:Gem::Requirement
|
|
18
|
-
none: false
|
|
19
17
|
requirements:
|
|
20
|
-
- -
|
|
18
|
+
- - '>='
|
|
21
19
|
- !ruby/object:Gem::Version
|
|
22
20
|
version: '0'
|
|
23
21
|
type: :development
|
|
24
22
|
prerelease: false
|
|
25
23
|
version_requirements: !ruby/object:Gem::Requirement
|
|
26
|
-
none: false
|
|
27
24
|
requirements:
|
|
28
|
-
- -
|
|
25
|
+
- - '>='
|
|
26
|
+
- !ruby/object:Gem::Version
|
|
27
|
+
version: '0'
|
|
28
|
+
- !ruby/object:Gem::Dependency
|
|
29
|
+
name: minitest
|
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
|
31
|
+
requirements:
|
|
32
|
+
- - '>='
|
|
33
|
+
- !ruby/object:Gem::Version
|
|
34
|
+
version: '0'
|
|
35
|
+
type: :development
|
|
36
|
+
prerelease: false
|
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
38
|
+
requirements:
|
|
39
|
+
- - '>='
|
|
29
40
|
- !ruby/object:Gem::Version
|
|
30
41
|
version: '0'
|
|
31
42
|
- !ruby/object:Gem::Dependency
|
|
32
43
|
name: mocha
|
|
33
44
|
requirement: !ruby/object:Gem::Requirement
|
|
34
|
-
none: false
|
|
35
45
|
requirements:
|
|
36
|
-
- -
|
|
46
|
+
- - '>='
|
|
37
47
|
- !ruby/object:Gem::Version
|
|
38
48
|
version: '0'
|
|
39
49
|
type: :development
|
|
40
50
|
prerelease: false
|
|
41
51
|
version_requirements: !ruby/object:Gem::Requirement
|
|
42
|
-
none: false
|
|
43
52
|
requirements:
|
|
44
|
-
- -
|
|
53
|
+
- - '>='
|
|
45
54
|
- !ruby/object:Gem::Version
|
|
46
55
|
version: '0'
|
|
47
56
|
description: A StatsD client for Ruby appspec. Provides metaprogramming methods to
|
|
@@ -60,37 +69,58 @@ files:
|
|
|
60
69
|
- Rakefile
|
|
61
70
|
- lib/statsd-instrument.rb
|
|
62
71
|
- lib/statsd/instrument.rb
|
|
72
|
+
- lib/statsd/instrument/assertions.rb
|
|
73
|
+
- lib/statsd/instrument/backend.rb
|
|
74
|
+
- lib/statsd/instrument/backends/capture_backend.rb
|
|
75
|
+
- lib/statsd/instrument/backends/logger_backend.rb
|
|
76
|
+
- lib/statsd/instrument/backends/null_backend.rb
|
|
77
|
+
- lib/statsd/instrument/backends/udp_backend.rb
|
|
78
|
+
- lib/statsd/instrument/environment.rb
|
|
79
|
+
- lib/statsd/instrument/metric.rb
|
|
63
80
|
- lib/statsd/instrument/version.rb
|
|
64
81
|
- statsd-instrument.gemspec
|
|
82
|
+
- test/assertions_test.rb
|
|
83
|
+
- test/capture_backend_test.rb
|
|
84
|
+
- test/environment_test.rb
|
|
85
|
+
- test/integration_test.rb
|
|
86
|
+
- test/logger_backend_test.rb
|
|
87
|
+
- test/metric_test.rb
|
|
65
88
|
- test/statsd_instrumentation_test.rb
|
|
66
89
|
- test/statsd_test.rb
|
|
67
90
|
- test/test_helper.rb
|
|
91
|
+
- test/udp_backend_test.rb
|
|
68
92
|
homepage: https://github.com/Shopify/statsd-instrument
|
|
69
93
|
licenses:
|
|
70
94
|
- MIT
|
|
95
|
+
metadata: {}
|
|
71
96
|
post_install_message:
|
|
72
97
|
rdoc_options: []
|
|
73
98
|
require_paths:
|
|
74
99
|
- lib
|
|
75
100
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
76
|
-
none: false
|
|
77
101
|
requirements:
|
|
78
|
-
- -
|
|
102
|
+
- - '>='
|
|
79
103
|
- !ruby/object:Gem::Version
|
|
80
104
|
version: '0'
|
|
81
105
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
82
|
-
none: false
|
|
83
106
|
requirements:
|
|
84
|
-
- -
|
|
107
|
+
- - '>='
|
|
85
108
|
- !ruby/object:Gem::Version
|
|
86
109
|
version: '0'
|
|
87
110
|
requirements: []
|
|
88
111
|
rubyforge_project:
|
|
89
|
-
rubygems_version:
|
|
112
|
+
rubygems_version: 2.0.3
|
|
90
113
|
signing_key:
|
|
91
|
-
specification_version:
|
|
114
|
+
specification_version: 4
|
|
92
115
|
summary: A StatsD client for Ruby apps
|
|
93
116
|
test_files:
|
|
117
|
+
- test/assertions_test.rb
|
|
118
|
+
- test/capture_backend_test.rb
|
|
119
|
+
- test/environment_test.rb
|
|
120
|
+
- test/integration_test.rb
|
|
121
|
+
- test/logger_backend_test.rb
|
|
122
|
+
- test/metric_test.rb
|
|
94
123
|
- test/statsd_instrumentation_test.rb
|
|
95
124
|
- test/statsd_test.rb
|
|
96
125
|
- test/test_helper.rb
|
|
126
|
+
- test/udp_backend_test.rb
|