riemann-tools 1.0.0 → 1.1.0

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.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +11 -0
  3. data/.github/workflows/ci.yml +13 -0
  4. data/.github/workflows/codeql-analysis.yml +72 -0
  5. data/.rubocop.yml +32 -0
  6. data/CHANGELOG.md +31 -2
  7. data/README.markdown +8 -24
  8. data/Rakefile +4 -2
  9. data/SECURITY.md +42 -0
  10. data/bin/riemann-apache-status +92 -78
  11. data/bin/riemann-bench +54 -49
  12. data/bin/riemann-cloudant +44 -40
  13. data/bin/riemann-consul +82 -76
  14. data/bin/riemann-dir-files-count +53 -47
  15. data/bin/riemann-dir-space +53 -47
  16. data/bin/riemann-diskstats +78 -75
  17. data/bin/riemann-fd +68 -48
  18. data/bin/riemann-freeswitch +108 -103
  19. data/bin/riemann-haproxy +46 -40
  20. data/bin/riemann-health +4 -343
  21. data/bin/riemann-kvminstance +18 -13
  22. data/bin/riemann-memcached +35 -29
  23. data/bin/riemann-net +4 -104
  24. data/bin/riemann-nginx-status +74 -67
  25. data/bin/riemann-ntp +4 -33
  26. data/bin/riemann-portcheck +40 -31
  27. data/bin/riemann-proc +96 -90
  28. data/bin/riemann-varnish +51 -45
  29. data/bin/riemann-zookeeper +38 -34
  30. data/lib/riemann/tools/health.rb +347 -0
  31. data/lib/riemann/tools/net.rb +104 -0
  32. data/lib/riemann/tools/ntp.rb +41 -0
  33. data/lib/riemann/tools/version.rb +1 -1
  34. data/lib/riemann/tools.rb +37 -40
  35. data/riemann-tools.gemspec +4 -1
  36. data/tools/riemann-aws/{Rakefile.rb → Rakefile} +2 -0
  37. data/tools/riemann-aws/bin/riemann-aws-billing +72 -66
  38. data/tools/riemann-aws/bin/riemann-aws-rds-status +55 -41
  39. data/tools/riemann-aws/bin/riemann-aws-sqs-status +37 -31
  40. data/tools/riemann-aws/bin/riemann-aws-status +63 -51
  41. data/tools/riemann-aws/bin/riemann-elb-metrics +149 -148
  42. data/tools/riemann-aws/bin/riemann-s3-list +70 -65
  43. data/tools/riemann-aws/bin/riemann-s3-status +85 -82
  44. data/tools/riemann-chronos/{Rakefile.rb → Rakefile} +2 -0
  45. data/tools/riemann-chronos/bin/riemann-chronos +136 -119
  46. data/tools/riemann-docker/{Rakefile.rb → Rakefile} +2 -0
  47. data/tools/riemann-docker/bin/riemann-docker +163 -174
  48. data/tools/riemann-elasticsearch/{Rakefile.rb → Rakefile} +2 -0
  49. data/tools/riemann-elasticsearch/bin/riemann-elasticsearch +155 -147
  50. data/tools/riemann-marathon/{Rakefile.rb → Rakefile} +2 -0
  51. data/tools/riemann-marathon/bin/riemann-marathon +138 -122
  52. data/tools/riemann-mesos/{Rakefile.rb → Rakefile} +2 -0
  53. data/tools/riemann-mesos/bin/riemann-mesos +125 -110
  54. data/tools/riemann-munin/{Rakefile.rb → Rakefile} +2 -0
  55. data/tools/riemann-munin/bin/riemann-munin +28 -22
  56. data/tools/riemann-rabbitmq/{Rakefile.rb → Rakefile} +2 -0
  57. data/tools/riemann-rabbitmq/bin/riemann-rabbitmq +226 -222
  58. data/tools/riemann-riak/{Rakefile.rb → Rakefile} +2 -0
  59. data/tools/riemann-riak/bin/riemann-riak +281 -289
  60. data/tools/riemann-riak/riak_status/riak_status.rb +39 -39
  61. metadata +65 -16
@@ -1,330 +1,322 @@
1
1
  #!/usr/bin/env ruby
