{ config, ... }:

let
  nodeExporterPort = 40000;
  nginxExporterPort = 40001;
  postfixExporterPort = 40002;

  basic_auth = {
    username = "jan";
    password_file = config.age.secrets.prometheus-basicauth-password.path;
  };
in
{
  age.secrets.prometheus-basicauth-password.file = ./prometheus-basicauth-password.age;

  services.prometheus.exporters.node = {
    enable = true;
    port = nodeExporterPort;
    # https://github.com/NixOS/nixpkgs/blob/nixos-24.05/nixos/modules/services/monitoring/prometheus/exporters.nix
    enabledCollectors = [ "systemd" ];
    # /nix/store/zgsw0yx18v10xa58psanfabmg95nl2bb-node_exporter-1.8.1/bin/node_exporter  --help
    extraFlags = [
      "--collector.ethtool"
      "--collector.softirqs"
      "--collector.tcpstat"
      "--collector.wifi"
    ];
  };

  # https://wiki.nixos.org/wiki/Prometheus
  # https://nixos.org/manual/nixos/stable/#module-services-prometheus-exporters-configuration
  # https://github.com/NixOS/nixpkgs/blob/nixos-24.05/nixos/modules/services/monitoring/prometheus/default.nix
  services.prometheus = {
    enable = true;
    listenAddress = "127.0.0.1";
    port = 33010;
    globalConfig.scrape_interval = "15s"; # "1m"
    scrapeConfigs = [
      {
        job_name = "node_dev";
        static_configs = [
          {
            targets = [
              "tatos:${toString nodeExporterPort}"
              "istal:${toString nodeExporterPort}"
            ];
          }
        ];
      }
      {
        job_name = "node_production";
        inherit basic_auth;
        static_configs = [
          {
            targets = [
              "canigou:${toString nodeExporterPort}"
              "magenta:${toString nodeExporterPort}"
              "sm-sd1:${toString nodeExporterPort}"
            ];
          }
        ];
      }
      {
        job_name = "nginx_production";
        inherit basic_auth;
        static_configs = [
          {
            targets = [
              "canigou:${toString nginxExporterPort}"
              "magenta:${toString nginxExporterPort}"
            ];
          }
        ];
      }
      {
        job_name = "sm_smtp";
        # inherit basic_auth;
        static_configs = [
          {
            targets = [
              "sm-sd1:${toString postfixExporterPort}"
            ];
          }
        ];
      }
    ];
  };
}