mini_graphite 0.0.3 → 0.0.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.
- checksums.yaml +4 -4
- data/README.md +32 -1
- data/lib/mini_graphite.rb +73 -54
- data/lib/mini_graphite/logger.rb +17 -17
- data/lib/mini_graphite/version.rb +1 -1
- data/test/logger_test.rb +16 -16
- data/test/minigraphite_test.rb +69 -54
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d6a5d36496ba99732fa43057a862b1c0583fe551
|
4
|
+
data.tar.gz: 9c26d7b512a3777b73dfaa5c7ef542a112650393
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7927a29a703f55f6f35db557cdaf49856fe9f055953ecdd03dde95272f040c9e7d4be691d17bdce56033268873c03f43211618384b1d3fa22cf88bea6b22c2bf
|
7
|
+
data.tar.gz: 3e8247385c1f9d482bf7bb51a554049f2422e4f0798d92a7b4d8a179c567243aafc943faea4a917851b0491b750a733fe1b35028ec46640611a0d0f9cd30c9da
|
data/README.md
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
Simple wrapper for Graphite and Statsd
|
4
4
|
|
5
|
+
## Instructions
|
6
|
+
|
7
|
+
Check the `test` folder for examples, if you need more explanations please contact us.
|
8
|
+
|
5
9
|
## Installation
|
6
10
|
|
7
11
|
Add this line to your application's Gemfile:
|
@@ -18,7 +22,34 @@ Or install it yourself as:
|
|
18
22
|
|
19
23
|
## Usage
|
20
24
|
|
21
|
-
|
25
|
+
Dalia::MiniGraphite.config({
|
26
|
+
:graphite_host => "my.graphite.server.com",
|
27
|
+
:graphite_port => 2003, # default 2003
|
28
|
+
:statsd_host => "my.graphite.server.com",
|
29
|
+
:statsd_port => 8125, # default 8125
|
30
|
+
:mock_mode => false, # default false
|
31
|
+
:debug_mode => true # default false
|
32
|
+
})
|
33
|
+
|
34
|
+
Dalia::MiniGraphite.datapoint("my.key", 120, Time.now) # to Graphite
|
35
|
+
Dalia::MiniGraphite.counter("my.key", 120) # to StatSD
|
36
|
+
|
37
|
+
|
38
|
+
This will send 4 signals:
|
39
|
+
|
40
|
+
- key_prefix.ini # At the begining of the block
|
41
|
+
- key_prefix.count # At the begining of the block, keep it for compatibility
|
42
|
+
- key_prefix.time, ~1000 # At the end of the block, with the Benchmark.realtime result of the execution
|
43
|
+
- key_prefix.end # At the end of the block
|
44
|
+
|
45
|
+
result =
|
46
|
+
Dalia::MiniGraphite.benchmark_wrapper("key_prefix") do
|
47
|
+
sleep(1)
|
48
|
+
"RESULT"
|
49
|
+
end
|
50
|
+
|
51
|
+
puts result # => RESULT
|
52
|
+
|
22
53
|
|
23
54
|
## Contributing
|
24
55
|
|
data/lib/mini_graphite.rb
CHANGED
@@ -1,61 +1,80 @@
|
|
1
1
|
require_relative "mini_graphite/version"
|
2
2
|
require_relative "mini_graphite/logger"
|
3
|
+
require "benchmark"
|
3
4
|
|
4
5
|
require "socket"
|
5
6
|
|
6
7
|
module Dalia
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
8
|
+
module MiniGraphite
|
9
|
+
DEFAULTS = {
|
10
|
+
:graphite_host => "graphite.host.com",
|
11
|
+
:graphite_port => 2003,
|
12
|
+
:statsd_host => "statsd.host.com",
|
13
|
+
:statsd_port => 8125,
|
14
|
+
:mock_mode => false,
|
15
|
+
:debug_mode => false
|
16
|
+
}
|
17
|
+
|
18
|
+
def self.config(opts = {})
|
19
|
+
@opts = DEFAULTS.merge(opts)
|
20
|
+
@logger = Dalia::MiniGraphite::Logger.new(opts[:debug_mode])
|
21
|
+
logger.debug("Initalized with opts")
|
22
|
+
logger.debug(opts.inspect)
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.datapoint(key, value = 1, timestamp = Time.now)
|
26
|
+
signal = "#{key} #{value} #{timestamp.to_i}"
|
27
|
+
logger.debug("Sending datapoint: '#{signal}'")
|
28
|
+
|
29
|
+
send_tcp(signal) if !opts[:mock_mode]
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.counter(key, value = 1)
|
33
|
+
signal = "#{key}:#{value}|c"
|
34
|
+
logger.debug("Sending counter: '#{signal}'")
|
35
|
+
|
36
|
+
send_udp(signal) if !opts[:mock_mode]
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.benchmark_wrapper(key)
|
40
|
+
counter("#{key}.ini")
|
41
|
+
|
42
|
+
result = nil
|
43
|
+
|
44
|
+
time =
|
45
|
+
Benchmark.realtime do
|
46
|
+
result = yield
|
47
|
+
end
|
48
|
+
|
49
|
+
counter("#{key}.count")
|
50
|
+
counter("#{key}.time", time * 1000)
|
51
|
+
|
52
|
+
counter("#{key}.end")
|
53
|
+
|
54
|
+
result
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def self.opts
|
60
|
+
@opts
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.logger
|
64
|
+
@logger
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.send_tcp(message)
|
68
|
+
socket = TCPSocket.new(opts[:graphite_host], opts[:graphite_port])
|
69
|
+
socket.print("#{message}\n")
|
70
|
+
socket.close
|
71
|
+
end
|
72
|
+
|
73
|
+
def self.send_udp(message)
|
74
|
+
socket = UDPSocket.new
|
75
|
+
socket.send(message, 0, opts[:statsd_host], opts[:statsd_port])
|
76
|
+
socket.close
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
61
80
|
end
|
data/lib/mini_graphite/logger.rb
CHANGED
@@ -1,28 +1,28 @@
|
|
1
1
|
module Dalia
|
2
2
|
|
3
|
-
|
3
|
+
module MiniGraphite
|
4
4
|
|
5
|
-
|
6
|
-
|
5
|
+
class Logger
|
6
|
+
attr_reader :debug_mode
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
def initialize(debug_mode = true)
|
9
|
+
@debug_mode = debug_mode
|
10
|
+
end
|
11
11
|
|
12
|
-
|
13
|
-
|
12
|
+
def debug(message)
|
13
|
+
return unless debug_mode
|
14
14
|
|
15
|
-
|
15
|
+
result = "Dalia::MiniGraphite [#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}]: #{message}"
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
17
|
+
if defined? ::Rails
|
18
|
+
::Rails.logger.info result
|
19
|
+
else
|
20
|
+
Kernel.puts result
|
21
|
+
end
|
22
|
+
end
|
23
23
|
|
24
|
-
|
24
|
+
end
|
25
25
|
|
26
|
-
|
26
|
+
end
|
27
27
|
|
28
28
|
end
|
data/test/logger_test.rb
CHANGED
@@ -4,23 +4,23 @@ require_relative "../lib/mini_graphite"
|
|
4
4
|
|
5
5
|
class MiniGraphiteTest < MiniTest::Unit::TestCase
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
def test_debug
|
8
|
+
Kernel.expects(:puts).with(regexp_matches(/MESSAGE/))
|
9
|
+
logger = Dalia::MiniGraphite::Logger.new
|
10
|
+
logger.debug("MESSAGE")
|
11
|
+
end
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
def test_debug_when_not_debug_mode
|
14
|
+
Kernel.expects(:puts).never
|
15
|
+
logger = Dalia::MiniGraphite::Logger.new(false)
|
16
|
+
logger.debug("MESSAGE")
|
17
|
+
end
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
19
|
+
def test_debug_when_rails_actived
|
20
|
+
Kernel.const_set("Rails", mock(:logger => mock(:info)))
|
21
|
+
logger = Dalia::MiniGraphite::Logger.new
|
22
|
+
logger.debug("MESSAGE")
|
23
|
+
Kernel.send(:remove_const, :Rails)
|
24
|
+
end
|
25
25
|
|
26
26
|
end
|
data/test/minigraphite_test.rb
CHANGED
@@ -4,59 +4,74 @@ require_relative "../lib/mini_graphite"
|
|
4
4
|
|
5
5
|
class MiniGraphiteTest < MiniTest::Unit::TestCase
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
7
|
+
def test_datapoint
|
8
|
+
Dalia::MiniGraphite.config({ :graphite_host => "graphite.host.com", :graphite_port => 2003 })
|
9
|
+
|
10
|
+
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")
|
13
|
+
socket_mock.expects(:close)
|
14
|
+
|
15
|
+
Dalia::MiniGraphite.datapoint("test.age", 31, Time.new(2013,1,2,10,11))
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_counter
|
19
|
+
Dalia::MiniGraphite.config({ :statsd_host => "statsd.host.com", :statsd_port => 8125 })
|
20
|
+
|
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)
|
25
|
+
|
26
|
+
Dalia::MiniGraphite.counter("height", 231)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_on_config_should_debug
|
30
|
+
Dalia::MiniGraphite::Logger.any_instance.expects(:debug).at_least_once
|
31
|
+
Dalia::MiniGraphite.config()
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_on_counter_should_debug
|
35
|
+
Dalia::MiniGraphite.expects(:send_udp)
|
36
|
+
Dalia::MiniGraphite.config()
|
37
|
+
|
38
|
+
Dalia::MiniGraphite::Logger.any_instance.expects(:debug).with("Sending counter: 'test.age:31|c'")
|
39
|
+
Dalia::MiniGraphite.counter("test.age", 31)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_on_datapoint_should_debug
|
43
|
+
Dalia::MiniGraphite.expects(:send_tcp)
|
44
|
+
Dalia::MiniGraphite.config()
|
45
|
+
|
46
|
+
Dalia::MiniGraphite::Logger.any_instance.expects(:debug).with("Sending datapoint: 'test.age 31 1357117860'")
|
47
|
+
Dalia::MiniGraphite.datapoint("test.age", 31, Time.new(2013,1,2,10,11))
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_on_datapoint_not_send_tcp_if_mock_mode
|
51
|
+
Dalia::MiniGraphite.config(:mock_mode => true)
|
52
|
+
TCPSocket.expects(:new).never
|
53
|
+
Dalia::MiniGraphite.datapoint("test.age")
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_on_counter_not_send_udp_if_mock_mode
|
57
|
+
Dalia::MiniGraphite.config(:mock_mode => true)
|
58
|
+
UDPSocket.expects(:new).never
|
59
|
+
Dalia::MiniGraphite.counter("test.age")
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_benchmark_wrapper
|
63
|
+
Dalia::MiniGraphite.expects(:counter).with("key_prefix.ini")
|
64
|
+
Dalia::MiniGraphite.expects(:counter).with("key_prefix.count")
|
65
|
+
Dalia::MiniGraphite.expects(:counter).with("key_prefix.time", is_a(Float))
|
66
|
+
Dalia::MiniGraphite.expects(:counter).with("key_prefix.end")
|
67
|
+
|
68
|
+
result =
|
69
|
+
Dalia::MiniGraphite.benchmark_wrapper("key_prefix") do
|
70
|
+
sleep(1)
|
71
|
+
"RESULT"
|
72
|
+
end
|
73
|
+
|
74
|
+
assert_equal("RESULT", result)
|
75
|
+
end
|
61
76
|
|
62
77
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mini_graphite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sevastianos Komianos
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-12-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|