network/salt/collectd/dhcpcount.rb

40 lines
741 B
Ruby
Raw Normal View History

2020-05-15 17:59:32 +02:00
#!/usr/bin/env ruby
require 'date'
2020-05-15 18:09:54 +02:00
INTERVAL = 10
TIMEOUT = ARGV[0].to_i
2020-05-15 17:59:32 +02:00
hostname = `hostname`.strip
2020-05-15 18:36:48 +02:00
STDOUT.sync = true
2020-05-15 17:59:32 +02:00
loop do
2020-05-15 18:36:48 +02:00
seen = {}
count = 0
2020-05-15 17:59:32 +02:00
2020-05-15 18:58:50 +02:00
addr = nil
2020-05-15 18:36:48 +02:00
starts = nil
2020-05-15 17:59:32 +02:00
2020-05-15 18:36:48 +02:00
IO::readlines("/var/lib/dhcp/dhcpd.leases").each do |line|
if line =~ /^lease (.+) \{/
addr = $1
starts = nil
elsif line =~ /starts \d+ (.+?);/
starts = DateTime.parse($1).to_time
2020-05-15 18:36:48 +02:00
elsif line =~ /^\}/
now = Time.now
if starts and
now >= starts and now < starts + TIMEOUT
2020-05-15 18:58:50 +02:00
unless seen[addr]
count += 1
seen[addr] = true
end
2020-05-15 18:36:48 +02:00
end
end
end
puts "PUTVAL \"#{hostname}/exec-dhcpd/current_sessions-leases\" interval=#{INTERVAL} N:#{count}"
sleep INTERVAL
2020-05-15 17:59:32 +02:00
end