From 40f726ddf877ec5ef6f602964ac5d98ab403c8ec Mon Sep 17 00:00:00 2001 From: Steve Wolfe Date: Tue, 19 May 2026 00:08:31 -0400 Subject: [PATCH 1/4] sysutils/node_exporter: add textfile collector directory support Expose --collector.textfile.directory via a new optional UI field so users can drop .prom files into a local directory and have them scraped alongside the built-in collectors. Useful for custom metrics (SSH sessions, SMART data, gateway status, etc.) without patching the binary. Bumps model version 0.2.0 -> 0.3.0. --- .../app/controllers/OPNsense/NodeExporter/forms/general.xml | 6 ++++++ .../mvc/app/models/OPNsense/NodeExporter/General.xml | 3 ++- .../service/templates/OPNsense/NodeExporter/node_exporter | 6 +++++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/sysutils/node_exporter/src/opnsense/mvc/app/controllers/OPNsense/NodeExporter/forms/general.xml b/sysutils/node_exporter/src/opnsense/mvc/app/controllers/OPNsense/NodeExporter/forms/general.xml index 8269302b1a..cb5ab61d5d 100644 --- a/sysutils/node_exporter/src/opnsense/mvc/app/controllers/OPNsense/NodeExporter/forms/general.xml +++ b/sysutils/node_exporter/src/opnsense/mvc/app/controllers/OPNsense/NodeExporter/forms/general.xml @@ -83,4 +83,10 @@ checkbox Enable the ZFS collector. + + general.textfile_directory + + text + Path to a directory read by the textfile collector. Files ending in .prom in this directory will be exposed as metrics. Leave empty to disable. Example: /var/db/node_exporter + diff --git a/sysutils/node_exporter/src/opnsense/mvc/app/models/OPNsense/NodeExporter/General.xml b/sysutils/node_exporter/src/opnsense/mvc/app/models/OPNsense/NodeExporter/General.xml index 07eb285951..144f669ab9 100644 --- a/sysutils/node_exporter/src/opnsense/mvc/app/models/OPNsense/NodeExporter/General.xml +++ b/sysutils/node_exporter/src/opnsense/mvc/app/models/OPNsense/NodeExporter/General.xml @@ -1,7 +1,7 @@ //OPNsense/NodeExporter node_exporter configuration - 0.2.0 + 0.3.0 0 @@ -29,5 +29,6 @@ + diff --git a/sysutils/node_exporter/src/opnsense/service/templates/OPNsense/NodeExporter/node_exporter b/sysutils/node_exporter/src/opnsense/service/templates/OPNsense/NodeExporter/node_exporter index e7ea96fbc6..e65ce07ceb 100644 --- a/sysutils/node_exporter/src/opnsense/service/templates/OPNsense/NodeExporter/node_exporter +++ b/sysutils/node_exporter/src/opnsense/service/templates/OPNsense/NodeExporter/node_exporter @@ -46,13 +46,17 @@ {%- set zfs = no_collector + "zfs " -%} {%- endif -%} +{%- if not helpers.empty('OPNsense.NodeExporter.textfile_directory') -%} + {%- set textfile_directory = "--collector.textfile.directory=" + OPNsense.NodeExporter.textfile_directory + " " -%} +{%- endif -%} + {%- if ':' in OPNsense.NodeExporter.listenaddress -%} {%- set listenaddress = '[' + OPNsense.NodeExporter.listenaddress + ']' -%} {%- else -%} {%- set listenaddress = OPNsense.NodeExporter.listenaddress -%} {%- endif -%} -node_exporter_args="{{ cpu }}{{ exec }}{{ filesystem }}{{ loadavg }}{{ meminfo }}{{ netdev }}{{ ntp }}{{ time }}{{ devstat }}{{ zfs }}" +node_exporter_args="{{ cpu }}{{ exec }}{{ filesystem }}{{ loadavg }}{{ meminfo }}{{ netdev }}{{ ntp }}{{ time }}{{ devstat }}{{ zfs }}{{ textfile_directory }}" node_exporter_listen_address="{{ listenaddress }}:{{ OPNsense.NodeExporter.listenport }}" node_exporter_enable="YES" From c64f5f8cfc7ec0b8a32dfb7008992aade56bc11a Mon Sep 17 00:00:00 2001 From: Steve Wolfe Date: Tue, 19 May 2026 00:17:51 -0400 Subject: [PATCH 2/4] sysutils/node_exporter: bump version 1.2 -> 1.3, update changelog --- sysutils/node_exporter/Makefile | 2 +- sysutils/node_exporter/pkg-descr | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/sysutils/node_exporter/Makefile b/sysutils/node_exporter/Makefile index bb52769b48..deabf1a2e0 100644 --- a/sysutils/node_exporter/Makefile +++ b/sysutils/node_exporter/Makefile @@ -1,5 +1,5 @@ PLUGIN_NAME= node_exporter -PLUGIN_VERSION= 1.2 +PLUGIN_VERSION= 1.3 PLUGIN_COMMENT= Prometheus exporter for machine metrics PLUGIN_DEPENDS= node_exporter PLUGIN_MAINTAINER= jkegh@k123.eu diff --git a/sysutils/node_exporter/pkg-descr b/sysutils/node_exporter/pkg-descr index 862f318098..59943adb62 100644 --- a/sysutils/node_exporter/pkg-descr +++ b/sysutils/node_exporter/pkg-descr @@ -7,6 +7,10 @@ WWW: https://github.com/prometheus/node_exporter Changelog --------- +1.3 + +* Add textfile collector directory support + 1.2 * Allow setting IPv6 addresses as ListenAddress From 17c5ed428fe0760bb60416b86b8ea1d1a13a6d8a Mon Sep 17 00:00:00 2001 From: Steve Wolfe Date: Tue, 19 May 2026 01:49:31 -0400 Subject: [PATCH 3/4] sysutils/node_exporter: replace textfile directory TextField with BooleanField Per reviewer feedback: use a checkbox with a fixed hardcoded path (/var/db/node_exporter/textfile) instead of a free-text directory field to avoid arbitrary path/command injection. --- sysutils/node_exporter/pkg-descr | 2 +- .../controllers/OPNsense/NodeExporter/forms/general.xml | 8 ++++---- .../mvc/app/models/OPNsense/NodeExporter/General.xml | 2 +- .../service/templates/OPNsense/NodeExporter/node_exporter | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/sysutils/node_exporter/pkg-descr b/sysutils/node_exporter/pkg-descr index 59943adb62..54317c778b 100644 --- a/sysutils/node_exporter/pkg-descr +++ b/sysutils/node_exporter/pkg-descr @@ -9,7 +9,7 @@ Changelog 1.3 -* Add textfile collector directory support +* Add textfile collector support (fixed directory: /var/db/node_exporter/textfile) 1.2 diff --git a/sysutils/node_exporter/src/opnsense/mvc/app/controllers/OPNsense/NodeExporter/forms/general.xml b/sysutils/node_exporter/src/opnsense/mvc/app/controllers/OPNsense/NodeExporter/forms/general.xml index cb5ab61d5d..d1295959ac 100644 --- a/sysutils/node_exporter/src/opnsense/mvc/app/controllers/OPNsense/NodeExporter/forms/general.xml +++ b/sysutils/node_exporter/src/opnsense/mvc/app/controllers/OPNsense/NodeExporter/forms/general.xml @@ -84,9 +84,9 @@ Enable the ZFS collector. - general.textfile_directory - - text - Path to a directory read by the textfile collector. Files ending in .prom in this directory will be exposed as metrics. Leave empty to disable. Example: /var/db/node_exporter + general.textfile + + checkbox + Enable the textfile collector. When enabled, .prom files placed in /var/db/node_exporter/textfile will be exposed as metrics. diff --git a/sysutils/node_exporter/src/opnsense/mvc/app/models/OPNsense/NodeExporter/General.xml b/sysutils/node_exporter/src/opnsense/mvc/app/models/OPNsense/NodeExporter/General.xml index 144f669ab9..679c286631 100644 --- a/sysutils/node_exporter/src/opnsense/mvc/app/models/OPNsense/NodeExporter/General.xml +++ b/sysutils/node_exporter/src/opnsense/mvc/app/models/OPNsense/NodeExporter/General.xml @@ -29,6 +29,6 @@ - + diff --git a/sysutils/node_exporter/src/opnsense/service/templates/OPNsense/NodeExporter/node_exporter b/sysutils/node_exporter/src/opnsense/service/templates/OPNsense/NodeExporter/node_exporter index e65ce07ceb..dd768e723c 100644 --- a/sysutils/node_exporter/src/opnsense/service/templates/OPNsense/NodeExporter/node_exporter +++ b/sysutils/node_exporter/src/opnsense/service/templates/OPNsense/NodeExporter/node_exporter @@ -46,8 +46,8 @@ {%- set zfs = no_collector + "zfs " -%} {%- endif -%} -{%- if not helpers.empty('OPNsense.NodeExporter.textfile_directory') -%} - {%- set textfile_directory = "--collector.textfile.directory=" + OPNsense.NodeExporter.textfile_directory + " " -%} +{%- if OPNsense.NodeExporter.textfile == '1' -%} + {%- set textfile = "--collector.textfile.directory=/var/db/node_exporter/textfile " -%} {%- endif -%} {%- if ':' in OPNsense.NodeExporter.listenaddress -%} @@ -56,7 +56,7 @@ {%- set listenaddress = OPNsense.NodeExporter.listenaddress -%} {%- endif -%} -node_exporter_args="{{ cpu }}{{ exec }}{{ filesystem }}{{ loadavg }}{{ meminfo }}{{ netdev }}{{ ntp }}{{ time }}{{ devstat }}{{ zfs }}{{ textfile_directory }}" +node_exporter_args="{{ cpu }}{{ exec }}{{ filesystem }}{{ loadavg }}{{ meminfo }}{{ netdev }}{{ ntp }}{{ time }}{{ devstat }}{{ zfs }}{{ textfile }}" node_exporter_listen_address="{{ listenaddress }}:{{ OPNsense.NodeExporter.listenport }}" node_exporter_enable="YES" From a77bd67bedcb3569e104654c244fcdf1a64c7f2d Mon Sep 17 00:00:00 2001 From: Franco Fichtner Date: Tue, 19 May 2026 08:04:06 +0200 Subject: [PATCH 4/4] Apply suggestion from @fichtner --- .../opnsense/mvc/app/models/OPNsense/NodeExporter/General.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sysutils/node_exporter/src/opnsense/mvc/app/models/OPNsense/NodeExporter/General.xml b/sysutils/node_exporter/src/opnsense/mvc/app/models/OPNsense/NodeExporter/General.xml index 679c286631..4989ce16eb 100644 --- a/sysutils/node_exporter/src/opnsense/mvc/app/models/OPNsense/NodeExporter/General.xml +++ b/sysutils/node_exporter/src/opnsense/mvc/app/models/OPNsense/NodeExporter/General.xml @@ -1,7 +1,7 @@ //OPNsense/NodeExporter node_exporter configuration - 0.3.0 + 0.2.0 0