33 #include <drizzled/item/func.h>
34 #include <drizzled/function/str/strfunc.h>
36 #include "memcached_functions.h"
37 #include "memc_stats.h"
39 #include <libmemcached/memcached.h>
45 using namespace drizzled;
47 void MemcachedStats::setFailureString(
const char *error)
49 size_t size= strlen(error);
50 failure_buff.realloc(size);
51 failure_buff.length(size);
52 memcpy(failure_buff.ptr(), error, size);
60 memcached_stat_st *stat;
61 memcached_server_st *servers;
62 memcached_server_st *server_list;
67 ! (server_names= args[0]->val_str(str)) ||
70 setFailureString(
"USAGE: memc_stats('<server list>')");
74 servers= memcached_servers_parse(server_names->c_ptr());
77 setFailureString(
" ERROR: unable to parse servers string!");
80 memcached_server_push(memc, servers);
81 memcached_server_list_free(servers);
83 stat= memcached_stat(memc, NULL, &rc);
85 if (rc != MEMCACHED_SUCCESS && rc != MEMCACHED_SOME_ERRORS)
87 snprintf(buff, 100,
"Failure to communicate with servers (%s)\n",
88 memcached_strerror(memc, rc));
90 setFailureString(buff);
94 server_list= memcached_server_list(memc);
96 results_buff.length(0);
97 snprintf(buff, 100,
"Listing %u Server\n\n", memcached_server_count(memc));
98 results_buff.append(buff);
100 for (count= 0; count < memcached_server_count(memc); count++)
105 list= memcached_stat_get_keys(memc, &stat[count], &rc);
107 snprintf(buff, 100,
"Server: %s (%u)\n",
108 memcached_server_name(memc, server_list[count]),
109 memcached_server_port(memc, server_list[count]));
112 results_buff.append(buff);
114 for (ptr= list; *ptr; ptr++)
116 char *value= memcached_stat_get_value(memc, &stat[count], *ptr, &rc);
118 snprintf(buff, 100,
"\t %s: %s\n", *ptr, value);
120 results_buff.append(buff);
124 results_buff.append(
"\n");
129 return &results_buff;
drizzled::String * val_str(drizzled::String *)