Skip to content

Commit

Permalink
Adding some new panels, including a CPU info one and some for memcached
Browse files Browse the repository at this point in the history
  • Loading branch information
coleifer committed May 25, 2011
1 parent 77a36c6 commit 9664a83
Showing 1 changed file with 82 additions and 0 deletions.
82 changes: 82 additions & 0 deletions djutils/dashboard/contrib/panels.py
Expand Up @@ -20,6 +20,9 @@ def get_db_setting(key):
# stored as either 'localhost:6379' or 'localhost:6379:0'
REDIS_SERVER = getattr(settings, 'DASHBOARD_REDIS_CONNECTION', None)

# stored as 'localhost:11211'
MEMCACHED_SERVER = getattr(settings, 'DASHBOARD_MEMCACHED_CONNECTION', None)


class PostgresPanelProvider(PanelProvider):
conn = None
Expand Down Expand Up @@ -184,11 +187,90 @@ def get_data(self):
return {'memory': self.get_key('used_memory')}


class CPUInfo(PanelProvider):
def get_title(self):
return 'CPU Usage'

def get_data(self):
fh = open('/proc/loadavg', 'r')
contents = fh.read()
fh.close()

# grab the second value
second = contents.split()[1]

return {'loadavg': second}


class MemcachedPanelProvider(PanelProvider):
def get_stats(self):
host, port = MEMCACHED_SERVER.split(':')[:2]
sock = socket.socket()
try:
sock.connect((host, int(port)))
except:
return {}

sock.send('stats\r\n')
data = sock.recv(8192)
data_dict = {}
for line in data.splitlines():
if line.startswith('STAT'):
key, val = line.split()[1:]
data_dict[key] = val

return data_dict


class MemcachedHitMiss(MemcachedPanelProvider):
def get_title(self):
return 'Memcached hit/miss ratio'

def get_data(self):
memcached_stats = self.get_stats()

get_hits = float(memcached_stats.get('get_hits', 0))
get_misses = float(memcached_stats.get('get_misses', 0))

if get_hits and get_misses:
return {'hit-miss ratio': get_hits / get_misses}

return {'hit-miss-ration': 0}


class MemcachedMemoryUsage(MemcachedPanelProvider):
def get_title(self):
return 'Memcached memory usage'

def get_data(self):
memcached_stats = self.get_stats()

return {'bytes': memcached_stats.get('bytes', 0)}


class MemcachedItemsInCache(MemcachedPanelProvider):
def get_title(self):
return 'Memcached items in cache'

def get_data(self):
memcached_stats = self.get_stats()
return {'items': memcached_stats.get('curr_items', 0)}


registry.register(CPUInfo)


if REDIS_SERVER:
registry.register(RedisConnectedClients)
registry.register(RedisMemoryUsage)


if MEMCACHED_SERVER:
registry.register(MemcachedHitMiss)
registry.register(MemcachedMemoryUsage)
registry.register(MemcachedItemsInCache)


if 'psycopg2' in get_db_setting('ENGINE'):
registry.register(PostgresQueryPanel)
registry.register(PostgresUserPanel)
Expand Down

0 comments on commit 9664a83

Please sign in to comment.