Author: justi9
Date: 2009-08-27 15:19:13 -0400 (Thu, 27 Aug 2009)
New Revision: 3593
Modified:
mgmt/trunk/basil/python/basil/model.py
mgmt/trunk/basil/python/basil/page.py
mgmt/trunk/basil/python/basil/server.py
Log:
* Store a fixed number of stats
* Take advantage of defaultdict and deque
* Add logic to find readable object names, and shorten them if
they're too long
Modified: mgmt/trunk/basil/python/basil/model.py
===================================================================
--- mgmt/trunk/basil/python/basil/model.py 2009-08-26 19:29:55 UTC (rev 3592)
+++ mgmt/trunk/basil/python/basil/model.py 2009-08-27 19:19:13 UTC (rev 3593)
@@ -1,3 +1,4 @@
+from collections import defaultdict, deque
from qmf.console import *
from threading import Lock
@@ -13,10 +14,10 @@
self.lock = Lock()
self.packages = set()
- self.classes_by_package = dict()
- self.objects_by_class = dict()
+ self.classes_by_package = defaultdict(dict)
+ self.objects_by_class = defaultdict(dict)
self.objects_by_id = dict()
- self.stats_by_id = dict()
+ self.stats_by_id = defaultdict(StatsRecord)
def add_broker_url(self, url):
self.broker_urls.add(url)
@@ -60,29 +61,42 @@
try:
pkgid = classKey.getPackageName()
- classes = self.model.classes_by_package.setdefault(pkgid, dict())
+ classes = self.model.classes_by_package[pkgid]
classes[classKey.getHashString()] = classKey
finally:
self.model.lock.release()
- def objectProps(self, broker, object):
+ def objectProps(self, broker, obj):
self.model.lock.acquire()
try:
- clsid = object.getClassKey().getHashString()
- objects = self.model.objects_by_class.setdefault(clsid, dict())
- objects[str(object.getObjectId())] = object
+ clsid = obj.getClassKey().getHashString()
+ objs = self.model.objects_by_class[clsid]
+ objs[str(obj.getObjectId())] = obj
- self.model.objects_by_id[str(object.getObjectId())] = object
+ self.model.objects_by_id[str(obj.getObjectId())] = obj
finally:
self.model.lock.release()
- def objectStats(self, broker, object):
+ def objectStats(self, broker, obj):
self.model.lock.acquire()
try:
- objid = str(object.getObjectId())
- stats = self.model.stats_by_id.setdefault(objid, list())
- stats.append(object)
+ objid = str(obj.getObjectId())
+ stats = self.model.stats_by_id[objid]
+
+ for stat in obj.getStatistics():
+ name = stat[0].name
+ value = stat[1]
+
+ values = stats[name]
+ values.append(value)
+
+ if len(values) > 10:
+ values.popleft()
finally:
self.model.lock.release()
+
+class StatsRecord(defaultdict):
+ def __init__(self):
+ super(StatsRecord, self).__init__(deque)
Modified: mgmt/trunk/basil/python/basil/page.py
===================================================================
--- mgmt/trunk/basil/python/basil/page.py 2009-08-26 19:29:55 UTC (rev 3592)
+++ mgmt/trunk/basil/python/basil/page.py 2009-08-27 19:19:13 UTC (rev 3593)
@@ -131,18 +131,12 @@
return "Classes"
class NameColumn(SelectableNameColumn):
- def get_id(self, object):
- return str(object.getObjectId())
+ def get_id(self, obj):
+ return str(obj.getObjectId())
- def get_name(self, object):
- return object.getIndex()
+ def get_name(self, obj):
+ return get_object_name(obj)
-# if hasattr(object, "name"):
-# return getattr(object, "name")
-# else:
-# return self.get_id(object)
- #return getattr(object, "name", self.get_id(object)) # XXX use
this
-
class ObjectView(Widget):
def __init__(self, app, name, objid):
super(ObjectView, self).__init__(app, name)
@@ -161,7 +155,8 @@
id = self.objid.get(session)
try:
- return self.app.model.objects_by_id[id].getIndex()
+ obj = self.app.model.objects_by_id[id]
+ return get_object_name(obj)
except KeyError:
pass
@@ -170,6 +165,7 @@
try:
utime = self.app.model.objects_by_id[id].getTimestamps()[index]
+
if utime != 0:
utime = utime / float(1000000000)
return datetime.fromtimestamp(utime)
@@ -185,39 +181,57 @@
def render_delete_time(self, session):
return self.render_timestamp(session, 2)
-class BaseObjectProperties(PropertySet):
+class ObjectProperties(PropertySet):
def __init__(self, app, name, objid):
- super(BaseObjectProperties, self).__init__(app, name)
+ super(ObjectProperties, self).__init__(app, name)
self.objid = objid
def do_get_items(self, session):
id = self.objid.get(session)
- obj = self.app.model.objects_by_id.get(id)
- if obj:
- return self.get_properties(obj)
+ try:
+ obj = self.app.model.objects_by_id[id]
+ return obj.getProperties()
+ except KeyError:
+ pass
- def get_properties(self, object):
- return object.getProperties()
-
def get_item_name(self, item):
- return str(item[0])
+ return shorten(item[0])
def get_item_value(self, item):
- return str(item[1])
+ return shorten(item[1])
-class ObjectProperties(BaseObjectProperties):
- def get_properties(self, object):
- return object.getProperties()
+class ObjectStatistics(PropertySet):
+ def __init__(self, app, name, objid):
+ super(ObjectStatistics, self).__init__(app, name)
-class ObjectStatistics(BaseObjectProperties):
+ self.objid = objid
+
def do_get_items(self, session):
id = self.objid.get(session)
stats = self.app.model.stats_by_id.get(id)
if stats:
- return self.get_properties(stats[-1])
+ return stats.items()
- def get_properties(self, object):
- return object.getStatistics()
+ def get_item_name(self, item):
+ return shorten(item[0])
+
+ def get_item_value(self, item):
+ return ", ".join([str(x) for x in reversed(item[1])])
+
+def get_object_name(obj):
+ for prop, value in obj.getProperties():
+ if prop.name in ("name", "Name"):
+ return value
+
+ return shorten(obj.getIndex())
+
+def shorten(value):
+ value = str(value)
+
+ if len(value) > 32:
+ value = value[0:32] + "..."
+
+ return value
Modified: mgmt/trunk/basil/python/basil/server.py
===================================================================
--- mgmt/trunk/basil/python/basil/server.py 2009-08-26 19:29:55 UTC (rev 3592)
+++ mgmt/trunk/basil/python/basil/server.py 2009-08-27 19:19:13 UTC (rev 3593)
@@ -14,14 +14,14 @@
super(BasilApplication, self).__init__()
self.model = BasilModel()
- self.model.add_broker_url("amqp://mrg2.lab.bos.redhat.com")
+ self.model.add_broker_url("amqp://mrg31.lab.bos.redhat.com")
self.main_page = BasilPage(self, "index.html")
self.add_page(self.main_page)
self.set_default_page(self.main_page)
-
self.add_resource_dir("/home/jross/checkouts/mgmt/trunk/cumin-test-0/resources-wooly")
# XXX
+
self.add_resource_dir("/home/boston/jross/local/mgmt/cumin/instance/resources-wooly")
# XXX
self.enable_debug()