dogstatsd-ruby 1.3.0 → 1.4.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 (4) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +23 -0
  3. data/lib/statsd.rb +41 -4
  4. metadata +67 -88
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 93021b35d28b353f50ffd4e6c27b5dfe3881f6a1
4
+ data.tar.gz: 15f63c6b4b48b5947029863633a0f3859ec932df
5
+ SHA512:
6
+ metadata.gz: 8a5110a43772bd0c4d02d04a9b501c01da66c10f0c17ed3afd3e8bea0585418fce5ecc8f5026f115fc4d6a53e46e488d4e9d286a491fbbf90fe8206e80063516
7
+ data.tar.gz: db4ded7c2533b144275edb923abccc69456ed07984bda0dc7f480b40af0c6aa27acc19925255ef40ab92fa5e5f9261947fae865bd56102b6f1a5c2c74bc9b32f
data/README.md CHANGED
@@ -36,10 +36,31 @@ statsd.time('page.render') do
36
36
  render_page('home.html')
37
37
  end
38
38
 
39
+ # Send several metrics at the same time
40
+ # All metrics will be buffered and sent in one packet when the block completes
41
+ statsd.batch do |s|
42
+ s.increment('page.views')
43
+ s.gauge('users.online', 123)
44
+ end
45
+
39
46
  # Tag a metric.
40
47
  statsd.histogram('query.time', 10, :tags => ["version:1"])