2
- Process.setproctitle($0)
2
+ # frozen_string_literal: true
3
+
4
+ require 'English'
5
+ Process.setproctitle($PROGRAM_NAME)
3
6
 
4
7
  # Forwards information on a Riak node to Riemann.
5
8
 
6
9
  require 'riemann/tools'
7
10
 
8
- class Riemann::Tools::Riak
9
- include Riemann::Tools
10
- require 'net/http'
11
- require 'net/https'
12
- require 'yajl/json_gem'
13
-
14
- opt :riak_host, "Riak host for stats <IP> or SSL http(s)://<IP>", :default => Socket.gethostname
15
- opt :data_dir, "Riak data directory", :default => '/var/lib/riak'
16
- opt :stats_port, "Riak HTTP port for stats", :default => 8098
17
- opt :stats_path, "Riak HTTP stats path", :default => '/stats'
18
- opt :node_name, "Riak erlang node name", :default => "riak@#{Socket.gethostname}"
19
- opt :cookie, "Riak cookie to use", :default => "riak"
20
-
21
- opt :get_50_warning, "FSM 50% get time warning threshold (ms)", :default => 1000
22
- opt :put_50_warning, "FSM 50% put time warning threshold (ms)", :default => 1000
23
- opt :get_95_warning, "FSM 95% get time warning threshold (ms)", :default => 2000
24
- opt :put_95_warning, "FSM 95% put time warning threshold (ms)", :default => 2000
25
- opt :get_99_warning, "FSM 99% get time warning threshold (ms)", :default => 10000
26
- opt :put_99_warning, "FSM 99% put time warning threshold (ms)", :default => 10000
27
-
28
- def initialize
29
- detect_features
30
-
31
- @httpstatus = true
32
-
33
- begin
34
- uri = URI.parse(opts[:riak_host])
35
- if uri.host == nil
36
- uri.host = opts[:riak_host]
37
- end
38
- http = Net::HTTP.new(uri.host, opts[:stats_port])
39
- http.use_ssl = uri.scheme == 'https'
40
- if http.use_ssl?
41
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE
42
- end
43
- http.start do |h|
44
- h.get opts[:stats_path]
45
- end
46
- rescue => _e
47
- @httpstatus = false
48
- end
49
-
50
- # we're going to override the emulator setting to allow users to
51
- # dynamically input the cookie
52
- # this is done only once - hopefully it doesn't get overridden.
53
- ENV['ERL_AFLAGS'] = "-setcookie #{opts[:cookie]}"
54
- end
11
+ module Riemann
12
+ module Tools
13
+ class Riak
14
+ include Riemann::Tools
15
+ require 'net/http'
16
+ require 'net/https'
17
+ require 'yajl/json_gem'
18
+
19
+ opt :riak_host, 'Riak host for stats <IP> or SSL http(s)://<IP>', default: Socket.gethostname
20
+ opt :data_dir, 'Riak data directory', default: '/var/lib/riak'
21
+ opt :stats_port, 'Riak HTTP port for stats', default: 8098
22
+ opt :stats_path, 'Riak HTTP stats path', default: '/stats'
23
+ opt :node_name, 'Riak erlang node name', default: "riak@#{Socket.gethostname}"
24
+ opt :cookie, 'Riak cookie to use', default: 'riak'
25
+
26
+ opt :get_50_warning, 'FSM 50% get time warning threshold (ms)', default: 1000
27
+ opt :put_50_warning, 'FSM 50% put time warning threshold (ms)', default: 1000
28
+ opt :get_95_warning, 'FSM 95% get time warning threshold (ms)', default: 2000
29
+ opt :put_95_warning, 'FSM 95% put time warning threshold (ms)', default: 2000
30
+ opt :get_99_warning, 'FSM 99% get time warning threshold (ms)', default: 10_000
31
+ opt :put_99_warning, 'FSM 99% put time warning threshold (ms)', default: 10_000
32
+
33
+ def initialize
34
+ detect_features
35
+
36
+ @httpstatus = true
37
+
38
+ begin
39
+ uri = URI.parse(opts[:riak_host])
40
+ uri.host = opts[:riak_host] if uri.host.nil?
41
+ http = Net::HTTP.new(uri.host, opts[:stats_port])
42
+ http.use_ssl = uri.scheme == 'https'
43
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE if http.use_ssl?
44
+ http.start do |h|
45
+ h.get opts[:stats_path]
46
+ end
47
+ rescue StandardError => _e
48
+ @httpstatus = false
49
+ end
55
50
 
