aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/prometheus_sysctl_exporter
diff options
context:
space:
mode:
authorAlan Somers <asomers@FreeBSD.org>2022-06-21 18:51:14 +0000
committerAlan Somers <asomers@FreeBSD.org>2022-08-20 03:01:43 +0000
commitd58ced88d39f0169a3fa08e8e626870131cee90f (patch)
tree9b0f57fc5fb7b0fcd3c83e956078086c1fd8b871 /usr.sbin/prometheus_sysctl_exporter
parentf5bbed62172b067cd8a2cf685b3b1314cf883efa (diff)
downloadsrc-d58ced88d39f0169a3fa08e8e626870131cee90f.tar.gz
src-d58ced88d39f0169a3fa08e8e626870131cee90f.zip
prometheus_sysctl_exporter: ignore ENOENT for mibs specified on the CLI
They might belong to kernel modules not currently loaded, or to other kernel versions. Ignoring them allows the configuration to be shared between multiple hosts. Sponsored by: Axcient Reviewed by: rew Differential Revision: https://reviews.freebsd.org/D35540 (cherry picked from commit 982f980b86d6bab4d55452d17bf3f5eb04e5f01e)
Diffstat (limited to 'usr.sbin/prometheus_sysctl_exporter')
-rw-r--r--usr.sbin/prometheus_sysctl_exporter/prometheus_sysctl_exporter.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/usr.sbin/prometheus_sysctl_exporter/prometheus_sysctl_exporter.c b/usr.sbin/prometheus_sysctl_exporter/prometheus_sysctl_exporter.c
index e452e305d2bf..931d8e965d00 100644
--- a/usr.sbin/prometheus_sysctl_exporter/prometheus_sysctl_exporter.c
+++ b/usr.sbin/prometheus_sysctl_exporter/prometheus_sysctl_exporter.c
@@ -67,13 +67,12 @@ oid_get_root(struct oid *o)
}
/* Obtains the OID for a sysctl by name. */
-static void
+static bool
oid_get_by_name(struct oid *o, const char *name)
{
o->len = nitems(o->id);
- if (sysctlnametomib(name, o->id, &o->len) != 0)
- err(1, "sysctl(%s)", name);
+ return (sysctlnametomib(name, o->id, &o->len) == 0);
}
/* Returns whether an OID is placed below another OID. */
@@ -644,7 +643,15 @@ main(int argc, char *argv[])
for (i = 0; i < argc; ++i) {
struct oid o, root;
- oid_get_by_name(&root, argv[i]);
+ if (!oid_get_by_name(&root, argv[i])) {
+ /*
+ * Ignore trees provided as arguments that
+ * can't be found. They might belong, for
+ * example, to kernel modules not currently
+ * loaded.
+ */
+ continue;
+ }
o = root;
do {
oid_print(&o, &on, print_descriptions, exclude, include, fp);