mini_graphite 0.2.1 → 0.3.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 92947456f8f553f0a525e9d8f97acbe1f2773e6a
4
- data.tar.gz: 05a251b574bda29749c5c0517a686b198d4681fe
3
+ metadata.gz: 0978431fccda978ce88aa42cc663872044f184e9
4
+ data.tar.gz: d75a452d76d670b6595415b3488df2b6f6b41d16
5
5
  SHA512:
6
- metadata.gz: 4128d24584db3382ff7bf91003f438d9a8f4598bfc06b631298ee09567068709c4ea52e0bb9434afc07d62b40a1427b9ebb07a67ff136c7154a489bd31122b68
7
- data.tar.gz: 24f18c3064f099276adcab1e9379e90b94bd8a7cecae34d123a6482d49a45065388dc5c6aa3b53b3af568827dd4351ff713c24b813c77026e1fbe4fb89a53e83
6
+ metadata.gz: 6665b43f77ec8da1ef2e8ef350e081aecc958c96e642196d424f56f63ac3b9bdbcae2895f0a8b9b727bc1f29d355df2c43f9996d2d30b890d16a1dd3fd001900
7
+ data.tar.gz: 5d05a3e739bc09300b7e36f1640812fb1190f4455bb26a5ee38fa83841879e1f52429ad8011373a08e274158cae871ee79ec09949b05a76ad0abda36a7663238
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+
3
+ notifications:
4
+ email:
5
+ - developers@daliaresearch.com
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Simple wrapper for Graphite and Statsd
4
4
 
5
- ## Instructions
5
+ ## Instructions
6
6
 
7
7
  Check the `test` folder for examples, if you need more explanations please contact us.
8
8
 
