{ config, lib, pkgs, options }: with lib; let cfg = config.services.prometheus.exporters.collectd; in { port = 9103; extraOpts = { collectdBinary = { enable = mkEnableOption "collectd binary protocol receiver"; authFile = mkOption { default = null; type = types.nullOr types.path; description = "File mapping user names to pre-shared keys (passwords)."; }; port = mkOption { type = types.int; default = 25826; description = ''Network address on which to accept collectd binary network packets.''; }; listenAddress = mkOption { type = types.str; default = "0.0.0.0"; description = '' Address to listen on for binary network packets. ''; }; securityLevel = mkOption { type = types.enum ["None" "Sign" "Encrypt"]; default = "None"; description = '' Minimum required security level for accepted packets. ''; }; }; logFormat = mkOption { type = types.str; default = "logger:stderr"; example = "logger:syslog?appname=bob&local=7 or logger:stdout?json=true"; description = '' Set the log target and format. ''; }; logLevel = mkOption { type = types.enum ["debug" "info" "warn" "error" "fatal"]; default = "info"; description = '' Only log messages with the given severity or above. ''; }; }; serviceOpts = let collectSettingsArgs = if (cfg.collectdBinary.enable) then '' -collectd.listen-address ${cfg.collectdBinary.listenAddress}:${toString cfg.collectdBinary.port} \ -collectd.security-level ${cfg.collectdBinary.securityLevel} \ '' else ""; in { serviceConfig = { ExecStart = '' ${pkgs.prometheus-collectd-exporter}/bin/collectd_exporter \ -log.format ${escapeShellArg cfg.logFormat} \ -log.level ${cfg.logLevel} \ -web.listen-address ${cfg.listenAddress}:${toString cfg.port} \ ${collectSettingsArgs} \ ${concatStringsSep " \\\n " cfg.extraFlags} ''; }; }; }