56
- # Identifies whether escript and riak-admin are installed
57
- def detect_features
58
- @escript = true # Whether escript is present on this machine
59
- @riakadmin = true # Whether riak-admin is present
51
+ # we're going to override the emulator setting to allow users to
52
+ # dynamically input the cookie
53
+ # this is done only once - hopefully it doesn't get overridden.
54
+ ENV['ERL_AFLAGS'] = "-setcookie #{opts[:cookie]}"
55
+ end
60
56
 
61
- if `which escript` =~ /^\s*$/
62
- @escript = false
63
- end
57
+ # Identifies whether escript and riak-admin are installed
58
+ def detect_features
59
+ @escript = true # Whether escript is present on this machine
60
+ @riakadmin = true # Whether riak-admin is present
64
61
 
65
- if `which riak-admin` =~ /^\s*$/
66
- @riakadmin = false
67
- end
68
- end
62
+ @escript = false if `which escript` =~ /^\s*$/
69
63
 
70
- def check_ring
71
- str = if @escript
72
- str = `#{File.expand_path(File.dirname(__FILE__))}/riemann-riak-ring #{opts[:node_name]}`.chomp
73
- elsif @riakadmin
74
- str = `riak-admin ringready`
75
- else
76
- nil
77
- end
64
+ @riakadmin = false if `which riak-admin` =~ /^\s*$/
65
+ end
78
66
 
79
- return if str.nil?
80
-
81
- if str =~ /^TRUE/
82
- report(
83
- :host => opts[:riak_host],
84
- :service => 'riak ring',
85
- :state => 'ok',
86
- :description => str
87
- )
88
- else
89
- report(
90
- :host => opts[:riak_host],
91
- :service => 'riak ring',
92
- :state => 'warning',
93
- :description => str
94
- )
95
- end
96
- end
67
+ def check_ring
68
+ str = if @escript
69
+ `#{__dir__}/riemann-riak-ring #{opts[:node_name]}`.chomp
70
+ elsif @riakadmin
71
+ `riak-admin ringready`
72
+ end
97
73
 
98
- def check_keys
99
- keys = `#{File.expand_path(File.dirname(__FILE__))}/riemann-riak-keys #{opts[:node_name]}`.chomp
100
- if keys =~ /^\d+$/
101
- report(
102
- :host => opts[:riak_host],
103
- :service => 'riak keys',
104
- :state => 'ok',
105
- :metric => keys.to_i,
106
- :description => keys
107
- )
108
- else
109
- report(
110
- :host => opts[:riak_host],
111
- :service => 'riak keys',
112
- :state => 'unknown',
113
- :description => keys
114
- )
115
- end
116
- end
74
+ return if str.nil?
117
75
 
118
- def check_transfers
119
- str = if @riakadmin
120
- `riak-admin transfers`
121
- else
122
- nil
123
- end
76
+ if str =~ /^TRUE/
77
+ report(
78
+ host: opts[:riak_host],
79
+ service: 'riak ring',
80
+ state: 'ok',
81
+ description: str,
82
+ )
83
+ else
84
+ report(
85
+ host: opts[:riak_host],
86
+ service: 'riak ring',
87
+ state: 'warning',
88
+ description: str,
89
+ )
90
+ end
91
+ end
124
92
 
125
- return if str.nil?
126
-
127
- if str =~ /'#{opts[:node_name]}' waiting to handoff (\d+) partitions/
128
- report(
129
- :host => opts[:riak_host],
130
- :service => 'riak transfers',
131
- :state => 'critical',
132
- :metric => $1.to_i,
133
- :description => "waiting to handoff #{$1} partitions"
134
- )
135
- else
136
- report(
137
- :host => opts[:riak_host],
138
- :service => 'riak transfers',
139
- :state => 'ok',
140
- :metric => 0,
141
- :description => "No pending transfers"
142
- )
143
- end
144
- end
93
+ def check_keys
94
+ keys = `#{__dir__}/riemann-riak-keys #{opts[:node_name]}`.chomp
95
+ if keys =~ /^\d+$/
96
+ report(
97
+ host: opts[:riak_host],
98
+ service: 'riak keys',
99
+ state: 'ok',
100
+ metric: keys.to_i,
101
+ description: keys,
102
+ )
103
+ else
104
+ report(
105
+ host: opts[:riak_host],
106
+ service: 'riak keys',
107
+ state: 'unknown',
108
+ description: keys,
109
+ )
110
+ end
111
+ end
145
112
 
