]> git.ipfire.org Git - pakfire.git/commitdiff
daemon: Fix format of the stats message
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 15 Sep 2024 04:50:29 +0000 (04:50 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 15 Sep 2024 04:50:29 +0000 (04:50 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/daemon.c

index 964b29fcc9f6f98c0a526e90af220e45a32cba7f..d1367e0fd46a9ddfad28f1cfac5d0259eb560258 100644 (file)
@@ -67,13 +67,14 @@ static int pakfire_daemon_terminate(sd_event_source* source,
        return sd_event_exit(sd_event_source_get_event(source), 0);
 }
 
-static int pakfire_daemon_submit_stats(sd_event_source* s, uint64_t usec, void* data) {
-       struct pakfire_daemon* daemon = data;
+static int pakfire_daemon_submit_stats(sd_event_source* s, uint64_t usec, void* p) {
+       struct pakfire_daemon* daemon = p;
        struct pakfire_cpuinfo cpuinfo = {};
        struct pakfire_cpustat cpustat = {};
        struct pakfire_loadavg loadavg = {};
        struct pakfire_meminfo meminfo = {};
        struct json_object* stats = NULL;
+       struct json_object* data = NULL;
        const char* arch = NULL;
        size_t length = 0;
        int r;
@@ -136,161 +137,181 @@ static int pakfire_daemon_submit_stats(sd_event_source* s, uint64_t usec, void*
                goto ERROR;
        }
 
-       // Create new stats object
-       stats = json_object_new_object();
-       if (!stats)
+       // Create new data object
+       data = json_object_new_object();
+       if (!data)
                goto ERROR;
 
        // CPU Model
-       r = pakfire_json_add_string(stats, "cpu_model", cpuinfo.model);
+       r = pakfire_json_add_string(data, "cpu_model", cpuinfo.model);
        if (r)
                goto ERROR;
 
        // CPU Count
-       r = pakfire_json_add_uint64(stats, "cpu_count", cpuinfo.count);
+       r = pakfire_json_add_uint64(data, "cpu_count", cpuinfo.count);
        if (r)
                goto ERROR;
 
        // CPU Arch
-       r = pakfire_json_add_string(stats, "cpu_arch", arch);
+       r = pakfire_json_add_string(data, "cpu_arch", arch);
        if (r)
                goto ERROR;
 
        // Pakfire Version
-       r = pakfire_json_add_string(stats, "pakfire_version", PACKAGE_VERSION);
+       r = pakfire_json_add_string(data, "pakfire_version", PACKAGE_VERSION);
        if (r)
                goto ERROR;
 
        // OS
-       r = pakfire_json_add_string(stats, "os_name", distro->pretty_name);
+       r = pakfire_json_add_string(data, "os_name", distro->pretty_name);
        if (r)
                goto ERROR;
 
        // CPU Stats: User
-       r = pakfire_json_add_double(stats, "cpu_user", cpustat.user);
+       r = pakfire_json_add_double(data, "cpu_user", cpustat.user);
        if (r)
                goto ERROR;
 
        // CPU Stats: Nice
-       r = pakfire_json_add_double(stats, "cpu_nice", cpustat.nice);
+       r = pakfire_json_add_double(data, "cpu_nice", cpustat.nice);
        if (r)
                goto ERROR;
 
        // CPU Stats: System
-       r = pakfire_json_add_double(stats, "cpu_system", cpustat.system);
+       r = pakfire_json_add_double(data, "cpu_system", cpustat.system);
        if (r)
                goto ERROR;
 
        // CPU Stats: Idle
-       r = pakfire_json_add_double(stats, "cpu_idle", cpustat.idle);
+       r = pakfire_json_add_double(data, "cpu_idle", cpustat.idle);
        if (r)
                goto ERROR;
 
        // CPU Stats: IO Wait
-       r = pakfire_json_add_double(stats, "cpu_iowait", cpustat.iowait);
+       r = pakfire_json_add_double(data, "cpu_iowait", cpustat.iowait);
        if (r)
                goto ERROR;
 
        // CPU Stats: IRQ
-       r = pakfire_json_add_double(stats, "cpu_irq", cpustat.irq);
+       r = pakfire_json_add_double(data, "cpu_irq", cpustat.irq);
        if (r)
                goto ERROR;
 
        // CPU Stats: Soft IRQ
-       r = pakfire_json_add_double(stats, "cpu_softirq", cpustat.softirq);
+       r = pakfire_json_add_double(data, "cpu_softirq", cpustat.softirq);
        if (r)
                goto ERROR;
 
        // CPU Stats: Steal
-       r = pakfire_json_add_double(stats, "cpu_steal", cpustat.steal);
+       r = pakfire_json_add_double(data, "cpu_steal", cpustat.steal);
        if (r)
                goto ERROR;
 
        // CPU Stats: Guest
-       r = pakfire_json_add_double(stats, "cpu_guest", cpustat.guest);
+       r = pakfire_json_add_double(data, "cpu_guest", cpustat.guest);
        if (r)
                goto ERROR;
 
        // CPU Stats: Guest Nice
-       r = pakfire_json_add_double(stats, "cpu_guest_nice", cpustat.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(stats, "loadavg1", loadavg.load1);
+       r = pakfire_json_add_double(data, "loadavg1", loadavg.load1);
        if (r)
                goto ERROR;
 
        // Load Average: 5
-       r = pakfire_json_add_double(stats, "loadavg5", loadavg.load5);
+       r = pakfire_json_add_double(data, "loadavg5", loadavg.load5);
        if (r)
                goto ERROR;
 
        // Load Average: 15
-       r = pakfire_json_add_double(stats, "loadavg15", loadavg.load15);
+       r = pakfire_json_add_double(data, "loadavg15", loadavg.load15);
        if (r)
                goto ERROR;
 
        // Memory: Total
-       r = pakfire_json_add_uint64(stats, "mem_total", meminfo.total);
+       r = pakfire_json_add_uint64(data, "mem_total", meminfo.total);
        if (r)
                goto ERROR;
 
        // Memory: Available
-       r = pakfire_json_add_uint64(stats, "mem_available", meminfo.available);
+       r = pakfire_json_add_uint64(data, "mem_available", meminfo.available);
        if (r)
                goto ERROR;
 
        // Memory: Used
-       r = pakfire_json_add_int64(stats, "mem_used", meminfo.used);
+       r = pakfire_json_add_int64(data, "mem_used", meminfo.used);
        if (r)
                goto ERROR;
 
        // Memory: Free
-       r = pakfire_json_add_uint64(stats, "mem_free", meminfo.free);
+       r = pakfire_json_add_uint64(data, "mem_free", meminfo.free);
        if (r)
                goto ERROR;
 
        // Memory: Active
-       r = pakfire_json_add_uint64(stats, "mem_active", meminfo.active);
+       r = pakfire_json_add_uint64(data, "mem_active", meminfo.active);
        if (r)
                goto ERROR;
 
        // Memory: Inactive
-       r = pakfire_json_add_uint64(stats, "mem_inactive", meminfo.inactive);
+       r = pakfire_json_add_uint64(data, "mem_inactive", meminfo.inactive);
        if (r)
                goto ERROR;
 
        // Memory: Buffers
-       r = pakfire_json_add_uint64(stats, "mem_buffers", meminfo.buffers);
+       r = pakfire_json_add_uint64(data, "mem_buffers", meminfo.buffers);
        if (r)
                goto ERROR;
 
        // Memory: Cached
-       r = pakfire_json_add_uint64(stats, "mem_cached", meminfo.cached);
+       r = pakfire_json_add_uint64(data, "mem_cached", meminfo.cached);
        if (r)
                goto ERROR;
 
        // Memory: Shared
-       r = pakfire_json_add_uint64(stats, "mem_shared", meminfo.shared);
+       r = pakfire_json_add_uint64(data, "mem_shared", meminfo.shared);
        if (r)
                goto ERROR;
 
        // Swap: Total
-       r = pakfire_json_add_uint64(stats, "swap_total", meminfo.swap_total);
+       r = pakfire_json_add_uint64(data, "swap_total", meminfo.swap_total);
        if (r)
                goto ERROR;
 
        // Swap: Used
-       r = pakfire_json_add_uint64(stats, "swap_used", meminfo.swap_used);
+       r = pakfire_json_add_uint64(data, "swap_used", meminfo.swap_used);
        if (r)
                goto ERROR;
 
        // Swap: Free
-       r = pakfire_json_add_uint64(stats, "swap_free", meminfo.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;
+
        // Serialize to string
        const char* buffer = json_object_to_json_string_length(stats,
                JSON_C_TO_STRING_SPACED | JSON_C_TO_STRING_PRETTY, &length);
@@ -301,6 +322,8 @@ static int pakfire_daemon_submit_stats(sd_event_source* s, uint64_t usec, void*
 ERROR:
        if (stats)
                json_object_put(stats);
+       if (data)
+               json_object_put(data);
 
        return r;
 }