@cryptotaxi247 / infra-1 / commits / ffa1f35c

prometheus-nixos-exporter: wrap into python package

This wraps the executable into a standard python build, which fixes import lag, due to its previous location in the nix store.

Martin Weinelt committed Feb 3, 2024 at 22:29 UTC ffa1f35c4cd1f8b7d5e1effa01124efd191c0cfa
4 files changed +47 -12
modules/prometheus/default.nix
+5 -9
@@ -1,4 +1,8 @@
1 { pkgs, ... }:
2 +
3 +let
4 + prometheus-nixos-exporter = pkgs.callPackage ./nixos-exporter {};
5 +in
6 {
7 networking.firewall.allowedTCPPorts = [
8 9100 # node-exporter
@@ -19,7 +23,6 @@
23 ${./system-version-exporter.sh} | ${pkgs.moreutils}/bin/sponge system-version.prom
24 '';
25
22 -
26 systemd.services.prometheus-nixos-exporter = {
27 wantedBy = [ "multi-user.target" ];
28 after = [ "network.target" ];
@@ -27,14 +30,7 @@
30 serviceConfig = {
31 Restart = "always";
32 RestartSec = "60s";
30 - ExecStart = let
31 - python = pkgs.python3.withPackages (ps: with ps; [
32 - packaging
33 - prometheus-client
34 - ]);
35 - in ''
36 - ${python}/bin/python ${./nixos-exporter.py}
37 - '';
33 + ExecStart = "${prometheus-nixos-exporter}/bin/prometheus-nixos-exporter";
34 };
35 };
36 }
modules/prometheus/nixos-exporter/default.nix new
+20
@@ -0,0 +1,20 @@
1 +{ python3Packages }:
2 +
3 +with python3Packages;
4 +
5 +buildPythonApplication {
6 + pname = "prometheus-nixos-exporter";
7 + version = "0.0";
8 + pyproject = true;
9 +
10 + src = ./.;
11 +
12 + nativeBuildInputs = [
13 + setuptools
14 + ];
15 +
16 + propagatedBuildInputs = [
17 + packaging
18 + prometheus-client
19 + ];
20 +}
modules/prometheus/nixos-exporter/prometheus_nixos_exporter/__main__.py renamed
+7 -3
@@ -80,12 +80,16 @@ class NixosSystemCollector:
80 return 0
81
82
83 -registry = CollectorRegistry()
84 -registry.register(NixosSystemCollector())
83 +def main():
84 + registry = CollectorRegistry()
85 + registry.register(NixosSystemCollector())
86
86 -if __name__ == "__main__":
87 # Start up the server to expose the metrics.
88 start_http_server(9300, registry=registry)
89
90 while True:
91 time.sleep(100000)
92 +
93 +
94 +if __name__ == "__main__":
95 + main()
modules/prometheus/nixos-exporter/pyproject.toml new
+15
@@ -0,0 +1,15 @@
1 +[build-system]
2 +requires = ["setuptools"]
3 +build-backend = "setuptools.build_meta"
4 +
5 +[project]
6 +name = "prometheus-nixos-exporter"
7 +version = "0.0.0"
8 +description = "Export informations about booted aund current NixOS generation"
9 +dependencies = [
10 + "packaging",
11 + "prometheus-client",
12 +]
13 +
14 +[project.scripts]
15 +prometheus-nixos-exporter = "prometheus_nixos_exporter.__main__:main"