#include "collectd.h"
-#include "common.h"
#include "plugin.h"
+#include "utils/common/common.h"
#include <netdb.h>
#include <netinet/in.h>
};
typedef struct memcached_s memcached_t;
-static _Bool memcached_have_instances = 0;
+static bool memcached_have_instances;
static void memcached_free(void *arg) {
memcached_t *st = arg;
/* create our socket descriptor */
int fd = socket(AF_UNIX, SOCK_STREAM, 0);
if (fd < 0) {
- char errbuf[1024];
ERROR("memcached plugin: memcached_connect_unix: socket(2) failed: %s",
- sstrerror(errno, errbuf, sizeof(errbuf)));
+ STRERRNO);
return -1;
}
int status = getaddrinfo(st->connhost, st->connport, &ai_hints, &ai_list);
if (status != 0) {
- char errbuf[1024];
ERROR("memcached plugin: memcached_connect_inet: "
"getaddrinfo(%s,%s) failed: %s",
st->connhost, st->connport,
- (status == EAI_SYSTEM) ? sstrerror(errno, errbuf, sizeof(errbuf))
- : gai_strerror(status));
+ (status == EAI_SYSTEM) ? STRERRNO : gai_strerror(status));
return -1;
}
/* create our socket descriptor */
fd = socket(ai_ptr->ai_family, ai_ptr->ai_socktype, ai_ptr->ai_protocol);
if (fd < 0) {
- char errbuf[1024];
WARNING("memcached plugin: memcached_connect_inet: "
"socket(2) failed: %s",
- sstrerror(errno, errbuf, sizeof(errbuf)));
+ STRERRNO);
continue;
}
status = (int)swrite(st->fd, "stats\r\n", strlen("stats\r\n"));
if (status != 0) {
- char errbuf[1024];
ERROR("memcached plugin: Instance \"%s\": write(2) failed: %s", st->name,
- sstrerror(errno, errbuf, sizeof(errbuf)));
+ STRERRNO);
shutdown(st->fd, SHUT_RDWR);
close(st->fd);
st->fd = -1;
char const end_token[5] = {'E', 'N', 'D', '\r', '\n'};
if (status < 0) {
- char errbuf[1024];
if ((errno == EAGAIN) || (errno == EWOULDBLOCK))
continue;
ERROR("memcached plugin: Instance \"%s\": Error reading from socket: %s",
- st->name, sstrerror(errno, errbuf, sizeof(errbuf)));
+ st->name, STRERRNO);
shutdown(st->fd, SHUT_RDWR);
close(st->fd);
st->fd = -1;
return -1;
+ } else if (status == 0) {
+ ERROR("memcached plugin: Instance \"%s\": Connection closed by peer",
+ st->name);
+ close(st->fd);
+ st->fd = -1;
+ return -1;
}
buffer_fill += (size_t)status;
if (strsplit(line, fields, 3) != 3)
continue;
- int name_len = strlen(fields[1]);
+ size_t name_len = strlen(fields[1]);
if (name_len == 0)
continue;
else if (FIELD_IS("curr_connections")) {
submit_gauge("memcached_connections", "current", atof(fields[2]), st);
} else if (FIELD_IS("listen_disabled_num")) {
- submit_derive("connections", "listen_disabled", atoll(fields[2]), st);
+ submit_derive("total_events", "listen_disabled", atoll(fields[2]), st);
}
/*
* Total number of connections opened since the server started running
int status = 0;
/* Disable automatic generation of default instance in the init callback. */
- memcached_have_instances = 1;
+ memcached_have_instances = true;
memcached_t *st = calloc(1, sizeof(*st));
if (st == NULL) {
} /* int config_add_instance */
static int memcached_config(oconfig_item_t *ci) {
- _Bool have_instance_block = 0;
+ bool have_instance_block = 0;
for (int i = 0; i < ci->children_num; i++) {
oconfig_item_t *child = ci->children + i;
int status = memcached_add_read_callback(st);
if (status == 0)
- memcached_have_instances = 1;
+ memcached_have_instances = true;
return status;
} /* int memcached_init */