X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fmemcached.c;h=d739203655d5fb4b840b6f36128d81efcdfcd8f4;hb=937c7cc7f9195b1579c7ebc198a9086eeec1a205;hp=59973b0b09bf32ef374e70d35443621acc42853b;hpb=0568fc5868295669f20ed5b61f2b3ab0692e3cb4;p=collectd.git diff --git a/src/memcached.c b/src/memcached.c index 59973b0b..d7392036 100644 --- a/src/memcached.c +++ b/src/memcached.c @@ -79,11 +79,20 @@ static int memcached_connect_unix (memcached_t *st) if (fd < 0) { char errbuf[1024]; - ERROR ("memcached: memcached_connect_unix: socket(2) failed: %s", + ERROR ("memcached plugin: memcached_connect_unix: socket(2) failed: %s", sstrerror (errno, errbuf, sizeof (errbuf))); return (-1); } + /* connect to the memcached daemon */ + int status = connect (fd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)); + if (status != 0) + { + shutdown (fd, SHUT_RDWR); + close (fd); + fd = -1; + } + return (fd); } /* int memcached_connect_unix */ @@ -114,7 +123,8 @@ static int memcached_connect_inet (memcached_t *st) if (status != 0) { char errbuf[1024]; - ERROR ("memcached: memcached_connect_inet: getaddrinfo(%s,%s) failed: %s", + ERROR ("memcached plugin: memcached_connect_inet: " + "getaddrinfo(%s,%s) failed: %s", host, port, (status == EAI_SYSTEM) ? sstrerror (errno, errbuf, sizeof (errbuf)) @@ -129,7 +139,8 @@ static int memcached_connect_inet (memcached_t *st) if (fd < 0) { char errbuf[1024]; - WARNING ("memcached: memcached_connect_inet: socket(2) failed: %s", + WARNING ("memcached plugin: memcached_connect_inet: " + "socket(2) failed: %s", sstrerror (errno, errbuf, sizeof (errbuf))); continue; } @@ -168,7 +179,8 @@ static int memcached_query_daemon (char *buffer, size_t buffer_size, memcached_t fd = memcached_connect (st); if (fd < 0) { - ERROR ("memcached: Could not connect to daemon."); + ERROR ("memcached plugin: Instance \"%s\" could not connect to daemon.", + st->name); return -1; } @@ -337,6 +349,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; @@ -433,6 +449,36 @@ static int memcached_read (user_data_t *user_data) gets = atof (fields[2]); } + /* + * 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 */ @@ -482,6 +528,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 */