From 2c9219ba876334634e1c8727762ad85b97cbd13b Mon Sep 17 00:00:00 2001 From: arcnmx Date: Sat, 13 Jul 2024 14:08:37 -0700 Subject: [PATCH] feat(octoprint): metrics --- ci/packages.nix | 3 ++ .../nixos/monitoring/ingest/prometheus.nix | 4 +- modules/system/exports/octoprint.nix | 2 + nixos/octoprint.nix | 13 ++++++ overlays/cura.nix | 15 ------- overlays/default.nix | 4 +- overlays/print.nix | 44 +++++++++++++++++++ packages/octoprint/prometheus-exporter.nix | 24 ++++++++++ 8 files changed, 91 insertions(+), 18 deletions(-) delete mode 100644 overlays/cura.nix create mode 100644 overlays/print.nix create mode 100644 packages/octoprint/prometheus-exporter.nix diff --git a/ci/packages.nix b/ci/packages.nix index 8cf86fd4..262af5f5 100644 --- a/ci/packages.nix +++ b/ci/packages.nix @@ -37,6 +37,9 @@ in { packages.x86_64-linux.openwebrxplus # TODO: packages.aarch64-linux.openwebrxplus ]; + print.inputs = [ + legacyPackages.x86_64-linux.pkgs.cura-octoprint + ]; systemd2mqtt.inputs = [ packages.x86_64-linux.systemd2mqtt ]; diff --git a/modules/nixos/monitoring/ingest/prometheus.nix b/modules/nixos/monitoring/ingest/prometheus.nix index dab2d7cf..dc5047ba 100644 --- a/modules/nixos/monitoring/ingest/prometheus.nix +++ b/modules/nixos/monitoring/ingest/prometheus.nix @@ -22,7 +22,9 @@ portName, }: let port = service.ports.${portName}; - in "${mkAddress6 (access.getAddressFor system.name "lan")}:${toString port.port}"; + # TODO: this properly + getAddressFor = if port.status.gatus.client.network or "ip" == "ip4" then "getAddress4For" else "getAddressFor"; + in "${mkAddress6 (access.${getAddressFor} system.name "lan")}:${toString port.port}"; mkServiceConfig = system: serviceName: let inherit (service.prometheus) exporter; service = system.exports.services.${serviceName}; diff --git a/modules/system/exports/octoprint.nix b/modules/system/exports/octoprint.nix index c9c75f0e..969da20d 100644 --- a/modules/system/exports/octoprint.nix +++ b/modules/system/exports/octoprint.nix @@ -9,6 +9,7 @@ in { config.exports.services.octoprint = {config, ...}: { displayName = mkAlmostOptionDefault "OctoPrint"; id = mkAlmostOptionDefault "print"; + prometheus.exporter.metricsPath = "/plugin/prometheus_exporter/metrics"; nixos = { serviceAttr = "octoprint"; assertions = let @@ -33,6 +34,7 @@ in { enable = mkAlmostOptionDefault true; gatus.client.network = mkAlmostOptionDefault "ip4"; }; + prometheus.exporter.enable = mkAlmostOptionDefault true; }; }; }; diff --git a/nixos/octoprint.nix b/nixos/octoprint.nix index d425379d..04636e28 100644 --- a/nixos/octoprint.nix +++ b/nixos/octoprint.nix @@ -1,4 +1,5 @@ { + pkgs, config, access, lib, @@ -12,6 +13,18 @@ in { services.octoprint = { enable = mkDefault true; # host = mkIf config.networking.enableIPv6 "::"; + plugins = python3Packages: with python3Packages; [ + prometheus-exporter + abl-expert + bedlevelvisualizer + #displayprogress / displaylayerprogress? + marlingcodedocumentation + printtimegenius + stlviewer + #octoklipper? + #octolapse? + #dashboard? + ]; extraConfig = mkMerge [ # https://docs.octoprint.org/en/master/configuration/config_yaml.html { diff --git a/overlays/cura.nix b/overlays/cura.nix deleted file mode 100644 index a0ab7461..00000000 --- a/overlays/cura.nix +++ /dev/null @@ -1,15 +0,0 @@ -final: prev: { - cura-octoprint = final.cura.override { - plugins = [ final.curaPlugins.octoprint ]; - }; - - curaengine = prev.curaengine.override { - inherit (final.python311Packages) libarcus; - }; - cura = prev.cura.override { - python3 = final.python311; - }; - curaPlugins = prev.curaPlugins.override { - python3Packages = final.python311Packages; - }; -} diff --git a/overlays/default.nix b/overlays/default.nix index 263be76a..dd683257 100644 --- a/overlays/default.nix +++ b/overlays/default.nix @@ -4,22 +4,22 @@ in rec { default = nixlib.composeManyExtensions [ barcodebuddy builders - cura krb5 minecraft nfs nginx openwebrx + print samba ]; barcodebuddy = import ./barcodebuddy.nix; - cura = import ./cura.nix; krb5 = import ./krb5.nix; minecraft = import ./minecraft.nix; nfs = import ./nfs.nix; nginx = import ./nginx.nix; samba = import ./samba.nix; openwebrx = import ./openwebrxplus.nix; + print = import ./print.nix; builders = import ./builders.nix; deploy-rs = inputs.deploy-rs.overlays.default or inputs.deploy-rs.overlay; systemd2mqtt = inputs.systemd2mqtt.overlays.default; diff --git a/overlays/print.nix b/overlays/print.nix new file mode 100644 index 00000000..432cff11 --- /dev/null +++ b/overlays/print.nix @@ -0,0 +1,44 @@ +final: prev: let + inherit (final) lib; +in { + cura-octoprint = final.cura.override { + plugins = [ final.curaPlugins.octoprint ]; + }; + + octoprint = let + mapPlugin = python3Packages: _: plugin: plugin.override { + inherit python3Packages; + inherit (python3Packages) buildPlugin; + }; + packageOverrides = python3Packages: python3Packages'prev: lib.mapAttrs (mapPlugin python3Packages) { + inherit (final.octoprintPlugins) prometheus-exporter; + }; + octoprint = prev.octoprint.override (old: { + packageOverrides = lib.composeExtensions old.packageOverrides or (_: _: {}) packageOverrides; + }); + in octoprint; + + octoprintPlugins = let + pythonPackages = final.octoprint.python.pkgs; + octoprintPlugins'overlay = final.callPackage (final.path + "/pkgs/applications/misc/octoprint/plugins.nix") { }; + octoprintPlugins'nixpkgs = octoprintPlugins'overlay pythonPackages pythonPackages; + octoprintPlugins = prev.octoprintPlugins or octoprintPlugins'nixpkgs; + callPackage = final.newScope { + inherit (final.octoprintPlugins) buildPlugin; + }; + in octoprintPlugins // { + callPackage = prev.octoprintPlugins.callPackage or callPackage; + + prometheus-exporter = callPackage ../packages/octoprint/prometheus-exporter.nix { }; + }; + + curaengine = prev.curaengine.override { + inherit (final.python311Packages) libarcus; + }; + cura = prev.cura.override { + python3 = final.python311; + }; + curaPlugins = prev.curaPlugins.override { + python3Packages = final.python311Packages; + }; +} diff --git a/packages/octoprint/prometheus-exporter.nix b/packages/octoprint/prometheus-exporter.nix new file mode 100644 index 00000000..5fed1911 --- /dev/null +++ b/packages/octoprint/prometheus-exporter.nix @@ -0,0 +1,24 @@ +{ buildPlugin +, python3Packages +, fetchFromGitHub +}: let + version = "0.2.3"; +in buildPlugin { + pname = "OctoPrint-Prometheus-Exporter"; + inherit version; + + src = fetchFromGitHub { + owner = "tg44"; + repo = "OctoPrint-Prometheus-Exporter"; + rev = version; + sha256 = "sha256-pw5JKMWQNAkFkUADR2ue6R4FOmFIeapw2k5FLqJ6NQg="; + }; + + propagatedBuildInputs = with python3Packages; [ + prometheus-client + ]; + + meta = { + homepage = "https://github.com/tg44/OctoPrint-Prometheus-Exporter"; + }; +}