diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index cfbb910a999..2eb61cd697d 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -6557,6 +6557,12 @@ githubId = 6445082; name = "Joseph Lukasik"; }; + jhh = { + email = "jeff@j3ff.io"; + github = "jhh"; + githubId = 14412; + name = "Jeff Hutchison"; + }; jhhuh = { email = "jhhuh.note@gmail.com"; github = "jhhuh"; diff --git a/nixos/modules/services/monitoring/prometheus/exporters.nix b/nixos/modules/services/monitoring/prometheus/exporters.nix index 8826d80a70c..22b78981b2c 100644 --- a/nixos/modules/services/monitoring/prometheus/exporters.nix +++ b/nixos/modules/services/monitoring/prometheus/exporters.nix @@ -51,6 +51,7 @@ let "nginx" "nginxlog" "node" + "nut" "openldap" "openvpn" "pihole" diff --git a/nixos/modules/services/monitoring/prometheus/exporters/nut.nix b/nixos/modules/services/monitoring/prometheus/exporters/nut.nix new file mode 100644 index 00000000000..1c86b48b450 --- /dev/null +++ b/nixos/modules/services/monitoring/prometheus/exporters/nut.nix @@ -0,0 +1,50 @@ +{ config, lib, pkgs, options }: + +with lib; + +let + cfg = config.services.prometheus.exporters.nut; +in +{ + port = 9199; + extraOpts = { + nutServer = mkOption { + type = types.str; + default = "127.0.0.1"; + description = lib.mdDoc '' + Hostname or address of the NUT server + ''; + }; + nutUser = mkOption { + type = types.str; + default = ""; + example = "nut"; + description = lib.mdDoc '' + The user to log in into NUT server. If set, passwordPath should + also be set. + + Default NUT configs usually permit reading variables without + authentication. + ''; + }; + passwordPath = mkOption { + type = types.nullOr types.path; + default = null; + apply = final: if final == null then null else toString final; + description = lib.mdDoc '' + A run-time path to the nutUser password file, which should be + provisioned outside of Nix store. + ''; + }; + }; + serviceOpts = { + script = '' + ${optionalString (cfg.passwordPath != null) + "export NUT_EXPORTER_PASSWORD=$(cat ${toString cfg.passwordPath})"} + ${pkgs.prometheus-nut-exporter}/bin/nut_exporter \ + --nut.server=${cfg.nutServer} \ + --web.listen-address="${cfg.listenAddress}:${toString cfg.port}" \ + ${optionalString (cfg.nutUser != "") "--nut.username=${cfg.nutUser}"} + ''; + }; +} diff --git a/pkgs/servers/monitoring/prometheus/nut-exporter.nix b/pkgs/servers/monitoring/prometheus/nut-exporter.nix new file mode 100644 index 00000000000..9877d7639bd --- /dev/null +++ b/pkgs/servers/monitoring/prometheus/nut-exporter.nix @@ -0,0 +1,22 @@ +{ lib, buildGoModule, fetchFromGitHub }: + +buildGoModule rec { + pname = "nut-exporter"; + version = "2.4.2"; + + src = fetchFromGitHub { + owner = "DRuggeri"; + repo = "nut_exporter"; + rev = "v${version}"; + sha256 = "sha256-fymVx6FJGII2PmWXVfeCRTxfO+35bmyn/9iL0iPuBgo="; + }; + + vendorSha256 = "sha256-ji8JlEYChPBakt5y6+zcm1l04VzZ0/fjfGFJ9p+1KHE="; + + meta = with lib; { + description = "Prometheus exporter for Network UPS Tools"; + homepage = "https://github.com/DRuggeri/nut_exporter"; + license = licenses.asl20; + maintainers = with maintainers; [ jhh ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ae7a2ba2613..bf501321ca1 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -24518,6 +24518,7 @@ with pkgs; prometheus-node-exporter = callPackage ../servers/monitoring/prometheus/node-exporter.nix { inherit (darwin.apple_sdk.frameworks) CoreFoundation IOKit; }; + prometheus-nut-exporter = callPackage ../servers/monitoring/prometheus/nut-exporter.nix { }; prometheus-openldap-exporter = callPackage ../servers/monitoring/prometheus/openldap-exporter.nix { buildGoModule = buildGo118Module; # nixosTests.prometheus-exporter.ldap fails with 1.19 };