dogstatsd-ruby 1.4.1 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -16
  3. data/lib/statsd.rb +88 -16
  4. metadata +2 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b4665c5b55192d3bc2f1de27b2cc81df9748eeca
4
- data.tar.gz: 351ec7404305f80ac0b9403b38a1f10a94193d10
3
+ metadata.gz: b0f070d540d99ad6add1d56aedfdf89c890daf09
4
+ data.tar.gz: 21e970d92ceed9401b6dc2ee7764b4c27ef048ee
5
5
  SHA512:
6
- metadata.gz: 9c3bb2e7fac98f10750b09ed3ae280985e4583bdd5e5b98c3f2ca5d873954a77ff6935c952692c49da5a1a1b369c5f24502addec490b9f87c09f4270136e8819
7
- data.tar.gz: 3e64ff5a075ad90b55b8c6361de840c7f99fc584a670fc68c019aa0d84663d47bc4937b1b86d6caeb5e3291803ed96bb09f3f1ed5c04abcc8df6ab22d5361f41
6
+ metadata.gz: c1bb32bc03a081aafd9b2ac73c9b945206939c929b77ae48b571d229e8483866c45454c876c727cbff34b4bc5380d84002439254e7a1b1753c1aa63a4af45a5b
7
+ data.tar.gz: 6382f5a8374da2c09b5b27eab65062b2ca68ea3322fa03377e7183c916a8afd4816ced7ce9a7d5f6743dd5234f2d23413eaf88b9bcbf3cb6724d2bbaf9ab4b53
data/README.md CHANGED
@@ -75,22 +75,8 @@ To suggest a feature, report a bug, or general discussion, head over
75
75
  [here](http://github.com/DataDog/dogstatsd-ruby/issues/).
76
76
 
77
77
 
78
- Change Log
79
- ----------
80
-
81
- - 1.4.1
82
- - Fixed bug in message separator when batching metrics
83
- - 1.4.0
84
- - Added support for metrics batching
85
- - 1.3.0
86
- - Added support for submitting events.
87
- - 1.2.0
88
- - Added global tags.
89
- - Added ability to set `namespace` and `tags` from `Statsd#initialize`.
90
- - 1.1.0
91
- - Added `sets` metrics.
92
- - 1.0.0
93
- - Initial release.
78
+ [Change Log](CHANGELOG.md)
79
+ ----------------------------
94
80
 
95
81
 
96
82
  Credits
@@ -32,6 +32,18 @@ class Statsd
32
32
  ['alert_type', 't']
33
33
  ]
34
34
 
35
+ # Service check options
36
+ SC_OPT_KEYS = [
37
+ ['timestamp', 'd:'],
38
+ ['hostname', 'h:'],
39
+ ['tags', '#'],
40
+ ['message', 'm:']
41
+ ]
42
+ OK = 0
43
+ WARNING = 1
44
+ CRITICAL = 2
45
+ UNKNOWN = 3
46
+
35
47
  # A namespace to prepend to all statsd calls. Defaults to no namespace.
36
48
  attr_reader :namespace
37
49
 
@@ -57,7 +69,7 @@ class Statsd
57
69
 
58
70
  # Return the current version of the library.
59
71
  def self.VERSION
60
- "1.4.1"
72
+ "1.5.0"
61
73
  end
62
74
 
63
75
  # @param [String] host your statsd host
@@ -72,7 +84,7 @@ class Statsd
72
84
  self.tags = opts[:tags]
73
85
  @buffer = Array.new
74
86
  self.max_buffer_size = max_buffer_size
75
- alias :send :send_to_socket
87
+ alias :send_stat :send_to_socket
76
88
  end
77
89
 
78
90
  def namespace=(namespace) #:nodoc:
@@ -171,6 +183,9 @@ class Statsd
171
183
 
172
184
  # Reports execution time of the provided block using {#timing}.
173
185
  #