146
- def check_disk
147
- gb = `du -Ls #{opts[:data_dir]}`.split(/\s+/).first.to_i / (1024.0**2)
148
- report(
149
- :host => opts[:riak_host],
150
- :service => 'riak disk',
151
- :state => 'ok',
152
- :metric => gb,
153
- :description => "#{gb} GB in #{opts[:data_dir]}"
154
- )
155
- end
113
+ def check_transfers
114
+ str = (`riak-admin transfers` if @riakadmin)
156
115
 
157
- # Returns the riak stat for the given fsm type and percentile.
158
- def fsm_stat(type, property, percentile)
159
- "node_#{type}_fsm_#{property}_#{percentile == 50 ? 'median' : percentile}"
160
- end
116
+ return if str.nil?
161
117
 
162
- # Returns the alerts state for the given fsm.
163
- def fsm_state(type, percentile, val)
164
- limit = opts["#{type}_#{percentile}_warning".to_sym]
165
- case val
166
- when 0 .. limit
167
- 'ok'
168
- when limit .. limit * 2
169
- 'warning'
170
- else
171
- 'critical'
172
- end
173
- end
118
+ if str =~ /'#{opts[:node_name]}' waiting to handoff (\d+) partitions/
119
+ report(
120
+ host: opts[:riak_host],
121
+ service: 'riak transfers',
122
+ state: 'critical',
123
+ metric: Regexp.last_match(1).to_i,
124
+ description: "waiting to handoff #{Regexp.last_match(1)} partitions",
125
+ )
126
+ else
127
+ report(
128
+ host: opts[:riak_host],
129
+ service: 'riak transfers',
130
+ state: 'ok',
131
+ metric: 0,
132
+ description: 'No pending transfers',
133
+ )
134
+ end
135
+ end
174
136
 
175
- # Get current stats via HTTP
176
- def stats_http
177
- begin
178
- uri = URI.parse(opts[:riak_host])
179
- if uri.host == nil
180
- uri.host = opts[:riak_host]
137
+ def check_disk
138
+ gb = `du -Ls #{opts[:data_dir]}`.split(/\s+/).first.to_i / (1024.0**2)
139
+ report(
140
+ host: opts[:riak_host],
141
+ service: 'riak disk',
142
+ state: 'ok',
143
+ metric: gb,
144
+ description: "#{gb} GB in #{opts[:data_dir]}",
145
+ )
181
146
  end
182
- http = Net::HTTP.new(uri.host, opts[:stats_port])
183
- http.use_ssl = uri.scheme == 'https'
184
- if http.use_ssl?
185
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE
147
+
148
+ # Returns the riak stat for the given fsm type and percentile.
149
+ def fsm_stat(type, property, percentile)
150
+ "node_#{type}_fsm_#{property}_#{percentile == 50 ? 'median' : percentile}"
186
151
  end
187
- res = http.start do |h|
188
- h.get opts[:stats_path]
152
+
153
+ # Returns the alerts state for the given fsm.
154
+ def fsm_state(type, percentile, val)
155
+ limit = opts["#{type}_#{percentile}_warning".to_sym]
156
+ case val
157
+ when 0..limit
158
+ 'ok'
159
+ when limit..limit * 2
160
+ 'warning'
161
+ else
162
+ 'critical'
163
+ end
189
164
  end
190
- rescue => e
191
- report(
192
- :host => opts[:riak_host],
193
- :service => 'riak',
194
- :state => 'critical',
195
- :description => "error fetching #{opts[:riak_host]}:#{opts[:stats_port]} #{e.class}, #{e.message}"
196
- )
197
- raise
198
- end
199
165
 
