40 lines
778 B
Ruby
40 lines
778 B
Ruby
#!/usr/bin/env ruby
|
|
|
|
require 'date'
|
|
|
|
INTERVAL = 10
|
|
TIMEOUT = ARGV[0].to_i
|
|
hostname = IO::readlines("/proc/sys/kernel/hostname").join.strip
|
|
STDOUT.sync = true
|
|
|
|
loop do
|
|
seen = {}
|
|
count = 0
|
|
|
|
addr = nil
|
|
starts = nil
|
|
|
|
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
|
|
elsif line =~ /^\}/
|
|
now = Time.now
|
|
if starts and
|
|
now >= starts and now < starts + TIMEOUT
|
|
|
|
unless seen[addr]
|
|
count += 1
|
|
seen[addr] = true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
puts "PUTVAL \"#{hostname}/exec-dhcpd/current_sessions-leases\" interval=#{INTERVAL} N:#{count}"
|
|
|
|
sleep INTERVAL
|
|
end
|