1
0
Fork 0

add prometheus deluge exporter

This commit is contained in:
ibizaman 2024-06-09 23:30:14 -07:00 committed by Pierre Penninckx
parent 848083dacc
commit a4c4ee1670
4 changed files with 72 additions and 2 deletions

View file

@ -18,6 +18,7 @@
- Revert Loki to major version 2 because upgrading to version 3 required manual intervention as Loki
refuses to start. So until this issue is tackled, reverting is the best immediate fix.
See https://github.com/NixOS/nixpkgs/commit/8f95320f39d7e4e4a29ee70b8718974295a619f4
- Add prometheus deluge exporter support. It just needs the `shb.deluge.prometheusScraperPasswordFile` option to be set.
## Other Changes

View file

@ -20,6 +20,10 @@
url = "https://patch-diff.githubusercontent.com/raw/NixOS/nixpkgs/pull/315018.patch";
hash = "sha256-8jcGyO/d+htfv/ZajxXh89S3OiDZAr7/fsWC1JpGczM=";
})
(originPkgs.fetchpatch {
url = "https://github.com/NixOS/nixpkgs/pull/317107.patch";
hash = "sha256-/bFQVxQgrDrMlACQGWBpMk76+PaA5mP9HuWm9MwCs/0=";
})
];
patchedNixpkgs = originPkgs.applyPatches {
name = "nixpkgs-patched";

View file

@ -182,6 +182,12 @@ in
type = lib.types.path;
};
prometheusScraperPasswordFile = lib.mkOption {
description = "File containing password for prometheus scraper. Setting this option will activate the prometheus deluge exporter.";
type = lib.types.nullOr lib.types.path;
default = null;
};
enabledPlugins = lib.mkOption {
type = lib.types.listOf lib.types.str;
description = ''
@ -266,7 +272,9 @@ in
systemd.services.deluged.preStart = lib.mkBefore (shblib.replaceSecrets {
userConfig = cfg.extraUsers // {
localclient.password.source = config.shb.deluge.localclientPasswordFile;
};
} // (lib.optionalAttrs (config.shb.deluge.prometheusScraperPasswordFile != null) {
prometheus_scraper.password.source = config.shb.deluge.prometheusScraperPasswordFile;
});
resultPath = "${config.services.deluge.dataDir}/.config/deluge/authTemplate";
generator = name: value: pkgs.writeText "delugeAuth" (authGenerator value);
});
@ -320,5 +328,24 @@ in
};
} {
systemd.services.deluged.serviceConfig = cfg.extraServiceConfig;
}]);
} (lib.mkIf (config.shb.deluge.prometheusScraperPasswordFile != null) {
services.prometheus.exporters.deluge = {
enable = true;
delugeHost = "127.0.0.1";
delugePort = config.services.deluge.config.daemon_port;
delugeUser = "prometheus_scraper";
delugePasswordFile = config.shb.deluge.prometheusScraperPasswordFile;
};
services.prometheus.scrapeConfigs = [
{
job_name = "deluge";
static_configs = [{
targets = ["127.0.0.1:${toString config.services.prometheus.exporters.deluge.port}"];
}];
}
];
})
]);
}

View file

@ -98,6 +98,21 @@ let
raise Exception(f"result had an error {response['error']}")
'';
prometheusTestScript = { nodes, ... }:
let
hasSSL = !(isNull nodes.server.shb.deluge.ssl);
proto_fqdn = if hasSSL then "https://${fqdn}" else "http://${fqdn}";
in
''
server.wait_for_open_port(${toString nodes.server.services.prometheus.exporters.deluge.port})
with subtest("prometheus"):
response = server.succeed(
"curl -sSf "
+ " http://localhost:${toString nodes.server.services.prometheus.exporters.deluge.port}/metrics"
)
print(response)
'';
base = {
imports = [
(pkgs'.path + "/nixos/modules/profiles/headless.nix")
@ -293,4 +308,27 @@ in
#
# testScript = commonTestScript;
# };
prometheus = pkgs.testers.runNixOSTest {
name = "deluge_https";
nodes.server = lib.mkMerge [
base
certs
basic
https
prometheus
{
options = {
shb.authelia = lib.mkOption { type = lib.types.anything; };
};
}
];
nodes.client = {};
testScript = inputs:
(commonTestScript inputs)
+ (prometheusTestScript inputs);
};
}