}
if (status == 0) {
- user_data_t ud = {.data = st, .free_func = apache_free};
-
char callback_name[3 * DATA_MAX_NAME_LEN];
ssnprintf(callback_name, sizeof(callback_name), "apache/%s/%s",
(st->host != NULL) ? st->host : hostname_g,
(st->name != NULL) ? st->name : "default");
- status = plugin_register_complex_read(/* group = */ NULL,
- /* name = */ callback_name,
- /* callback = */ apache_read_host,
- /* interval = */ 0,
- /* user_data = */ &ud);
+ status = plugin_register_complex_read(
+ /* group = */ NULL,
+ /* name = */ callback_name,
+ /* callback = */ apache_read_host,
+ /* interval = */ 0, &(user_data_t){
+ .data = st, .free_func = apache_free,
+ });
}
if (status != 0) {
#endif
}
- curl_easy_setopt(st->curl, CURLOPT_URL, st->url);
curl_easy_setopt(st->curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(st->curl, CURLOPT_MAXREDIRS, 50L);
vl.values = &value;
vl.values_len = 1;
- sstrncpy(vl.host, (st->host != NULL) ? st->host : hostname_g,
- sizeof(vl.host));
+ if (st->host != NULL)
+ sstrncpy(vl.host, st->host, sizeof(vl.host));
sstrncpy(vl.plugin, "apache", sizeof(vl.plugin));
if (st->name != NULL)
} /* void submit_value */
static void submit_derive(const char *type, const char *type_instance,
- derive_t c, apache_t *st) {
- value_t v;
- v.derive = c;
- submit_value(type, type_instance, v, st);
+ derive_t d, apache_t *st) {
+ submit_value(type, type_instance, (value_t){.derive = d}, st);
} /* void submit_derive */
static void submit_gauge(const char *type, const char *type_instance, gauge_t g,
apache_t *st) {
- value_t v;
- v.gauge = g;
- submit_value(type, type_instance, v, st);
+ submit_value(type, type_instance, (value_t){.gauge = g}, st);
} /* void submit_gauge */
static void submit_scoreboard(char *buf, apache_t *st) {
assert(st->curl != NULL);
st->apache_buffer_fill = 0;
+
+ curl_easy_setopt(st->curl, CURLOPT_URL, st->url);
+
if (curl_easy_perform(st->curl) != CURLE_OK) {
ERROR("apache: curl_easy_perform failed: %s", st->apache_curl_error);
return (-1);
static int ascent_submit_gauge(const char *plugin_instance, /* {{{ */
const char *type, const char *type_instance,
gauge_t value) {
- value_t values[1];
value_list_t vl = VALUE_LIST_INIT;
- values[0].gauge = value;
-
- vl.values = values;
+ vl.values = &(value_t){.gauge = value};
vl.values_len = 1;
- sstrncpy(vl.host, hostname_g, sizeof(vl.host));
sstrncpy(vl.plugin, "ascent", sizeof(vl.plugin));
if (plugin_instance != NULL)
#endif
}
- curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 50L);
}
ascent_buffer_fill = 0;
+
+ curl_easy_setopt(curl, CURLOPT_URL, url);
+
if (curl_easy_perform(curl) != CURLE_OK) {
ERROR("ascent plugin: curl_easy_perform failed: %s", ascent_curl_error);
return (-1);
{"ReqBadSIG", "dns_request", "BadSIG"},
{"ReqTCP", "dns_request", "TCP"},
/* Rejects */
- {"AuthQryRej", "dns_reject", "authorative"},
+ {"AuthQryRej", "dns_reject", "authoritative"},
{"RecQryRej", "dns_reject", "recursive"},
{"XfrRej", "dns_reject", "transfer"},
{"UpdateRej", "dns_reject", "update"},
{"RespTSIG", "dns_response", "TSIG"},
{"RespSIG0", "dns_response", "SIG0"},
/* Queries */
- {"QryAuthAns", "dns_query", "authorative"},
+ {"QryAuthAns", "dns_query", "authoritative"},
{"QryNoauthAns", "dns_query", "nonauth"},
{"QryReferral", "dns_query", "referral"},
{"QryRecursion", "dns_query", "recursion"},
- {"QryDuplicate", "dns_query", "dupliate"},
+ {"QryDuplicate", "dns_query", "duplicate"},
{"QryDropped", "dns_query", "dropped"},
{"QryFailure", "dns_query", "failure"},
/* Response codes */
{"QryFORMERR", "dns_rcode", "tx-FORMERR"},
{"QryNXDOMAIN", "dns_rcode", "tx-NXDOMAIN"}
#if 0
- { "XfrReqDone", "type", "type_instance" },
- { "UpdateReqFwd", "type", "type_instance" },
- { "UpdateRespFwd", "type", "type_instance" },
- { "UpdateFwdFail", "type", "type_instance" },
- { "UpdateDone", "type", "type_instance" },
- { "UpdateFail", "type", "type_instance" },
- { "UpdateBadPrereq", "type", "type_instance" },
+ { "XfrReqDone", "type", "type_instance" },
+ { "UpdateReqFwd", "type", "type_instance" },
+ { "UpdateRespFwd", "type", "type_instance" },
+ { "UpdateFwdFail", "type", "type_instance" },
+ { "UpdateDone", "type", "type_instance" },
+ { "UpdateFail", "type", "type_instance" },
+ { "UpdateBadPrereq", "type", "type_instance" },
#endif
};
static int nsstats_translation_table_length =
static void submit(time_t ts, const char *plugin_instance, /* {{{ */
const char *type, const char *type_instance, value_t value) {
- value_t values[1];
value_list_t vl = VALUE_LIST_INIT;
- values[0] = value;
-
- vl.values = values;
+ vl.values = &value;
vl.values_len = 1;
if (config_parse_time)
vl.time = TIME_T_TO_CDTIME_T(ts);
- sstrncpy(vl.host, hostname_g, sizeof(vl.host));
sstrncpy(vl.plugin, "bind", sizeof(vl.plugin));
if (plugin_instance) {
sstrncpy(vl.plugin_instance, plugin_instance, sizeof(vl.plugin_instance));
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, bind_curl_callback);
curl_easy_setopt(curl, CURLOPT_USERAGENT, COLLECTD_USERAGENT);
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, bind_curl_error);
- curl_easy_setopt(curl, CURLOPT_URL, (url != NULL) ? url : BIND_DEFAULT_URL);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 50L);
#ifdef HAVE_CURLOPT_TIMEOUT_MS
}
bind_buffer_fill = 0;
+
+ curl_easy_setopt(curl, CURLOPT_URL, (url != NULL) ? url : BIND_DEFAULT_URL);
+
if (curl_easy_perform(curl) != CURLE_OK) {
ERROR("bind plugin: curl_easy_perform failed: %s", bind_curl_error);
return (-1);
curl_easy_setopt(wp->curl, CURLOPT_WRITEDATA, wp);
curl_easy_setopt(wp->curl, CURLOPT_USERAGENT, COLLECTD_USERAGENT);
curl_easy_setopt(wp->curl, CURLOPT_ERRORBUFFER, wp->curl_errbuf);
- curl_easy_setopt(wp->curl, CURLOPT_URL, wp->url);
curl_easy_setopt(wp->curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(wp->curl, CURLOPT_MAXREDIRS, 50L);
} /* }}} int cc_init */
static void cc_submit(const web_page_t *wp, const web_match_t *wm, /* {{{ */
- const cu_match_value_t *mv) {
- value_t values[1];
+ value_t value) {
value_list_t vl = VALUE_LIST_INIT;
- values[0] = mv->value;
-
- vl.values = values;
+ vl.values = &value;
vl.values_len = 1;
- sstrncpy(vl.host, hostname_g, sizeof(vl.host));
sstrncpy(vl.plugin, "curl", sizeof(vl.plugin));
sstrncpy(vl.plugin_instance, wp->instance, sizeof(vl.plugin_instance));
sstrncpy(vl.type, wm->type, sizeof(vl.type));
static void cc_submit_response_code(const web_page_t *wp, long code) /* {{{ */
{
- value_t values[1];
value_list_t vl = VALUE_LIST_INIT;
- values[0].gauge = code;
-
- vl.values = values;
+ vl.values = &(value_t){.gauge = (gauge_t)code};
vl.values_len = 1;
- sstrncpy(vl.host, hostname_g, sizeof(vl.host));
sstrncpy(vl.plugin, "curl", sizeof(vl.plugin));
sstrncpy(vl.plugin_instance, wp->instance, sizeof(vl.plugin_instance));
sstrncpy(vl.type, "response_code", sizeof(vl.type));
} /* }}} void cc_submit_response_code */
static void cc_submit_response_time(const web_page_t *wp, /* {{{ */
- cdtime_t response_time) {
- value_t values[1];
+ gauge_t response_time) {
value_list_t vl = VALUE_LIST_INIT;
- values[0].gauge = CDTIME_T_TO_DOUBLE(response_time);
-
- vl.values = values;
+ vl.values = &(value_t){.gauge = response_time};
vl.values_len = 1;
- sstrncpy(vl.host, hostname_g, sizeof(vl.host));
sstrncpy(vl.plugin, "curl", sizeof(vl.plugin));
sstrncpy(vl.plugin_instance, wp->instance, sizeof(vl.plugin_instance));
sstrncpy(vl.type, "response_time", sizeof(vl.type));
start = cdtime();
wp->buffer_fill = 0;
+
+ curl_easy_setopt(wp->curl, CURLOPT_URL, wp->url);
+
status = curl_easy_perform(wp->curl);
if (status != CURLE_OK) {
ERROR("curl plugin: curl_easy_perform failed with status %i: %s", status,
}
if (wp->response_time)
- cc_submit_response_time(wp, cdtime() - start);
+ cc_submit_response_time(wp, CDTIME_T_TO_DOUBLE(cdtime() - start));
if (wp->stats != NULL)
curl_stats_dispatch(wp->stats, wp->curl, hostname_g, "curl", wp->instance);
continue;
}
- cc_submit(wp, wm, mv);
+ cc_submit(wp, wm, mv->value);
match_value_reset(mv);
} /* for (wm = wp->matches; wm != NULL; wm = wm->next) */
curl_easy_setopt(db->curl, CURLOPT_WRITEDATA, db);
curl_easy_setopt(db->curl, CURLOPT_USERAGENT, COLLECTD_USERAGENT);
curl_easy_setopt(db->curl, CURLOPT_ERRORBUFFER, db->curl_errbuf);
- curl_easy_setopt(db->curl, CURLOPT_URL, db->url);
curl_easy_setopt(db->curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(db->curl, CURLOPT_MAXREDIRS, 50L);
cb_name = ssnprintf_alloc("curl_json-%s-%s", db->instance,
db->url ? db->url : db->sock);
- user_data_t ud = {.data = db, .free_func = cj_free};
-
plugin_register_complex_read(/* group = */ NULL, cb_name, cj_read,
- /* interval = */ db->interval, &ud);
+ /* interval = */ db->interval,
+ &(user_data_t){
+ .data = db, .free_func = cj_free,
+ });
sfree(cb_name);
} else {
cj_free(db);
int status;
long rc;
char *url;
- url = db->url;
+
+ curl_easy_setopt(db->curl, CURLOPT_URL, db->url);
status = curl_easy_perform(db->curl);
if (status != CURLE_OK) {
ERROR("curl_json plugin: curl_easy_perform failed with status %i: %s (%s)",
- status, db->curl_errbuf, url);
+ status, db->curl_errbuf, db->url);
return (-1);
}
if (db->stats != NULL)
long rc;
char *ptr;
char *url;
- url = db->url;
db->buffer_fill = 0;
+
+ curl_easy_setopt(db->curl, CURLOPT_URL, db->url);
+
status = curl_easy_perform(curl);
if (status != CURLE_OK) {
ERROR("curl_xml plugin: curl_easy_perform failed with status %i: %s (%s)",
- status, db->curl_errbuf, url);
+ status, db->curl_errbuf, db->url);
return (-1);
}
if (db->stats != NULL)
curl_easy_setopt(db->curl, CURLOPT_WRITEDATA, db);
curl_easy_setopt(db->curl, CURLOPT_USERAGENT, COLLECTD_USERAGENT);
curl_easy_setopt(db->curl, CURLOPT_ERRORBUFFER, db->curl_errbuf);
- curl_easy_setopt(db->curl, CURLOPT_URL, db->url);
curl_easy_setopt(db->curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(db->curl, CURLOPT_MAXREDIRS, 50L);
cb_name = ssnprintf_alloc("curl_xml-%s-%s", db->instance, db->url);
- user_data_t ud = {.data = db, .free_func = cx_free};
-
plugin_register_complex_read(/* group = */ "curl_xml", cb_name, cx_read,
- /* interval = */ 0, &ud);
+ /* interval = */ 0,
+ &(user_data_t){
+ .data = db, .free_func = cx_free,
+ });
sfree(cb_name);
} else {
cx_free(db);
#endif
}
- if (url != NULL) {
- curl_easy_setopt(curl, CURLOPT_URL, url);
- }
-
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 50L);
return;
vl.values = values;
- vl.values_len = 1;
- sstrncpy(vl.host, hostname_g, sizeof(vl.host));
+ vl.values_len = STATIC_ARRAY_SIZE(values);
sstrncpy(vl.plugin, "nginx", sizeof(vl.plugin));
- sstrncpy(vl.plugin_instance, "", sizeof(vl.plugin_instance));
sstrncpy(vl.type, type, sizeof(vl.type));
if (inst != NULL)
return (-1);
nginx_buffer_len = 0;
+
+ curl_easy_setopt(curl, CURLOPT_URL, url);
+
if (curl_easy_perform(curl) != CURLE_OK) {
WARNING("nginx plugin: curl_easy_perform failed: %s", nginx_curl_error);
return (-1);
/*
* Active connections: 291
* server accepts handled requests
- * 16630948 16630948 31070465
+ * 101059015 100422216 347910649
* Reading: 6 Writing: 179 Waiting: 106
*/
for (int i = 0; i < lines_num; i++) {
} else if ((atoll(fields[0]) != 0) && (atoll(fields[1]) != 0) &&
(atoll(fields[2]) != 0)) {
submit("connections", "accepted", atoll(fields[0]));
+ /* TODO: The legacy metric "handled", which is the sum of "accepted" and
+ * "failed", is reported for backwards compatibility only. Remove in the
+ * next major version. */
submit("connections", "handled", atoll(fields[1]));
+ submit("connections", "failed", (atoll(fields[0]) - atoll(fields[1])));
submit("nginx_requests", NULL, atoll(fields[2]));
}
} else if (fields_num == 6) {
{
int status = 0;
+ curl_easy_setopt(cb->curl, CURLOPT_URL, cb->location);
curl_easy_setopt(cb->curl, CURLOPT_POSTFIELDS, data);
status = curl_easy_perform(cb->curl);
curl_easy_setopt(cb->curl, CURLOPT_HTTPHEADER, cb->headers);
curl_easy_setopt(cb->curl, CURLOPT_ERRORBUFFER, cb->curl_errbuf);
- curl_easy_setopt(cb->curl, CURLOPT_URL, cb->location);
curl_easy_setopt(cb->curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(cb->curl, CURLOPT_MAXREDIRS, 50L);
}
assert(command_len < cb->send_buffer_free);
+ /* Make scan-build happy. */
+ assert(cb->send_buffer != NULL);
+
/* `command_len + 1' because `command_len' does not include the
* trailing null byte. Neither does `send_buffer_fill'. */
memcpy(cb->send_buffer + cb->send_buffer_fill, command, command_len + 1);