riemann-tools 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -10,14 +10,16 @@ class Riemann::Bench
10
10
  attr_accessor :client, :hosts, :services, :states
11
11
  def initialize
12
12
  @hosts = [nil] + (0...10).map { |i| "host#{i}" }
13
- @hosts = ['test']
14
- @services = %w(per)
13
+ @hosts = %w(a b c d e f g h i j)
14
+ @services = %w(test1 test2 test3 foo bar baz xyzzy attack cat treat)
15
15
  @states = {}
16
16
  @client = Riemann::Client.new(host: (ARGV.first || 'localhost'))
17
17
  end
18
18
 
19
19
  def evolve(state)
20
- m = rand
20
+ m = state[:metric] + (rand - 0.5) * 0.1
21
+ m = [[0,m].max, 1].min
22
+
21
23
  s = case m
22
24
  when 0...0.75
23
25
  'ok'
@@ -28,7 +30,7 @@ class Riemann::Bench
28
30
  end
29
31
 
30
32
  {
31
- metric_f: m,
33
+ metric: m,
32
34
  state: s,
33
35
  host: state[:host],
34
36
  service: state[:service],
@@ -46,7 +48,7 @@ class Riemann::Bench
46
48
  def run
47
49
  start
48
50
  loop do
49
- # sleep 0.01
51
+ sleep 0.05
50
52
  tick
51
53
  end
52
54
  end
@@ -54,7 +56,7 @@ class Riemann::Bench
54
56
  def start
55
57
  hosts.product(services).each do |host, service|
56
58
  states[[host, service]] = {
57
- metric_f: 0.5,
59
+ metric: 0.5,
58
60
  state: 'ok',
59
61
  description: "Starting up",
60
62
  host: host,
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Gathers load balancer statistics from Cloudant.com (shared cluster) and submits them to Riemann.
4
+
5
+ require File.expand_path('../../lib/riemann/tools', __FILE__)
6
+
7
+ class Riemann::Tools::Cloudant
8
+ include Riemann::Tools
9
+ require 'net/http'
10
+ require 'json'
11
+
12
+ opt :cloudant_username, "Cloudant username", :type => :string, :required => true
13
+ opt :cloudant_password, "Cloudant pasword", :type => :string, :required => true
14
+
15
+ def tick
16
+ json = JSON.parse(get_json().body)
17
+ json.each do |node|
18
+ return if node['svname'] == 'BACKEND' # this is just a sum of all nodes.
19
+
20
+ ns = "cloudant #{node['pxname']}"
21
+ cluster_name = node['tracked'].split('.')[0] # ie: meritage.cloudant.com
22
+
23
+ # report health of each node.
24
+ report(
25
+ :service => ns,
26
+ :state => (node['status'] == 'UP' ? 'ok' : 'critical'),
27
+ :tags => ['cloudant', cluster_name]
28
+ )
29
+
30
+ # report property->metric of each node.
31
+ node.each do |property, metric|
32
+ unless ['pxname', 'svname', 'status', 'tracked'].include?(property)
33
+ report(
34
+ :host => node['tracked'],
35
+ :service => "#{ns} #{property}",
36
+ :metric => metric.to_f,
37
+ :state => (node['status'] == 'UP' ? 'ok' : 'critical'),
38
+ :tags => ['cloudant', cluster_name]
39
+ )
40
+ end
41
+ end
42
+
43
+ end
44
+ end
45
+
46
+ def get_json
47
+ http = Net::HTTP.new('cloudant.com', 443)
48
+ http.use_ssl = true
49
+ http.start do |h|
50
+ get = Net::HTTP::Get.new('/api/load_balancer')
51
+ get.basic_auth opts[:cloudant_username], opts[:cloudant_password]
52
+ h.request get
53
+ end
54
+ end
55
+
56
+ end
57
+
58
+ Riemann::Tools::Cloudant.run
@@ -0,0 +1,86 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ require 'rubygems'
4
+ require 'riemann/tools'
5
+
6
+ class Riemann::Tools::Diskstats
7
+ include Riemann::Tools
8
+
9
+ opt :devices, "Devices to monitor", :type => :strings, :default => nil
10
+ opt :ignore_devices, "Devices to ignore", :type => :strings, :default =>nil
11
+
12
+ def initialize
13
+ @old_state = nil
14
+ end
15
+
16
+ def state
17
+ f = File.read('/proc/diskstats')
18
+ state = f.split("\n").reject { |d| d =~ /(ram|loop)/ }.inject({}) do |s, line|
19
+ if line =~ /^(?:\s+\d+){2}\s+([\w\d]+) (.*)$/
20
+ dev = $1
21
+
22
+ ['reads reqs',
23
+ 'reads merged',
24
+ 'reads sector',
25
+ 'reads time',
26
+ 'writes reqs',
27
+ 'writes merged',
28
+ 'writes sector',
29
+ 'writes time',
30
+ 'io reqs',
31
+ 'io time',
32
+ 'io weighted'
33
+ ].map do |service|
34
+ "#{dev} #{service}"
35
+ end.zip(
36
+ $2.split(/\s+/).map { |str| str.to_i }
37
+ ).each do |service, value|
38
+ s[service] = value
39
+ end
40
+ end
41
+
42
+ s
43
+ end
44
+
45
+ # Filter interfaces
46
+ if is = opts[:devices]
47
+ state = state.select do |service, value|
48
+ is.include? service.split(' ').first
49
+ end
50
+ end
51
+
52
+ if ign = opts[:ignore_devices]
53
+ state = state.reject do |service, value|
54
+ ign.include? service.split(' ').first
55
+ end
56
+ end
57
+
58
+ state
59
+ end
60
+
61
+ def tick
62
+ state = self.state
63
+
64
+ if @old_state
65
+ state.each do |service, metric|
66
+ delta = metric - @old_state[service]
67
+
68
+ report(
69
+ :service => "diskstats " + service,
70
+ :metric => (delta.to_f / opts[:interval]),
71
+ :state => "ok"
72
+ )
73
+
74
+ if service =~ /io time$/
75
+ report(:service => "diskstats " + service.gsub(/time/, 'util'),
76
+ :metric => (delta.to_f / (opts[:interval]*1000)),
77
+ :state => "ok")
78
+ end
79
+ end
80
+ end
81
+
82
+ @old_state = state
83
+ end
84
+ end
85
+
86
+ Riemann::Tools::Diskstats.run
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Gathers haproxy CSV statistics and submits them to Riemann.
4
+
5
+ require File.expand_path('../../lib/riemann/tools', __FILE__)
6
+
7
+ class Riemann::Tools::Haproxy
8
+ include Riemann::Tools
9
+ require 'net/http'
10
+ require 'csv'
11
+
12
+ opt :stats_url, "Full url to haproxy stats (eg: https://user:password@host.com:9999/stats)", :required => true, :type => :string
13
+
14
+ def initialize
15
+ @uri = URI(opts[:stats_url]+';csv')
16
+ end
17
+
18
+ def tick
19
+ csv = CSV.parse(get_csv.body.split("# ")[1], { :headers => true })
20
+ csv.each do |row|
21
+ row = row.to_hash
22
+ ns = "haproxy #{row['pxname']} #{row['svname']}"
23
+ row.each do |property, metric|
24
+ unless property == 'pxname' || property == 'svname'
25
+ report(
26
+ :host => @uri.host,
27
+ :service => "#{ns} #{property}",
28
+ :metric => metric.to_f,
29
+ :state => (['UP', 'OPEN'].include?(row['status']) ? 'ok' : 'critical'),
30
+ :tags => ['haproxy']
31
+ )
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ def get_csv
38
+ http = Net::HTTP.new(@uri.host, @uri.port)
39
+ http.use_ssl = true if @uri.scheme == 'https'
40
+ http.start do |h|
41
+ get = Net::HTTP::Get.new(@uri.request_uri)
42
+ unless @uri.userinfo.nil?
43
+ userinfo = @uri.userinfo.split(":")
44
+ get.basic_auth userinfo[0], userinfo[1]
45
+ end
46
+ h.request get
47
+ end
48
+ end
49
+
50
+ end
51
+
52
+ Riemann::Tools::Haproxy.run
@@ -6,7 +6,7 @@ require File.expand_path('../../lib/riemann/tools', __FILE__)
6
6
 
7
7
  class Riemann::Tools::Health
8
8
  include Riemann::Tools
9
-
9
+
10
10
  opt :cpu_warning, "CPU warning threshold (fraction of total jiffies)", :default => 0.9
11
11
  opt :cpu_critical, "CPU critical threshold (fraction of total jiffies)", :default => 0.95
12
12
  opt :disk_warning, "Disk warning threshold (fraction of space used)", :default => 0.9
@@ -23,11 +23,33 @@ class Riemann::Tools::Health
23
23
  :load => {:critical => opts[:load_critical], :warning => opts[:load_warning]},
24
24
  :memory => {:critical => opts[:memory_critical], :warning => opts[:memory_warning]}
25
25
  }
26
+ case (ostype = `uname -s`.chomp.downcase)
27
+ when 'darwin'
28
+ @cores = `sysctl -n hw.ncpu`.to_i
29
+ @cpu = method :darwin_cpu
30
+ @disk = method :disk
31
+ @load = method :darwin_load
32
+ @memory = method :darwin_memory
33
+ darwin_top
34
+ when 'freebsd'
35
+ @cores = `sysctl -n hw.ncpu`.to_i
36
+ @cpu = method :freebsd_cpu
37
+ @disk = method :disk
38
+ @load = method :freebsd_load
39
+ @memory = method :freebsd_memory
40
+ else
41
+ @cores = cores
42
+ puts "WARNING: OS '#{ostype}' not explicitly supported. Falling back to Linux" unless ostype == "linux"
43
+ @cpu = method :linux_cpu
44
+ @disk = method :disk
45
+ @load = method :linux_load
46
+ @memory = method :linux_memory
47
+ end
26
48
  end
27
49
 
28
50
  def alert(service, state, metric, description)
29
51
  report(
30
- :service => service,
52
+ :service => service.to_s,
31
53
  :state => state.to_s,
32
54
  :metric => metric.to_f,
33
55
  :description => description
@@ -51,14 +73,26 @@ class Riemann::Tools::Health
51
73
  end.size
52
74
  end
53
75
 
54
- def cpu
76
+ def report_pct(service, fraction, report)
77
+ if fraction
78
+ if fraction > @limits[service][:critical]
79
+ alert service, :critical, fraction, "#{sprintf("%.2f", fraction * 100)}% #{report}"
80
+ elsif fraction > @limits[service][:warning]
81
+ alert service, :warning, fraction, "#{sprintf("%.2f", fraction * 100)}% #{report}"
82
+ else
83
+ alert service, :ok, fraction, "#{sprintf("%.2f", fraction * 100)}% #{report}"
84
+ end
85
+ end
86
+ end
87
+
88
+ def linux_cpu
55
89
  new = File.read('/proc/stat')
56
90
  unless new[/cpu\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/]
57
91
  alert 'cpu', :unknown, nil, "/proc/stat doesn't include a CPU line"
58
92
  return false
59
93
  end
60
94
  u2, n2, s2, i2 = [$1, $2, $3, $4].map { |e| e.to_i }
61
-
95
+
62
96
  if @old_cpu
63
97
  u1, n1, s1, i1 = @old_cpu
64
98
 
@@ -66,41 +100,14 @@ class Riemann::Tools::Health
66
100
  total = used + i2-i1
67
101
  fraction = used.to_f / total
68
102
 
69
- if fraction > @limits[:cpu][:critical]
70
- alert "cpu", :critical, fraction, "#{sprintf("%.2f", fraction * 100)}% user+nice+sytem\n\n#{cpu_report}"
71
- elsif fraction > @limits[:cpu][:warning]
72
- alert "cpu", :warning, fraction, "#{sprintf("%.2f", fraction * 100)}% user+nice+sytem\n\n#{cpu_report}"
73
- else
74
- alert "cpu", :ok, fraction, "#{sprintf("%.2f", fraction * 100)}% user+nice+sytem\n\n#{cpu_report}"
75
- end
103
+ report_pct :cpu, fraction, "user+nice+sytem\n\n#{`ps -eo pcpu,pid,comm | sort -nrb -k1 | head -10`.chomp}"
76
104
  end
77
-
78
- @old_cpu = [u2, n2, s2, i2]
79
- end
80
105
 
81
- def cpu_report
82
- `ps -eo pcpu,pid,args | sort -nrb -k1 | head -10`.chomp
106
+ @old_cpu = [u2, n2, s2, i2]
83
107
  end
84
108
 
85
- def disk
86
- `df -P`.split(/\n/).each do |r|
87
- f = r.split(/\s+/)
88
- next unless f[0] =~ /^\//
89
- next if f[0] == 'Filesystem'
90
- x = f[4].to_f/100
91
-
92
- if x > @limits[:disk][:critical]
93
- alert "disk #{f[5]}", :critical, x, "#{f[4]} used"
94
- elsif x > @limits[:disk][:warning]
95
- alert "disk #{f[5]}", :warning, x, "#{f[4]} used"
96
- else
97
- alert "disk #{f[5]}", :ok, x, "#{f[4]} used"
98
- end
99
- end
100
- end
101
-
102
- def load
103
- load = File.read('/proc/loadavg').split(/\s+/)[2].to_f / cores
109
+ def linux_load
110
+ load = File.read('/proc/loadavg').split(/\s+/)[2].to_f / @cores
104
111
  if load > @limits[:load][:critical]
105
112
  alert "load", :critical, load, "15-minute load average/core is #{load}"
106
113
  elsif load > @limits[:load][:warning]
@@ -110,7 +117,7 @@ class Riemann::Tools::Health
110
117
  end
111
118
  end
112
119
 
113
- def memory
120
+ def linux_memory
114
121
  m = File.read('/proc/meminfo').split(/\n/).inject({}) { |info, line|
115
122
  x = line.split(/:?\s+/)
116
123
  # Assume kB...
@@ -118,29 +125,124 @@ class Riemann::Tools::Health
118
125
  info
119
126
  }
120
127
 
121
- free = m['MemFree'] + m['Buffers'] + m['Cached']
122
- total = m['MemTotal']
128
+ free = m['MemFree'].to_i + m['Buffers'].to_i + m['Cached'].to_i
129
+ total = m['MemTotal'].to_i
123
130
  fraction = 1 - (free.to_f / total)
124
131
 
125
- if fraction > @limits[:memory][:critical]
126
- alert "memory", :critical, fraction, "#{sprintf("%.2f", fraction * 100)}% used\n\n#{memory_report}"
127
- elsif fraction > @limits[:memory][:warning]
128
- alert "memory", :warning, fraction, "#{sprintf("%.2f", fraction * 100)}% used\n\n#{memory_report}"
132
+ report_pct :memory, fraction, "used\n\n#{`ps -eo pmem,pid,comm | sort -nrb -k1 | head -10`.chomp}"
133
+ end
134
+
135
+ def freebsd_cpu
136
+ u2, n2, s2, t2, i2 = `sysctl -n kern.cp_time 2>/dev/null`.split.map{ |e| e.to_i } #FreeBSD has 5 cpu stats
137
+
138
+ if @old_cpu
139
+ u1, n1, s1, t1, i1 = @old_cpu
140
+
141
+ used = (u2+n2+s2+t2) - (u1+n1+s1+t1)
142
+ total = used + i2-i1
143
+ fraction = used.to_f / total
144
+
145
+ report_pct :cpu, fraction, "user+nice+sytem+interrupt\n\n#{`ps -axo pcpu,pid,comm | sort -nrb -k1 | head -10`.chomp}"
146
+ end
147
+
148
+ @old_cpu = [u2, n2, s2, t2, i2]
149
+ end
150
+
151
+ def freebsd_load
152
+ m = `uptime`.split[-1].match(/^[0-9]*\.[0-9]*$/)
153
+ load = m[0].to_f / @cores
154
+ if load > @limits[:load][:critical]
155
+ alert "load", :critical, load, "15-minute load average/core is #{load}"
156
+ elsif load > @limits[:load][:warning]
157
+ alert "load", :warning, load, "15-minute load average/core is #{load}"
129
158
  else
130
- alert "memory", :ok, fraction, "#{sprintf("%.2f", fraction * 100)}% used\n\n#{memory_report}"
159
+ alert "load", :ok, load, "15-minute load average/core is #{load}"
131
160
  end
132
161
  end
133
162
 
134
- def memory_report
135
- `ps -eo pmem,pid,args | sort -nrb -k1 | head -10`.chomp
163
+ def freebsd_memory
164
+ meminfo = `sysctl -n vm.stats.vm.v_page_count vm.stats.vm.v_wire_count vm.stats.vm.v_active_count 2>/dev/null`.chomp.split
165
+ fraction = (meminfo[1].to_f + meminfo[2].to_f) / meminfo[0].to_f
166
+
167
+ report_pct :memory, fraction, "used\n\n#{`ps -axo pmem,pid,comm | sort -nrb -k1 | head -10`.chomp}"
168
+ end
169
+
170
+ def darwin_top
171
+ raw = `top -l 1 | grep -i "^\\(cpu\\|physmem\\|load\\)"`.chomp
172
+ @topdata = {:stamp => Time.now.to_i }
173
+ raw.each_line do |ln|
174
+ if ln.match(/Load Avg: [0-9.]+, [0-9.]+, ([0-9.])+/i)
175
+ @topdata[:load] = $1.to_f
176
+ elsif ln.match(/CPU usage: [0-9.]+% user, [0-9.]+% sys, ([0-9.]+)% idle/i)
177
+ @topdata[:cpu] = 1 - ($1.to_f / 100)
178
+ elsif mdat = ln.match(/PhysMem: ([0-9]+)([BKMGT]) wired, ([0-9]+)([BKMGT]) active, ([0-9]+)([BKMGT]) inactive, ([0-9]+)([BKMGT]) used, ([0-9]+)([BKMGT]) free/i)
179
+ wired = mdat[1].to_i * (1024 ** "BKMGT".index(mdat[2]))
180
+ active = mdat[3].to_i * (1024 ** "BKMGT".index(mdat[4]))
181
+ inactive = mdat[5].to_i * (1024 ** "BKMGT".index(mdat[6]))
182
+ used = mdat[7].to_i * (1024 ** "BKMGT".index(mdat[8]))
183
+ free = mdat[9].to_i * (1024 ** "BKMGT".index(mdat[10]))
184
+ @topdata[:memory] = (wired + active + used).to_f / (wired + active + used + inactive + free)
185
+ end
186
+ end
187
+ end
188
+
189
+ def darwin_cpu
190
+ darwin_top unless (Time.now.to_i - @topdata[:stamp]) < opts[:interval]
191
+ unless @topdata[:cpu]
192
+ alert 'cpu', :unknown, nil, "unable to get CPU stats from top"
193
+ return false
194
+ end
195
+ report_pct :cpu, @topdata[:cpu], "usage\n\n#{`ps -eo pcpu,pid,comm | sort -nrb -k1 | head -10`.chomp}"
196
+ end
197
+
198
+ def darwin_load
199
+ darwin_top unless (Time.now.to_i - @topdata[:stamp]) < opts[:interval]
200
+ unless @topdata[:load]
201
+ alert 'load', :unknown, nil, "unable to get load ave from top"
202
+ return false
203
+ end
204
+ metric = @topdata[:load] / @cores
205
+ if metric > @limits[:load][:critical]
206
+ alert "load", :critical, metric, "15-minute load average per core is #{metric}"
207
+ elsif metric > @limits[:load][:warning]
208
+ alert "load", :warning, metric, "15-minute load average per core is #{metric}"
209
+ else
210
+ alert "load", :ok, metric, "15-minute load average per core is #{metric}"
211
+ end
212
+ end
213
+
214
+ def darwin_memory
215
+ darwin_top unless (Time.now.to_i - @topdata[:stamp]) < opts[:interval]
216
+ unless @topdata[:memory]
217
+ alert 'memory', :unknown, nil, "unable to get memory data from top"
218
+ return false
219
+ end
220
+ report_pct :memory, @topdata[:memory], "usage\n\n#{`ps -eo pmem,pid,comm | sort -nrb -k1 | head -10`.chomp}"
221
+ end
222
+
223
+ def disk
224
+ `df -P`.split(/\n/).each do |r|
225
+ f = r.split(/\s+/)
226
+ next unless f[0] =~ /^\//
227
+ next if f[0] == 'Filesystem'
228
+ x = f[4].to_f/100
229
+
230
+ if x > @limits[:disk][:critical]
231
+ alert "disk #{f[5]}", :critical, x, "#{f[4]} used"
232
+ elsif x > @limits[:disk][:warning]
233
+ alert "disk #{f[5]}", :warning, x, "#{f[4]} used"
234
+ else
235
+ alert "disk #{f[5]}", :ok, x, "#{f[4]} used"
236
+ end
237
+ end
136
238
  end
137
239
 
138
240
  def tick
139
- cpu
140
- memory
141
- load
142
- disk
241
+ @cpu.call
242
+ @memory.call
243
+ @disk.call
244
+ @load.call
143
245
  end
144
246
  end
145
-
247
+
146
248
  Riemann::Tools::Health.run
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.expand_path('../../lib/riemann/tools', __FILE__)
4
+
5
+ class Riemann::Tools::KVM
6
+ include Riemann::Tools
7
+
8
+ def tick
9
+
10
+ #determine how many instances I have according to libvirt
11
+ kvm_instances = %x[virsh list |grep i-|wc -l]
12
+
13
+ #submit them to riemann
14
+ report(
15
+ :service => "KVM Running VMs",
16
+ :metric => kvm_instances.to_i,
17
+ :state => "info"
18
+ )
19
+ end
20
+ end
21
+
22
+ Riemann::Tools::KVM.run
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.expand_path('../../lib/riemann/tools', __FILE__)
4
+
5
+ class Riemann::Tools::KVM
6
+ include Riemann::Tools
7
+
8
+ def tick
9
+
10
+ #determine how many instances I have according to libvirt
11
+ kvm_instances = %x[virsh list |grep i-|wc -l]
12
+
13
+ #submit them to riemann
14
+ report(
15
+ :service => "KVM Running VMs",
16
+ :metric => kvm_instances.to_i,
17
+ :state => "info"
18
+ )
19
+ end
20
+ end
21
+
22
+ Riemann::Tools::KVM.run
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Gathers redis INFO statistics and submits them to Riemann.
4
+
5
+ require File.expand_path('../../lib/riemann/tools', __FILE__)
6
+
7
+ class Riemann::Tools::Redis
8
+ include Riemann::Tools
9
+ require 'redis'
10
+
11
+ opt :redis_host, "Redis hostname", :default => 'localhost'
12
+ opt :redis_port, "Redis port", :default => 6379
13
+ opt :redis_password, "Redis password", :default => ''
14
+
15
+ def initialize
16
+ @redis = ::Redis.new(:host => opts[:redis_host], :port => opts[:redis_port])
17
+ @redis.auth(opts[:redis_password]) unless opts[:redis_password] == ''
18
+ end
19
+
20
+ def tick
21
+ @redis.info.each do |property, value|
22
+ report(
23
+ :host => opts[:redis_host],
24
+ :service => "redis #{property}",
25
+ :metric => value.to_f,
26
+ :state => 'ok',
27
+ :tags => ['redis']
28
+ )
29
+ end
30
+ end
31
+
32
+ end
33
+
34
+ Riemann::Tools::Redis.run
@@ -29,6 +29,8 @@ module Riemann
29
29
  opt :host, "Riemann host", :default => '127.0.0.1'
30
30
  opt :port, "Riemann port", :default => 5555
31
31
  opt :interval, "Seconds between updates", :default => 5
32
+ opt :tag, "Tag to add to events", :type => String, :multi => true
33
+ opt :ttl, "TTL for events", :type => Integer
32
34
  end
33
35
  end
34
36
 
@@ -52,6 +54,14 @@ module Riemann
52
54
  end
53
55
 
54
56
  def report(event)
57
+ if options[:tag]
58
+ event[:tags] = options[:tag]
59
+ end
60
+
61
+ if options[:ttl]
62
+ event[:ttl] = options[:ttl]
63
+ end
64
+
55
65
  riemann << event
56
66
  end
57
67
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: riemann-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,27 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-23 00:00:00.000000000 Z
12
+ date: 2012-12-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: riemann-client
16
- requirement: !ruby/object:Gem::Requirement
16
+ requirement: &10179640 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: 0.0.7
21
+ version: 0.0.8
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: 0.0.7
24
+ version_requirements: *10179640
30
25
  - !ruby/object:Gem::Dependency
31
26
  name: trollop
32
- requirement: !ruby/object:Gem::Requirement
27
+ requirement: &10178820 !ruby/object:Gem::Requirement
33
28
  none: false
34
29
  requirements:
35
30
  - - ! '>='
@@ -37,15 +32,10 @@ dependencies:
37
32
  version: 1.16.2
38
33
  type: :runtime
39
34
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: 1.16.2
35
+ version_requirements: *10178820
46
36
  - !ruby/object:Gem::Dependency
47
37
  name: munin-ruby
48
- requirement: !ruby/object:Gem::Requirement
38
+ requirement: &10177620 !ruby/object:Gem::Requirement
49
39
  none: false
50
40
  requirements:
51
41
  - - ! '>='
@@ -53,15 +43,10 @@ dependencies:
53
43
  version: 0.2.1
54
44
  type: :runtime
55
45
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: 0.2.1
46
+ version_requirements: *10177620
62
47
  - !ruby/object:Gem::Dependency
63
48
  name: yajl-ruby
64
- requirement: !ruby/object:Gem::Requirement
49
+ requirement: &10176660 !ruby/object:Gem::Requirement
65
50
  none: false
66
51
  requirements:
67
52
  - - ! '>='
@@ -69,33 +54,51 @@ dependencies:
69
54
  version: 1.1.0
70
55
  type: :runtime
71
56
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
57
+ version_requirements: *10176660
58
+ - !ruby/object:Gem::Dependency
59
+ name: redis
60
+ requirement: &10606920 !ruby/object:Gem::Requirement
73
61
  none: false
74
62
  requirements:
75
63
  - - ! '>='
76
64
  - !ruby/object:Gem::Version
77
- version: 1.1.0
65
+ version: 3.0.2
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *10606920
78
69
  description:
79
70
  email: aphyr@aphyr.com
80
71
  executables:
81
- - riemann-net
82
- - riemann-riak-ring
83
- - riemann-riak-keys
84
72
  - riemann-munin
85
- - riemann-riak
86
73
  - riemann-bench
74
+ - riemann-riak
87
75
  - riemann-health
76
+ - riemann-haproxy
77
+ - riemann-riak-keys
78
+ - riemann-diskstats
79
+ - riemann-riak-ring
80
+ - riemann-cloudant
81
+ - riemann-kvminstances
82
+ - riemann-kvminstance
83
+ - riemann-net
84
+ - riemann-redis
88
85
  extensions: []
89
86
  extra_rdoc_files: []
90
87
  files:
91
88
  - lib/riemann/tools.rb
92
- - bin/riemann-net
93
- - bin/riemann-riak-ring
94
- - bin/riemann-riak-keys
95
89
  - bin/riemann-munin
96
- - bin/riemann-riak
97
90
  - bin/riemann-bench
91
+ - bin/riemann-riak
98
92
  - bin/riemann-health
93
+ - bin/riemann-haproxy
94
+ - bin/riemann-riak-keys
95
+ - bin/riemann-diskstats
96
+ - bin/riemann-riak-ring
97
+ - bin/riemann-cloudant
98
+ - bin/riemann-kvminstances
99
+ - bin/riemann-kvminstance
100
+ - bin/riemann-net
101
+ - bin/riemann-redis
99
102
  - LICENSE
100
103
  - README.markdown
101
104
  homepage: https://github.com/aphyr/riemann-tools
@@ -118,7 +121,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
121
  version: '0'
119
122
  requirements: []
120
123
  rubyforge_project: riemann-tools
121
- rubygems_version: 1.8.22
124
+ rubygems_version: 1.8.10
122
125
  signing_key:
123
126
  specification_version: 3
124
127
  summary: Utilities which submit events to Riemann.