#!/usr/bin/env ruby require 'date' INTERVAL = 300 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/dhcpd4/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