200
- if res.code.to_i == 200
201
- return JSON.parse(res.body)
202
- else
203
- report(
204
- :host => opts[:riak_host],
205
- :service => 'riak',
206
- :state => 'critical',
207
- :description => "stats returned HTTP #{res.code}:\n\n#{res.body}"
208
- )
209
- raise "Can't fetch stats via HTTP: #{res.core}:\n\n#{res.body}"
210
- end
211
- end
166
+ # Get current stats via HTTP
167
+ def stats_http
168
+ begin
169
+ uri = URI.parse(opts[:riak_host])
170
+ uri.host = opts[:riak_host] if uri.host.nil?
171
+ http = Net::HTTP.new(uri.host, opts[:stats_port])
172
+ http.use_ssl = uri.scheme == 'https'
173
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE if http.use_ssl?
174
+ res = http.start do |h|
175
+ h.get opts[:stats_path]
176
+ end
177
+ rescue StandardError => e
178
+ report(
179
+ host: opts[:riak_host],
180
+ service: 'riak',
181
+ state: 'critical',
182
+ description: "error fetching #{opts[:riak_host]}:#{opts[:stats_port]} #{e.class}, #{e.message}",
183
+ )
184
+ raise
185
+ end
212
186
 
213
- # Get current stats via riak-admin
214
- def stats_riak_admin
215
- str = `riak-admin status`
216
- raise "riak-admin failed" unless $? == 0
217
- Hash[str.split(/\n/).map{|i| i.split(/ : /)}]
218
- end
187
+ if res.code.to_i == 200
188
+ JSON.parse(res.body)
189
+ else
190
+ report(
191
+ host: opts[:riak_host],
192
+ service: 'riak',
193
+ state: 'critical',
194
+ description: "stats returned HTTP #{res.code}:\n\n#{res.body}",
195
+ )
196
+ raise "Can't fetch stats via HTTP: #{res.core}:\n\n#{res.body}"
197
+ end
198
+ end
219
199
 
220
- # Get current stats as a hash
221
- def stats
222
- if @httpstatus
223
- stats_http
224
- elsif @riakadmin
225
- stats_riak_admin
226
- else
227
- report(
228
- :host => opts[:riak_host],
229
- :service => 'riak',
230
- :state => 'critical',
231
- :description => "No mechanism for fetching Riak stats: neither HTTP nor riak-admin available."
232
- )
233
- raise "No mechanism for fetching Riak stats: neither HTTP nor riak-admin available."
234
- end
235
- end
200
+ # Get current stats via riak-admin
201
+ def stats_riak_admin
202
+ str = `riak-admin status`
203
+ raise 'riak-admin failed' unless $CHILD_STATUS == 0
236
204
 
237
- def core_services
238
- ['vnode_gets',
239
- 'vnode_puts',
240
- 'node_gets',
241
- 'node_puts',
242
- 'node_gets_set',
243
- 'node_puts_set',
244
- 'read_repairs']
245
- end
205
+ Hash[str.split(/\n/).map { |i| i.split(/ : /) }]
206
+ end
246
207
 
247
- def fsm_types
248
- [{'get' => 'time'}, {'put' => 'time'},
249
- {'get' => 'set_objsize'}]
250
- end
208
+ # Get current stats as a hash
209
+ def stats
210
+ if @httpstatus
211
+ stats_http
212
+ elsif @riakadmin
213
+ stats_riak_admin
214
+ else
215
+ report(
216
+ host: opts[:riak_host],
217
+ service: 'riak',
218
+ state: 'critical',
219
+ description: 'No mechanism for fetching Riak stats: neither HTTP nor riak-admin available.',
220
+ )
221
+ raise 'No mechanism for fetching Riak stats: neither HTTP nor riak-admin available.'
222
+ end
223
+ end
251
224
 
252
- def fsm_percentiles
253
- [50, 95, 99]
254
- end
225
+ def core_services
226
+ %w[vnode_gets
227
+ vnode_puts
228
+ node_gets
229
+ node_puts
230
+ node_gets_set
231
+ node_puts_set
232
+ read_repairs]
233
+ end
255
234
 
256
- # Reports current stats to Riemann
257
- def check_stats
258
- begin
259
- stats = self.stats
260
- rescue => e
261
- event = {:state => 'critical',
262
- :description => e.message,
263
- :host => opts[:riak_host]}
264
- # Report errors
265
- report(event.merge(:service => 'riak'))
266
- core_services.each do |s|
267
- report(event.merge(:service => "riak #{s}"))
235
+ def fsm_types
236
+ [{ 'get' => 'time' }, { 'put' => 'time' },
237
+ { 'get' => 'set_objsize' },]
268
238
  end
