44 lines
898 B
Ruby
Executable File
44 lines
898 B
Ruby
Executable File
#!/usr/bin/env ruby
|
|
|
|
require 'socket'
|
|
|
|
HOSTNAME = IO::readlines("/proc/sys/kernel/hostname").join.chomp
|
|
INTERVAL = 60
|
|
|
|
def read_stats
|
|
sock = UNIXSocket.new("/run/haproxy/haproxy-stats.sock")
|
|
sock.send "show stat\n", 0
|
|
data = sock.read()
|
|
sock.close
|
|
|
|
cols = []
|
|
results = []
|
|
data.lines.each do |line|
|
|
line.chomp!
|
|
if line =~ /^#\s*(.+)$/
|
|
cols = $1.split(/,/)
|
|
else
|
|
rec = {}
|
|
cols.zip(line.split(/,/)).each do |col,val|
|
|
rec[col] = val if val and not val.empty?
|
|
end
|
|
results << rec
|
|
end
|
|
end
|
|
results
|
|
end
|
|
|
|
loop do
|
|
read_stats.each do |rec|
|
|
pxname = rec['pxname']
|
|
svname = rec['svname']
|
|
rec.each do |key,val|
|
|
next if key == 'pxname' or key == 'svname' or not val =~ /^\d+$/
|
|
|
|
puts "PUTVAL \"#{HOSTNAME}/haproxy_#{pxname}-#{svname}/current-#{key}\" interval=#{INTERVAL} N:#{val}"
|
|
end
|
|
end
|
|
|
|
sleep INTERVAL
|
|
end
|