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;
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);
ERROR:
if (stats)
json_object_put(stats);
+ if (data)
+ json_object_put(data);
return r;
}