]> git.ipfire.org Git - oddments/collecty.git/commitdiff
daemon: Connect to udev
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 21 Oct 2025 14:28:51 +0000 (14:28 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 21 Oct 2025 14:28:51 +0000 (14:28 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
Makefile.am
configure.ac
src/daemon/daemon.c
src/daemon/daemon.h
src/daemon/graphs/graph.h
src/daemon/source.c
src/daemon/source.h

index 071b2888cbfdd5a69b86cc9ec4c91b0be5e0c514..64fa34c513c62c969615a15f3296f84c0a29435c 100644 (file)
@@ -192,16 +192,19 @@ telemetryd_CPPFLAGS = \
 telemetryd_CFLAGS = \
        $(AM_CFLAGS) \
        $(RRD_CFLAGS) \
-       $(SYSTEMD_CFLAGS)
+       $(SYSTEMD_CFLAGS) \
+       $(UDEV_CFLAGS)
 
 telemetryd_LDFLAGS = \
        $(AM_LDFLAGS) \
        $(RRD_LDFLAGS) \
-       $(SYSTEMD_LDFLAGS)
+       $(SYSTEMD_LDFLAGS) \
+       $(UDEV_LDFLAGS)
 
 telemetryd_LDADD = \
        $(RRD_LIBS) \
-       $(SYSTEMD_LIBS)
+       $(SYSTEMD_LIBS) \
+       $(UDEV_LIBS)
 
 # ------------------------------------------------------------------------------
 
index 28fa7cfe9085b842a6a22474d803cb9865672d9b..f06c20932c65b4fb6521705b5b30c3976833b27d 100644 (file)
@@ -140,6 +140,7 @@ m4_pattern_forbid([^_?PKG_[A-Z_]+$],[*** pkg.m4 missing, please install pkg-conf
 # Check for core dependencies
 PKG_CHECK_MODULES([RRD], [librrd])
 PKG_CHECK_MODULES([SYSTEMD], [libsystemd])
+PKG_CHECK_MODULES([UDEV], [libudev])
 
 # libatasmart
 PKG_CHECK_MODULES([LIBATASMART], [libatasmart >= 0.19],
index 48178ec8cc8f1926303c79e0920a10fdf8fb059f..fab73f19e887d7d7cd21aaa84e0d95d225948d3c 100644 (file)
@@ -22,6 +22,7 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include <libudev.h>
 #include <systemd/sd-daemon.h>
 #include <systemd/sd-event.h>
 
@@ -65,6 +66,9 @@ struct td_daemon {
 
        // Graphs
        td_graphs* graphs;
+
+       // udev
+       struct udev* udev;
 };
 
 static int td_daemon_init(sd_event_source* source, void* data) {
@@ -194,6 +198,20 @@ static int td_daemon_setup_loop(td_daemon* self) {
        return 0;
 }
 
+static int td_daemon_setup_udev(td_daemon* self) {
+       // Connect to udev
+       self->udev = udev_new();
+       if (!self->udev) {
+               ERROR(self->ctx, "Failed to setup udev context: %m\n");
+               return -errno;
+       }
+
+       // Log success
+       DEBUG(self->ctx, "Connected to udev\n");
+
+       return 0;
+}
+
 static void td_daemon_free(td_daemon* self) {
        if (self->events.sigchld)
                sd_event_source_unref(self->events.sigchld);
@@ -213,6 +231,8 @@ static void td_daemon_free(td_daemon* self) {
                td_graphs_unref(self->graphs);
        if (self->queue)
                td_queue_unref(self->queue);
+       if (self->udev)
+               udev_unref(self->udev);
        if (self->ctx)
                td_ctx_unref(self->ctx);
        if (self->loop)
@@ -255,6 +275,11 @@ int td_daemon_create(td_daemon** daemon, td_ctx* ctx, char** enabled_sources) {
        if (r < 0)
                goto ERROR;
 
+       // Connect to udev
+       r = td_daemon_setup_udev(self);
+       if (r < 0)
+               goto ERROR;
+
        // Return the pointer
        *daemon = self;
        return 0;
@@ -283,6 +308,10 @@ sd_event* td_daemon_loop(td_daemon* self) {
        return sd_event_ref(self->loop);
 }
 
+struct udev* td_daemon_get_udev(td_daemon* self) {
+       return udev_ref(self->udev);
+}
+
 td_sources* td_daemon_get_sources(td_daemon* self) {
        if (self->sources)
                return td_sources_ref(self->sources);
index d02bb24fac978ac845e2a4dc90cdf0bb08688c7d..c36d388d62e53f5b0494ec91210690db2aea40c7 100644 (file)
@@ -21,6 +21,7 @@
 #ifndef TELEMETRY_DAEMON_H
 #define TELEMETRY_DAEMON_H
 
+#include <libudev.h>
 #include <systemd/sd-event.h>
 
 typedef struct td_daemon td_daemon;
@@ -37,6 +38,7 @@ td_daemon* td_daemon_ref(td_daemon* daemon);
 td_daemon* td_daemon_unref(td_daemon* daemon);
 
 sd_event* td_daemon_loop(td_daemon* self);
+struct udev* td_daemon_get_udev(td_daemon* self);
 td_sources* td_daemon_get_sources(td_daemon* self);
 td_graphs* td_daemon_get_graphs(td_daemon* self);
 
index dc51b7290431dfe0709406696fd0bb29aff5ee20..98a69a83954d021f611b38073915f954f1f3ae17 100644 (file)
@@ -42,6 +42,8 @@
                        return __r; \
        } while(0)
 
+#define GRAPH_TITLE(args, format, ...) SCRIPT(args, "--title=" format, __VA_ARGS__)
+
 #define EMPTY_LINE             "COMMENT: \\n"
 
 // Labels are 30 characters wide
index 36a4c73bbee2bcb2c2a38e2e389c10dd4b075c62..13f629ac1df9bbbad1080964c74d3ac5a0c1d00f 100644 (file)
@@ -27,6 +27,7 @@
 
 #include <rrd.h>
 
+#include <libudev.h>
 #include <systemd/sd-event.h>
 
 #include "args.h"
@@ -460,6 +461,10 @@ const char* td_source_name(td_source* self) {
        return self->impl->name;
 }
 
+struct udev* td_source_get_udev(td_source* self) {
+       return td_daemon_get_udev(self->daemon);
+}
+
 int td_source_create_command(td_source* self, td_command** command) {
        return td_command_create(command, self->ctx, self->daemon);
 }
index 98ae9a3b4bc0618e30f7c5b993c8aed17e7ef25a..146e18f3b1c6ac8d24231cdd7dbe7122638fbe68 100644 (file)
@@ -21,6 +21,8 @@
 #ifndef TELEMETRY_SOURCE_H
 #define TELEMETRY_SOURCE_H
 
+#include <libudev.h>
+
 typedef struct td_source td_source;
 
 #include "args.h"
@@ -79,6 +81,8 @@ td_source* td_source_unref(td_source* self);
 
 const char* td_source_name(td_source* self);
 
+struct udev* td_source_get_udev(td_source* self);
+
 int td_source_create_command(td_source* self, td_command** command);
 
 int td_source_submit(td_source* self, const char* object,