{ ... }:
{
  name = "monitoring";

  clan = {
    directory = ./.;
    inventory = {
      machines.peer1 = {
        deploy.targetHost = "[2001:db8:1::1]";
      };

      instances."test" = {
        module.name = "monitoring";
        module.input = "self";

        roles.telegraf.machines.peer1 = { };
      };
    };
  };

  nodes = {
    peer1 =
      { lib, ... }:
      {
        services.telegraf.extraConfig = {
          agent.interval = lib.mkForce "1s";
          outputs.prometheus_client = {
            # BUG: We have to disable basic auth here because the prometheus_client
            # output plugin will otherwise deadlock Telegraf on startup.
            basic_password = lib.mkForce "";
            basic_username = lib.mkForce "";
          };
        };
      };
  };

  # !!! ANY CHANGES HERE MUST BE REFLECTED IN:
  # clan_lib/metrics/telegraf.py::get_metrics
  testScript =
    { nodes, ... }:
    ''
      import time
      import os
      import sys
      import subprocess 
      import ssl
      import json
      import shlex
      import urllib.request
      from base64 import b64encode
      start_all()

      peer1.wait_for_unit("network-online.target")
      peer1.wait_for_unit("telegraf.service")
      peer1.wait_for_unit("telegraf-json.service")

      # Fetch the basic auth password from the secret file
      password = peer1.succeed("cat ${nodes.peer1.clan.core.vars.generators.telegraf.files.password.path}").strip()
      credentials = f"prometheus:{password}"

      print("Using credentials:", credentials)
      peer1.succeed(f"curl -k -u {credentials}  https://localhost:9990/telegraf.json")
      peer1.succeed(f"curl -k -u {credentials}  https://localhost:9273/metrics")

      cert_path = "${nodes.peer1.clan.core.vars.generators.telegraf-certs.files.crt.path}"
      url = "https://192.168.1.1:9990/telegraf.json"  # HTTPS required

      print("Waiting for /var/run/telegraf-www/telegraf.json to be bigger then 200 bytes")
      peer1.wait_until_succeeds(f"test \"$(stat -c%s /var/run/telegraf-www/telegraf.json)\" -ge 200", timeout=30)

      encoded_credentials = b64encode(credentials.encode("utf-8")).decode("utf-8")
      headers = {"Authorization": f"Basic {encoded_credentials}"}
      req = urllib.request.Request(url, headers=headers)  # noqa: S310

      # Trust the provided CA/server certificate
      context = ssl.create_default_context(cafile=cert_path)
      context.check_hostname = False
      context.verify_mode = ssl.CERT_REQUIRED

      found_system = False
      with urllib.request.urlopen(req, context=context, timeout=5) as response:
          for raw_line in response:
              line_str = raw_line.decode("utf-8").strip()
              if not line_str:
                  continue
              obj = json.loads(line_str)
              if obj.get("name") == "nixos_systems":
                  found_system = True
                  print("Found nixos_systems metric in json output")
                  break

      assert found_system, "nixos_systems metric not found in json output"

    '';
}
