Merge pull request #248925 from FugiMuffi/prometheus-sabnzbd-exporter

prometheus-sabnzbd-exporter: init at 0.1.70

authored by WilliButz and committed by GitHub 2d30a37d f4822bb2

+125
+1
nixos/modules/services/monitoring/prometheus/exporters.nix
··· 68 68 "redis" 69 69 "rspamd" 70 70 "rtl_433" 71 + "sabnzbd" 71 72 "scaphandre" 72 73 "script" 73 74 "shelly"
+47
nixos/modules/services/monitoring/prometheus/exporters/sabnzbd.nix
··· 1 + { config, lib, pkgs, options }: 2 + 3 + let 4 + inherit (lib) mkOption types; 5 + cfg = config.services.prometheus.exporters.sabnzbd; 6 + in 7 + { 8 + port = 9387; 9 + 10 + extraOpts = { 11 + servers = mkOption { 12 + description = "List of sabnzbd servers to connect to."; 13 + type = types.listOf (types.submodule { 14 + options = { 15 + baseUrl = mkOption { 16 + type = types.str; 17 + description = "Base URL of the sabnzbd server."; 18 + example = "http://localhost:8080/sabnzbd"; 19 + }; 20 + apiKeyFile = mkOption { 21 + type = types.str; 22 + description = "File containing the API key."; 23 + example = "/run/secrets/sabnzbd_apikey"; 24 + }; 25 + }; 26 + }); 27 + }; 28 + }; 29 + 30 + serviceOpts = 31 + let 32 + servers = lib.zipAttrs cfg.servers; 33 + apiKeys = lib.concatStringsSep "," (builtins.map (file: "$(cat ${file})") servers.apiKeyFile); 34 + in 35 + { 36 + environment = { 37 + METRICS_PORT = toString cfg.port; 38 + METRICS_ADDR = cfg.listenAddress; 39 + SABNZBD_BASEURLS = lib.concatStringsSep "," servers.baseUrl; 40 + }; 41 + 42 + script = '' 43 + export SABNZBD_APIKEYS="${apiKeys}" 44 + exec ${lib.getExe pkgs.prometheus-sabnzbd-exporter} 45 + ''; 46 + }; 47 + }
+38
nixos/tests/prometheus-exporters.nix
··· 1178 1178 ''; 1179 1179 }; 1180 1180 1181 + sabnzbd = { 1182 + exporterConfig = { 1183 + enable = true; 1184 + servers = [{ 1185 + baseUrl = "http://localhost:8080"; 1186 + apiKeyFile = "/var/sabnzbd-apikey"; 1187 + }]; 1188 + }; 1189 + 1190 + metricProvider = { 1191 + services.sabnzbd.enable = true; 1192 + 1193 + # unrar is required for sabnzbd 1194 + nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (pkgs.lib.getName pkg) [ "unrar" ]; 1195 + 1196 + # extract the generated api key before starting 1197 + systemd.services.sabnzbd-apikey = { 1198 + requires = [ "sabnzbd.service" ]; 1199 + after = [ "sabnzbd.service" ]; 1200 + requiredBy = [ "prometheus-sabnzbd-exporter.service" ]; 1201 + before = [ "prometheus-sabnzbd-exporter.service" ]; 1202 + script = '' 1203 + grep -Po '^api_key = \K.+' /var/lib/sabnzbd/sabnzbd.ini > /var/sabnzbd-apikey 1204 + ''; 1205 + }; 1206 + }; 1207 + 1208 + exporterTest = '' 1209 + wait_for_unit("sabnzbd.service") 1210 + wait_for_unit("prometheus-sabnzbd-exporter.service") 1211 + wait_for_open_port(8080) 1212 + wait_for_open_port(9387) 1213 + wait_until_succeeds( 1214 + "curl -sSf 'localhost:9387/metrics' | grep 'sabnzbd_queue_size{sabnzbd_instance=\"http://localhost:8080\"} 0.0'" 1215 + ) 1216 + ''; 1217 + }; 1218 + 1181 1219 scaphandre = { 1182 1220 exporterConfig = { 1183 1221 enable = true;
+38
pkgs/servers/monitoring/prometheus/sabnzbd-exporter.nix
··· 1 + { lib, fetchFromGitHub, python3Packages }: 2 + 3 + python3Packages.buildPythonApplication rec { 4 + pname = "sabnzbd_exporter"; 5 + version = "0.1.70"; 6 + 7 + format = "other"; 8 + 9 + src = fetchFromGitHub { 10 + owner = "msroest"; 11 + repo = pname; 12 + rev = version; 13 + hash = "sha256-FkZAWIIlGX2VxRL3WS5J9lBgToQGbEQUqvf0xcdvynk="; 14 + }; 15 + 16 + propagatedBuildInputs = with python3Packages; [ prometheus-client requests ]; 17 + 18 + installPhase = '' 19 + runHook preInstall 20 + 21 + mkdir -p $out/bin 22 + cp sabnzbd_exporter.py $out/bin/ 23 + 24 + mkdir -p $out/share/${pname} 25 + cp examples/* $out/share/${pname}/ 26 + 27 + runHook postInstall 28 + ''; 29 + 30 + meta = with lib; { 31 + description = "Prometheus exporter for sabnzbd"; 32 + homepage = "https://github.com/msroest/sabnzbd_exporter"; 33 + license = licenses.mit; 34 + maintainers = with maintainers; [ fugi ]; 35 + platforms = platforms.all; 36 + mainProgram = "sabnzbd_exporter.py"; 37 + }; 38 + }
+1
pkgs/top-level/all-packages.nix
··· 27356 27356 prometheus-redis-exporter = callPackage ../servers/monitoring/prometheus/redis-exporter.nix { }; 27357 27357 prometheus-rabbitmq-exporter = callPackage ../servers/monitoring/prometheus/rabbitmq-exporter.nix { }; 27358 27358 prometheus-rtl_433-exporter = callPackage ../servers/monitoring/prometheus/rtl_433-exporter.nix { }; 27359 + prometheus-sabnzbd-exporter = callPackage ../servers/monitoring/prometheus/sabnzbd-exporter.nix { }; 27359 27360 prometheus-sachet = callPackage ../servers/monitoring/prometheus/sachet.nix { }; 27360 27361 prometheus-script-exporter = callPackage ../servers/monitoring/prometheus/script-exporter.nix { }; 27361 27362 prometheus-shelly-exporter = callPackage ../servers/monitoring/prometheus/shelly-exporter.nix { };