From 4b90cde92ac2c7df0ee5a01676ac4e8d397b3acc Mon Sep 17 00:00:00 2001 From: Astro Date: Fri, 15 May 2020 18:36:48 +0200 Subject: [PATCH] collectd: fix dhcpcount --- salt/collectd/dhcpcount.rb | 50 ++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/salt/collectd/dhcpcount.rb b/salt/collectd/dhcpcount.rb index 0dd7455..60cc42c 100644 --- a/salt/collectd/dhcpcount.rb +++ b/salt/collectd/dhcpcount.rb @@ -4,29 +4,37 @@ require 'date' INTERVAL = 10 hostname = `hostname`.strip +STDOUT.sync = true loop do - starts = nil - ends = nil - count = 0 + seen = {} + count = 0 - IO::readlines("/var/lib/dhcp/dhcpd.leases").each do |line| - if line =~ /^lease/ - starts = nil - ends = nil - elsif line =~ /starts \d+ (.+?);/ - starts = DateTime.parse $1 - elsif line =~ /ends \d+ (.+?);/ - ends = DateTime.parse $1 - elsif line =~ /^\}/ - now = DateTime.now - if starts and ends and - starts <= now and ends >= now - count += 1 - end - end - end - puts "PUTVAL \"#{hostname}/exec-dhcpd/current_sessions-leases\" interval=#{INTERVAL} N:#{count}" + starts = nil + ends = nil + ignore = false - sleep INTERVAL + IO::readlines("/var/lib/dhcp/dhcpd.leases").each do |line| + if line =~ /^lease (.+) \{/ + addr = $1 + ignore = seen[addr] + + seen[addr] = true + starts = nil + ends = nil + elsif line =~ /starts \d+ (.+?);/ + starts = DateTime.parse $1 + elsif line =~ /ends \d+ (.+?);/ + ends = DateTime.parse $1 + elsif line =~ /^\}/ + now = DateTime.now + if (not ignore) and starts and ends and + starts <= now and ends >= now and + count += 1 + end + end + end + puts "PUTVAL \"#{hostname}/exec-dhcpd/current_sessions-leases\" interval=#{INTERVAL} N:#{count}" + + sleep INTERVAL end