diff --git a/hosts/containers/dn42/default.nix b/hosts/containers/dn42/default.nix index 2401ee0b..a5ca1e5e 100644 --- a/hosts/containers/dn42/default.nix +++ b/hosts/containers/dn42/default.nix @@ -25,7 +25,17 @@ in { statistics.enable = true; }; }; - services.resolved.enable = false; + services.collectd.plugins.exec = + let + routecount = pkgs.writeScript "run-routecount" '' + #!${pkgs.bash}/bin/bash + + export PATH=${lib.makeBinPath (with pkgs; [ ruby iproute ] )} + ruby ${./routecount.rb} + ''; + in '' + Exec "collectd" "${routecount}" + ''; environment.systemPackages = with pkgs; [ vim ]; diff --git a/hosts/containers/dn42/routecount.rb b/hosts/containers/dn42/routecount.rb new file mode 100755 index 00000000..8afc558b --- /dev/null +++ b/hosts/containers/dn42/routecount.rb @@ -0,0 +1,38 @@ +#!/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