{ options, config, lib, pkgs, ... }: with lib; let cfg = config.aa.services.prometheus; exporters = config.services.prometheus.exporters; in { options.aa.services.prometheus = with types; { enable = mkEnableOption "prometheus"; enableServer = mkOption { type = bool; default = false; description = "Whether or not to enable the prometheus server"; }; enableNodeExporter = mkOption { type = bool; default = true; description = "Whether or not to enable the node exporter"; }; }; config = mkIf cfg.enable { services.prometheus = { enable = cfg.enableServer; exporters = { node = { enable = cfg.enableNodeExporter; enabledCollectors = ["systemd"]; port = 9002; openFirewall = true; }; }; scrapeConfigs = mkIf cfg.enableServer [ { job_name = "node"; static_configs = [ { # TODO: How to automatically generate this whenever an exporter # is configured targets = [ "node:${toString exporters.node.port}" "gospel:${toString exporters.node.port}" "pi4:${toString exporters.node.port}" ]; } ]; } ]; }; networking.firewall = mkIf cfg.enableServer { allowedTCPPorts = [config.services.prometheus.port]; }; }; }