186
+ # If the block fails, the stat is still reported, then the error
187
+ # is reraised
188
+ #
174
189
  # @param [String] stat stat name
175
190
  # @param [Hash] opts the options to create the metric with
176
191
  # @option opts [Numeric] :sample_rate sample rate, 1 for always
@@ -182,8 +197,11 @@ class Statsd
182
197
  def time(stat, opts={})
183
198
  start = Time.now
184
199
  result = yield
185
- timing(stat, ((Time.now - start) * 1000).round, opts)
200
+ time_since(stat, start, opts)
186
201
  result
202
+ rescue
203
+ time_since(stat, start, opts)
204
+ raise
187
205
  end
188
206
  # Sends a value to be tracked as a set to the statsd server.
189
207
  #
@@ -198,6 +216,49 @@ class Statsd
198
216
  send_stats stat, value, :s, opts
199
217
  end
200
218
 
219
+
220
+ # This method allows you to send custom service check statuses.
221
+ #
222
+ # @param [String] name Service check name
223
+ # @param [String] status Service check status.
224
+ # @param [Hash] opts the additional data about the service check
225
+ # @option opts [Integer, nil] :timestamp (nil) Assign a timestamp to the event. Default is now when none
226
+ # @option opts [String, nil] :hostname (nil) Assign a hostname to the event.
227
+ # @option opts [Array<String>, nil] :tags (nil) An array of tags
228
+ # @option opts [String, nil] :message (nil) A message to associate with this service check status
229
+ # @example Report a critical service check status
230
+ # $statsd.service_check('my.service.check', Statsd::CRITICAL, :tags=>['urgent'])
231
+ def service_check(name, status, opts={})
232
+ service_check_string = format_service_check(name, status, opts)
233
+ send_to_socket service_check_string
234
+ end
235
+ def format_service_check(name, status, opts={})
236
+ sc_string = "_sc|#{name}|#{status}"
237
+
238
+ SC_OPT_KEYS.each do |name_key|
239
+ if opts[name_key[0].to_sym]
240
+ if name_key[0] == 'tags'
241
+ tags = opts[:tags]
242
+ tags.each do |tag|
243
+ rm_pipes tag
244
+ end
245
+ tags = "#{tags.join(",")}" unless tags.empty?
246
+ sc_string << "|##{tags}"
247
+ elsif name_key[0] == 'message'
248
+ message = opts[:message]
249
+ rm_pipes message
250
+ escape_service_check_message message
251
+ sc_string << "|m:#{message}"
252
+ else
253
+ value = opts[name_key[0].to_sym]
254
+ rm_pipes value
255
+ sc_string << "|#{name_key[1]}#{value}"
256
+ end
257
+ end
258
+ end
259
+ return sc_string
260
+ end
261
+
201
262
  # This end point allows you to post events to the stream. You can tag them, set priority and even aggregate them with other events.
202
263
  #
203
264
  # Aggregation in the stream is made on hostname/event_type/source_type/aggregation_key.
@@ -207,13 +268,13 @@ class Statsd
207
268
  # @param [String] title Event title
208
269
  # @param [String] text Event text. Supports \n
209
270
  # @param [Hash] opts the additional data about the event
210
- # @option opts [Time, nil] :date_happened (nil) Assign a timestamp to the event. Default is now when none
271
+ # @option opts [Integer, nil] :date_happened (nil) Assign a timestamp to the event. Default is now when none
211
272
  # @option opts [String, nil] :hostname (nil) Assign a hostname to the event.
212
273
  # @option opts [String, nil] :aggregation_key (nil) Assign an aggregation key to the event, to group it with some others
213
274
  # @option opts [String, nil] :priority ('normal') Can be "normal" or "low"
214
275
  # @option opts [String, nil] :source_type_name (nil) Assign a source type to the event
215
276
  # @option opts [String, nil] :alert_type ('info') Can be "error", "warning", "info" or "success".
