| 1 | { pkgs, ... }: |
| 2 | |
| 3 | let |
| 4 | exporter = pkgs.fetchFromGitHub { |
| 5 | owner = "grahamc"; |
| 6 | repo = "prometheus-github-exporter"; |
| 7 | rev = "01b6f8ef06b694411baf10f49e7b05afb26ab307"; |
| 8 | sha256 = "sha256-Sk/ynhPeXQVIgyZJ3Gj1VynJhPWmBHjrRnGYLjnJvio="; |
| 9 | }; |
| 10 | |
| 11 | config = pkgs.writeText "config.json" ( |
| 12 | builtins.toJSON { |
| 13 | port = 9401; |
| 14 | repos = [ |
| 15 | "NixOS/nixpkgs" |
| 16 | "NixOS/nix" |
| 17 | ]; |
| 18 | } |
| 19 | ); |
| 20 | in |
| 21 | { |
| 22 | systemd.services.prometheus-github-exporter = { |
| 23 | wantedBy = [ "multi-user.target" ]; |
| 24 | after = [ "network.target" ]; |
| 25 | serviceConfig = { |
| 26 | DynamicUser = true; |
| 27 | User = "github-exporter"; |
| 28 | Restart = "always"; |
| 29 | RestartSec = "60s"; |
| 30 | PrivateTmp = true; |
| 31 | }; |
| 32 | |
| 33 | path = [ |
| 34 | (pkgs.python3.withPackages ( |
| 35 | ps: with ps; [ |
| 36 | prometheus-client |
| 37 | requests |
| 38 | ] |
| 39 | )) |
| 40 | ]; |
| 41 | |
| 42 | script = "exec python3 ${exporter}/scrape.py ${config}"; |
| 43 | }; |
| 44 | |
| 45 | services.prometheus.scrapeConfigs = [ |
| 46 | { |
| 47 | job_name = "prometheus-github-exporter"; |
| 48 | metrics_path = "/"; |
| 49 | static_configs = [ { targets = [ "127.0.0.1:9401" ]; } ]; |
| 50 | } |
| 51 | ]; |
| 52 | } |