riemann-tools 0.2.2 → 0.2.3
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/bin/riemann-freeswitch +99 -18
- data/bin/riemann-health +9 -1
- data/bin/riemann-net +1 -1
- data/bin/riemann-rabbitmq +170 -7
- data/bin/riemann-riak +62 -22
- 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: db9b835831c44292e608818f39aded205bc4f0f9
|
4
|
+
data.tar.gz: 0049cb2ffc88932a2f7b9528b1760a1e571fc99c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 67c75f0cdba4c515c26e0d097b8b6675c2572341dbc5cb21256f512abcbe89ec4ecf28a3e9bd43d97702923e5a119016fd02dc0706e8f95a381ba95ef4b9fa43
|
7
|
+
data.tar.gz: 471dbf8c04d0f35fb396e900ae4d64dc6de2e4c6cc16f92a4d3b5f76870d34577cc58b6b4ac306b85cb9a576b55db2a861d76cdc0bacd4502285a9036a00a820
|
data/bin/riemann-freeswitch
CHANGED
@@ -5,26 +5,107 @@ require File.expand_path('../../lib/riemann/tools', __FILE__)
|
|
5
5
|
class Riemann::Tools::FreeSWITCH
|
6
6
|
include Riemann::Tools
|
7
7
|
|
8
|
+
opt :calls_warning, "Calls warning threshold", :default => 100
|
9
|
+
opt :calls_critical, "Calls critical threshold", :default => 300
|
10
|
+
opt :pid_file, "FreeSWITCH daemon pidfile", :type => String, :default => "/var/run/freeswitch/freeswitch.pid"
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
@limits = {
|
14
|
+
:calls => {:critical => opts[:calls_critical], :warning => opts[:calls_warning]}
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
def dead_proc?(pid)
|
19
|
+
begin
|
20
|
+
Process.getpgid(pid)
|
21
|
+
false
|
22
|
+
rescue Errno::ESRCH
|
23
|
+
true
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def alert(service, state, metric, description)
|
28
|
+
report(
|
29
|
+
:service => service.to_s,
|
30
|
+
:state => state.to_s,
|
31
|
+
:metric => metric.to_f,
|
32
|
+
:description => description
|
33
|
+
)
|
34
|
+
end
|
35
|
+
|
36
|
+
def exec_with_timeout(cmd, timeout)
|
37
|
+
pid = Process.spawn(cmd, {[:err,:out] => :close, :pgroup => true})
|
38
|
+
begin
|
39
|
+
Timeout.timeout(timeout) do
|
40
|
+
Process.waitpid(pid, 0)
|
41
|
+
$?.exitstatus == 0
|
42
|
+
end
|
43
|
+
rescue Timeout::Error
|
44
|
+
Process.kill(15, -Process.getpgid(pid))
|
45
|
+
puts "Killed pid: #{pid}"
|
46
|
+
false
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
8
50
|
def tick
|
51
|
+
# Determine how many current calls I have according to FreeSWITCH
|
52
|
+
fs_calls = %x[fs_cli -x "show calls count"| grep -Po '^\\d+'].to_i
|
53
|
+
|
54
|
+
# Determine how many current channels I have according to FreeSWITCH
|
55
|
+
fs_channels = %x[fs_cli -x "show channels count"| grep -Po '^\\d+'].to_i
|
56
|
+
|
57
|
+
# Determine how many conferences I have according to FreeSWITCH
|
58
|
+
fs_conferences = %x[fs_cli -x "conference list"| grep -Pco '^Conference'].to_i
|
59
|
+
|
60
|
+
# Try to read pidfile. If it fails use Devil's dummy PID
|
61
|
+
begin
|
62
|
+
fs_pid = File.read(opts[:pid_file]).to_i
|
63
|
+
rescue
|
64
|
+
puts "Couldn't read pidfile: #{opts[:pid_file]}"
|
65
|
+
fs_pid = -666
|
66
|
+
end
|
67
|
+
|
68
|
+
# Submit calls to riemann
|
69
|
+
if fs_calls > @limits[:calls][:critical]
|
70
|
+
alert "FreeSWITCH current calls", :critical, fs_calls, "Number of calls are #{fs_calls}"
|
71
|
+
elsif fs_calls > @limits[:calls][:warning]
|
72
|
+
alert "FreeSWITCH current calls", :warning, fs_calls, "Number of calls are #{fs_calls}"
|
73
|
+
else
|
74
|
+
alert "FreeSWITCH current calls", :ok, fs_calls, "Number of calls are #{fs_calls}"
|
75
|
+
end
|
76
|
+
|
77
|
+
# Submit channels to riemann
|
78
|
+
if fs_channels > @limits[:calls][:critical]
|
79
|
+
alert "FreeSWITCH current channels", :critical, fs_channels, "Number of channels are #{fs_channels}"
|
80
|
+
elsif fs_channels > @limits[:calls][:warning]
|
81
|
+
alert "FreeSWITCH current channels", :warning, fs_channels, "Number of channels are #{fs_channels}"
|
82
|
+
else
|
83
|
+
alert "FreeSWITCH current channels", :ok, fs_channels, "Number of channels are #{fs_channels}"
|
84
|
+
end
|
85
|
+
|
86
|
+
# Submit conferences to riemann
|
87
|
+
if fs_conferences > @limits[:calls][:critical]
|
88
|
+
alert "FreeSWITCH current conferences", :critical, fs_conferences, "Number of conferences are #{fs_conferences}"
|
89
|
+
elsif fs_conferences > @limits[:calls][:warning]
|
90
|
+
alert "FreeSWITCH current conferences", :warning, fs_conferences, "Number of conferences are #{fs_conferences}"
|
91
|
+
else
|
92
|
+
alert "FreeSWITCH current conferences", :ok, fs_conferences, "Number of conferences are #{fs_conferences}"
|
93
|
+
end
|
94
|
+
|
95
|
+
# Submit status to riemann
|
96
|
+
if dead_proc?(fs_pid)
|
97
|
+
alert "FreeSWITCH status", :critical, -1, "FreeSWITCH service status: not running"
|
98
|
+
else
|
99
|
+
alert "FreeSWITCH status", :ok, nil, "FreeSWITCH service status: running"
|
100
|
+
end
|
101
|
+
|
102
|
+
# Submit CLI status to riemann using timeout in case it's unresponsive
|
103
|
+
if exec_with_timeout("fs_cli -x status", 2)
|
104
|
+
alert "FreeSWITCH CLI status", :ok, nil, "FreeSWITCH CLI status: responsive"
|
105
|
+
else
|
106
|
+
alert "FreeSWITCH CLI status", :critical, -1, "FreeSWITCH CLI status: not responding"
|
107
|
+
end
|
9
108
|
|
10
|
-
#determine how many current calls I have according to FreeSWITCH
|
11
|
-
fs_calls = %x[fs_cli -x "show calls count"| grep -Po '^\\d+']
|
12
|
-
|
13
|
-
#determine how many current channels I have according to FreeSWITCH
|
14
|
-
fs_channels = %x[fs_cli -x "show channels count"| grep -Po '^\\d+']
|
15
|
-
|
16
|
-
#submit them to riemann
|
17
|
-
report(
|
18
|
-
:service => "FreeSWITCH current calls",
|
19
|
-
:metric => fs_calls.to_i,
|
20
|
-
:state => "info"
|
21
|
-
)
|
22
|
-
|
23
|
-
report(
|
24
|
-
:service => "FreeSWITCH current channels",
|
25
|
-
:metric => fs_channels.to_i,
|
26
|
-
:state => "info"
|
27
|
-
)
|
28
109
|
end
|
29
110
|
end
|
30
111
|
|
data/bin/riemann-health
CHANGED
@@ -114,7 +114,7 @@ class Riemann::Tools::Health
|
|
114
114
|
total = used + i2-i1
|
115
115
|
fraction = used.to_f / total
|
116
116
|
|
117
|
-
report_pct :cpu, fraction, "user+nice+
|
117
|
+
report_pct :cpu, fraction, "user+nice+system\n\n#{`ps -eo pcpu,pid,comm | sort -nrb -k1 | head -10`.chomp}"
|
118
118
|
end
|
119
119
|
|
120
120
|
@old_cpu = [u2, n2, s2, i2]
|
@@ -196,6 +196,14 @@ class Riemann::Tools::Health
|
|
196
196
|
used = mdat[7].to_i * (1024 ** "BKMGT".index(mdat[8]))
|
197
197
|
free = mdat[9].to_i * (1024 ** "BKMGT".index(mdat[10]))
|
198
198
|
@topdata[:memory] = (wired + active + used).to_f / (wired + active + used + inactive + free)
|
199
|
+
# This is for OSX Mavericks which
|
200
|
+
# uses a different format for top
|
201
|
+
# Example: PhysMem: 4662M used (1328M wired), 2782M unused.
|
202
|
+
elsif mdat = ln.match(/PhysMem: ([0-9]+)([BKMGT]) used \(([0-9]+)([BKMGT]) wired\), ([0-9]+)([BKMGT]) unused/i)
|
203
|
+
used = mdat[1].to_i * (1024 ** "BKMGT".index(mdat[2]))
|
204
|
+
wired = mdat[3].to_i * (1024 ** "BKMGT".index(mdat[4]))
|
205
|
+
unused = mdat[5].to_i * (1024 ** "BKMGT".index(mdat[6]))
|
206
|
+
@topdata[:memory] = (used).to_f / (used + unused)
|
199
207
|
end
|
200
208
|
end
|
201
209
|
end
|
data/bin/riemann-net
CHANGED
data/bin/riemann-rabbitmq
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
#
|
3
2
|
|
4
3
|
require File.expand_path('../../lib/riemann/tools', __FILE__)
|
5
4
|
|
@@ -16,11 +15,28 @@ class Riemann::Tools::Rabbitmq
|
|
16
15
|
|
17
16
|
opt :monitor_user, 'RabbitMQ monitoring user', type: :string
|
18
17
|
opt :monitor_pass, 'RabbitMQ monitoring user password', type: :string
|
19
|
-
opt :monitor_port, 'RabbitMQ monitoring port', default: 15672
|
20
|
-
opt :monitor_host, 'RabbitMQ monitoring host', default: "localhost"
|
18
|
+
opt :monitor_port, 'RabbitMQ monitoring port', type: :int, default: 15672
|
19
|
+
opt :monitor_host, 'RabbitMQ monitoring host', type: :string, default: "localhost"
|
21
20
|
|
22
|
-
|
23
|
-
|
21
|
+
opt :max_queue_size, "max number of items in a queue that is acceptable", type: :int, default: 1_000_000
|
22
|
+
opt :ignore_max_size_queues, "A regular expression to match queues that shouldn't be size-checked", type: :string
|
23
|
+
|
24
|
+
opt :node, "Specify a node to monitor", type: :strings
|
25
|
+
|
26
|
+
def base_url
|
27
|
+
"http://#{options[:monitor_user]}:#{options[:monitor_pass]}@#{options[:monitor_host]}:#{options[:monitor_port]}/api"
|
28
|
+
end
|
29
|
+
|
30
|
+
def overview_url
|
31
|
+
"#{base_url}/overview"
|
32
|
+
end
|
33
|
+
|
34
|
+
def node_url(n)
|
35
|
+
"#{base_url}/nodes/#{n}"
|
36
|
+
end
|
37
|
+
|
38
|
+
def queues_url
|
39
|
+
"#{base_url}/queues"
|
24
40
|
end
|
25
41
|
|
26
42
|
def event_host
|
@@ -40,6 +56,11 @@ class Riemann::Tools::Rabbitmq
|
|
40
56
|
req.options[:timeout] = options[:read_timeout]
|
41
57
|
req.options[:open_timeout] = options[:open_timeout]
|
42
58
|
end
|
59
|
+
report(:host => event_host,
|
60
|
+
:service => "rabbitmq monitoring",
|
61
|
+
:state => 'ok',
|
62
|
+
:description => "Monitoring operational"
|
63
|
+
)
|
43
64
|
rescue => e
|
44
65
|
report(:host => event_host,
|
45
66
|
:service => "rabbitmq monitoring",
|
@@ -50,8 +71,92 @@ class Riemann::Tools::Rabbitmq
|
|
50
71
|
response
|
51
72
|
end
|
52
73
|
|
53
|
-
def
|
54
|
-
|
74
|
+
def check_queues
|
75
|
+
response = safe_get(queues_url, event_host)
|
76
|
+
max_size_check_filter = if options[:ignore_max_size_queues]
|
77
|
+
Regexp.new(options[:ignore_max_size_queues])
|
78
|
+
else
|
79
|
+
nil
|
80
|
+
end
|
81
|
+
|
82
|
+
return if response.nil?
|
83
|
+
|
84
|
+
json = JSON.parse(response.body)
|
85
|
+
|
86
|
+
if response.status != 200
|
87
|
+
report(:host => event_host,
|
88
|
+
:service => "rabbitmq.queue",
|
89
|
+
:state => "critical",
|
90
|
+
:description => "HTTP connection error to /api/queues: #{response.status} - #{response.body}"
|
91
|
+
)
|
92
|
+
else
|
93
|
+
report(:host => event_host,
|
94
|
+
:service => "rabbitmq.queue",
|
95
|
+
:state => "ok",
|
96
|
+
:description => "HTTP connection ok"
|
97
|
+
)
|
98
|
+
|
99
|
+
json = JSON.parse(response.body)
|
100
|
+
|
101
|
+
json.each do |queue|
|
102
|
+
svc = "rabbitmq.queue.#{queue['vhost']}.#{queue['name']}"
|
103
|
+
errs = []
|
104
|
+
|
105
|
+
if queue['messages_ready'] > 0 and queue['consumers'] == 0
|
106
|
+
errs << "Queue has jobs but no consumers"
|
107
|
+
end
|
108
|
+
|
109
|
+
if (max_size_check_filter.nil? or queue['name'] !~ max_size_check_filter) and queue['messages_ready'] > options[:max_queue_size]
|
110
|
+
errs << "Queue has #{queue['messages_ready']} jobs"
|
111
|
+
end
|
112
|
+
|
113
|
+
if errs.empty?
|
114
|
+
report(:host => event_host,
|
115
|
+
:service => svc,
|
116
|
+
:state => "ok",
|
117
|
+
:description => "Queue is looking good"
|
118
|
+
)
|
119
|
+
else
|
120
|
+
report(:host => event_host,
|
121
|
+
:service => svc,
|
122
|
+
:state => "critical",
|
123
|
+
:description => errs.join("; ")
|
124
|
+
)
|
125
|
+
end
|
126
|
+
|
127
|
+
stats = (queue['message_stats'] || {}).merge(
|
128
|
+
'messages' => queue['messages'],
|
129
|
+
'messages_details' => queue['messages_details'],
|
130
|
+
'messages_ready' => queue['messages_ready'],
|
131
|
+
'messages_ready_details' => queue['messages_ready_details'],
|
132
|
+
'messages_unacknowledged' => queue['messages_unacknowledged'],
|
133
|
+
'messages_unacknowledged_details' => queue['messages_unacknowledged_details'],
|
134
|
+
'consumers' => queue['consumers'],
|
135
|
+
'memory' => queue['memory'],
|
136
|
+
)
|
137
|
+
|
138
|
+
stats.each_pair do |k,v|
|
139
|
+
service = "#{svc}.#{k}"
|
140
|
+
if k =~ /details$/
|
141
|
+
metric = v['rate']
|
142
|
+
else
|
143
|
+
metric = v
|
144
|
+
end
|
145
|
+
|
146
|
+
# TODO: Set state via thresholds which can be configured
|
147
|
+
|
148
|
+
report(:host => event_host,
|
149
|
+
:service => service,
|
150
|
+
:metric => metric,
|
151
|
+
:description => "RabbitMQ monitor"
|
152
|
+
)
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def check_overview
|
159
|
+
uri = URI(overview_url)
|
55
160
|
response = safe_get(uri, event_host)
|
56
161
|
|
57
162
|
return if response.nil?
|
@@ -95,5 +200,63 @@ class Riemann::Tools::Rabbitmq
|
|
95
200
|
end
|
96
201
|
end
|
97
202
|
end
|
203
|
+
|
204
|
+
def check_node
|
205
|
+
opts[:node].each do |n|
|
206
|
+
uri = URI(node_url(n))
|
207
|
+
response = safe_get(uri, event_host)
|
208
|
+
|
209
|
+
return if response.nil?
|
210
|
+
|
211
|
+
if response.status != 200
|
212
|
+
if response.status == 404
|
213
|
+
report(:host => event_host,
|
214
|
+
:service => "rabbitmq.node.#{n}",
|
215
|
+
:state => "critical",
|
216
|
+
:description => "Node was not found in the cluster"
|
217
|
+
)
|
218
|
+
else
|
219
|
+
report(:host => event_host,
|
220
|
+
:service => "rabbitmq.node.#{n}",
|
221
|
+
:state => "critical",
|
222
|
+
:description => "HTTP error: #{response.status} - #{response.body}"
|
223
|
+
)
|
224
|
+
end
|
225
|
+
return
|
226
|
+
end
|
227
|
+
|
228
|
+
json = JSON.parse(response.body)
|
229
|
+
|
230
|
+
if json['mem_alarm']
|
231
|
+
report(:host => event_host,
|
232
|
+
:service => "rabbitmq.node.#{n}",
|
233
|
+
:state => "critical",
|
234
|
+
:description => "Memory alarm has triggered; job submission throttled"
|
235
|
+
)
|
236
|
+
return
|
237
|
+
end
|
238
|
+
|
239
|
+
if json['disk_free_alarm']
|
240
|
+
report(:host => event_host,
|
241
|
+
:service => "rabbitmq.node.#{n}",
|
242
|
+
:state => "critical",
|
243
|
+
:description => "Disk free alarm has triggered; job submission throttled"
|
244
|
+
)
|
245
|
+
return
|
246
|
+
end
|
247
|
+
|
248
|
+
report(:host => event_host,
|
249
|
+
:service => "rabbitmq.node.#{n}",
|
250
|
+
:state => "ok",
|
251
|
+
:description => "Node looks OK to me"
|
252
|
+
)
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
def tick
|
257
|
+
check_overview
|
258
|
+
check_node if opts[:node]
|
259
|
+
check_queues
|
260
|
+
end
|
98
261
|
end
|
99
262
|
Riemann::Tools::Rabbitmq.run
|
data/bin/riemann-riak
CHANGED
@@ -27,8 +27,8 @@ class Riemann::Tools::Riak
|
|
27
27
|
|
28
28
|
def initialize
|
29
29
|
detect_features
|
30
|
-
|
31
|
-
@httpstatus = true
|
30
|
+
|
31
|
+
@httpstatus = true
|
32
32
|
# What's going on here? --aphyr
|
33
33
|
if
|
34
34
|
begin
|
@@ -59,7 +59,7 @@ class Riemann::Tools::Riak
|
|
59
59
|
def detect_features
|
60
60
|
@escript = true # Whether escript is present on this machine
|
61
61
|
@riakadmin = true # Whether riak-admin is present
|
62
|
-
|
62
|
+
|
63
63
|
if `which escript` =~ /^\s*$/
|
64
64
|
@escript = false
|
65
65
|
end
|
@@ -113,6 +113,34 @@ class Riemann::Tools::Riak
|
|
113
113
|
end
|
114
114
|
end
|
115
115
|
|
116
|
+
def check_transfers
|
117
|
+
str = if @riakadmin
|
118
|
+
`riak-admin transfers`
|
119
|
+
else
|
120
|
+
nil
|
121
|
+
end
|
122
|
+
|
123
|
+
return if str.nil?
|
124
|
+
|
125
|
+
if str =~ /'#{opts[:node_name]}' waiting to handoff (\d+) partitions/
|
126
|
+
report(
|
127
|
+
:host => opts[:riak_host],
|
128
|
+
:service => 'riak transfers',
|
129
|
+
:state => 'critical',
|
130
|
+
:metric => $1.to_i,
|
131
|
+
:description => "waiting to handoff #{$1} partitions"
|
132
|
+
)
|
133
|
+
else
|
134
|
+
report(
|
135
|
+
:host => opts[:riak_host],
|
136
|
+
:service => 'riak transfers',
|
137
|
+
:state => 'ok',
|
138
|
+
:metric => 0,
|
139
|
+
:description => "No pending transfers"
|
140
|
+
)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
116
144
|
def check_disk
|
117
145
|
gb = `du -Ls #{opts[:data_dir]}`.split(/\s+/).first.to_i / (1024.0**2)
|
118
146
|
report(
|
@@ -125,8 +153,8 @@ class Riemann::Tools::Riak
|
|
125
153
|
end
|
126
154
|
|
127
155
|
# Returns the riak stat for the given fsm type and percentile.
|
128
|
-
def fsm_stat(type, percentile)
|
129
|
-
"node_#{type}
|
156
|
+
def fsm_stat(type, property, percentile)
|
157
|
+
"node_#{type}_fsm_#{property}_#{percentile == 50 ? 'median' : percentile}"
|
130
158
|
end
|
131
159
|
|
132
160
|
# Returns the alerts state for the given fsm.
|
@@ -209,11 +237,14 @@ class Riemann::Tools::Riak
|
|
209
237
|
'vnode_puts',
|
210
238
|
'node_gets',
|
211
239
|
'node_puts',
|
240
|
+
'node_gets_set',
|
241
|
+
'node_puts_set',
|
212
242
|
'read_repairs']
|
213
243
|
end
|
214
244
|
|
215
245
|
def fsm_types
|
216
|
-
['get', 'put'
|
246
|
+
[{'get' => 'time'}, {'put' => 'time'},
|
247
|
+
{'get' => 'set_objsize'}]
|
217
248
|
end
|
218
249
|
|
219
250
|
def fsm_percentiles
|
@@ -233,9 +264,11 @@ class Riemann::Tools::Riak
|
|
233
264
|
core_services.each do |s|
|
234
265
|
report(event.merge(:service => "riak #{s}"))
|
235
266
|
end
|
236
|
-
fsm_types.each do |
|
237
|
-
|
238
|
-
|
267
|
+
fsm_types.each do |typespec|
|
268
|
+
typespec.each do |type, prop|
|
269
|
+
fsm_percentiles.each do |percentile|
|
270
|
+
report(event.merge(:service => "riak #{type} #{prop} #{percentile}"))
|
271
|
+
end
|
239
272
|
end
|
240
273
|
end
|
241
274
|
return
|
@@ -260,19 +293,25 @@ class Riemann::Tools::Riak
|
|
260
293
|
end
|
261
294
|
|
262
295
|
# FSMs
|
263
|
-
fsm_types.each do |
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
296
|
+
fsm_types.each do |typespec|
|
297
|
+
typespec.each do |type, prop|
|
298
|
+
fsm_percentiles.each do |percentile|
|
299
|
+
val = stats[fsm_stat(type, prop, percentile)].to_i || 0
|
300
|
+
val = 0 if val == 'undefined'
|
301
|
+
val /= 1000.0 if prop == 'time' # Convert us to ms
|
302
|
+
if prop == 'time'
|
303
|
+
state = fsm_state(type, percentile, val)
|
304
|
+
else
|
305
|
+
state = "ok"
|
306
|
+
end
|
307
|
+
report(
|
308
|
+
:host => opts[:riak_host],
|
309
|
+
:service => "riak #{type} #{prop} #{percentile}",
|
310
|
+
:state => state,
|
311
|
+
:metric => val,
|
312
|
+
:description => "#{val} ms"
|
313
|
+
)
|
314
|
+
end
|
276
315
|
end
|
277
316
|
end
|
278
317
|
end
|
@@ -283,6 +322,7 @@ class Riemann::Tools::Riak
|
|
283
322
|
check_stats
|
284
323
|
check_ring
|
285
324
|
check_disk
|
325
|
+
check_transfers
|
286
326
|
end
|
287
327
|
end
|
288
328
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: riemann-tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kyle Kingsbury
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: riemann-client
|