def memcached(keys=False, stats=False, clear=False): """List memcached stored keys and server stats""" if 'CACHE_MEMCACHED_SERVERS' in app.config: servers = app.config['CACHE_MEMCACHED_SERVERS'] pp = pprint.PrettyPrinter(indent=4) for server in servers: host, port = server.split(':') mem = MemcachedStats(host, port) print '%s' % '=' * 80 print 'SERVER: %s:%s' % (host, port) if keys: print 'KEYS:' pp.pprint(mem.keys()) if stats: print 'STATS:' pp.pprint(mem.stats()) # clear keys if clear: cache = memcache.Client(servers, debug=0) if cache.flush_all(): print 'Memcached data flushed' else: print 'Could not flush memcached' else: print 'There is no memcached servers in the config files'
def persist_hits(): if is_cached_hitcount_enabled() and using_memcache(): backend, location, params = parse_backend_conf(CACHED_HITCOUNT_CACHE) host, port = location.split(':') hitcount_cache = get_hitcount_cache() lock = hitcount_cache.get(CACHED_HITCOUNT_LOCK_KEY) #print 'persist_hits - check %s lock = %s' % (CACHED_HITCOUNT_LOCK_KEY, lock) if lock is None or lock != 1: try: #acquire a lock so no updates will occur while we are persisting the hits to DB hitcount_cache.set(CACHED_HITCOUNT_LOCK_KEY, 1, CACHED_HITCOUNT_CACHE_TIMEOUT) #print 'acquire %s lock = %s ' % (CACHED_HITCOUNT_LOCK_KEY, hitcount_cache.get(CACHED_HITCOUNT_LOCK_KEY)) mem = MemcachedStats(host, port) keys = mem.keys() content_types = { } #used for keeping track of the content types so DB doesn't have to be queried each time for cache_key in keys: if "hitcount__" in cache_key and not CACHED_HITCOUNT_IP_CACHE in cache_key: cache_key = cache_key.split( ':' )[-1] #the key is a combination of key_prefix, version and key all separated by : - all we need is the key count = hitcount_cache.get(cache_key) if count: #only update the hit count if the is not None hitcount, ctype_pk, object_pk = cache_key.split( '__') if ctype_pk in content_types.keys(): content_type = content_types[ctype_pk] else: content_type = ContentType.objects.get( id=ctype_pk) content_types[ctype_pk] = content_type with transaction_atomic(): #save a new hit or increment this hits on an existing hit hit, created = Hit.objects.select_for_update( ).get_or_create(added=datetime.utcnow().date(), object_pk=object_pk, content_type=content_type) if hit and created: hit.hits = long(count) hit.save() elif hit: hit.hits = hit.hits + long(count) hit.save() #reset the hitcount for this object to 0 - even if it was previously None hitcount_cache.set(cache_key, 0, CACHED_HITCOUNT_CACHE_TIMEOUT) #print 'reset key %s to zero = %s ' % (cache_key, hitcount_cache.get(cache_key)) except Exception, ex: logger.error('Unable to persist hits') logger.error(ex) raise ex finally:
def get_relevant_keys(self): cache_stats = MemcachedStats("127.0.0.1", 8001) all_keys = cache_stats.keys() relevant_keys = [ key.replace(":1:", "") for key in all_keys if key.split("|")[0].replace(":1:", "") == str(self.pk) ] return relevant_keys
def reset_cache_layer(self, layer_key_name): cache = caches[self.cache_name] location = self._get_location() location = location[0] if isinstance(location, list) else location location = location.split(':') mem = MemcachedStats(location[0], location[1]) keys = mem.keys() for key in keys: if key.startswith('{}/{}/{}'.format(self.memcache_key_prefix, '0', layer_key_name)): cache.delete(key)
def stats(): logging.error("Sample error message") mem = MemcachedStats() stats_all = mem.stats() stats_get_hits_rate = float(mem.stats()['get_hits']) / float( mem.stats()['get_misses']) * 100 stats_memcached_mem_used = mem.stats()['bytes'] var_temp = (float(mem.stats()['bytes']) / 64000000.00) * 100.00 stats_memcached_mem_used_percentage = format(var_temp, '.6f') return render_template( "app.html.j2", placeholder_stats_all=stats_all, placeholder_stats_get_hits_rate=stats_get_hits_rate, placeholder_stats_memcached_mem_used=stats_memcached_mem_used, placeholder_stats_memcached_mem_used_percentage= stats_memcached_mem_used_percentage)
def get_nip_records_from_cache(nip_pk, nip_name): mem = MemcachedStats() nip_uid = "%d_%s" % (nip_pk, nip_name) relevant_keys = [key for key in mem.keys() if nip_uid in key] data = {} for key in relevant_keys: time = key.splt("_")[2] data[key] = json.loads(cache.get(key)) return data
def __init__(self, host='localhost', port=11211, *args, **kwargs): self.client = mc.Client((host, port)) self.client_stats = MemcachedStats(host, port) super(AnguisMemcached, self).__init__()