Files
platform/modules/hpc/infiniband-exporter.nix
2025-06-30 12:21:05 +02:00

59 lines
1.5 KiB
Nix

{pkgs, config, lib, ...}:
with lib;
let
cfg = config.features.monitoring.infiniband-exporter;
python-env = pkgs.python3.withPackages (ps: with ps; [
prometheus_client
]
);
exporter = pkgs.fetchFromGitHub {
owner = "guilbaults";
repo = "infiniband-exporter";
rev = "12e7b2de049fc3c33c44e164f426dd723c8479c0";
hash = "sha256-+n09beiJEgOgX+3po7fjiwZrziug+5N4JHi7ivTYa9U=";
};
nameMap = pkgs.writeTextFile {
name = "infiniband-node-name-map.txt";
text = cfg.nameMap;
};
infiniband-exporter-service = {
systemd.services.infiniband-exporter = {
enable = true;
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
description = "Prometheus InfiniBand exporter";
path = [ pkgs.rdma-core ];
script = "${python-env}/bin/python3 ${exporter}/infiniband-exporter.py"
+ " --port ${builtins.toString cfg.port} --can-reset-counter"
+ (if cfg.nameMap == null then "" else " --node-name-map=${nameMap}");
serviceConfig = {
RestartSec = "15s";
Restart = "on-failure";
};
};
};
in {
options.features.monitoring.infiniband-exporter = {
enable = mkEnableOption "Enable InfiniBand prometheus exporter";
port = mkOption {
type = types.ints.unsigned;
default = 9683;
description = "Collector http port";
};
nameMap = mkOption {
type = types.nullOr types.str;
default = null;
description = "Node name map";
};
};
config = mkIf cfg.enable infiniband-exporter-service;
}