1
0
Fork 1
mirror of https://github.com/NixOS/nixpkgs.git synced 2025-02-19 17:39:34 +00:00

nixos/tests/prometheus-exporters: nixpkgs-fmt

This commit is contained in:
Sandro Jäckel 2021-04-29 06:01:12 +02:00
parent da858b16b8
commit d3fe53a8a6
No known key found for this signature in database
GPG key ID: 3AF5A43A3EECC2E5

View file

@ -1,65 +1,65 @@
{ system ? builtins.currentSystem { system ? builtins.currentSystem
, config ? {} , config ? { }
, pkgs ? import ../.. { inherit system config; } , pkgs ? import ../.. { inherit system config; }
}: }:
let let
inherit (import ../lib/testing-python.nix { inherit system pkgs; }) makeTest; inherit (import ../lib/testing-python.nix { inherit system pkgs; }) makeTest;
inherit (pkgs.lib) concatStringsSep maintainers mapAttrs mkMerge inherit (pkgs.lib) concatStringsSep maintainers mapAttrs mkMerge
removeSuffix replaceChars singleton splitString; removeSuffix replaceChars singleton splitString;
/* /*
* The attrset `exporterTests` contains one attribute * The attrset `exporterTests` contains one attribute
* for each exporter test. Each of these attributes * for each exporter test. Each of these attributes
* is expected to be an attrset containing: * is expected to be an attrset containing:
* *
* `exporterConfig`: * `exporterConfig`:
* this attribute set contains config for the exporter itself * this attribute set contains config for the exporter itself
* *
* `exporterTest` * `exporterTest`
* this attribute set contains test instructions * this attribute set contains test instructions
* *
* `metricProvider` (optional) * `metricProvider` (optional)
* this attribute contains additional machine config * this attribute contains additional machine config
* *
* `nodeName` (optional) * `nodeName` (optional)
* override an incompatible testnode name * override an incompatible testnode name
* *
* Example: * Example:
* exporterTests.<exporterName> = { * exporterTests.<exporterName> = {
* exporterConfig = { * exporterConfig = {
* enable = true; * enable = true;
* }; * };
* metricProvider = { * metricProvider = {
* services.<metricProvider>.enable = true; * services.<metricProvider>.enable = true;
* }; * };
* exporterTest = '' * exporterTest = ''
* wait_for_unit("prometheus-<exporterName>-exporter.service") * wait_for_unit("prometheus-<exporterName>-exporter.service")
* wait_for_open_port("1234") * wait_for_open_port("1234")
* succeed("curl -sSf 'localhost:1234/metrics'") * succeed("curl -sSf 'localhost:1234/metrics'")
* ''; * '';
* }; * };
* *
* # this would generate the following test config: * # this would generate the following test config:
* *
* nodes.<exporterName> = { * nodes.<exporterName> = {
* services.prometheus.<exporterName> = { * services.prometheus.<exporterName> = {
* enable = true; * enable = true;
* }; * };
* services.<metricProvider>.enable = true; * services.<metricProvider>.enable = true;
* }; * };
* *
* testScript = '' * testScript = ''
* <exporterName>.start() * <exporterName>.start()
* <exporterName>.wait_for_unit("prometheus-<exporterName>-exporter.service") * <exporterName>.wait_for_unit("prometheus-<exporterName>-exporter.service")
* <exporterName>.wait_for_open_port("1234") * <exporterName>.wait_for_open_port("1234")
* <exporterName>.succeed("curl -sSf 'localhost:1234/metrics'") * <exporterName>.succeed("curl -sSf 'localhost:1234/metrics'")
* <exporterName>.shutdown() * <exporterName>.shutdown()
* ''; * '';
*/ */
exporterTests = { exporterTests = {
apcupsd = { apcupsd = {
exporterConfig = { exporterConfig = {
enable = true; enable = true;
}; };
@ -188,20 +188,21 @@ let
"plugin":"testplugin", "plugin":"testplugin",
"time":DATE "time":DATE
}] }]
''; in '' ''; in
wait_for_unit("prometheus-collectd-exporter.service") ''
wait_for_open_port(9103) wait_for_unit("prometheus-collectd-exporter.service")
succeed( wait_for_open_port(9103)
'echo \'${postData}\'> /tmp/data.json' succeed(
) 'echo \'${postData}\'> /tmp/data.json'
succeed('sed -ie "s DATE $(date +%s) " /tmp/data.json') )
succeed( succeed('sed -ie "s DATE $(date +%s) " /tmp/data.json')
"curl -sSfH 'Content-Type: application/json' -X POST --data @/tmp/data.json localhost:9103/collectd" succeed(
) "curl -sSfH 'Content-Type: application/json' -X POST --data @/tmp/data.json localhost:9103/collectd"
succeed( )
"curl -sSf localhost:9103/metrics | grep -q 'collectd_testplugin_gauge{instance=\"testhost\"} 23'" succeed(
) "curl -sSf localhost:9103/metrics | grep -q 'collectd_testplugin_gauge{instance=\"testhost\"} 23'"
''; )
'';
}; };
dnsmasq = { dnsmasq = {
@ -254,7 +255,8 @@ let
''; '';
}; };
fritzbox = { # TODO add proper test case fritzbox = {
# TODO add proper test case
exporterConfig = { exporterConfig = {
enable = true; enable = true;
}; };
@ -373,19 +375,19 @@ let
''; '';
systemd.services.lnd = { systemd.services.lnd = {
serviceConfig.ExecStart = '' serviceConfig.ExecStart = ''
${pkgs.lnd}/bin/lnd \ ${pkgs.lnd}/bin/lnd \
--datadir=/var/lib/lnd \ --datadir=/var/lib/lnd \
--tlscertpath=/var/lib/lnd/tls.cert \ --tlscertpath=/var/lib/lnd/tls.cert \
--tlskeypath=/var/lib/lnd/tls.key \ --tlskeypath=/var/lib/lnd/tls.key \
--logdir=/var/log/lnd \ --logdir=/var/log/lnd \
--bitcoin.active \ --bitcoin.active \
--bitcoin.mainnet \ --bitcoin.mainnet \
--bitcoin.node=bitcoind \ --bitcoin.node=bitcoind \
--bitcoind.rpcuser=bitcoinrpc \ --bitcoind.rpcuser=bitcoinrpc \
--bitcoind.rpcpass=hunter2 \ --bitcoind.rpcpass=hunter2 \
--bitcoind.zmqpubrawblock=tcp://127.0.0.1:28332 \ --bitcoind.zmqpubrawblock=tcp://127.0.0.1:28332 \
--bitcoind.zmqpubrawtx=tcp://127.0.0.1:28333 \ --bitcoind.zmqpubrawtx=tcp://127.0.0.1:28333 \
--readonlymacaroonpath=/var/lib/lnd/readonly.macaroon --readonlymacaroonpath=/var/lib/lnd/readonly.macaroon
''; '';
serviceConfig.StateDirectory = "lnd"; serviceConfig.StateDirectory = "lnd";
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
@ -407,14 +409,14 @@ let
configuration = { configuration = {
monitoringInterval = "2s"; monitoringInterval = "2s";
mailCheckTimeout = "10s"; mailCheckTimeout = "10s";
servers = [ { servers = [{
name = "testserver"; name = "testserver";
server = "localhost"; server = "localhost";
port = 25; port = 25;
from = "mail-exporter@localhost"; from = "mail-exporter@localhost";
to = "mail-exporter@localhost"; to = "mail-exporter@localhost";
detectionDir = "/var/spool/mail/mail-exporter/new"; detectionDir = "/var/spool/mail/mail-exporter/new";
} ]; }];
}; };
}; };
metricProvider = { metricProvider = {
@ -516,15 +518,17 @@ let
url = "http://localhost"; url = "http://localhost";
}; };
metricProvider = { metricProvider = {
systemd.services.nc-pwfile = let systemd.services.nc-pwfile =
passfile = (pkgs.writeText "pwfile" "snakeoilpw"); let
in { passfile = (pkgs.writeText "pwfile" "snakeoilpw");
requiredBy = [ "prometheus-nextcloud-exporter.service" ]; in
before = [ "prometheus-nextcloud-exporter.service" ]; {
serviceConfig.ExecStart = '' requiredBy = [ "prometheus-nextcloud-exporter.service" ];
${pkgs.coreutils}/bin/install -o nextcloud-exporter -m 0400 ${passfile} /var/nextcloud-pwfile before = [ "prometheus-nextcloud-exporter.service" ];
''; serviceConfig.ExecStart = ''
}; ${pkgs.coreutils}/bin/install -o nextcloud-exporter -m 0400 ${passfile} /var/nextcloud-pwfile
'';
};
services.nginx = { services.nginx = {
enable = true; enable = true;
virtualHosts."localhost" = { virtualHosts."localhost" = {
@ -581,7 +585,7 @@ let
syslog = { syslog = {
listen_address = "udp://127.0.0.1:10000"; listen_address = "udp://127.0.0.1:10000";
format = "rfc3164"; format = "rfc3164";
tags = ["nginx"]; tags = [ "nginx" ];
}; };
}; };
} }
@ -701,10 +705,10 @@ let
exporterConfig = { exporterConfig = {
enable = true; enable = true;
group = "openvpn"; group = "openvpn";
statusPaths = ["/run/openvpn-test"]; statusPaths = [ "/run/openvpn-test" ];
}; };
metricProvider = { metricProvider = {
users.groups.openvpn = {}; users.groups.openvpn = { };
services.openvpn.servers.test = { services.openvpn.servers.test = {
config = '' config = ''
dev tun dev tun
@ -824,19 +828,21 @@ let
}; };
metricProvider = { metricProvider = {
# Mock rtl_433 binary to return a dummy metric stream. # Mock rtl_433 binary to return a dummy metric stream.
nixpkgs.overlays = [ (self: super: { nixpkgs.overlays = [
rtl_433 = self.runCommand "rtl_433" {} '' (self: super: {
mkdir -p "$out/bin" rtl_433 = self.runCommand "rtl_433" { } ''
cat <<EOF > "$out/bin/rtl_433" mkdir -p "$out/bin"
#!/bin/sh cat <<EOF > "$out/bin/rtl_433"
while true; do #!/bin/sh
printf '{"time" : "2020-04-26 13:37:42", "model" : "zopieux", "id" : 55, "channel" : 3, "temperature_C" : 18.000}\n' while true; do
sleep 4 printf '{"time" : "2020-04-26 13:37:42", "model" : "zopieux", "id" : 55, "channel" : 3, "temperature_C" : 18.000}\n'
done sleep 4
EOF done
chmod +x "$out/bin/rtl_433" EOF
''; chmod +x "$out/bin/rtl_433"
}) ]; '';
})
];
}; };
exporterTest = '' exporterTest = ''
wait_for_unit("prometheus-rtl_433-exporter.service") wait_for_unit("prometheus-rtl_433-exporter.service")
@ -852,7 +858,7 @@ let
smokeping = { smokeping = {
exporterConfig = { exporterConfig = {
enable = true; enable = true;
hosts = ["127.0.0.1"]; hosts = [ "127.0.0.1" ];
}; };
exporterTest = '' exporterTest = ''
wait_for_unit("prometheus-smokeping-exporter.service") wait_for_unit("prometheus-smokeping-exporter.service")
@ -990,7 +996,7 @@ let
unifi-poller = { unifi-poller = {
nodeName = "unifi_poller"; nodeName = "unifi_poller";
exporterConfig.enable = true; exporterConfig.enable = true;
exporterConfig.controllers = [ { } ]; exporterConfig.controllers = [{ }];
exporterTest = '' exporterTest = ''
wait_for_unit("prometheus-unifi-poller-exporter.service") wait_for_unit("prometheus-unifi-poller-exporter.service")
wait_for_open_port(9130) wait_for_open_port(9130)
@ -1052,54 +1058,60 @@ let
''; '';
}; };
wireguard = let snakeoil = import ./wireguard/snakeoil-keys.nix; in { wireguard = let snakeoil = import ./wireguard/snakeoil-keys.nix; in
exporterConfig.enable = true; {
metricProvider = { exporterConfig.enable = true;
networking.wireguard.interfaces.wg0 = { metricProvider = {
ips = [ "10.23.42.1/32" "fc00::1/128" ]; networking.wireguard.interfaces.wg0 = {
listenPort = 23542; ips = [ "10.23.42.1/32" "fc00::1/128" ];
listenPort = 23542;
inherit (snakeoil.peer0) privateKey; inherit (snakeoil.peer0) privateKey;
peers = singleton { peers = singleton {
allowedIPs = [ "10.23.42.2/32" "fc00::2/128" ]; allowedIPs = [ "10.23.42.2/32" "fc00::2/128" ];
inherit (snakeoil.peer1) publicKey; inherit (snakeoil.peer1) publicKey;
};
}; };
systemd.services.prometheus-wireguard-exporter.after = [ "wireguard-wg0.service" ];
}; };
systemd.services.prometheus-wireguard-exporter.after = [ "wireguard-wg0.service" ]; exporterTest = ''
wait_for_unit("prometheus-wireguard-exporter.service")
wait_for_open_port(9586)
wait_until_succeeds(
"curl -sSf http://localhost:9586/metrics | grep '${snakeoil.peer1.publicKey}'"
)
'';
}; };
exporterTest = ''
wait_for_unit("prometheus-wireguard-exporter.service")
wait_for_open_port(9586)
wait_until_succeeds(
"curl -sSf http://localhost:9586/metrics | grep '${snakeoil.peer1.publicKey}'"
)
'';
};
}; };
in in
mapAttrs (exporter: testConfig: (makeTest (let mapAttrs
nodeName = testConfig.nodeName or exporter; (exporter: testConfig: (makeTest (
let
nodeName = testConfig.nodeName or exporter;
in { in
name = "prometheus-${exporter}-exporter"; {
name = "prometheus-${exporter}-exporter";
nodes.${nodeName} = mkMerge [{ nodes.${nodeName} = mkMerge [{
services.prometheus.exporters.${exporter} = testConfig.exporterConfig; services.prometheus.exporters.${exporter} = testConfig.exporterConfig;
} testConfig.metricProvider or {}]; } testConfig.metricProvider or { }];
testScript = '' testScript = ''
${nodeName}.start() ${nodeName}.start()
${concatStringsSep "\n" (map (line: ${concatStringsSep "\n" (map (line:
if (builtins.substring 0 1 line == " " || builtins.substring 0 1 line == ")") if (builtins.substring 0 1 line == " " || builtins.substring 0 1 line == ")")
then line then line
else "${nodeName}.${line}" else "${nodeName}.${line}"
) (splitString "\n" (removeSuffix "\n" testConfig.exporterTest)))} ) (splitString "\n" (removeSuffix "\n" testConfig.exporterTest)))}
${nodeName}.shutdown() ${nodeName}.shutdown()
''; '';
meta = with maintainers; { meta = with maintainers; {
maintainers = [ willibutz elseym ]; maintainers = [ willibutz elseym ];
}; };
}))) exporterTests }
)))
exporterTests