269
- fsm_types.each do |typespec|
270
- typespec.each do |type, prop|
271
- fsm_percentiles.each do |percentile|
272
- report(event.merge(:service => "riak #{type} #{prop} #{percentile}"))
239
+
240
+ def fsm_percentiles
241
+ [50, 95, 99]
242
+ end
243
+
244
+ # Reports current stats to Riemann
245
+ def check_stats
246
+ begin
247
+ stats = self.stats
248
+ rescue StandardError => e
249
+ event = {
250
+ state: 'critical',
251
+ description: e.message,
252
+ host: opts[:riak_host],
253
+ }
254
+ # Report errors
255
+ report(event.merge(service: 'riak'))
256
+ core_services.each do |s|
257
+ report(event.merge(service: "riak #{s}"))
273
258
  end
259
+ fsm_types.each do |typespec|
260
+ typespec.each do |type, prop|
261
+ fsm_percentiles.each do |percentile|
262
+ report(event.merge(service: "riak #{type} #{prop} #{percentile}"))
263
+ end
264
+ end
265
+ end
266
+ return
274
267
  end
275
- end
276
- return
277
- end
278
268
 
279
- # Riak itself
280
- report(
281
- :host => opts[:riak_host],
282
- :service => 'riak',
283
- :state => 'ok'
284
- )
285
-
286
- # Gets/puts/rr
287
- core_services.each do |s|
288
- report(
289
- :host => opts[:riak_host],
290
- :service => "riak #{s}",
291
- :state => 'ok',
292
- :metric => stats[s].to_i/60.0,
293
- :description => "#{stats[s].to_i/60.0}/sec"
294
- )
295
- end
269
+ # Riak itself
270
+ report(
271
+ host: opts[:riak_host],
272
+ service: 'riak',
273
+ state: 'ok',
274
+ )
296
275
 
297
- # FSMs
298
- fsm_types.each do |typespec|
299
- typespec.each do |type, prop|
300
- fsm_percentiles.each do |percentile|
301
- val = stats[fsm_stat(type, prop, percentile)].to_i || 0
302
- val = 0 if val == 'undefined'
303
- val /= 1000.0 if prop == 'time' # Convert us to ms
304
- if prop == 'time'
305
- state = fsm_state(type, percentile, val)
306
- else
307
- state = "ok"
308
- end
276
+ # Gets/puts/rr
277
+ core_services.each do |s|
309
278
  report(
310
- :host => opts[:riak_host],
311
- :service => "riak #{type} #{prop} #{percentile}",
312
- :state => state,
313
- :metric => val,
314
- :description => "#{val} ms"
279
+ host: opts[:riak_host],
280
+ service: "riak #{s}",
281
+ state: 'ok',
282
+ metric: stats[s].to_i / 60.0,
283
+ description: "#{stats[s].to_i / 60.0}/sec",
315
284
  )
316
285
  end
286
+
287
+ # FSMs
288
+ fsm_types.each do |typespec|
289
+ typespec.each do |type, prop|
290
+ fsm_percentiles.each do |percentile|
291
+ val = stats[fsm_stat(type, prop, percentile)].to_i || 0
292
+ val = 0 if val == 'undefined'
293
+ val /= 1000.0 if prop == 'time' # Convert us to ms
294
+ state = if prop == 'time'
295
+ fsm_state(type, percentile, val)
296
+ else
297
+ 'ok'
298
+ end
299
+ report(
300
+ host: opts[:riak_host],
301
+ service: "riak #{type} #{prop} #{percentile}",
302
+ state: state,
303
+ metric: val,
304
+ description: "#{val} ms",
305
+ )
306
+ end
307
+ end
308
+ end
317
309
  end
318
- end
319
- end
320
310
 
321
- def tick
322
- # This can utterly destroy a cluster, so we disable
323
- # check_keys
324
- check_stats
325
- check_ring
326
- check_disk
327
- check_transfers
311
+ def tick
312
+ # This can utterly destroy a cluster, so we disable
313
+ # check_keys
314
+ check_stats
315
+ check_ring
316
+ check_disk
317
+ check_transfers
318
+ end
319
+ end
328
320
  end
329
321
  end
330
322