]> git.ipfire.org Git - pakfire.git/commitdiff
builder: Move sending stats
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 25 Jun 2025 16:49:35 +0000 (16:49 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 25 Jun 2025 16:49:35 +0000 (16:49 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/pakfire/builder.c
src/pakfire/daemon.c

index 70f873ac687d734eeeffe54a8c2e3e7301d55fbb..5a9157fc0b378a405402ec27f2642685f2bb44f3 100644 (file)
@@ -164,6 +164,11 @@ static int pakfire_builder_schedule_stats(struct pakfire_builder* self, uint64_t
 
 static int pakfire_builder_submit_stats(sd_event_source* event, uint64_t usec, void* data) {
        struct pakfire_builder* self = data;
+       struct pakfire_cpustat cpustat = {};
+       struct pakfire_loadavg loadavg = {};
+       struct pakfire_meminfo meminfo = {};
+       struct json_object* stats = NULL;
+       struct json_object* p = NULL;
        int r;
 
        // Log action
@@ -172,9 +177,199 @@ static int pakfire_builder_submit_stats(sd_event_source* event, uint64_t usec, v
        // Submit stats again soon...
        r = pakfire_builder_schedule_stats(self, PAKFIRE_STATS_TIMER);
        if (r < 0)
-               return r;
+               goto ERROR;
 
-       return 0;
+       // Fetch CPU stats
+       r = pakfire_cpustat(&cpustat);
+       if (r < 0) {
+               ERROR(self->ctx, "Failed to fetch CPU stats: %s\n", strerror(-r));
+               goto ERROR;
+       }
+
+       // Fetch load average
+       r = pakfire_loadavg(&loadavg);
+       if (r < 0) {
+               ERROR(self->ctx, "Failed to fetch load average: %s\n", strerror(-r));
+               goto ERROR;
+       }
+
+       // Fetch meminfo
+       r = pakfire_meminfo(&meminfo);
+       if (r < 0) {
+               ERROR(self->ctx, "Failed to fetch meminfo: %s\n", strerror(-r));
+               goto ERROR;
+       }
+
+       // Create new data object
+       r = pakfire_json_new_object(&p);
+       if (r < 0)
+               goto ERROR;
+
+       // CPU Stats: User
+       r = pakfire_json_add_double(p, "cpu_user", cpustat.user);
+       if (r < 0)
+               goto ERROR;
+
+       // CPU Stats: Nice
+       r = pakfire_json_add_double(p, "cpu_nice", cpustat.nice);
+       if (r < 0)
+               goto ERROR;
+
+       // CPU Stats: System
+       r = pakfire_json_add_double(p, "cpu_system", cpustat.system);
+       if (r < 0)
+               goto ERROR;
+
+       // CPU Stats: Idle
+       r = pakfire_json_add_double(p, "cpu_idle", cpustat.idle);
+       if (r < 0)
+               goto ERROR;
+
+       // CPU Stats: IO Wait
+       r = pakfire_json_add_double(p, "cpu_iowait", cpustat.iowait);
+       if (r < 0)
+               goto ERROR;
+
+       // CPU Stats: IRQ
+       r = pakfire_json_add_double(p, "cpu_irq", cpustat.irq);
+       if (r < 0)
+               goto ERROR;
+
+       // CPU Stats: Soft IRQ
+       r = pakfire_json_add_double(p, "cpu_softirq", cpustat.softirq);
+       if (r < 0)
+               goto ERROR;
+
+       // CPU Stats: Steal
+       r = pakfire_json_add_double(p, "cpu_steal", cpustat.steal);
+       if (r < 0)
+               goto ERROR;
+
+       // CPU Stats: Guest
+       r = pakfire_json_add_double(p, "cpu_guest", cpustat.guest);
+       if (r)
+               goto ERROR;
+
+       // CPU Stats: Guest Nice
+       r = pakfire_json_add_double(p, "cpu_guest_nice", cpustat.guest_nice);
+       if (r < 0)
+               goto ERROR;
+
+       // Load Average: 1
+       r = pakfire_json_add_double(p, "loadavg1", loadavg.load1);
+       if (r < 0)
+               goto ERROR;
+
+       // Load Average: 5
+       r = pakfire_json_add_double(p, "loadavg5", loadavg.load5);
+       if (r < 0)
+               goto ERROR;
+
+       // Load Average: 15
+       r = pakfire_json_add_double(p, "loadavg15", loadavg.load15);
+       if (r < 0)
+               goto ERROR;
+
+       // Memory: Total
+       r = pakfire_json_add_uint64(p, "mem_total", meminfo.total);
+       if (r < 0)
+               goto ERROR;
+
+       // Memory: Available
+       r = pakfire_json_add_uint64(p, "mem_available", meminfo.available);
+       if (r < 0)
+               goto ERROR;
+
+       // Memory: Used
+       r = pakfire_json_add_int64(p, "mem_used", meminfo.used);
+       if (r < 0)
+               goto ERROR;
+
+       // Memory: Free
+       r = pakfire_json_add_uint64(p, "mem_free", meminfo.free);
+       if (r < 0)
+               goto ERROR;
+
+       // Memory: Active
+       r = pakfire_json_add_uint64(p, "mem_active", meminfo.active);
+       if (r < 0)
+               goto ERROR;
+
+       // Memory: Inactive
+       r = pakfire_json_add_uint64(p, "mem_inactive", meminfo.inactive);
+       if (r < 0)
+               goto ERROR;
+
+       // Memory: Buffers
+       r = pakfire_json_add_uint64(p, "mem_buffers", meminfo.buffers);
+       if (r < 0)
+               goto ERROR;
+
+       // Memory: Cached
+       r = pakfire_json_add_uint64(p, "mem_cached", meminfo.cached);
+       if (r < 0)
+               goto ERROR;
+
+       // Memory: Shared
+       r = pakfire_json_add_uint64(p, "mem_shared", meminfo.shared);
+       if (r < 0)
+               goto ERROR;
+
+       // Swap: Total
+       r = pakfire_json_add_uint64(p, "swap_total", meminfo.swap_total);
+       if (r < 0)
+               goto ERROR;
+
+       // Swap: Used
+       r = pakfire_json_add_uint64(p, "swap_used", meminfo.swap_used);
+       if (r < 0)
+               goto ERROR;
+
+       // Swap: Free
+       r = pakfire_json_add_uint64(p, "swap_free", meminfo.swap_free);
+       if (r < 0)
+               goto ERROR;
+
+       // Create a new stats object
+       r = pakfire_json_new_object(&stats);
+       if (r < 0)
+               goto ERROR;
+
+       // Set type
+       r = pakfire_json_add_string(stats, "type", "stats");
+       if (r < 0)
+               goto ERROR;
+
+       // Set data
+       r = json_object_object_add(stats, "data", p);
+       if (r < 0)
+               goto ERROR;
+
+       // Dereference data so it won't be double-freed later
+       data = NULL;
+
+       // Send the message
+       r = pakfire_builder_send_message(self, stats);
+       if (r < 0) {
+               switch (-r) {
+                       // Ignore if we are not connected
+                       case ENOTCONN:
+                               r = 0;
+                               break;
+
+                       // Raise anything else
+                       default:
+                               goto ERROR;
+               }
+       }
+
+ERROR:
+       if (stats)
+               json_object_put(stats);
+       if (p)
+               json_object_put(p);
+
+       return r;
 }
 
 int pakfire_builder_connected(struct pakfire_xfer* xfer, void* data) {
index 5e51c3e69ad50d61dc79c4bc63faa26f25ae50d5..0ed5c6ed3dd7c1552d525f5794919047ba5a22d0 100644 (file)
@@ -116,231 +116,6 @@ static int pakfire_daemon_terminate(sd_event_source* source,
        return sd_event_exit(sd_event_source_get_event(source), 0);
 }
 
-#if 0
-static int pakfire_daemon_submit_stats(sd_event_source* s, uint64_t usec, void* p) {
-       struct pakfire_daemon* daemon = p;
-       struct pakfire_cpustat cpustat = {};
-       struct pakfire_loadavg loadavg = {};
-       struct pakfire_meminfo meminfo = {};
-       struct json_object* stats = NULL;
-       struct json_object* data = NULL;
-       int r;
-
-       // If we have any jobs running, we will submit our stats
-       // every five seconds, otherwise 30 seconds is enough.
-       uint64_t next = (daemon->running_jobs > 0) ? PAKFIRE_STATS_WHEN_BUSY : PAKFIRE_STATS_WHEN_IDLE;
-
-       // Reset the timer
-       r = sd_event_source_set_time_relative(daemon->stats_timer, next);
-       if (r < 0) {
-               ERROR(daemon->ctx, "Could not set the stat timer: %s\n", strerror(-r));
-               return r;
-       }
-
-       // Don't do anything if we don't have a control connection
-       if (!daemon->control) {
-               DEBUG(daemon->ctx, "Won't send stats without a control connection\n");
-               return 0;
-       }
-
-       DEBUG(daemon->ctx, "Submitting stats...\n");
-
-       // Fetch CPU stats
-       r = pakfire_cpustat(&cpustat);
-       if (r) {
-               ERROR(daemon->ctx, "Failed to fetch CPU stats: %s\n", strerror(-r));
-               goto ERROR;
-       }
-
-       // Fetch load average
-       r = pakfire_loadavg(&loadavg);
-       if (r) {
-               ERROR(daemon->ctx, "Failed to fetch load average: %s\n", strerror(-r));
-               goto ERROR;
-       }
-
-       // Fetch meminfo
-       r = pakfire_meminfo(&meminfo);
-       if (r) {
-               ERROR(daemon->ctx, "Failed to fetch meminfo: %s\n", strerror(-r));
-               goto ERROR;
-       }
-
-       // Create new data object
-       data = json_object_new_object();
-       if (!data)
-               goto ERROR;
-
-       // CPU Stats: User
-       r = pakfire_json_add_double(data, "cpu_user", cpustat.user);
-       if (r)
-               goto ERROR;
-
-       // CPU Stats: Nice
-       r = pakfire_json_add_double(data, "cpu_nice", cpustat.nice);
-       if (r)
-               goto ERROR;
-
-       // CPU Stats: System
-       r = pakfire_json_add_double(data, "cpu_system", cpustat.system);
-       if (r)
-               goto ERROR;
-
-       // CPU Stats: Idle
-       r = pakfire_json_add_double(data, "cpu_idle", cpustat.idle);
-       if (r)
-               goto ERROR;
-
-       // CPU Stats: IO Wait
-       r = pakfire_json_add_double(data, "cpu_iowait", cpustat.iowait);
-       if (r)
-               goto ERROR;
-
-       // CPU Stats: IRQ
-       r = pakfire_json_add_double(data, "cpu_irq", cpustat.irq);
-       if (r)
-               goto ERROR;
-
-       // CPU Stats: Soft IRQ
-       r = pakfire_json_add_double(data, "cpu_softirq", cpustat.softirq);
-       if (r)
-               goto ERROR;
-
-       // CPU Stats: Steal
-       r = pakfire_json_add_double(data, "cpu_steal", cpustat.steal);
-       if (r)
-               goto ERROR;
-
-       // CPU Stats: Guest
-       r = pakfire_json_add_double(data, "cpu_guest", cpustat.guest);
-       if (r)
-               goto ERROR;
-
-       // CPU Stats: Guest Nice
-       r = pakfire_json_add_double(data, "cpu_guest_nice", cpustat.guest_nice);
-       if (r)
-               goto ERROR;
-
-       // Load Average: 1
-       r = pakfire_json_add_double(data, "loadavg1", loadavg.load1);
-       if (r)
-               goto ERROR;
-
-       // Load Average: 5
-       r = pakfire_json_add_double(data, "loadavg5", loadavg.load5);
-       if (r)
-               goto ERROR;
-
-       // Load Average: 15
-       r = pakfire_json_add_double(data, "loadavg15", loadavg.load15);
-       if (r)
-               goto ERROR;
-
-       // Memory: Total
-       r = pakfire_json_add_uint64(data, "mem_total", meminfo.total);
-       if (r)
-               goto ERROR;
-
-       // Memory: Available
-       r = pakfire_json_add_uint64(data, "mem_available", meminfo.available);
-       if (r)
-               goto ERROR;
-
-       // Memory: Used
-       r = pakfire_json_add_int64(data, "mem_used", meminfo.used);
-       if (r)
-               goto ERROR;
-
-       // Memory: Free
-       r = pakfire_json_add_uint64(data, "mem_free", meminfo.free);
-       if (r)
-               goto ERROR;
-
-       // Memory: Active
-       r = pakfire_json_add_uint64(data, "mem_active", meminfo.active);
-       if (r)
-               goto ERROR;
-
-       // Memory: Inactive
-       r = pakfire_json_add_uint64(data, "mem_inactive", meminfo.inactive);
-       if (r)
-               goto ERROR;
-
-       // Memory: Buffers
-       r = pakfire_json_add_uint64(data, "mem_buffers", meminfo.buffers);
-       if (r)
-               goto ERROR;
-
-       // Memory: Cached
-       r = pakfire_json_add_uint64(data, "mem_cached", meminfo.cached);
-       if (r)
-               goto ERROR;
-
-       // Memory: Shared
-       r = pakfire_json_add_uint64(data, "mem_shared", meminfo.shared);
-       if (r)
-               goto ERROR;
-
-       // Swap: Total
-       r = pakfire_json_add_uint64(data, "swap_total", meminfo.swap_total);
-       if (r)
-               goto ERROR;
-
-       // Swap: Used
-       r = pakfire_json_add_uint64(data, "swap_used", meminfo.swap_used);
-       if (r)
-               goto ERROR;
-
-       // Swap: Free
-       r = pakfire_json_add_uint64(data, "swap_free", meminfo.swap_free);
-       if (r)
-               goto ERROR;
-
-       // Create a new stats object
-       stats = json_object_new_object();
-       if (!stats) {
-               r = -errno;
-               goto ERROR;
-       }
-
-       // Set type
-       r = pakfire_json_add_string(stats, "type", "stats");
-       if (r)
-               goto ERROR;
-
-       // Set data
-       r = json_object_object_add(stats, "data", data);
-       if (r)
-               goto ERROR;
-
-       // Dereference data so it won't be double-freed later
-       data = NULL;
-
-       // Send the message
-       r = pakfire_daemon_send_message(daemon, stats);
-       if (r < 0) {
-               switch (-r) {
-                       // Ignore if we are not connected
-                       case ENOTCONN:
-                               r = 0;
-                               break;
-
-                       // Raise anything else
-                       default:
-                               goto ERROR;
-               }
-       }
-
-ERROR:
-       if (stats)
-               json_object_put(stats);
-       if (data)
-               json_object_put(data);
-
-       return r;
-}
-#endif
-
 /*
  * Prevents that the system can be shut down when there are jobs running...
  */