rubycut-metriks 0.9.9.5 → 0.9.9.6
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/lib/metriks/reporter/opentsdb.rb +109 -0
- data/metriks.gemspec +3 -1
- data/test/opentsdb_metrics_reporter_test.rb +39 -0
- metadata +6 -3
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'net/https'
|
2
|
+
require 'socket'
|
3
|
+
require 'io/wait'
|
4
|
+
|
5
|
+
module Metriks::Reporter
|
6
|
+
class Opentsdb
|
7
|
+
attr_accessor :prefix, :source
|
8
|
+
|
9
|
+
def initialize(host, port, options = {})
|
10
|
+
@host = host
|
11
|
+
@port = port
|
12
|
+
@prefix = options[:prefix]
|
13
|
+
@source = options[:source]
|
14
|
+
@interval = options[:interval] || 60
|
15
|
+
@registry = options[:registry] || Metriks::Registry.default
|
16
|
+
@on_error = options[:on_error] || proc { |ex| }
|
17
|
+
|
18
|
+
end
|
19
|
+
def open_connection
|
20
|
+
@connection = TCPSocket.new(@host, @port)
|
21
|
+
end
|
22
|
+
def connection
|
23
|
+
@connection
|
24
|
+
end
|
25
|
+
def start
|
26
|
+
@thread ||= Thread.new do
|
27
|
+
loop do
|
28
|
+
sleep @interval
|
29
|
+
Thread.new do
|
30
|
+
begin
|
31
|
+
write
|
32
|
+
rescue Exception => ex
|
33
|
+
@on_error[ex] rescue nil
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def stop
|
41
|
+
@thread.kill if @thread
|
42
|
+
@thread = nil
|
43
|
+
end
|
44
|
+
|
45
|
+
def restart
|
46
|
+
stop
|
47
|
+
start
|
48
|
+
end
|
49
|
+
|
50
|
+
def write
|
51
|
+
open_connection
|
52
|
+
@registry.each do |name, metric|
|
53
|
+
case metric
|
54
|
+
when Metriks::Meter
|
55
|
+
send_metric name, metric, [
|
56
|
+
:count, :one_minute_rate, :five_minute_rate,
|
57
|
+
:fifteen_minute_rate, :mean_rate
|
58
|
+
]
|
59
|
+
when Metriks::Counter
|
60
|
+
send_metric name, metric, [
|
61
|
+
:count
|
62
|
+
]
|
63
|
+
when Metriks::Gauge
|
64
|
+
send_metric name, metric, [
|
65
|
+
:value
|
66
|
+
]
|
67
|
+
when Metriks::UtilizationTimer
|
68
|
+
send_metric name, metric, [
|
69
|
+
:count, :one_minute_rate, :five_minute_rate,
|
70
|
+
:fifteen_minute_rate, :mean_rate,
|
71
|
+
:min, :max, :mean, :stddev,
|
72
|
+
:one_minute_utilization, :five_minute_utilization,
|
73
|
+
:fifteen_minute_utilization, :mean_utilization,
|
74
|
+
], [
|
75
|
+
:median, :get_95th_percentile
|
76
|
+
]
|
77
|
+
when Metriks::Timer
|
78
|
+
send_metric name, metric, [
|
79
|
+
:count, :one_minute_rate, :five_minute_rate,
|
80
|
+
:fifteen_minute_rate, :mean_rate,
|
81
|
+
:min, :max, :mean, :stddev
|
82
|
+
], [
|
83
|
+
:median, :get_95th_percentile
|
84
|
+
]
|
85
|
+
when Metriks::Histogram
|
86
|
+
send_metric name, metric, [
|
87
|
+
:count, :min, :max, :mean, :stddev
|
88
|
+
], [
|
89
|
+
:median, :get_95th_percentile
|
90
|
+
]
|
91
|
+
end
|
92
|
+
end
|
93
|
+
close_connection
|
94
|
+
|
95
|
+
end
|
96
|
+
def close_connection
|
97
|
+
if connection.ready?
|
98
|
+
raise "Error while pushing data: #{connection.gets}"
|
99
|
+
end
|
100
|
+
connection.close
|
101
|
+
end
|
102
|
+
def send_metric(compound_name, metric, keys, snapshot_keys = [])
|
103
|
+
name, tags = compound_name.split("#")
|
104
|
+
keys.each do |key|
|
105
|
+
connection.puts("put #{name}.#{key} #{Time.now.to_i} #{metric.send(key)} #{tags}")
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
data/metriks.gemspec
CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
|
|
13
13
|
## If your rubyforge_project name is different, then edit it and comment out
|
14
14
|
## the sub! line in the Rakefile
|
15
15
|
s.name = 'rubycut-metriks'
|
16
|
-
s.version = '0.9.9.
|
16
|
+
s.version = '0.9.9.6'
|
17
17
|
s.date = '2013-04-28'
|
18
18
|
|
19
19
|
## Make sure your summary is short. The description may be as long
|
@@ -71,6 +71,7 @@ Gem::Specification.new do |s|
|
|
71
71
|
lib/metriks/reporter/logger.rb
|
72
72
|
lib/metriks/reporter/proc_title.rb
|
73
73
|
lib/metriks/reporter/riemann.rb
|
74
|
+
lib/metriks/reporter/opentsdb.rb
|
74
75
|
lib/metriks/simple_moving_average.rb
|
75
76
|
lib/metriks/snapshot.rb
|
76
77
|
lib/metriks/time_tracker.rb
|
@@ -92,6 +93,7 @@ Gem::Specification.new do |s|
|
|
92
93
|
test/thread_error_handling_tests.rb
|
93
94
|
test/timer_test.rb
|
94
95
|
test/utilization_timer_test.rb
|
96
|
+
test/opentsdb_metrics_reporter_test.rb
|
95
97
|
]
|
96
98
|
# = MANIFEST =
|
97
99
|
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'thread_error_handling_tests'
|
3
|
+
|
4
|
+
require 'metriks/reporter/opentsdb'
|
5
|
+
|
6
|
+
class OpentsdbReporterTest < Test::Unit::TestCase
|
7
|
+
include ThreadErrorHandlingTests
|
8
|
+
|
9
|
+
def build_reporter(options={})
|
10
|
+
Metriks::Reporter::Opentsdb.new('localhost', 4242, { :registry => @registry }.merge(options))
|
11
|
+
end
|
12
|
+
|
13
|
+
def setup
|
14
|
+
@registry = Metriks::Registry.new
|
15
|
+
@reporter = build_reporter
|
16
|
+
end
|
17
|
+
|
18
|
+
def teardown
|
19
|
+
@reporter.stop
|
20
|
+
@registry.stop
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_write
|
24
|
+
@registry.meter('meter.testing#tag=test').mark
|
25
|
+
@registry.counter('counter.testing#tag=test').increment
|
26
|
+
@registry.timer('timer.testing#tag=test').update(1.5)
|
27
|
+
@registry.histogram('histogram.testing#tag=test').update(1.5)
|
28
|
+
@registry.utilization_timer('utilization_timer.testing#tag=test').update(1.5)
|
29
|
+
@registry.gauge('gauge.testing#tag=test') { 123 }
|
30
|
+
tcp_socket = mock
|
31
|
+
@reporter.stubs(:connection).returns(tcp_socket)
|
32
|
+
tcp_socket.expects(:puts).at_least_once
|
33
|
+
tcp_socket.expects(:ready?).returns(false)
|
34
|
+
tcp_socket.expects(:close)
|
35
|
+
|
36
|
+
@reporter.connection.expects(:puts).with("put counter.testing.count #{Time.now.to_i} 1 tag=test")
|
37
|
+
@reporter.write
|
38
|
+
end
|
39
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubycut-metriks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 47
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 9
|
9
9
|
- 9
|
10
|
-
-
|
11
|
-
version: 0.9.9.
|
10
|
+
- 6
|
11
|
+
version: 0.9.9.6
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- Eric Lindvall
|
@@ -107,6 +107,7 @@ files:
|
|
107
107
|
- lib/metriks/reporter/logger.rb
|
108
108
|
- lib/metriks/reporter/proc_title.rb
|
109
109
|
- lib/metriks/reporter/riemann.rb
|
110
|
+
- lib/metriks/reporter/opentsdb.rb
|
110
111
|
- lib/metriks/simple_moving_average.rb
|
111
112
|
- lib/metriks/snapshot.rb
|
112
113
|
- lib/metriks/time_tracker.rb
|
@@ -128,6 +129,7 @@ files:
|
|
128
129
|
- test/thread_error_handling_tests.rb
|
129
130
|
- test/timer_test.rb
|
130
131
|
- test/utilization_timer_test.rb
|
132
|
+
- test/opentsdb_metrics_reporter_test.rb
|
131
133
|
homepage: https://github.com/rubycut/metriks
|
132
134
|
licenses: []
|
133
135
|
|
@@ -174,4 +176,5 @@ test_files:
|
|
174
176
|
- test/riemann_reporter_test.rb
|
175
177
|
- test/timer_test.rb
|
176
178
|
- test/utilization_timer_test.rb
|
179
|
+
- test/opentsdb_metrics_reporter_test.rb
|
177
180
|
has_rdoc:
|