static void print_server_listing(memcached_st *memc, memcached_stat_st *stat, memcached_server_st *server_list) { unsigned int x; memcached_return rc; printf("Listing %u Server\n\n", memcached_server_count(memc)); for (x= 0; x < memcached_server_count(memc); x++) { char **list; char **ptr; list= memcached_stat_get_keys(memc, &stat[x], &rc); printf("Server: %s (%u)\n", memcached_server_name(memc, server_list[x]), memcached_server_port(memc, server_list[x])); for (ptr= list; *ptr; ptr++) { memcached_return rc; char *value= memcached_stat_get_value(memc, &stat[x], *ptr, &rc); printf("\t %s: %s\n", *ptr, value); free(value); } free(list); printf("\n"); } }
Array static memcache_build_stats(const memcached_st *ptr, memcached_stat_st *memc_stat, memcached_return_t *ret) { char **curr_key; char **stat_keys = memcached_stat_get_keys(const_cast<memcached_st*>(ptr), memc_stat, ret); if (*ret != MEMCACHED_SUCCESS) { if (stat_keys) { free(stat_keys); } return NULL; } Array return_val = Array::Create(); for (curr_key = stat_keys; *curr_key; curr_key++) { char *mc_val; mc_val = memcached_stat_get_value(ptr, memc_stat, *curr_key, ret); if (*ret != MEMCACHED_SUCCESS) { break; } return_val.set(String(*curr_key, CopyString), String(mc_val, CopyString)); free(mc_val); } free(stat_keys); return return_val; }
/*doc Memcached stats Returns a Map with servers' statistics. Keys are server addresses, values are maps with actual stats. */ IoObject *IoMemcached_stats(IoMemcached *self, IoObject *locals, IoMessage *m) { IoMap *results_map = IoMap_new(IOSTATE); int errors = 0; uint32_t pos = 0; while(pos < memcached_server_count(DATA(self)->mc)) { memcached_server_instance_st server = memcached_server_instance_by_position(DATA(self)->mc, pos); if(server == NULL) continue; const char *hostname = memcached_server_name(server); const in_port_t port = memcached_server_port(server); memcached_stat_st stats; memcached_return_t rc = memcached_stat_servername(&stats, "", hostname, port); if(rc != MEMCACHED_SUCCESS) { errors++; continue; } char **ckeys = memcached_stat_get_keys(DATA(self)->mc, &stats, &rc); if(rc != MEMCACHED_SUCCESS) { errors++; continue; } IoMap *per_server_map = IoMap_new(IOSTATE); char *ckey = *ckeys; while(ckey != NULL) { char *cvalue = memcached_stat_get_value(DATA(self)->mc, &stats, ckey, &rc); if(rc != MEMCACHED_SUCCESS) { errors++; continue; } IoMap_rawAtPut(per_server_map, IOSYMBOL(ckey), IOSYMBOL(cvalue)); free(cvalue); ckey++; } free(ckeys); // "127.0.0.1:11211" char *server_key = (char *) malloc((strlen(hostname) + 1 + 5 + 1) * sizeof(char)); sprintf(server_key, "%s:%d", hostname, port); IoMap_rawAtPut(results_map, IOSYMBOL(server_key), per_server_map); free(server_key); pos++; } if(errors > 0) IoState_error_(IOSTATE, m, memcached_strerror(DATA(self)->mc, MEMCACHED_SOME_ERRORS)); return results_map; }