216
- # @option opts [Array<String>, nil] :source_type_name (nil) An array of tags
277
+ # @option opts [Array<String>] :tags tags to be added to every metric
217
278
  # @example Report an awful event:
218
279
  # $statsd.event('Something terrible happened', 'The end is near if we do nothing', :alert_type=>'warning', :tags=>['end_of_times','urgent'])
219
280
  def event(title, text, opts={})
@@ -232,10 +293,10 @@ class Statsd
232
293
  # s.increment('page.views')
233
294
  # end
234
295
  def batch()
235
- alias :send :send_to_buffer
296
+ alias :send_stat :send_to_buffer
236
297
  yield self
237
298
  flush_buffer
238
- alias :send :send_to_socket
299
+ alias :send_stat :send_to_socket
239
300
  end
240
301
 
241
302
  def format_event(title, text, opts={})
@@ -244,7 +305,7 @@ class Statsd
244
305
  event_string_data = "_e{#{title.length},#{text.length}}:#{title}|#{text}"
245
306
 
246
307
  # We construct the string to be sent by adding '|key:value' parts to it when needed
247
- # All pipes ('|') in the metada are removed. Title and Text can keep theirs
308
+ # All pipes ('|') in the metadata are removed. Title and Text can keep theirs
248
309
  OPTS_KEYS.each do |name_key|
249
310
  if name_key[0] != 'tags' && opts[name_key[0].to_sym]
250
311
  value = opts[name_key[0].to_sym]
@@ -252,25 +313,36 @@ class Statsd
252
313
  event_string_data << "|#{name_key[1]}:#{value}"
253
314
  end
254
315
  end
255
- tags = opts[:tags] || nil
316
+ full_tags = tags + (opts[:tags] || [])
256
317
  # Tags are joined and added as last part to the string to be sent
257
- if tags
258
- tags.each do |tag|
318
+ unless full_tags.empty?
319
+ full_tags.each do |tag|
259
320
  rm_pipes tag
260
321
  end
261
- tags = "#{tags.join(",")}" unless tags.empty?
262
- event_string_data << "|##{tags}"
322
+ event_string_data << "|##{full_tags.join(',')}"
263
323
  end
264
324
 
265
325
  raise "Event #{title} payload is too big (more that 8KB), event discarded" if event_string_data.length > 8 * 1024
266
326
  return event_string_data
267
327
  end
328
+
268
329
  private
330
+
269
331
  def escape_event_content(msg)
270
- msg = msg.sub! "\n", "\\n"
332
+ msg.gsub! "\n", "\\n"
271
333
  end
334
+
272
335
  def rm_pipes(msg)
273
- msg = msg.sub! "|", ""
336
+ msg.gsub! "|", ""
337
+ end
338
+
339
+ def escape_service_check_message(msg)
340
+ msg.gsub! 'm:', 'm\:'
341
+ msg.gsub! "\n", "\\n"
342
+ end
343
+
344
+ def time_since(stat, start, opts)
345
+ timing(stat, ((Time.now - start) * 1000).round, opts)
274
346
  end
275
347
 
276
348
  def send_stats(stat, delta, type, opts={})
@@ -281,7 +353,7 @@ class Statsd
281
353
  rate = "|@#{sample_rate}" unless sample_rate == 1
282
354
  ts = (tags || []) + (opts[:tags] || [])
283
355
  tags = "|##{ts.join(",")}" unless ts.empty?
284
- send "#{@prefix}#{stat}:#{delta}|#{type}#{rate}#{tags}"
356
+ send_stat "#{@prefix}#{stat}:#{delta}|#{type}#{rate}#{tags}"
285
357
  end
286
358
  end
287
359
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dogstatsd-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rein Henrichs
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-29 00:00:00.000000000 Z
11
+ date: 2015-05-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -102,4 +102,3 @@ signing_key:
102
102
  specification_version: 4
103
103
  summary: A Ruby DogStatsd client
104
104
  test_files: []
105
- has_rdoc: