Array c_Memcache::t_getstats(const String& type /* = null_string */, int slabid /* = 0 */, int limit /* = 100 */) { if (!memcached_server_count(&m_memcache)) { return NULL; } char extra_args[30] = {0}; if (slabid) { snprintf(extra_args, sizeof(extra_args), "%s %d %d", type.c_str(), slabid, limit); } else if (!type.empty()) { snprintf(extra_args, sizeof(extra_args), "%s", type.c_str()); } LMCD_SERVER_POSITION_INSTANCE_TYPE instance = memcached_server_instance_by_position(&m_memcache, 0); const char *hostname = LMCD_SERVER_HOSTNAME(instance); in_port_t port = LMCD_SERVER_PORT(instance); memcached_stat_st stats; if (memcached_stat_servername(&stats, extra_args, hostname, port) != MEMCACHED_SUCCESS) { return NULL; } memcached_return_t ret; return memcache_build_stats(&m_memcache, &stats, &ret); }
Array c_Memcache::t_getstats(CStrRef type /* = null_string */, int slabid /* = 0 */, int limit /* = 100 */) { if (!memcached_server_count(&m_memcache)) { return NULL; } char extra_args[30] = {0}; if (slabid) { snprintf(extra_args, sizeof(extra_args), "%s %d %d", type.c_str(), slabid, limit); } else if (!type.empty()) { snprintf(extra_args, sizeof(extra_args), "%s", type.c_str()); } memcached_server_instance_st instance = memcached_server_instance_by_position(&m_memcache, 0); memcached_stat_st stats; if (memcached_stat_servername(&stats, extra_args, instance->hostname, instance->port) != MEMCACHED_SUCCESS) { return NULL; } memcached_return_t ret; return memcache_build_stats(&m_memcache, &stats, &ret); }
/*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; }