Merge pull request #265696 from Stunkymonkey/nixos-exportarr
nixos/exportarr: init
This commit is contained in:
commit
f2fc5b4195
4 changed files with 110 additions and 8 deletions
|
@ -127,6 +127,8 @@
|
|||
|
||||
- [ZITADEL](https://zitadel.com), a turnkey identity and access management platform. Available as [services.zitadel](#opt-services.zitadel.enable).
|
||||
|
||||
- [exportarr](https://github.com/onedr0p/exportarr), Prometheus Exporters for Bazarr, Lidarr, Prowlarr, Radarr, Readarr, and Sonarr. Available as [services.prometheus.exporters.exportarr-bazarr](#opt-services.prometheus.exporters.exportarr-bazarr.enable)/[services.prometheus.exporters.exportarr-lidarr](#opt-services.prometheus.exporters.exportarr-lidarr.enable)/[services.prometheus.exporters.exportarr-prowlarr](#opt-services.prometheus.exporters.exportarr-prowlarr.enable)/[services.prometheus.exporters.exportarr-radarr](#opt-services.prometheus.exporters.exportarr-radarr.enable)/[services.prometheus.exporters.exportarr-readarr](#opt-services.prometheus.exporters.exportarr-readarr.enable)/[services.prometheus.exporters.exportarr-sonarr](#opt-services.prometheus.exporters.exportarr-sonarr.enable).
|
||||
|
||||
- [netclient](https://github.com/gravitl/netclient), an automated WireGuard® Management Client. Available as [services.netclient](#opt-services.netclient.enable).
|
||||
|
||||
- [trunk-ng](https://github.com/ctron/trunk), A fork of `trunk`: Build, bundle & ship your Rust WASM application to the web
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
let
|
||||
inherit (lib) concatStrings foldl foldl' genAttrs literalExpression maintainers
|
||||
mapAttrsToList mkDefault mkEnableOption mkIf mkMerge mkOption
|
||||
optional types mkOptionDefault flip attrNames;
|
||||
mapAttrs mapAttrsToList mkDefault mkEnableOption mkIf mkMerge mkOption
|
||||
optional types mkOptionDefault flip attrNames;
|
||||
|
||||
cfg = config.services.prometheus.exporters;
|
||||
|
||||
|
@ -20,7 +20,7 @@ let
|
|||
# systemd service must be provided by specifying either
|
||||
# `serviceOpts.script` or `serviceOpts.serviceConfig.ExecStart`
|
||||
|
||||
exporterOpts = genAttrs [
|
||||
exporterOpts = (genAttrs [
|
||||
"apcupsd"
|
||||
"artifactory"
|
||||
"bind"
|
||||
|
@ -34,14 +34,15 @@ let
|
|||
"domain"
|
||||
"dovecot"
|
||||
"fastly"
|
||||
"flow"
|
||||
"fritzbox"
|
||||
"graphite"
|
||||
"idrac"
|
||||
"imap-mailstat"
|
||||
"influxdb"
|
||||
"ipmi"
|
||||
"json"
|
||||
"jitsi"
|
||||
"json"
|
||||
"junos-czerwonk"
|
||||
"kea"
|
||||
"keylight"
|
||||
|
@ -74,9 +75,9 @@ let
|
|||
"scaphandre"
|
||||
"script"
|
||||
"shelly"
|
||||
"snmp"
|
||||
"smartctl"
|
||||
"smokeping"
|
||||
"snmp"
|
||||
"sql"
|
||||
"statsd"
|
||||
"surfboard"
|
||||
|
@ -88,10 +89,39 @@ let
|
|||
"v2ray"
|
||||
"varnish"
|
||||
"wireguard"
|
||||
"flow"
|
||||
"zfs"
|
||||
] (name:
|
||||
import (./. + "/exporters/${name}.nix") { inherit config lib pkgs options; }
|
||||
]
|
||||
(name:
|
||||
import (./. + "/exporters/${name}.nix") { inherit config lib pkgs options; }
|
||||
)) // (mapAttrs
|
||||
(name: params:
|
||||
import (./. + "/exporters/${params.name}.nix") { inherit config lib pkgs options; type = params.type ; })
|
||||
{
|
||||
exportarr-bazarr = {
|
||||
name = "exportarr";
|
||||
type = "bazarr";
|
||||
};
|
||||
exportarr-lidarr = {
|
||||
name = "exportarr";
|
||||
type = "lidarr";
|
||||
};
|
||||
exportarr-prowlarr = {
|
||||
name = "exportarr";
|
||||
type = "prowlarr";
|
||||
};
|
||||
exportarr-radarr = {
|
||||
name = "exportarr";
|
||||
type = "radarr";
|
||||
};
|
||||
exportarr-readarr = {
|
||||
name = "exportarr";
|
||||
type = "readarr";
|
||||
};
|
||||
exportarr-sonarr = {
|
||||
name = "exportarr";
|
||||
type = "sonarr";
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
mkExporterOpts = ({ name, port }: {
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
{ config, lib, pkgs, options, type }:
|
||||
|
||||
let
|
||||
cfg = config.services.prometheus.exporters."exportarr-${type}";
|
||||
exportarrEnvironment = (
|
||||
lib.mapAttrs (_: toString) cfg.environment
|
||||
) // {
|
||||
PORT = toString cfg.port;
|
||||
URL = cfg.url;
|
||||
API_KEY_FILE = lib.mkIf (cfg.apiKeyFile != null) "%d/api-key";
|
||||
};
|
||||
in
|
||||
{
|
||||
port = 9708;
|
||||
extraOpts = {
|
||||
url = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "http://127.0.0.1";
|
||||
description = lib.mdDoc ''
|
||||
The full URL to Sonarr, Radarr, or Lidarr.
|
||||
'';
|
||||
};
|
||||
|
||||
apiKeyFile = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.path;
|
||||
default = null;
|
||||
description = lib.mdDoc ''
|
||||
File containing the api-key.
|
||||
'';
|
||||
};
|
||||
|
||||
package = lib.mkPackageOptionMD pkgs "exportarr" { };
|
||||
|
||||
environment = lib.mkOption {
|
||||
type = lib.types.attrsOf lib.types.str;
|
||||
default = { };
|
||||
description = lib.mdDoc ''
|
||||
See [the configuration guide](https://github.com/onedr0p/exportarr#configuration) for available options.
|
||||
'';
|
||||
example = {
|
||||
PROWLARR__BACKFILL = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
serviceOpts = {
|
||||
serviceConfig = {
|
||||
LoadCredential = lib.optionalString (cfg.apiKeyFile != null) "api-key:${cfg.apiKeyFile}";
|
||||
ExecStart = ''${cfg.package}/bin/exportarr ${type} "$@"'';
|
||||
ProcSubset = "pid";
|
||||
ProtectProc = "invisible";
|
||||
SystemCallFilter = ["@system-service" "~@privileged"];
|
||||
};
|
||||
environment = exportarrEnvironment;
|
||||
};
|
||||
}
|
|
@ -257,6 +257,21 @@ let
|
|||
'';
|
||||
};
|
||||
|
||||
exportarr-sonarr = {
|
||||
nodeName = "exportarr_sonarr";
|
||||
exporterConfig = {
|
||||
enable = true;
|
||||
url = "http://127.0.0.1:8989";
|
||||
# testing for real data is tricky, because the api key can not be preconfigured
|
||||
apiKeyFile = pkgs.writeText "dummy-api-key" "eccff6a992bc2e4b88e46d064b26bb4e";
|
||||
};
|
||||
exporterTest = ''
|
||||
wait_for_unit("prometheus-exportarr-sonarr-exporter.service")
|
||||
wait_for_open_port(9707)
|
||||
succeed("curl -sSf 'http://localhost:9707/metrics")
|
||||
'';
|
||||
};
|
||||
|
||||
fastly = {
|
||||
exporterConfig = {
|
||||
enable = true;
|
||||
|
|
Loading…
Reference in a new issue