@@ -27,7 +27,18 @@ Or install it yourself as:
27
27
  Dalia::MiniGraphite.config({
28
28
  :graphite_host => "my.graphite.server.com",
29
29
  :graphite_port => 2003, # default 2003
30
- :statsd_host => "my.graphite.server.com",
30
+ :statsd_host => "my.statsd.server.com",
31
+ :statsd_port => 8125, # default 8125
32
+ :mock_mode => false, # default false
33
+ :debug_mode => true # default false
34
+ })
35
+
36
+ Also support multiple servers:
37
+
38
+ Dalia::MiniGraphite.config({
39
+ :graphite_host => ["my.graphite1.server.com", "my.graphite2.server.com"],
40
+ :graphite_port => 2003, # default 2003
41
+ :statsd_host => ["my.statsd1.server.com", "my.statsd2.server.com", "my.statsd3.server.com"],
31
42
  :statsd_port => 8125, # default 8125
32
43
  :mock_mode => false, # default false
33
44
  :debug_mode => true # default false
@@ -36,24 +47,27 @@ Or install it yourself as:
36
47
  ### Simple signals
37
48
 
38
49
  Dalia::MiniGraphite.datapoint("my.key", 120, Time.now) # to Graphite
39
- Dalia::MiniGraphite.counter("my.key", 120) # to StatSD
50
+ Dalia::MiniGraphite.counter("my.key", 120) # to StatSD with `c` modifyer
51
+ Dalia::MiniGraphite.time("my.key", 120) # to StatSD with `ms` modifyer
40
52
 
41
53
  ### Block wrapper benchmark
42
54
 
55
+ # Dalia::MiniGraphite.benchmark_wrapper(key_prefix, result_send_method)
43
56
  result =
44
- Dalia::MiniGraphite.benchmark_wrapper("key_prefix", [send_result={true,false}]) do
57
+ Dalia::MiniGraphite.benchmark_wrapper("key_prefix", :length) do
45
58
  sleep(1)
46
59
  "RESULT"
47
60
  end
48
61
 
49
62
  puts result # => RESULT
50
63
 
51
- This will send 4 signals:
64
+ This will send several signals:
52
65
 
53
- - *key_prefix.ini* # At the begining of the block
54
- - *key_prefix.result* # At the end of the block, send the block result. Only if `send_result` paramater is `true`.
55
- - *key_prefix.time, [ms]* # At the end of the block, with the Benchmark.realtime result of the execution
56
- - *key_prefix.end* # At the end of the block
66
+ - *key_prefix.ini:1|c* # At the begining of the block
67
+ - *key_prefix.result:6|c* # At the end of the block, send the block `result.send(result_send_method)`. Only if `result_send_method` paramater is present.
68
+ - *key_prefix.time:1000|c* # At the end of the block, with the Benchmark.realtime result of the execution
69
+ - *key_prefix.end:1|c* # At the end of the block
70
+ - *key_prefix.time_stats:1000|ms* # At the end of the block, with the Benchmark.realtime result of the execution
57
71
 
58
72
  ### Routes reporter for Sinatra
59
73
 
@@ -61,8 +75,9 @@ The rack middleware must be added to the Rack chain in config.ru passing along w
61
75
 
62
76
  - *set_graphite_key "graphite_key", /route_regexp/* # The regular expression will be used to match the Sinatra route and the corresponding graphite_key will be used to build the Graphite metrics:
63
77
 
64
- "[graphite_key].count" # The counter of the times a particular route is requested.
65
- "[graphite_key].duration" # The duration in milliseconds of each request/response cycle.
78
+ - "[graphite\_key].count" # The counter of the times a particular route is requested.
79
+ - "[graphite\_key].duration" # The duration in milliseconds of each request/response cycle.
80
+ - "[graphite\_key].duration\_stats" # The duration in milliseconds of each request/response cycle in a "ms" metric
66
81
 
67
82
  If the requested url doesn't match any configured regular expression the Graphite metrics will not be sent.
68
83
 
@@ -30,14 +30,22 @@ module Dalia
30
30
  send_tcp(signal) if !opts[:mock_mode]
31
31
  end
32
32
 
33
- def self.counter(key, value = 1)
33
+ def self.counter(key, value = nil)
34
+ value ||= 1
34
35
  signal = "#{key}:#{value}|c"
35
36
  logger.debug("Sending counter: '#{signal}'")
36
37
 
37
38
  send_udp(signal) if !opts[:mock_mode]
38
39
  end
39
40
 
40
- def self.benchmark_wrapper(key, send_result = false)
41
+ def self.time(key, value = 0)
42
+ signal = "#{key}:#{value}|ms"
43
+ logger.debug("Sending time: '#{signal}'")
44
+
45
+ send_udp(signal) if !opts[:mock_mode]
46
+ end
47
+
48
+ def self.benchmark_wrapper(key, result_send_method = nil)
41
49
  counter("#{key}.ini")
42
50
 
43
51
  result = nil
@@ -48,33 +56,50 @@ module Dalia
48
56
  end
49
57
 
50
58
  counter("#{key}.time", time * 1000)
51
- counter("#{key}.result", result) if send_result
59
+ counter("#{key}.result", result.send(result_send_method)) if result_send_method
52
60
  counter("#{key}.end")
53
61
 
62
+ time("#{key}.time_stats", time * 1000)
63
+
54
64
  result
55
65
  end
56
66
 
57
- private
67
+ def self.send_tcp(message)
68
+ hosts = [opts[:graphite_host]].flatten
58
69
 
59
- def self.opts
60
- @opts
70
+ hosts.each do |host|
71
+ send_tcp_on_host(host, opts[:graphite_port], message)
72
+ end
61
73
  end
62
74
 
63
- def self.logger
64
- @logger
75
+ def self.send_udp(message)
76
+ hosts = [opts[:statsd_host]].flatten
77
+
78
+ hosts.each do |host|
79
+ send_udp_on_host(host, opts[:statsd_port], message)
80
+ end
65
81
  end
66
82
 
67
- def self.send_tcp(message)
68
- socket = TCPSocket.new(opts[:graphite_host], opts[:graphite_port])
83
+ def self.send_tcp_on_host(host, port, message)
84
+ socket = TCPSocket.new(host, port)
69
85
  socket.print("#{message}\n")
70
86
  socket.close
71
87
  end
72
88
 
73
- def self.send_udp(message)
89
+ def self.send_udp_on_host(host, port, message)
74
90
  socket = UDPSocket.new
75
- socket.send(message, 0, opts[:statsd_host], opts[:statsd_port])
91
+ socket.send(message, 0, host, port)
76
92
  socket.close
77
93
  end
78
94
 
95
+ private
96
+
97
+ def self.opts
98
+ @opts
99
+ end
100
+
101
+ def self.logger
102
+ @logger
103
+ end
79
104
  end
80
105
  end
@@ -14,7 +14,7 @@ module Dalia
14
14
 
15
15
  result = "Dalia::MiniGraphite [#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}]: #{message}"
16
16
 
17
- if defined? ::Rails
17
+ if defined? ::Rails.logger
18
18
  ::Rails.logger.info result
19
19
  else
20
20
  Kernel.puts result
@@ -20,6 +20,7 @@ module Dalia
20
20
 
21
21
  Dalia::MiniGraphite.counter("#{graphite_key}.count") if graphite_key
22
22
  Dalia::MiniGraphite.counter("#{graphite_key}.duration", time_taken) if graphite_key
23
+ Dalia::MiniGraphite.time("#{graphite_key}.duration_stats", time_taken) if graphite_key
23
24
  end
24
25
 
25
26
  [status, headers, body]
@@ -31,4 +32,4 @@ module Dalia
31
32
  end
32
33
  end
33
34
  end
34
- end
35
+ end
@@ -1,5 +1,5 @@
1
1
  module Dalia
2
2
  module MiniGraphite
3
- VERSION = "0.2.1"
3
+ VERSION = "0.3.7"
4
4
  end
5
- end
5
+ end
@@ -6,8 +6,8 @@ require 'mini_graphite/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "mini_graphite"
8
8
  spec.version = Dalia::MiniGraphite::VERSION
9
- spec.authors = ["Sevastianos Komianos"]
10
- spec.email = ["sebastian.komianos@daliaresearch.com"]
9
+ spec.authors = ["Sevastianos Komianos", "Fernando Guillen"]
10
+ spec.email = ["it@daliaresearch.com"]
11
11
  spec.summary = "Simple wrapper for Graphite and Statsd"
12
12
  spec.description = "Simple wrapper for Graphite and Statsd"
13
13
  spec.homepage = "https://github.com/DaliaResearch/MiniGraphite"
@@ -2,7 +2,7 @@ require "minitest/autorun"
2
2
  require "mocha/setup"
3
3
  require_relative "../lib/mini_graphite"
4
4
 
5
- class MiniGraphiteTest < MiniTest::Unit::TestCase
5
+ class MiniGraphiteTest < MiniTest::Test
6
6
 
7
7
  def test_debug
8
8
  Kernel.expects(:puts).with(regexp_matches(/MESSAGE/))
@@ -17,10 +17,9 @@ class MiniGraphiteTest < MiniTest::Unit::TestCase
17
17
  end
18
18
 
19
19
  def test_debug_when_rails_actived
20
- Kernel.const_set("Rails", mock(:logger => mock(:info)))
20
+ Rails.expects(:logger => mock(:info))
21
21
  logger = Dalia::MiniGraphite::Logger.new
22
22
  logger.debug("MESSAGE")
23
- Kernel.send(:remove_const, :Rails)
24
23
  end
25
24
 
26
25
  end
@@ -2,28 +2,78 @@ require "minitest/autorun"
2
2
  require "mocha/setup"
3
3
  require_relative "../lib/mini_graphite"
4
4
 
5
- class MiniGraphiteTest < MiniTest::Unit::TestCase
5
+ class MiniGraphiteTest < MiniTest::Test
6
6
 
7
- def test_datapoint
8
- Dalia::MiniGraphite.config({ :graphite_host => "graphite.host.com", :graphite_port => 2003 })
7
+ def test_send_tcp_on_host
8
+ socket_mock = mock()
9
+ TCPSocket.expects(:new).with("HOST", "PORT").returns(socket_mock)
10
+ socket_mock.expects(:print).with("MESSAGE\n")
11
+ socket_mock.expects(:close)
9
12
 
13
+ Dalia::MiniGraphite.send_tcp_on_host("HOST", "PORT", "MESSAGE")
14
+ end
15
+
16
+ def test_send_udp_on_host
10
17
  socket_mock = mock()
11
- TCPSocket.expects(:new).with("graphite.host.com", 2003).returns(socket_mock)
12
- socket_mock.expects(:print).with("test.age 31 1357117860\n")
18
+ UDPSocket.expects(:new).returns(socket_mock)
19
+ socket_mock.expects(:send).with("MESSAGE", 0, "HOST", "PORT" )
13
20
  socket_mock.expects(:close)
14
21
 
22
+ Dalia::MiniGraphite.send_udp_on_host("HOST", "PORT", "MESSAGE")
23
+ end
24
+
25
+ def test_send_tcp
26
+ Dalia::MiniGraphite.config({ :graphite_host => "HOST", :graphite_port => "PORT" })
27
+ Dalia::MiniGraphite.expects(:send_tcp_on_host).with("HOST", "PORT", "MESSAGE")
28
+ Dalia::MiniGraphite.send_tcp("MESSAGE")
29
+ end
30
+
31
+ def test_send_tcp_when_multiple_hosts
32
+ Dalia::MiniGraphite.config({ :graphite_host => ["HOST1", "HOST2"], :graphite_port => "PORT" })
33
+
34
+ Dalia::MiniGraphite.expects(:send_tcp_on_host).with("HOST1", "PORT", "MESSAGE")
35
+ Dalia::MiniGraphite.expects(:send_tcp_on_host).with("HOST2", "PORT", "MESSAGE")
36
+
37
+ Dalia::MiniGraphite.send_tcp("MESSAGE")
38
+ end
39
+
40
+ def test_send_udp
41
+ Dalia::MiniGraphite.config({ :statsd_host => "HOST", :statsd_port => "PORT" })
42
+ Dalia::MiniGraphite.expects(:send_udp_on_host).with("HOST", "PORT", "MESSAGE")
43
+ Dalia::MiniGraphite.send_udp("MESSAGE")
44
+ end
45
+
46
+ def test_send_udp_when_multiple_hosts
47
+ Dalia::MiniGraphite.config({ :statsd_host => ["HOST1", "HOST2"], :statsd_port => "PORT" })
48
+
49
+ Dalia::MiniGraphite.expects(:send_udp_on_host).with("HOST1", "PORT", "MESSAGE")
50
+ Dalia::MiniGraphite.expects(:send_udp_on_host).with("HOST2", "PORT", "MESSAGE")
51
+
52
+ Dalia::MiniGraphite.send_udp("MESSAGE")
53
+ end
54
+
55
+ def test_datapoint
56
+ Dalia::MiniGraphite.config({ :graphite_host => "graphite.host.com", :graphite_port => 2003 })
57
+ Dalia::MiniGraphite.expects(:send_tcp).with("test.age 31 1357117860")
15
58
  Dalia::MiniGraphite.datapoint("test.age", 31, Time.new(2013,1,2,10,11))
16
59
  end
17
60
 
18
61
  def test_counter
19
62
  Dalia::MiniGraphite.config({ :statsd_host => "statsd.host.com", :statsd_port => 8125 })
63
+ Dalia::MiniGraphite.expects(:send_udp).with("height:231|c")
64
+ Dalia::MiniGraphite.counter("height", 231)
65
+ end
20
66
 
21
- socket_mock = mock()
22
- UDPSocket.expects(:new).returns(socket_mock)
23
- socket_mock.expects(:send).with("height:231|c", 0, "statsd.host.com", 8125 )
24
- socket_mock.expects(:close)
67
+ def test_time
68
+ Dalia::MiniGraphite.config({ :statsd_host => "statsd.host.com", :statsd_port => 8125 })
69
+ Dalia::MiniGraphite.expects(:send_udp).with("my_time:231|ms")
70
+ Dalia::MiniGraphite.time("my_time", 231)
71
+ end
25
72
 
26
- Dalia::MiniGraphite.counter("height", 231)
73
+ def test_counter_when_nil_value
74
+ Dalia::MiniGraphite.config({ :statsd_host => "statsd.host.com", :statsd_port => 8125 })
75
+ Dalia::MiniGraphite.expects(:send_udp).with("height:1|c")
76
+ Dalia::MiniGraphite.counter("height", nil)
27
77
  end
28
78
 
29
79
  def test_on_config_should_debug
@@ -49,13 +99,13 @@ class MiniGraphiteTest < MiniTest::Unit::TestCase
49
99
 
50
100
  def test_on_datapoint_not_send_tcp_if_mock_mode
51
101
  Dalia::MiniGraphite.config(:mock_mode => true)
52
- TCPSocket.expects(:new).never
102
+ Dalia::MiniGraphite.expects(:send_tcp).never
53
103
  Dalia::MiniGraphite.datapoint("test.age")
54
104
  end
55
105
 
56
106
  def test_on_counter_not_send_udp_if_mock_mode
57
107
  Dalia::MiniGraphite.config(:mock_mode => true)
58
- UDPSocket.expects(:new).never
108
+ Dalia::MiniGraphite.expects(:send_udp).never
59
109
  Dalia::MiniGraphite.counter("test.age")
60
110
  end
61
111
 
@@ -65,6 +115,8 @@ class MiniGraphiteTest < MiniTest::Unit::TestCase
65
115
  Dalia::MiniGraphite.expects(:counter).with("key_prefix.result").never
66
116
  Dalia::MiniGraphite.expects(:counter).with("key_prefix.end")
67
117
 
118
+ Dalia::MiniGraphite.expects(:time).with("key_prefix.time_stats", is_a(Float))
119
+
68
120
  result =
69
121
  Dalia::MiniGraphite.benchmark_wrapper("key_prefix") do
70
122
  sleep(1)
@@ -77,11 +129,13 @@ class MiniGraphiteTest < MiniTest::Unit::TestCase
77
129
  def test_benchmark_wrapper_sending_result
78
130
  Dalia::MiniGraphite.expects(:counter).with("key_prefix.ini")
79
131
  Dalia::MiniGraphite.expects(:counter).with("key_prefix.time", is_a(Float))
80
- Dalia::MiniGraphite.expects(:counter).with("key_prefix.result", "RESULT")
132
+ Dalia::MiniGraphite.expects(:counter).with("key_prefix.result", 6)
81
133
  Dalia::MiniGraphite.expects(:counter).with("key_prefix.end")
82
134
 
135
+ Dalia::MiniGraphite.expects(:time).with("key_prefix.time_stats", is_a(Float))
136
+
83
137
  result =
84
- Dalia::MiniGraphite.benchmark_wrapper("key_prefix", true) do
138
+ Dalia::MiniGraphite.benchmark_wrapper("key_prefix", :length) do
85
139
  sleep(1)
86
140
  "RESULT"
87
141
  end
@@ -24,21 +24,25 @@ class RoutesReporter < Minitest::Test
24
24
  def test_send_routes_metrics_to_graphite
25
25
  Dalia::MiniGraphite.expects(:counter).with("app.test_app.test.routes.homepage.duration", instance_of(Float))
26
26
  Dalia::MiniGraphite.expects(:counter).with("app.test_app.test.routes.homepage.count")
27
+ Dalia::MiniGraphite.expects(:time).with("app.test_app.test.routes.homepage.duration_stats", instance_of(Float))
27
28
  @request.get("/", {"sinatra.route" => "/"})
28
29
 
29
30
  Dalia::MiniGraphite.expects(:counter).with("app.test_app.test.routes.get_surveys.duration", instance_of(Float))
30
31
  Dalia::MiniGraphite.expects(:counter).with("app.test_app.test.routes.get_surveys.count")
32
+ Dalia::MiniGraphite.expects(:time).with("app.test_app.test.routes.get_surveys.duration_stats", instance_of(Float))
31
33
  @request.get("/OFFER_CLICK_ID/PANEL_USER_ID/PANEL_USER_ID_KIND", {"sinatra.route" => "/:offer_click_id/:panel_user_id/:panel_user_id_kind/"})
32
34
 
33
35
  Dalia::MiniGraphite.expects(:counter).with("app.test_app.test.routes.error.duration", instance_of(Float))
34
36
  Dalia::MiniGraphite.expects(:counter).with("app.test_app.test.routes.error.count")
37
+ Dalia::MiniGraphite.expects(:time).with("app.test_app.test.routes.error.duration_stats", instance_of(Float))
35
38
  @request.get("/error", {"sinatra.route" => "/error"})
36
39
 
37
40
  Dalia::MiniGraphite.expects(:counter).with("app.test_app.test.routes.active_surveys.duration", instance_of(Float))
38
41
  Dalia::MiniGraphite.expects(:counter).with("app.test_app.test.routes.active_surveys.count")
42
+ Dalia::MiniGraphite.expects(:time).with("app.test_app.test.routes.active_surveys.duration_stats", instance_of(Float))
39
43
  @request.get("/active_surveys/this_should_be_a_password", {"sinatra.route" => "/active_surveys/this_should_be_a_password" })
40
44
 
41
45
  Dalia::MiniGraphite.expects(:counter).never
42
46
  @request.get("/ANOTHER_URL")
43
47
  end
44
- end
48
+ end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mini_graphite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sevastianos Komianos
8
+ - Fernando Guillen
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2017-02-08 00:00:00.000000000 Z
12
+ date: 2017-10-16 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: bundler
@@ -82,13 +83,14 @@ dependencies:
82
83
  version: '0'
83
84
  description: Simple wrapper for Graphite and Statsd
84
85
  email:
85
- - sebastian.komianos@daliaresearch.com
86
+ - it@daliaresearch.com
86
87
  executables: []
87
88
  extensions: []
88
89
  extra_rdoc_files: []
89
90
  files:
90
91
  - ".gitignore"
91
92
  - ".ruby-version"
93
+ - ".travis.yml"
92
94
  - Gemfile
93
95
  - LICENSE.txt
94
96
  - README.md