/* vcomplain returns 0 if it did not report, 1 else */ __attribute__((format(printf, 3, 0))) static int vcomplain(int level, c_complain_t *c, const char *format, va_list ap) { cdtime_t now; char message[512]; now = cdtime(); if (c->last + c->interval > now) return 0; c->last = now; if (c->interval < plugin_get_interval()) c->interval = plugin_get_interval(); else c->interval *= 2; if (c->interval > TIME_T_TO_CDTIME_T(86400)) c->interval = TIME_T_TO_CDTIME_T(86400); vsnprintf(message, sizeof(message), format, ap); message[sizeof(message) - 1] = '\0'; plugin_log(level, "%s", message); return 1; } /* vcomplain */
static int mb_submit (mb_host_t *host, mb_slave_t *slave, /* {{{ */ mb_data_t *data, value_t value) { value_list_t vl = VALUE_LIST_INIT; if ((host == NULL) || (slave == NULL) || (data == NULL)) return (EINVAL); if (host->interval == 0) host->interval = plugin_get_interval (); if (slave->instance[0] == 0) ssnprintf (slave->instance, sizeof (slave->instance), "slave_%i", slave->id); vl.values = &value; vl.values_len = 1; vl.interval = host->interval; sstrncpy (vl.host, host->host, sizeof (vl.host)); sstrncpy (vl.plugin, "modbus", sizeof (vl.plugin)); sstrncpy (vl.plugin_instance, slave->instance, sizeof (vl.plugin_instance)); sstrncpy (vl.type, data->type, sizeof (vl.type)); sstrncpy (vl.type_instance, data->instance, sizeof (vl.type_instance)); return (plugin_dispatch_values (&vl)); } /* }}} int mb_submit */
int create_putval (char *ret, size_t ret_len, /* {{{ */ const data_set_t *ds, const value_list_t *vl) { char buffer_ident[6 * DATA_MAX_NAME_LEN]; char buffer_values[1024]; int status; status = FORMAT_VL (buffer_ident, sizeof (buffer_ident), vl); if (status != 0) return (status); escape_string (buffer_ident, sizeof (buffer_ident)); status = format_values (buffer_values, sizeof (buffer_values), ds, vl, /* store rates = */ 0); if (status != 0) return (status); escape_string (buffer_values, sizeof (buffer_values)); ssnprintf (ret, ret_len, "PUTVAL %s interval=%.3f %s", buffer_ident, (vl->interval > 0) ? CDTIME_T_TO_DOUBLE (vl->interval) : CDTIME_T_TO_DOUBLE (plugin_get_interval ()), buffer_values); return (0); } /* }}} int create_putval */
static int dns_sleep_one_interval (void) /* {{{ */ { cdtime_t interval; struct timespec ts = { 0, 0 }; int status = 0; interval = plugin_get_interval (); CDTIME_T_TO_TIMESPEC (interval, &ts); while (42) { struct timespec rem = { 0, 0 }; status = nanosleep (&ts, &rem); if (status == 0) break; else if ((errno == EINTR) || (errno == EAGAIN)) { ts = rem; continue; } else break; } return (status); } /* }}} int dns_sleep_one_interval */
static void dpdk_events_default_config(void) { dpdk_events_ctx_t *ec = DPDK_EVENTS_CTX_GET(g_hc); ec->config.interval = plugin_get_interval(); /* In configless mode when no <Plugin/> section is defined in config file * both link_status and keep_alive should be enabled */ /* Link Status */ ec->config.link_status.enabled = 1; ec->config.link_status.enabled_port_mask = ~0; ec->config.link_status.send_updated = 1; ec->config.link_status.notify = 0; for (int i = 0; i < RTE_MAX_ETHPORTS; i++) { ec->config.link_status.port_name[i][0] = 0; } /* Keep Alive */ ec->config.keep_alive.enabled = 1; ec->config.keep_alive.send_updated = 1; ec->config.keep_alive.notify = 0; /* by default enable 128 cores */ memset(&ec->config.keep_alive.lcore_mask, 1, sizeof(ec->config.keep_alive.lcore_mask)); memset(&ec->config.keep_alive.shm_name, 0, sizeof(ec->config.keep_alive.shm_name)); ec->config.keep_alive.shm = MAP_FAILED; ec->config.keep_alive.fd = -1; }
static void *camqp_subscribe_thread (void *user_data) /* {{{ */ { camqp_config_t *conf = user_data; int status; cdtime_t interval = plugin_get_interval (); while (subscriber_threads_running) { amqp_frame_t frame; status = camqp_connect (conf); if (status != 0) { struct timespec ts_interval; ERROR ("amqp plugin: camqp_connect failed. " "Will sleep for %.3f seconds.", CDTIME_T_TO_DOUBLE (interval)); CDTIME_T_TO_TIMESPEC (interval, &ts_interval); nanosleep (&ts_interval, /* remaining = */ NULL); continue; } status = amqp_simple_wait_frame (conf->connection, &frame); if (status < 0) { struct timespec ts_interval; ERROR ("amqp plugin: amqp_simple_wait_frame failed. " "Will sleep for %.3f seconds.", CDTIME_T_TO_DOUBLE (interval)); camqp_close_connection (conf); CDTIME_T_TO_TIMESPEC (interval, &ts_interval); nanosleep (&ts_interval, /* remaining = */ NULL); continue; } if (frame.frame_type != AMQP_FRAME_METHOD) { DEBUG ("amqp plugin: Unexpected frame type: %#"PRIx8, frame.frame_type); continue; } if (frame.payload.method.id != AMQP_BASIC_DELIVER_METHOD) { DEBUG ("amqp plugin: Unexpected method id: %#"PRIx32, frame.payload.method.id); continue; } camqp_read_header (conf); amqp_maybe_release_buffers (conf->connection); } /* while (subscriber_threads_running) */ camqp_config_free (conf); pthread_exit (NULL); return (NULL); } /* }}} void *camqp_subscribe_thread */
static counter_t disk_calc_time_incr (counter_t delta_time, counter_t delta_ops) { double interval = CDTIME_T_TO_DOUBLE (plugin_get_interval ()); double avg_time = ((double) delta_time) / ((double) delta_ops); double avg_time_incr = interval * avg_time; return ((counter_t) (avg_time_incr + .5)); }
static void dpdk_stats_default_config(void) { dpdk_stats_ctx_t *ec = DPDK_STATS_CTX_GET(g_hc); ec->config.interval = plugin_get_interval(); for (int i = 0; i < RTE_MAX_ETHPORTS; i++) { ec->config.port_name[i][0] = 0; } /* Enable all ports by default */ ec->config.enabled_port_mask = ~0; }
static int csnmp_read_host (user_data_t *ud) { host_definition_t *host; cdtime_t time_start; cdtime_t time_end; int status; int success; int i; host = ud->data; if (host->interval == 0) host->interval = plugin_get_interval (); time_start = cdtime (); if (host->sess_handle == NULL) csnmp_host_open_session (host); if (host->sess_handle == NULL) return (-1); success = 0; for (i = 0; i < host->data_list_len; i++) { data_definition_t *data = host->data_list[i]; if (data->is_table) status = csnmp_read_table (host, data); else status = csnmp_read_value (host, data); if (status == 0) success++; } time_end = cdtime (); if ((time_end - time_start) > host->interval) { WARNING ("snmp plugin: Host `%s' should be queried every %.3f " "seconds, but reading all values takes %.3f seconds.", host->name, CDTIME_T_TO_DOUBLE (host->interval), CDTIME_T_TO_DOUBLE (time_end - time_start)); } if (success == 0) return (-1); return (0); } /* int csnmp_read_host */
static PGresult *c_psql_exec_query_params (c_psql_database_t *db, udb_query_t *q, c_psql_user_data_t *data) { char *params[db->max_params_num]; char interval[64]; int i; if ((data == NULL) || (data->params_num == 0)) return (c_psql_exec_query_noparams (db, q)); assert (db->max_params_num >= data->params_num); for (i = 0; i < data->params_num; ++i) { switch (data->params[i]) { case C_PSQL_PARAM_HOST: params[i] = C_PSQL_IS_UNIX_DOMAIN_SOCKET (db->host) ? "localhost" : db->host; break; case C_PSQL_PARAM_DB: params[i] = db->database; break; case C_PSQL_PARAM_USER: params[i] = db->user; break; case C_PSQL_PARAM_INTERVAL: ssnprintf (interval, sizeof (interval), "%.3f", (db->interval > 0) ? CDTIME_T_TO_DOUBLE (db->interval) : plugin_get_interval ()); params[i] = interval; break; case C_PSQL_PARAM_INSTANCE: params[i] = db->instance; break; default: assert (0); } } return PQexecParams (db->conn, udb_query_get_statement (q), data->params_num, NULL, (const char *const *) params, NULL, NULL, /* return text data */ 0); } /* c_psql_exec_query_params */
static int csnmp_read_host (user_data_t *ud) { host_definition_t *host; int status; int success; int i; host = ud->data; if (host->interval == 0) host->interval = plugin_get_interval (); if (host->sess_handle == NULL) csnmp_host_open_session (host); if (host->sess_handle == NULL) return (-1); success = 0; for (i = 0; i < host->data_list_len; i++) { data_definition_t *data = host->data_list[i]; if (data->is_table) status = csnmp_read_table (host, data); else status = csnmp_read_value (host, data); if (status == 0) success++; } if (success == 0) return (-1); return (0); } /* int csnmp_read_host */
static int apcups_config (oconfig_item_t *ci) { int i; _Bool persistent_conn_set = 0; for (i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; if (strcasecmp (child->key, "Host") == 0) cf_util_get_string (child, &conf_node); else if (strcasecmp (child->key, "Port") == 0) cf_util_get_service (child, &conf_service); else if (strcasecmp (child->key, "ReportSeconds") == 0) cf_util_get_boolean (child, &conf_report_seconds); else if (strcasecmp (child->key, "PersistentConnection") == 0) { cf_util_get_boolean (child, &conf_persistent_conn); persistent_conn_set = 1; } else ERROR ("apcups plugin: Unknown config option \"%s\".", child->key); } if (!persistent_conn_set) { double interval = CDTIME_T_TO_DOUBLE(plugin_get_interval()); if (interval > APCUPS_SERVER_TIMEOUT) { NOTICE ("apcups plugin: Plugin poll interval set to %.3f seconds. " "Apcupsd NIS socket timeout is %.3f seconds, " "PersistentConnection disabled by default.", interval, APCUPS_SERVER_TIMEOUT); conf_persistent_conn = 0; } } return (0); } /* int apcups_config */