static void aur_client_constructed (GObject * object) { AurClient *client = (AurClient *) (object); gint max_con = 1; if (G_OBJECT_CLASS (aur_client_parent_class)->constructed != NULL) G_OBJECT_CLASS (aur_client_parent_class)->constructed (object); client->soup = soup_session_async_new_with_options (SOUP_SESSION_ASYNC_CONTEXT, client->context, NULL); g_assert (client->soup); if (!g_strcmp0 ("1", g_getenv ("AURENA_DEBUG"))) soup_session_add_feature (client->soup, SOUP_SESSION_FEATURE (soup_logger_new (SOUP_LOGGER_LOG_BODY, -1))); /* Set a 20 second timeout on pings from the server */ g_object_set (G_OBJECT (client->soup), "idle-timeout", 20, NULL); /* 5 second timeout before retrying with new connections */ g_object_set (G_OBJECT (client->soup), "timeout", 5, NULL); if (client->flags & AUR_CLIENT_PLAYER) max_con++; if (client->flags & AUR_CLIENT_CONTROLLER) max_con++; g_object_set (client->soup, "max-conns-per-host", max_con, NULL); try_reconnect (client); }
static void snra_client_constructed (GObject * object) { SnraClient *client = (SnraClient *) (object); if (G_OBJECT_CLASS (snra_client_parent_class)->constructed != NULL) G_OBJECT_CLASS (snra_client_parent_class)->constructed (object); try_reconnect (client); }
void* reconnect_loop() { pthread_detach(pthread_self()); while(1) { sleep(90); try_reconnect(); } }
static void snra_client_constructed (GObject * object) { SnraClient *client = (SnraClient *) (object); gint max_con = 1; if (G_OBJECT_CLASS (snra_client_parent_class)->constructed != NULL) G_OBJECT_CLASS (snra_client_parent_class)->constructed (object); if (client->flags & SNRA_CLIENT_PLAYER) max_con++; if (client->flags & SNRA_CLIENT_CONTROLLER) max_con++; g_object_set (client->soup, "max-conns-per-host", max_con, NULL); try_reconnect (client); }
static int rc_read (void) { int status; rrdc_stats_t *head; _Bool retried = 0; value_list_t vl = VALUE_LIST_INIT; vl.values = &(value_t) { .gauge = NAN }; vl.values_len = 1; if (daemon_address == NULL) return (-1); if (!config_collect_stats) return (-1); if ((strncmp ("unix:", daemon_address, strlen ("unix:")) != 0) && (daemon_address[0] != '/')) sstrncpy (vl.host, daemon_address, sizeof (vl.host)); sstrncpy (vl.plugin, "rrdcached", sizeof (vl.plugin)); rrd_clear_error (); status = rrdc_connect (daemon_address); if (status != 0) { ERROR ("rrdcached plugin: Failed to connect to RRDCacheD " "at %s: %s (status=%d)", daemon_address, rrd_get_error (), status); return (-1); } while (42) { /* The RRD client lib does not provide any means for checking a * connection, hence we'll have to retry upon failed operations. */ head = NULL; rrd_clear_error (); status = rrdc_stats_get (&head); if (status == 0) break; if (!retried) { retried = 1; if (try_reconnect () == 0) continue; /* else: report the error and fail */ } ERROR ("rrdcached plugin: rrdc_stats_get failed: %s (status=%i).", rrd_get_error (), status); return (-1); } for (rrdc_stats_t *ptr = head; ptr != NULL; ptr = ptr->next) { if (ptr->type == RRDC_STATS_TYPE_GAUGE) vl.values[0].gauge = (gauge_t) ptr->value.gauge; else if (ptr->type == RRDC_STATS_TYPE_COUNTER) vl.values[0].counter = (counter_t) ptr->value.counter; else continue; if (strcasecmp ("QueueLength", ptr->name) == 0) { sstrncpy (vl.type, "queue_length", sizeof (vl.type)); sstrncpy (vl.type_instance, "", sizeof (vl.type_instance)); } else if (strcasecmp ("UpdatesWritten", ptr->name) == 0) { sstrncpy (vl.type, "operations", sizeof (vl.type)); sstrncpy (vl.type_instance, "write-updates", sizeof (vl.type_instance)); } else if (strcasecmp ("DataSetsWritten", ptr->name) == 0) { sstrncpy (vl.type, "operations", sizeof (vl.type)); sstrncpy (vl.type_instance, "write-data_sets", sizeof (vl.type_instance)); } else if (strcasecmp ("TreeNodesNumber", ptr->name) == 0) { sstrncpy (vl.type, "gauge", sizeof (vl.type)); sstrncpy (vl.type_instance, "tree_nodes", sizeof (vl.type_instance)); } else if (strcasecmp ("TreeDepth", ptr->name) == 0) { sstrncpy (vl.type, "gauge", sizeof (vl.type)); sstrncpy (vl.type_instance, "tree_depth", sizeof (vl.type_instance)); } else if (strcasecmp ("FlushesReceived", ptr->name) == 0) { sstrncpy (vl.type, "operations", sizeof (vl.type)); sstrncpy (vl.type_instance, "receive-flush", sizeof (vl.type_instance)); } else if (strcasecmp ("JournalBytes", ptr->name) == 0) { sstrncpy (vl.type, "counter", sizeof (vl.type)); sstrncpy (vl.type_instance, "journal-bytes", sizeof (vl.type_instance)); } else if (strcasecmp ("JournalRotate", ptr->name) == 0) { sstrncpy (vl.type, "counter", sizeof (vl.type)); sstrncpy (vl.type_instance, "journal-rotates", sizeof (vl.type_instance)); } else if (strcasecmp ("UpdatesReceived", ptr->name) == 0) { sstrncpy (vl.type, "operations", sizeof (vl.type)); sstrncpy (vl.type_instance, "receive-update", sizeof (vl.type_instance)); } else { DEBUG ("rrdcached plugin: rc_read: Unknown statistic `%s'.", ptr->name); continue; } plugin_dispatch_values (&vl); } /* for (ptr = head; ptr != NULL; ptr = ptr->next) */ rrdc_stats_free (head); return (0); } /* int rc_read */