X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fmemcached.c;h=62ac72a8029dac695632d1a26a3ad40f18ffeca9;hb=8f7373bf96b03106fc6b9e887df4464fb0d5fa4c;hp=2a5e0f0f0845ed6a7361982c541efbab3b996603;hpb=d1483d2e2a9116c233aeaceba99fa58a7e6bdc87;p=collectd.git diff --git a/src/memcached.c b/src/memcached.c index 2a5e0f0f..62ac72a8 100644 --- a/src/memcached.c +++ b/src/memcached.c @@ -34,7 +34,6 @@ #include "configfile.h" #include -#include #include #include #include @@ -62,6 +61,7 @@ static void memcached_free (memcached_t *st) sfree (st->socket); sfree (st->host); sfree (st->port); + sfree (st); } static int memcached_connect_unix (memcached_t *st) @@ -98,8 +98,8 @@ static int memcached_connect_unix (memcached_t *st) static int memcached_connect_inet (memcached_t *st) { - char *host; - char *port; + const char *host; + const char *port; struct addrinfo ai_hints; struct addrinfo *ai_list, *ai_ptr; @@ -173,8 +173,7 @@ static int memcached_connect (memcached_t *st) static int memcached_query_daemon (char *buffer, size_t buffer_size, memcached_t *st) { - int fd = -1; - int status; + int fd, status; size_t buffer_fill; fd = memcached_connect (st); @@ -349,6 +348,10 @@ static int memcached_read (user_data_t *user_data) gauge_t bytes_total = NAN; gauge_t hits = NAN; gauge_t gets = NAN; + gauge_t incr_hits = NAN; + derive_t incr = 0; + gauge_t decr_hits = NAN; + derive_t decr = 0; derive_t rusage_user = 0; derive_t rusage_syst = 0; derive_t octets_rx = 0; @@ -383,7 +386,7 @@ static int memcached_read (user_data_t *user_data) /* * For an explanation on these fields please refer to - * + * */ /* @@ -433,6 +436,10 @@ static int memcached_read (user_data_t *user_data) { submit_gauge ("memcached_connections", "current", atof (fields[2]), st); } + else if (FIELD_IS ("listen_disabled_num")) + { + submit_derive ("connections", "listen_disabled", atof (fields[2]), st); + } /* * Commands @@ -446,6 +453,36 @@ static int memcached_read (user_data_t *user_data) } /* + * Increment/Decrement + */ + else if (FIELD_IS("incr_misses")) + { + derive_t incr_count = atoll (fields[2]); + submit_derive ("memcached_ops", "incr_misses", incr_count, st); + incr += incr_count; + } + else if (FIELD_IS ("incr_hits")) + { + derive_t incr_count = atoll (fields[2]); + submit_derive ("memcached_ops", "incr_hits", incr_count, st); + incr_hits = atof (fields[2]); + incr += incr_count; + } + else if (FIELD_IS ("decr_misses")) + { + derive_t decr_count = atoll (fields[2]); + submit_derive ("memcached_ops", "decr_misses", decr_count, st); + decr += decr_count; + } + else if (FIELD_IS ("decr_hits")) + { + derive_t decr_count = atoll (fields[2]); + submit_derive ("memcached_ops", "decr_hits", decr_count, st); + decr_hits = atof (fields[2]); + decr += decr_count; + } + + /* * Operations on the cache, i. e. cache hits, cache misses and evictions of items */ else if (FIELD_IS ("get_hits")) @@ -494,6 +531,20 @@ static int memcached_read (user_data_t *user_data) submit_gauge ("percent", "hitratio", rate, st); } + if (!isnan (incr_hits) && incr != 0) + { + gauge_t incr_rate = 100.0 * incr_hits / incr; + submit_gauge ("percent", "incr_hitratio", incr_rate, st); + submit_derive ("memcached_ops", "incr", incr, st); + } + + if (!isnan (decr_hits) && decr != 0) + { + gauge_t decr_rate = 100.0 * decr_hits / decr; + submit_gauge ("percent", "decr_hitratio", decr_rate, st); + submit_derive ("memcached_ops", "decr", decr, st); + } + return 0; } /* int memcached_read */ @@ -513,7 +564,7 @@ static int memcached_add_read_callback (memcached_t *st) status = plugin_register_complex_read (/* group = */ "memcached", /* name = */ callback_name, /* callback = */ memcached_read, - /* interval = */ NULL, + /* interval = */ 0, /* user_data = */ &ud); return (status); } /* int memcached_add_read_callback */ @@ -535,14 +586,13 @@ static int config_add_instance(oconfig_item_t *ci) /* Disable automatic generation of default instance in the init callback. */ memcached_have_instances = 1; - st = malloc (sizeof (*st)); + st = calloc (1, sizeof (*st)); if (st == NULL) { - ERROR ("memcached plugin: malloc failed."); + ERROR ("memcached plugin: calloc failed."); return (-1); } - memset (st, 0, sizeof (*st)); st->name = NULL; st->socket = NULL; st->host = NULL; @@ -633,10 +683,9 @@ static int memcached_init (void) return (0); /* No instances were configured, lets start a default instance. */ - st = malloc (sizeof (*st)); + st = calloc (1, sizeof (*st)); if (st == NULL) return (ENOMEM); - memset (st, 0, sizeof (*st)); st->name = sstrdup ("__legacy__"); st->socket = NULL; st->host = NULL;