statsd-client 0.0.3 → 0.0.4

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/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source :rubygems
2
+ gemspec
@@ -0,0 +1,18 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ statsd-client (0.0.4)
5
+
6
+ GEM
7
+ remote: http://rubygems.org/
8
+ specs:
9
+ mocha (0.9.12)
10
+ shoulda-context (1.0.0.beta1)
11
+
12
+ PLATFORMS
13
+ ruby
14
+
15
+ DEPENDENCIES
16
+ mocha
17
+ shoulda-context
18
+ statsd-client!
@@ -0,0 +1,13 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ $LOAD_PATH.unshift 'lib'
5
+
6
+ task :default => :test
7
+
8
+ desc "Run tests"
9
+ task :test do
10
+ Dir['test/*_test.rb'].each do |f|
11
+ require File.expand_path(f)
12
+ end
13
+ end
@@ -1,13 +1,23 @@
1
1
  require 'socket'
2
+ require 'resolv'
2
3
 
3
4
  class Statsd
4
5
 
5
- Version = '0.0.3'
6
+ Version = '0.0.4'
6
7
 
7
8
  class << self
8
9
 
9
10
  attr_accessor :host, :port
10
11
 
12
+ def host_ip_addr
13
+ @host_ip_addr ||= Resolv.getaddress(host)
14
+ end
15
+
16
+ def host=(h)
17
+ @host_ip_addr = nil
18
+ @host = h
19
+ end
20
+
11
21
  # +stat+ to log timing for
12
22
  # +time+ is the time to log in ms
13
23
  def timing(stat, time, sample_rate = 1)
@@ -53,7 +63,7 @@ class Statsd
53
63
  begin
54
64
  sock = UDPSocket.new
55
65
  data.each do |d|
56
- sock.send(d, 0, host, port)
66
+ sock.send(d, 0, host_ip_addr, port)
57
67
  end
58
68
  rescue # silent but deadly
59
69
  ensure
@@ -61,9 +71,7 @@ class Statsd
61
71
  end
62
72
  true
63
73
  end
64
-
65
74
 
66
75
  end
67
76
 
68
-
69
77
  end
@@ -16,5 +16,9 @@ Gem::Specification.new do |s|
16
16
  s.files = `git ls-files`.split("\n")
17
17
  s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
18
18
  s.require_path = 'lib'
19
+
20
+ s.add_development_dependency("shoulda-context")
21
+ s.add_development_dependency("mocha")
22
+
19
23
  end
20
24
 
@@ -0,0 +1,124 @@
1
+ require File.expand_path('../test_helper', __FILE__)
2
+
3
+ class StatsdTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ Statsd.host = 'localhost'
7
+ Statsd.port = 8125
8
+ super
9
+ end
10
+
11
+ context "timing" do
12
+
13
+ should "send with ms" do
14
+ expected_send('test.stat:23|ms')
15
+ Statsd.timing('test.stat', 23)
16
+ end
17
+
18
+ should "log when sampled" do
19
+ fake_rand(0.09)
20
+ expected_send('test.stat:23|ms@0.1')
21
+ Statsd.timing('test.stat', 23, 0.1)
22
+ end
23
+
24
+ should "not log when not sampled" do
25
+ fake_rand(0.11)
26
+ expect_nothing
27
+ Statsd.timing('test.stat', 23, 0.1)
28
+ end
29
+
30
+ end
31
+
32
+ context "increment" do
33
+
34
+ should "send number" do
35
+ expected_send('test.stat:1|c')
36
+ Statsd.increment('test.stat')
37
+ end
38
+
39
+ should "log when sampled" do
40
+ fake_rand(0.09)
41
+ expected_send('test.stat:1|c@0.1')
42
+ Statsd.increment('test.stat', 0.1)
43
+ end
44
+
45
+ should "not log when not sampled" do
46
+ fake_rand(0.11)
47
+ expect_nothing
48
+ Statsd.increment('test.stat', 0.1)
49
+ end
50
+
51
+ end
52
+
53
+ context "decrement" do
54
+
55
+ should "send number" do
56
+ expected_send('test.stat:-1|c')
57
+ Statsd.decrement('test.stat')
58
+ end
59
+
60
+ should "log when sampled" do
61
+ fake_rand(0.09)
62
+ expected_send('test.stat:-1|c@0.1')
63
+ Statsd.decrement('test.stat', 0.1)
64
+ end
65
+
66
+ should "not log when not sampled" do
67
+ fake_rand(0.11)
68
+ expect_nothing
69
+ Statsd.decrement('test.stat', 0.1)
70
+ end
71
+
72
+ end
73
+
74
+ context "host" do
75
+
76
+ should "be gettable and settable" do
77
+ Statsd.host = 'statsd-01'
78
+ assert_equal 'statsd-01', Statsd.host
79
+ end
80
+
81
+ end
82
+
83
+ context "port" do
84
+
85
+ should "be gettable and settable" do
86
+ Statsd.port = 1234
87
+ assert_equal 1234, Statsd.port
88
+ end
89
+
90
+ end
91
+
92
+ context "host_ip_addr" do
93
+
94
+ should "resolve dns" do
95
+ Statsd.host = 'localhost'
96
+ assert loopback?(Statsd.host_ip_addr)
97
+ end
98
+
99
+ should "be cleared when host is set" do
100
+ Statsd.host = 'statsd-01'
101
+ assert_nil Statsd.instance_variable_get(:@host_ip_addr)
102
+ end
103
+
104
+ end
105
+
106
+ private
107
+
108
+ def fake_rand(v)
109
+ Statsd.stubs(:rand).returns(v)
110
+ end
111
+
112
+ def expected_send(buf)
113
+ UDPSocket.any_instance.expects(:send).with(buf, 0, Statsd.host_ip_addr, Statsd.port).once
114
+ end
115
+
116
+ def expect_nothing
117
+ UDPSocket.any_instance.expects(:send).never
118
+ end
119
+
120
+ def loopback?(ip)
121
+ ['::1', '127.0.0.1'].include?(ip)
122
+ end
123
+
124
+ end
@@ -0,0 +1,7 @@
1
+
2
+ require 'shoulda-context'
3
+ require 'mocha'
4
+
5
+ # initialize to something
6
+ Statsd.host = 'localhost'
7
+ Statsd.port = 8125
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 3
9
- version: 0.0.3
8
+ - 4
9
+ version: 0.0.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - Ben VandenBos
@@ -14,10 +14,35 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-02-23 00:00:00 -08:00
17
+ date: 2011-04-20 00:00:00 -07:00
18
18
  default_executable:
19
- dependencies: []
20
-
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: shoulda-context
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ version: "0"
31
+ type: :development
32
+ version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: mocha
35
+ prerelease: false
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ version: "0"
44
+ type: :development
45
+ version_requirements: *id002
21
46
  description: Ruby client for statsd.
22
47
  email:
23
48
  - bvandenbos@gmail.com
@@ -29,9 +54,14 @@ extra_rdoc_files: []
29
54
 
30
55
  files:
31
56
  - .gitignore
57
+ - Gemfile
58
+ - Gemfile.lock
32
59
  - README.md
60
+ - Rakefile
33
61
  - lib/statsd.rb
34
62
  - statsd-client.gemspec
63
+ - test/statsd_test.rb
64
+ - test/test_helper.rb
35
65
  has_rdoc: true
36
66
  homepage: http://github.com/bvandenbos/statsd-client
37
67
  licenses: []