]> git.ipfire.org Git - telemetry.git/commitdiff
sources: Terminate the daemon if no sources have been loaded
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 23 Oct 2025 09:29:37 +0000 (09:29 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 23 Oct 2025 09:29:37 +0000 (09:29 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/daemon/daemon.c
src/daemon/daemon.h
src/daemon/sources.c

index bf3d12bd7fcfa53da703c5f46b56d18e374767d1..4bc1943957e73b3e673d322465122ac4b11bbab6 100644 (file)
@@ -92,7 +92,7 @@ static int td_daemon_init(sd_event_source* source, void* data) {
        return 0;
 }
 
-static int td_daemon_exit(sd_event_source* source, void* data) {
+static int td_daemon_on_exit(sd_event_source* source, void* data) {
        td_daemon* self = data;
 
        DEBUG(self->ctx, "Cleaning up daemon...\n");
@@ -210,7 +210,7 @@ static int td_daemon_setup_loop(td_daemon* self) {
 
        // Cleanup when the event loop exits
        r = sd_event_add_exit(self->loop, &self->events.exit,
-                       td_daemon_exit, self);
+                       td_daemon_on_exit, self);
        if (r < 0) {
                ERROR(self->ctx, "Failed to register daemon exit: %s\n", strerror(-r));
                return r;
@@ -381,6 +381,10 @@ ERROR:
        return 1;
 }
 
+int td_daemon_exit(td_daemon* self, int rc) {
+       return sd_event_exit(self->loop, rc);
+}
+
 int td_daemon_submit_metrics(td_daemon* self, td_metrics* metrics) {
        return td_queue_submit_metrics(self->queue, metrics);
 }
index 5610c5fd3bb2c9110fdf2cde91a4053831a713dd..a34e71274c2291b70194df638e4653d99ae2e39d 100644 (file)
@@ -44,6 +44,7 @@ td_sources* td_daemon_get_sources(td_daemon* self);
 td_graphs* td_daemon_get_graphs(td_daemon* self);
 
 int td_daemon_run(td_daemon* self);
+int td_daemon_exit(td_daemon* self, int rc);
 
 int td_daemon_submit_metrics(td_daemon* self, td_metrics* metrics);
 
index da920eec1abcf236fa1c6844a54f7580f92c0186..9e3c8fe653b0c9480203dd94e90168ba482c6df0 100644 (file)
@@ -139,6 +139,16 @@ static int td_sources_init(td_sources* self, char** enabled_sources) {
                source = NULL;
        }
 
+       // Abort if no sources have been enabled
+       if (!self->num_sources) {
+               ERROR(self->ctx, "No sources have been enabled\n");
+
+               // Terminate the daemon
+               return td_daemon_exit(self->daemon, -ENOTSUP);
+       }
+
+       DEBUG(self->ctx, "%d source(s) have been enabled\n", self->num_sources);
+
        return 0;
 
 ERROR: