From 36ac1fa6025c75b9eac404fee4cb33fccda9179a Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Sun, 23 Jan 2022 17:18:58 +0100 Subject: [PATCH] nncp: collect statistics Publish the spool size and packet count for each neighbour. --- hosts/containers/nncp/collectd_nncp.nim | 41 +++++++++++++++++++++++++ hosts/containers/nncp/default.nix | 12 ++++++++ 2 files changed, 53 insertions(+) create mode 100644 hosts/containers/nncp/collectd_nncp.nim diff --git a/hosts/containers/nncp/collectd_nncp.nim b/hosts/containers/nncp/collectd_nncp.nim new file mode 100644 index 00000000..76dfdc72 --- /dev/null +++ b/hosts/containers/nncp/collectd_nncp.nim @@ -0,0 +1,41 @@ +import std/[os, strutils] + +import posix + +proc getFileSize(path: string): BiggestInt = + var rawInfo: Stat + if stat(path, rawInfo) < 0'i32: + raiseOSError(osLastError(), path) + rawInfo.st_size + +let + hostname = getEnv("COLLECTD_HOSTNAME", "localhost") + interval = max(60, getEnv("COLLECTD_INTERVAL", "0").parseFloat.int) + args = commandLineParams() + +doAssert(args.len == 1, "pass only the NNCP spool directry as an argument") + +proc sumDir(path: string): tuple[size: BiggestInt, packets: int] = + for kind, path in walkDir path: + if kind == pcFile: + result.size = result.size + getFileSize(path) + inc result.packets + +while true: + for kind, path in walkDir args[0]: + if kind == pcLinkToDir: + var nodeName = extractFilename path + block: + var rx = sumDir(path / "rx") + stdout.writeLine("""PUTVAL "$#/nncp-$#/bytes-rx" interval=$# N:$#""" % + [hostname, nodeName, $interval, $rx.size]) + stdout.writeLine("""PUTVAL "$#/nncp-$#/pending_operations-rx" interval=$# N:$#""" % + [hostname, nodeName, $interval, $rx.packets]) + block: + var tx = sumDir(path / "tx") + stdout.writeLine("""PUTVAL "$#/nncp-$#/bytes-tx" interval=$# N:$#""" % + [hostname, nodeName, $interval, $tx.size]) + stdout.writeLine("""PUTVAL "$#/nncp-$#/pending_operations-tx" interval=$# N:$#""" % + [hostname, nodeName, $interval, $tx.packets]) + flushFile stdout + sleep interval*1000 diff --git a/hosts/containers/nncp/default.nix b/hosts/containers/nncp/default.nix index 8b2be4cf..ae647874 100644 --- a/hosts/containers/nncp/default.nix +++ b/hosts/containers/nncp/default.nix @@ -4,6 +4,7 @@ boot.loader.initScript.enable = lib.mkForce false; c3d2.mergeNncpSettings = false; + c3d2.hq.statistics.enable = true; networking = { hostName = "nncp"; @@ -23,6 +24,17 @@ }; }; + services.collectd.plugins.exec = let + util = + pkgs.runCommand "collectd_nncp" { nativeBuildInputs = [ pkgs.nim ]; } '' + cp ${./collectd_nncp.nim} ./collectd_nncp.nim + nim c --nimcache:. -o:$out ./collectd_nncp.nim + ''; + in '' + Exec "${config.services.collectd.user}" "${util}" "${config.programs.nncp.settings.spool}" + ''; + users.groups.uucp.members = [ config.services.collectd.user ]; + services.nncp = { caller.enable = false; daemon = {