static int pakfire_daemon_submit_stats(sd_event_source* s, uint64_t usec, void* p) {
struct pakfire_daemon* daemon = p;
- struct pakfire_sysinfo sysinfo = {};
- 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;
DEBUG(daemon->ctx, "Submitting stats...\n");
- // Fetch the distro
- const struct pakfire_distro* distro = pakfire_ctx_get_distro(daemon->ctx);
-
- // Fetch system information
- r = pakfire_sysinfo(&sysinfo);
- if (r < 0) {
- ERROR(daemon->ctx, "Failed to fetch system info: %s\n", strerror(-r));
- goto ERROR;
- }
-
- // Fetch CPU info
- r = pakfire_cpuinfo(&cpuinfo);
- if (r) {
- ERROR(daemon->ctx, "Failed to fetch CPU info: %s\n", strerror(-r));
- goto ERROR;
- }
-
// Fetch CPU stats
r = pakfire_cpustat(&cpustat);
if (r) {
goto ERROR;
}
- // Fetch native arch
- arch = pakfire_arch_native();
- if (!arch) {
- ERROR(daemon->ctx, "Failed to fetch native arch: %s\n", strerror(errno));
- r = -errno;
- goto ERROR;
- }
-
// Create new data object
data = json_object_new_object();
if (!data)
goto ERROR;
- // System Vendor
- if (*sysinfo.vendor) {
- r = pakfire_json_add_string(data, "sys_vendor", sysinfo.vendor);
- if (r)
- goto ERROR;
- }
-
- // System Model
- if (*sysinfo.name) {
- r = pakfire_json_add_string(data, "sys_name", sysinfo.name);
- if (r)
- goto ERROR;
- }
-
- // CPU Model
- r = pakfire_json_add_string(data, "cpu_model", cpuinfo.model);
- if (r)
- goto ERROR;
-
- // CPU Count
- r = pakfire_json_add_uint64(data, "cpu_count", cpuinfo.count);
- if (r)
- goto ERROR;
-
- // CPU Arch
- r = pakfire_json_add_string(data, "cpu_arch", arch);
- if (r)
- goto ERROR;
-
- // Pakfire Version
- r = pakfire_json_add_string(data, "pakfire_version", PACKAGE_VERSION);
- if (r)
- goto ERROR;
-
- // OS
- r = pakfire_json_add_string(data, "os_name", distro->pretty_name);
- if (r)
- goto ERROR;
-
// CPU Stats: User
r = pakfire_json_add_double(data, "cpu_user", cpustat.user);
if (r)
static int pakfire_daemon_connect(sd_event_source* s, uint64_t usec, void* data) {
struct pakfire_daemon* daemon = data;
+ struct pakfire_sysinfo sysinfo = {};
+ struct pakfire_cpuinfo cpuinfo = {};
struct pakfire_xfer* xfer = NULL;
+ const char* arch = NULL;
int r;
- INFO(daemon->ctx, "Connecting...\n");
+ DEBUG(daemon->ctx, "Connecting...\n");
+
+ // Fetch the distro
+ const struct pakfire_distro* distro = pakfire_ctx_get_distro(daemon->ctx);
+
+ // Fetch system information
+ r = pakfire_sysinfo(&sysinfo);
+ if (r < 0) {
+ ERROR(daemon->ctx, "Failed to fetch system info: %s\n", strerror(-r));
+ goto ERROR;
+ }
+
+ // Fetch native arch
+ arch = pakfire_arch_native();
+ if (!arch) {
+ ERROR(daemon->ctx, "Failed to fetch native arch: %s\n", strerror(errno));
+ r = -errno;
+ goto ERROR;
+ }
+
+ // Fetch CPU info
+ r = pakfire_cpuinfo(&cpuinfo);
+ if (r) {
+ ERROR(daemon->ctx, "Failed to fetch CPU info: %s\n", strerror(-r));
+ goto ERROR;
+ }
// Create a new xfer
r = pakfire_daemon_xfer_create(&xfer, daemon, "/api/v1/builders/control");
if (r)
goto ERROR;
+ // Send our version
+ r = pakfire_xfer_add_query(xfer, "version", "%s", PACKAGE_VERSION);
+ if (r < 0)
+ goto ERROR;
+
+ // System Vendor
+ if (*sysinfo.vendor) {
+ r = pakfire_xfer_add_query(xfer, "sys_vendor", "%s", sysinfo.vendor);
+ if (r < 0)
+ goto ERROR;
+ }
+
+ // System Model
+ if (*sysinfo.name) {
+ r = pakfire_xfer_add_query(xfer, "sys_name", "%s", sysinfo.name);
+ if (r < 0)
+ goto ERROR;
+ }
+
+ // CPU Model
+ if (*cpuinfo.model) {
+ r = pakfire_xfer_add_query(xfer, "cpu_model", "%s", cpuinfo.model);
+ if (r < 0)
+ goto ERROR;
+ }
+
+ // CPU Count
+ r = pakfire_xfer_add_query(xfer, "cpu_count", "%u", cpuinfo.count);
+ if (r < 0)
+ goto ERROR;
+
+ // Arch
+ r = pakfire_xfer_add_query(xfer, "arch", "%s", arch);
+ if (r < 0)
+ goto ERROR;
+
+ // OS
+ r = pakfire_xfer_add_query(xfer, "os_name", "%s", distro->pretty_name);
+ if (r < 0)
+ goto ERROR;
+
// Make this a WebSocket connection
r = pakfire_xfer_socket(xfer, pakfire_daemon_connected,
pakfire_daemon_recv, NULL, pakfire_daemon_close, daemon);