41
48
  ```
42
49
 
50
+ You can also post events to your stream. You can tag them, set priority and even aggregate them with other events.
51
+
52
+ Aggregation in the stream is made on hostname/event_type/source_type/aggregation_key.
53
+
54
+ ``` ruby
55
+ # Post a simple message
56
+ statsd.event("There might be a storm tomorrow", "A friend warned me earlier.")
57
+
58
+ # Cry for help
59
+ statsd.event("SO MUCH SNOW", "Started yesterday and it won't stop !!", :alert_type => "error", :tags => ["urgent", "endoftheworld"])
60
+ ```
61
+
62
+
63
+
43
64
  Documentation
44
65
  -------------
45
66
 
@@ -57,6 +78,8 @@ To suggest a feature, report a bug, or general discussion, head over
57
78
  Change Log
58
79
  ----------
59
80
 
81
+ - 1.4.0
82
+ - Added support for metrics batching
60
83
  - 1.3.0
61
84
  - Added support for submitting events.
62
85
  - 1.2.0
@@ -44,6 +44,12 @@ class Statsd
44
44
  # Global tags to be added to every statsd call. Defaults to no tags.
45
45
  attr_reader :tags
46
46
 
47
+ # Buffer containing the statsd message before they are sent in batch
48
+ attr_reader :buffer
49
+
50
+ # Maximum number of metrics in the buffer before it is flushed
51
+ attr_accessor :max_buffer_size
52
+
47
53
  class << self
48
54
  # Set to a standard logger instance to enable debug logging.
49
55
  attr_accessor :logger
@@ -51,19 +57,22 @@ class Statsd
51
57
 
52
58
  # Return the current version of the library.
53
59
  def self.VERSION
54
- "1.3.0"
60
+ "1.4.0"
55
61
  end
56
62
 
57
63
  # @param [String] host your statsd host
58
64
  # @param [Integer] port your statsd port
59
65
  # @option opts [String] :namespace set a namespace to be prepended to every metric name
60
66
  # @option opts [Array<String>] :tags tags to be added to every metric
61
- def initialize(host = DEFAULT_HOST, port = DEFAULT_PORT, opts = {})
67
+ def initialize(host = DEFAULT_HOST, port = DEFAULT_PORT, opts = {}, max_buffer_size=50)
62
68
  self.host, self.port = host, port
63
69
  @prefix = nil
64
70
  @socket = UDPSocket.new
65
71
  self.namespace = opts[:namespace]
66
72
  self.tags = opts[:tags]
73
+ @buffer = Array.new
74
+ self.max_buffer_size = max_buffer_size
75
+ alias :send :send_to_socket
67
76
  end
68
77
 
69
78
  def namespace=(namespace) #:nodoc:
@@ -205,7 +214,7 @@ class Statsd
205
214
  # @option opts [String, nil] :source_type_name (nil) Assign a source type to the event
206
215
  # @option opts [String, nil] :alert_type ('info') Can be "error", "warning", "info" or "success".
207
216
  # @option opts [Array<String>, nil] :source_type_name (nil) An array of tags
208
- # @example Report an aweful event:
217
+ # @example Report an awful event:
209
218
  # $statsd.event('Something terrible happened', 'The end is near if we do nothing', :alert_type=>'warning', :tags=>['end_of_times','urgent'])
210
219
  def event(title, text, opts={})
211
220
  event_string = format_event(title, text, opts)
@@ -213,6 +222,22 @@ class Statsd
213
222
 
214
223
  send_to_socket event_string
215
224
  end
225
+
226
+ # Send several metrics in the same UDP Packet
227
+ # They will be buffered and flushed when the block finishes
228
+ #
229
+ # @example Send several metrics in one packet:
230
+ # $statsd.batch do |s|
231
+ # s.gauge('users.online',156)
232
+ # s.increment('page.views')
233
+ # end
234
+ def batch()
235
+ alias :send :send_to_buffer
236
+ yield self
237
+ flush_buffer
238
+ alias :send :send_to_socket
239
+ end
240
+
216
241
  def format_event(title, text, opts={})
217
242
  escape_event_content title
218
243
  escape_event_content text
@@ -256,10 +281,22 @@ class Statsd
256
281
  rate = "|@#{sample_rate}" unless sample_rate == 1
257
282
  ts = (tags || []) + (opts[:tags] || [])
258
283
  tags = "|##{ts.join(",")}" unless ts.empty?
259
- send_to_socket "#{@prefix}#{stat}:#{delta}|#{type}#{rate}#{tags}"
284
+ send "#{@prefix}#{stat}:#{delta}|#{type}#{rate}#{tags}"
260
285
  end
261
286
  end
262
287
 
288
+ def send_to_buffer(message)
289
+ @buffer << message
290
+ if @buffer.length >= @max_buffer_size
291
+ flush_buffer
292
+ end
293
+ end
294
+
295
+ def flush_buffer()
296
+ send_to_socket(@buffer.join('\n'))
297
+ @buffer = Array.new
298
+ end
299
+
263
300
  def send_to_socket(message)
264
301
  self.class.logger.debug { "Statsd: #{message}" } if self.class.logger
265
302
  @socket.send(message, 0, @host, @port)
metadata CHANGED
@@ -1,126 +1,105 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: dogstatsd-ruby
3
- version: !ruby/object:Gem::Version
4
- hash: 27
5
- prerelease:
6
- segments:
7
- - 1
8
- - 3
9
- - 0
10
- version: 1.3.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.4.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Rein Henrichs
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2014-03-27 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
11
+ date: 2014-07-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
21
14
  name: minitest
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
26
17
  - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
32
20
  type: :development
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: yard
36
21
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
38
- none: false
39
- requirements:
40
- - - ~>
41
- - !ruby/object:Gem::Version
42
- hash: 7
43
- segments:
44
- - 0
45
- - 6
46
- - 0
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: yard
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
47
33
  version: 0.6.0
48
34
  type: :development
49
- version_requirements: *id002
50
- - !ruby/object:Gem::Dependency
51
- name: jeweler
52
35
  prerelease: false
53
- requirement: &id003 !ruby/object:Gem::Requirement
54
- none: false
55
- requirements:
56
- - - ~>
57
- - !ruby/object:Gem::Version
58
- hash: 31
59
- segments:
60
- - 1
61
- - 8
62
- version: "1.8"
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.6.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: jeweler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.8'
63
48
  type: :development
64
- version_requirements: *id003
65
- - !ruby/object:Gem::Dependency
66
- name: simplecov
67
49
  prerelease: false
68
- requirement: &id004 !ruby/object:Gem::Requirement
69
- none: false
70
- requirements:
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.8'
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
71
59
  - - ">="
72
- - !ruby/object:Gem::Version
73
- hash: 3
74
- segments:
75
- - 0
76
- version: "0"
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
77
62
  type: :development
78
- version_requirements: *id004
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
79
69
  description: A Ruby DogStastd client
80
70
  email: code@datadoghq.com
81
71
  executables: []
82
-
83
72
  extensions: []
84
-
85
- extra_rdoc_files:
73
+ extra_rdoc_files:
86
74
  - LICENSE.txt
87
75
  - README.md
88
- files:
76
+ files:
89
77
  - LICENSE.txt
90
78
  - README.md
91
79
  - lib/statsd.rb
92
80
  homepage: http://github.com/datadog/dogstatsd-ruby
93
- licenses:
81
+ licenses:
94
82
  - MIT
83
+ metadata: {}
95
84
  post_install_message:
96
85
  rdoc_options: []
97
-
98
- require_paths:
86
+ require_paths:
99
87
  - lib
100
- required_ruby_version: !ruby/object:Gem::Requirement
101
- none: false
102
- requirements:
88
+ required_ruby_version: !ruby/object:Gem::Requirement
89
+ requirements:
103
90
  - - ">="
104
- - !ruby/object:Gem::Version
105
- hash: 3
106
- segments:
107
- - 0
108
- version: "0"
109
- required_rubygems_version: !ruby/object:Gem::Requirement
110
- none: false
111
- requirements:
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
+ requirements:
112
95
  - - ">="
113
- - !ruby/object:Gem::Version
114
- hash: 3
115
- segments:
116
- - 0
117
- version: "0"
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
118
98
  requirements: []
119
-
120
99
  rubyforge_project:
121
- rubygems_version: 1.8.15
100
+ rubygems_version: 2.2.2
122
101
  signing_key:
123
- specification_version: 3
102
+ specification_version: 4
124
103
  summary: A Ruby DogStatsd client
125
104
  test_files: []
126
-
105
+ has_rdoc: