From: Michael Tremer Date: Tue, 21 Oct 2025 14:28:51 +0000 (+0000) Subject: daemon: Connect to udev X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a9a40d4aa545924dc3dc4cf5832b14379cbe3913;p=oddments%2Fcollecty.git daemon: Connect to udev Signed-off-by: Michael Tremer --- diff --git a/Makefile.am b/Makefile.am index 071b288..64fa34c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -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) # ------------------------------------------------------------------------------ diff --git a/configure.ac b/configure.ac index 28fa7cf..f06c209 100644 --- a/configure.ac +++ b/configure.ac @@ -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], diff --git a/src/daemon/daemon.c b/src/daemon/daemon.c index 48178ec..fab73f1 100644 --- a/src/daemon/daemon.c +++ b/src/daemon/daemon.c @@ -22,6 +22,7 @@ #include #include +#include #include #include @@ -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); diff --git a/src/daemon/daemon.h b/src/daemon/daemon.h index d02bb24..c36d388 100644 --- a/src/daemon/daemon.h +++ b/src/daemon/daemon.h @@ -21,6 +21,7 @@ #ifndef TELEMETRY_DAEMON_H #define TELEMETRY_DAEMON_H +#include #include 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); diff --git a/src/daemon/graphs/graph.h b/src/daemon/graphs/graph.h index dc51b72..98a69a8 100644 --- a/src/daemon/graphs/graph.h +++ b/src/daemon/graphs/graph.h @@ -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 diff --git a/src/daemon/source.c b/src/daemon/source.c index 36a4c73..13f629a 100644 --- a/src/daemon/source.c +++ b/src/daemon/source.c @@ -27,6 +27,7 @@ #include +#include #include #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); } diff --git a/src/daemon/source.h b/src/daemon/source.h index 98ae9a3..146e18f 100644 --- a/src/daemon/source.h +++ b/src/daemon/source.h @@ -21,6 +21,8 @@ #ifndef TELEMETRY_SOURCE_H #define TELEMETRY_SOURCE_H +#include + 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,