39 lines
787 B
Ruby
Executable File
39 lines
787 B
Ruby
Executable File
#!/usr/bin/env ruby
|
|
|
|
INTERVAL = ENV['COLLECTD_INTERVAL'].to_i
|
|
HOSTNAME = ENV['COLLECTD_HOSTNAME']
|
|
|
|
def gather cmd
|
|
counts = {}
|
|
`#{cmd}`.lines.each do |l|
|
|
dev = nil
|
|
gw = nil
|
|
if l =~ / dev (\S+)/
|
|
dev = $1
|
|
end
|
|
if l =~ / via (\S+)/
|
|
gw = $1
|
|
end
|
|
if gw and dev
|
|
target = [gw, dev].join "%"
|
|
counts[target] = 0 unless counts.has_key? target
|
|
counts[target] += 1
|
|
end
|
|
end
|
|
counts
|
|
end
|
|
|
|
loop do
|
|
v4 = gather "ip -4 route"
|
|
v4.each do |target,count|
|
|
puts "PUTVAL \"#{HOSTNAME}/exec-routes4/routes-#{target}\" interval=#{INTERVAL} N:#{count}"
|
|
end
|
|
|
|
v6 = gather "ip -6 route"
|
|
v6.each do |target,count|
|
|
puts "PUTVAL \"#{HOSTNAME}/exec-routes6/routes-#{target}\" interval=#{INTERVAL} N:#{count}"
|
|
end
|
|
|
|
sleep INTERVAL
|
|
end
|