metricsd 0.2.4 → 0.2.5

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/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## 0.2.5 (November 16, 2011)
2
+
3
+ Bugfixes:
4
+
5
+ - Do not fail when MetricsD host could not be resolved
6
+
1
7
  ## 0.2.4 (August 11, 2011)
2
8
 
3
9
  Features:
@@ -70,6 +70,7 @@ module Metricsd
70
70
  }, opts
71
71
  )
72
72
  end
73
+ alias :hit :record_hit
73
74
 
74
75
  # Record succeded boolean event.
75
76
  #
@@ -84,6 +85,7 @@ module Metricsd
84
85
  def record_success(metric, opts = {})
85
86
  record_internal({"#{metric}.status" => 1}, opts)
86
87
  end
88
+ alias :success :record_success
87
89
 
88
90
  # Record failed boolean event.
89
91
  #
@@ -98,6 +100,7 @@ module Metricsd
98
100
  def record_failure(metric, opts = {})
99
101
  record_internal({"#{metric}.status" => -1}, opts)
100
102
  end
103
+ alias :failure :record_failure
101
104
 
102
105
  # Record timing info. Time should be a floating point
103
106
  # number of seconds.
@@ -113,12 +116,17 @@ module Metricsd
113
116
  #
114
117
  def record_time(metric, time = nil, opts = {}, &block)
115
118
  opts, time = time, nil if Hash === time
119
+ result = nil
116
120
  if time.nil?
117
121
  raise ArgumentError, "You should pass a block if time is not given" unless block_given?
118
- time = Benchmark.measure(&block).real
122
+ time = Benchmark.measure do
123
+ result = block.call
124
+ end.real
119
125
  end
120
126
  record_internal({"#{metric}.time" => (time * 1000).round}, opts)
127
+ result
121
128
  end
129
+ alias :time :record_time
122
130
 
123
131
  # Record an integer value.
124
132
  #
@@ -135,6 +143,7 @@ module Metricsd
135
143
  record_internal({metric => value.round}, opts)
136
144
  end
137
145
  alias :record :record_value
146
+ alias :value :record_value
138
147
 
139
148
  # Record multiple integer values.
140
149
  #
@@ -156,6 +165,7 @@ module Metricsd
156
165
  def record_values(metrics, opts = {})
157
166
  record_internal(metrics, opts)
158
167
  end
168
+ alias :values :record_values
159
169
 
160
170
  # Reset and re-establish connection.
161
171
  def reset_connection!
@@ -166,9 +176,14 @@ module Metricsd
166
176
 
167
177
  # Returns a UDP socket used to send metrics to MetricsD.
168
178
  def collector_socket
169
- @@socket ||= UDPSocket.new.tap do |sock|
170
- sock.connect(Metricsd.server_host, Metricsd.server_port)
179
+ @@lock.synchronize do
180
+ @@socket ||= UDPSocket.new.tap do |sock|
181
+ sock.connect(Metricsd.server_host, Metricsd.server_port)
182
+ end
171
183
  end
184
+ rescue SocketError => e
185
+ Metricsd.logger.error("Exception occurred while trying to connect to MetricsD (#{Metricsd.server_host}:#{Metricsd.server_port}): #{e.inspect}")
186
+ nil
172
187
  end
173
188
 
174
189
  # Send informating to the RRD collector daemon using UDP protocol.
@@ -204,11 +219,10 @@ module Metricsd
204
219
  # Sends a string to the MetricsD. Should never raise any network-specific
205
220
  # exceptions, but log them instead, and silently return.
206
221
  def safe_send(msg)
207
- collector_socket.send(msg, 0)
222
+ collector_socket.send(msg, 0) if collector_socket
208
223
  true
209
224
  rescue Errno::ECONNREFUSED => e
210
- Metricsd.logger.error("Exception occurred while trying to send data to metricsd: #{e.inspect}")
211
- e.backtrace.each { |line| Metricsd.logger.error(line) }
225
+ Metricsd.logger.error("Exception occurred while trying to send data to MetricsD (#{Metricsd.server_host}:#{Metricsd.server_port}): #{e.inspect}")
212
226
  false
213
227
  end
214
228
 
@@ -220,5 +234,6 @@ module Metricsd
220
234
  opts[:source].empty? ? "#{key}:#{value}" : "#{opts[:source]}@#{key}:#{value}"
221
235
  end
222
236
  end
237
+ @@lock = Monitor.new
223
238
  end
224
239
  end
@@ -1,3 +1,3 @@
1
1
  module Metricsd
2
- VERSION = "0.2.4"
2
+ VERSION = "0.2.5"
3
3
  end
data/spec/client_spec.rb CHANGED
@@ -14,7 +14,6 @@ describe Metricsd::Client do
14
14
  it 'should not throw, but log exceptions on failure' do
15
15
  @socket.should_receive(:send).and_raise(Errno::ECONNREFUSED.new('exception from test'))
16
16
  Metricsd.logger.should_receive(:error).once.with(match(/exception from test/))
17
- Metricsd.logger.should_receive(:error).at_least(1) # stacktrace
18
17
  Metricsd::Client.record_value('custom.metric', 5)
19
18
  end
20
19
 
@@ -119,6 +118,13 @@ describe Metricsd::Client do
119
118
  yielded.should be_true
120
119
  end
121
120
 
121
+ it 'should return block value' do
122
+ @socket.should_receive(:send).with(match(/all@custom.metric.time:\d+/), 0)
123
+ Metricsd::Client.record_time('custom.metric') do
124
+ 'hello'
125
+ end.should eq('hello')
126
+ end
127
+
122
128
  it 'should use options if time is not specified' do
123
129
  @socket.should_receive(:send).with(match(/all@custom.metric.time:\d+/), 0)
124
130
  yielded = false
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metricsd
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
5
- prerelease:
4
+ hash: 29
5
+ prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 4
10
- version: 0.2.4
9
+ - 5
10
+ version: 0.2.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Dmytro Shteflyuk
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-08-11 00:00:00 -04:00
18
+ date: 2011-11-16 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -142,7 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
142
142
  requirements: []
143
143
 
144
144
  rubyforge_project:
145
- rubygems_version: 1.6.2
145
+ rubygems_version: 1.3.7
146
146
  signing_key:
147
147
  specification_version: 3
148
148
  summary: Client library for MetricsD server