X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=lib%2Fmemcached_stats.c;h=5b917fca10357a37e2cacb61be68a57328d56a9e;hb=a081ca36c7fbf7c73e2a61d4f3c06ab0eff0571e;hp=2511532c26f7db2754cf1081ebc221980acb0517;hpb=3efc2e6fb6a17e8eb52dbe3590a5dcb063b30537;p=m6w6%2Flibmemcached diff --git a/lib/memcached_stats.c b/lib/memcached_stats.c index 2511532c..5b917fca 100644 --- a/lib/memcached_stats.c +++ b/lib/memcached_stats.c @@ -3,6 +3,37 @@ #include +static char *memcached_stat_keys[] = { + "pid", + "uptime", + "time", + "version", + "pointer_size", + "rusage_user", + "rusage_system", + "rusage_user_seconds", + "rusage_user_microseconds", + "rusage_system_seconds", + "rusage_system_microseconds", + "curr_items", + "total_items", + "bytes", + "curr_connections", + "total_connections", + "connection_structures", + "cmd_get", + "cmd_set", + "get_hits", + "get_misses", + "evictions", + "bytes_read", + "bytes_written", + "limit_maxbytes", + "threads", + NULL +}; + + static void set_data(memcached_stat_st *stat, char *key, char *value) { if (!memcmp("pid", key, strlen("pid"))) @@ -115,6 +146,125 @@ static void set_data(memcached_stat_st *stat, char *key, char *value) } } +memcached_return memcached_stat_get_value(memcached_stat_st *stat, char *key, + char *value, size_t value_length) +{ + memcached_return rc; + + rc= MEMCACHED_SUCCESS; + + if (!memcmp("pid", key, strlen("pid"))) + { + snprintf(value, value_length,"%u", stat->pid); + } + else if (!memcmp("uptime", key, strlen("uptime"))) + { + snprintf(value, value_length,"%u", stat->uptime); + } + else if (!memcmp("time", key, strlen("time"))) + { + snprintf(value, value_length,"%llu", (unsigned long long)stat->time); + } + else if (!memcmp("version", key, strlen("version"))) + { + snprintf(value, value_length,"%s", stat->version); + } + else if (!memcmp("pointer_size", key, strlen("pointer_size"))) + { + snprintf(value, value_length,"%u", stat->pointer_size); + } + else if (!memcmp("rusage_user", key, strlen("rusage_user"))) + { + snprintf(value, value_length,"%u", stat->rusage_user); + } + else if (!memcmp("rusage_system", key, strlen("rusage_system"))) + { + snprintf(value, value_length,"%u", stat->rusage_system); + } + else if (!memcmp("rusage_user_seconds", key, strlen("rusage_user_seconds"))) + { + snprintf(value, value_length,"%u", stat->rusage_user_seconds); + } + else if (!memcmp("rusage_user_microseconds", key, strlen("rusage_user_microseconds"))) + { + snprintf(value, value_length,"%u", stat->rusage_user_microseconds); + } + else if (!memcmp("rusage_system_seconds", key, strlen("rusage_system_seconds"))) + { + snprintf(value, value_length,"%u", stat->rusage_system_seconds); + } + else if (!memcmp("rusage_system_microseconds", key, strlen("rusage_system_microseconds"))) + { + snprintf(value, value_length,"%u", stat->rusage_system_microseconds); + } + else if (!memcmp("curr_items", key, strlen("curr_items"))) + { + snprintf(value, value_length,"%u", stat->curr_items); + } + else if (!memcmp("total_items", key, strlen("total_items"))) + { + snprintf(value, value_length,"%u", stat->total_items); + } + else if (!memcmp("bytes", key, strlen("bytes"))) + { + snprintf(value, value_length,"%llu", stat->bytes); + } + else if (!memcmp("curr_connections", key, strlen("curr_connections"))) + { + snprintf(value, value_length,"%u", stat->curr_connections); + } + else if (!memcmp("total_connections", key, strlen("total_connections"))) + { + snprintf(value, value_length,"%u", stat->total_connections); + } + else if (!memcmp("connection_structures", key, strlen("connection_structures"))) + { + snprintf(value, value_length,"%u", stat->connection_structures); + } + else if (!memcmp("cmd_get", key, strlen("cmd_get"))) + { + snprintf(value, value_length,"%llu", stat->cmd_get); + } + else if (!memcmp("cmd_set", key, strlen("cmd_set"))) + { + snprintf(value, value_length,"%llu", stat->cmd_set); + } + else if (!memcmp("get_hits", key, strlen("get_hits"))) + { + snprintf(value, value_length,"%llu", stat->get_hits); + } + else if (!memcmp("get_misses", key, strlen("get_misses"))) + { + snprintf(value, value_length,"%llu", stat->get_misses); + } + else if (!memcmp("evictions", key, strlen("evictions"))) + { + snprintf(value, value_length,"%llu", stat->evictions); + } + else if (!memcmp("bytes_read", key, strlen("bytes_read"))) + { + snprintf(value, value_length,"%llu", stat->bytes_read); + } + else if (!memcmp("bytes_written", key, strlen("bytes_written"))) + { + snprintf(value, value_length,"%llu", stat->bytes_written); + } + else if (!memcmp("limit_maxbytes", key, strlen("limit_maxbytes"))) + { + snprintf(value, value_length,"%u", stat->limit_maxbytes); + } + else if (!memcmp("threads", key, strlen("threads"))) + { + snprintf(value, value_length,"%u", stat->threads); + } + else + { + rc= MEMCACHED_NOTFOUND; + } + + return rc; +} + static memcached_return memcached_stats_fetch(memcached_st *ptr, memcached_stat_st *stat, char *args, @@ -122,7 +272,7 @@ static memcached_return memcached_stats_fetch(memcached_st *ptr, { memcached_return rc; char buffer[HUGE_STRING_LEN]; - size_t send_length; + size_t send_length, sent_length; rc= memcached_connect(ptr); @@ -136,12 +286,13 @@ static memcached_return memcached_stats_fetch(memcached_st *ptr, send_length= snprintf(buffer, HUGE_STRING_LEN, "stats\r\n"); - if ((send(ptr->hosts[server_key].fd, buffer, send_length, 0) == -1)) - { - fprintf(stderr, "failed on stats\n"); + if (send_length >= MEMCACHED_DEFAULT_COMMAND_SIZE) + return MEMCACHED_WRITE_FAILURE; + + sent_length= write(ptr->hosts[server_key].fd, buffer, send_length); + if (sent_length == -1 || sent_length != send_length) return MEMCACHED_WRITE_FAILURE; - } rc= memcached_response(ptr, buffer, HUGE_STRING_LEN, 0); @@ -207,9 +358,7 @@ memcached_stat_st *memcached_stat(memcached_st *ptr, char *args, memcached_retur memcached_return memcached_stat_hostname(memcached_stat_st *stat, char *args, char *hostname, unsigned int port) { - size_t send_length; memcached_return rc; - char buffer[HUGE_STRING_LEN]; memcached_st memc; memcached_init(&memc); @@ -227,3 +376,24 @@ memcached_return memcached_stat_hostname(memcached_stat_st *stat, char *args, return rc; } + +/* + We make a copy of the keys since at some point in the not so distant future + we will add support for "found" keys. +*/ +char ** memcached_stat_get_keys(memcached_stat_st *stat, memcached_return *error) +{ + char **list= (char **)malloc(sizeof(memcached_stat_keys)); + + if (!list) + { + *error= MEMCACHED_MEMORY_ALLOCATION_FAILURE; + return NULL; + } + + memcpy(list, memcached_stat_keys, sizeof(memcached_stat_keys)); + + *error= MEMCACHED_SUCCESS; + + return list; +}