Author: eallen
Date: 2010-05-12 15:15:57 -0400 (Wed, 12 May 2010)
New Revision: 3964
Modified:
mgmt/newdata/cumin/python/cumin/grid/pool.py
mgmt/newdata/cumin/python/cumin/grid/slot.py
mgmt/newdata/cumin/python/cumin/grid/slot.strings
mgmt/newdata/cumin/python/cumin/parameters.py
Log:
Converted pool/slot overview and visualization to qmf v2.
Modified: mgmt/newdata/cumin/python/cumin/grid/pool.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/grid/pool.py 2010-05-11 20:55:59 UTC (rev 3963)
+++ mgmt/newdata/cumin/python/cumin/grid/pool.py 2010-05-12 19:15:57 UTC (rev 3964)
@@ -100,18 +100,15 @@
def do_process(self, session):
#self.limits.limit_count.process(session)
- super(PoolView, self).do_process(session)
+ super(PoolFrame, self).do_process(session)
class PoolOverview(Widget):
- def __init__(self, app, name, pool):
+ def __init__(self, app, name, collector):
super(PoolOverview, self).__init__(app, name)
- self.pool = pool
+ self.collector = collector
- self.collector = PoolCollectorAttribute(app, "collector", self.pool)
- self.add_attribute(self.collector)
-
- self.grid = PoolGridAttribute(app, "grid", self.pool)
+ self.grid = CollectorGridAttribute(app, "grid", self.collector)
self.add_attribute(self.grid)
stats = CollectorGeneralStatSet(app, "collector_stats",
self.collector)
@@ -120,10 +117,10 @@
stats = GridStats(app, "grid_stats", self.grid)
self.add_child(stats)
- slot_map = PoolSlotMap(app, "slot_png", self.pool)
+ slot_map = PoolSlotMap(app, "slot_png", self.collector)
self.add_child(slot_map)
- slot_vis = PoolSlotFlashVis(app, "slot_map", self.pool)
+ slot_vis = PoolSlotFlashVis(app, "slot_map", self.collector)
self.add_child(slot_vis)
chart = self.JobStackedChart(app, "jobs", self.collector)
@@ -204,50 +201,52 @@
return "Grid submits"
class PoolSlotMap(SlotMap):
- def __init__(self, app, name, pool):
+ def __init__(self, app, name, collector):
super(PoolSlotMap, self).__init__(app, name)
- self.pool = pool
+ self.collector = collector
def do_process(self, session):
super(PoolSlotMap, self).do_process(session)
- pool = self.pool.get(session)
+ collector = self.collector.get(session)
- self.slots.add_where_expr(session, "s.pool = '%s'", pool.id)
+ self.slots.add_where_expr(session, "\"Pool\" = '%s'",
collector.Pool)
def render_image_href(self, session):
- pool = self.pool.get(session)
+ collector = self.collector.get(session)
- page = main.module.pool_slots_page
+ page = self.app.grid.pool_slots_page
sess = Session(page)
- page.pool.set(sess, pool)
+ page.collector.set(sess, collector)
return sess.marshal()
def get_scheduler_select(self, session):
- pool = self.pool.get(session)
- return "pool='%s'" % pool.id
+ pass
+ #pool = self.pool.get(session)
class PoolSlotMapPage(SlotMapPage):
def __init__(self, app, name):
- self.pool = PoolParameter(app, "id")
- super(PoolSlotMapPage, self).__init__(app, name, self.pool, "Pool")
+ cls = app.model.mrg_grid.Collector
+ self.collector = RosemaryObjectParameter(app, "id", cls)
- self.add_parameter(self.pool)
+ super(PoolSlotMapPage, self).__init__(app, name, self.collector,
"Pool")
+ self.add_parameter(self.collector)
+
def do_process(self, session):
super(PoolSlotMapPage, self).do_process(session)
- pool = self.pool.get(session)
+ collector = self.collector.get(session)
# XXX The conditional is necessary because this page is
# overloaded to generate little dots, in which case it has no
# pool
- if pool:
- self.slots.add_where_expr(session, "s.pool = '%s'",
pool.id)
+ if collector:
+ self.slots.add_where_expr(session, "\"Pool\" =
'%s'", collector.Pool)
class PoolSlotFlashVis(PoolSlotMap):
def __init__(self, app, name, object):
@@ -259,34 +258,34 @@
self.fullpageable = True
def render_slots_href(self, session):
- pool = self.pool.get(session)
+ collector = self.collector.get(session)
- page = main.module.pool_slots_page
+ page = self.app.grid.pool_slots_page
sess = Session(page)
- page.pool.set(sess, pool)
+ page.collector.set(sess, collector)
page.json.set(sess, "slots")
page.groups.set(sess, [self.group_by.get(session)])
return sess.marshal()
def render_image_href(self, session):
- pool = self.pool.get(session)
+ collector = self.collector.get(session)
- page = main.module.pool_slots_page
+ page = self.app.grid.pool_slots_page
sess = Session(page)
- page.pool.set(sess, pool)
+ page.collector.set(sess, collector)
return sess.marshal()
def render_ctrl_href(self, session):
- pool = self.pool.get(session)
+ collector = self.collector.get(session)
- page = main.module.pool_slots_page
+ page = self.app.grid.pool_slots_page
sess = Session(page)
- page.pool.set(sess, pool)
+ page.collector.set(sess, collector)
page.json.set(sess, "ctrl")
page.groups.set(sess, [self.group_by.get(session)])
@@ -305,12 +304,12 @@
return self.fullpageable and "fullpageable" or ""
def render_fullpage_href(self, session):
- pool = self.pool.get(session)
+ collector = self.collector.get(session)
- page = main.module.pool_slots_fullpage
+ page = self.app.grid.pool_slots_fullpage
sess = Session(page)
- page.pool.set(sess, pool)
+ page.collector.set(sess, collector)
return sess.marshal()
@@ -318,8 +317,8 @@
def __init__(self, app, name):
super(PoolSlotFlashVis.GroupBySwitch, self).__init__(app, name)
- self.add_state("system", "By system")
- self.add_state("accounting_group", "By accounting
group")
+ self.add_state("System", "By system")
+ self.add_state("AccountingGroup", "By accounting group")
self.add_state("None", "No Grouping")
def get_click(self, session, state):
@@ -331,10 +330,11 @@
def __init__(self, app, name):
super(PoolSlotFullPage, self).__init__(app, name)
- self.pool = PoolParameter(app, "id")
- self.add_parameter(self.pool)
+ cls = app.model.mrg_grid.Collector
+ self.collector = RosemaryObjectParameter(app, "id", cls)
+ self.add_parameter(self.collector)
- self.flash_chart = PoolSlotFlashVis(app, "chart", self.pool)
+ self.flash_chart = PoolSlotFlashVis(app, "chart", self.collector)
self.flash_chart.fullpageable = False
self.add_child(self.flash_chart)
Modified: mgmt/newdata/cumin/python/cumin/grid/slot.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/grid/slot.py 2010-05-11 20:55:59 UTC (rev 3963)
+++ mgmt/newdata/cumin/python/cumin/grid/slot.py 2010-05-12 19:15:57 UTC (rev 3964)
@@ -10,6 +10,7 @@
from cumin.objectselector import *
from cumin.stat import *
from cumin.widgets import *
+from cumin.OpenFlashChart import *
strings = StringCatalog(__file__)
log = logging.getLogger("cumin.slot")
@@ -43,20 +44,10 @@
super(SlotDataSet, self).__init__(app)
exprs = list()
- exprs.append("s.qmf_update_time > now() - interval '60
minutes'")
+ exprs.append("_qmf_update_time > now() - interval '60
minutes'")
self.where_exprs.default = exprs
-class OldSlotFrame(CuminFrame):
- def __init__(self, app, name):
- super(OldSlotFrame, self).__init__(app, name)
-
- self.object = SlotParameter(app, "id")
- self.add_parameter(self.object)
-
- self.view = SlotView(app, "view", self.object)
- self.add_mode(self.view)
-
class SlotView(CuminView):
def __init__(self, app, name, slot):
super(SlotView, self).__init__(app, name, slot)
@@ -195,8 +186,8 @@
return
columns = [x[0] for x in cursor.description]
- activity = columns.index("activity")
- state = columns.index("state")
+ activity = columns.index("Activity")
+ state = columns.index("Atate")
interiors = self.interiors.copy()
interiors[None] = interiors["Unknown"]
@@ -226,7 +217,7 @@
d = dict()
for i in plist:
- activityState = "%s:%s" % (records[i]["activity"],
records[i]["state"])
+ activityState = "%s:%s" % (records[i]["Activity"],
records[i]["State"])
if not activityState in d:
d[activityState] = 0
d[activityState] += 1
@@ -244,7 +235,7 @@
root = Element()
root.name = self.object_description
- root.value = self.object_param.get(session).id
+ root.value = self.object_param.get(session)._id
root.slots = slot_count
root.vis = self.json.get(session)
root.activity_colors = self.interiors
@@ -263,15 +254,15 @@
if leaves:
#for i in sorted(plist, key=lambda x:records[x]["name"]):
for i in sorted(plist, key=lambda x:"%s%s%s" %
- (records[x]["activity"],
records[x]["state"], records[x]["name"])):
+ (records[x]["Activity"],
records[x]["State"], records[x]["Name"])):
el = Element()
- el.job_id = records[i]["job_id"] and
records[i]["job_id"] or ""
- el.activity = records[i]["activity"] and
records[i]["activity"] or "Unknown"
- el.state = records[i]["state"] and
records[i]["state"] or "Unknown"
- el.value = records[i]["name"] and
records[i]["name"] or ""
- el.load_avg = records[i]["load_avg"] and
round(records[i]["load_avg"], 2) or 0
+ el.job_id = records[i]["JobId"] and
records[i]["JobId"] or ""
+ el.activity = records[i]["Activity"] and
records[i]["Activity"] or "Unknown"
+ el.state = records[i]["State"] and
records[i]["State"] or "Unknown"
+ el.value = records[i]["Name"] and
records[i]["Name"] or ""
+ el.load_avg = records[i]["LoadAvg"] and
round(records[i]["LoadAvg"], 2) or 0
el.name = "slot"
- el.slot_id = records[i]["id"]
+ el.slot_id = records[i]["_id"]
level_list.append(el)
else:
# display summary info for all the slots under this grouping
@@ -392,13 +383,13 @@
return state
class SlotInfo(ItemSet):
- display_names = {"job_id": ("Job ID", "",
""),
- "system": ("System", "",
""),
- "machine": ("Machine", "",
""),
- "state": ("State", "",
""),
- "activity": ("Activity", "",
""),
- "name": ("Name", "",
""),
- "id": ("Slot_ID", "slotInfo_id",
"hidden_row")}
+ display_names = {"JobId": ("Job ID", "",
""),
+ "System": ("System", "",
""),
+ "Machine": ("Machine", "",
""),
+ "State": ("State", "",
""),
+ "Activity": ("Activity", "",
""),
+ "Name": ("Name", "",
""),
+ "_id": ("Slot_ID", "slotInfo_id",
"hidden_row")}
def __init__(self, app, name):
super(SlotMap.SlotInfo, self).__init__(app, name)
Modified: mgmt/newdata/cumin/python/cumin/grid/slot.strings
===================================================================
--- mgmt/newdata/cumin/python/cumin/grid/slot.strings 2010-05-11 20:55:59 UTC (rev 3963)
+++ mgmt/newdata/cumin/python/cumin/grid/slot.strings 2010-05-12 19:15:57 UTC (rev 3964)
@@ -1,19 +1,18 @@
[SlotDataSet.sql]
select
- s.id,
- s.name,
- s.pool,
- s.machine,
- s.system,
- s.job_id,
- s.accounting_group,
- s.op_sys,
- s.arch,
- s.activity,
- s.state,
- c.load_avg
-from slot as s
-left outer join slot_stats as c on c.id = s.stats_curr_id
+ _id,
+ "Name",
+ "Pool",
+ "Machine",
+ "System",
+ "JobId",
+ "AccountingGroup",
+ "OpSys",
+ "Arch",
+ "Activity",
+ "State",
+ "LoadAvg"
+from "mrg.grid"."Slot"
{sql_where}
{sql_order_by}
{sql_limit}
Modified: mgmt/newdata/cumin/python/cumin/parameters.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/parameters.py 2010-05-11 20:55:59 UTC (rev 3963)
+++ mgmt/newdata/cumin/python/cumin/parameters.py 2010-05-12 19:15:57 UTC (rev 3964)
@@ -11,7 +11,7 @@
return login.user
class ObjectAssociateAttribute(Attribute):
- def __init__(self, app, name, object):
+ def __init__(self, app, name, object, cls):
super(ObjectAssociateAttribute, self).__init__(app, name)
self.object = object
@@ -165,20 +165,20 @@
return Pool(string)
def do_marshal(self, pool):
- return str(pool.id)
+ return str(pool._id)
-class PoolCollectorAttribute(ObjectAssociateAttribute):
- def get_associate(self, session, pool):
- return pool.get_collector()
+class CollectorGridAttribute(ObjectAssociateAttribute):
+ def get_associate(self, session, collector):
+ cls = self.app.model.mrg_grid.Grid
+ grid = cls.get_object(session.cursor, Pool=collector.Pool)
+ return grid
-class PoolGridAttribute(ObjectAssociateAttribute):
- def get_associate(self, session, pool):
- return pool.get_grid()
+class CollectorNegotiatorAttribute(ObjectAssociateAttribute):
+ def get_associate(self, session, collector):
+ cls = self.app.model.mrg_grid.Negotiator
+ negotiator = cls.get_object(session.cursor, Pool=collector.Pool)
+ return negotiator
-class PoolNegotiatorAttribute(ObjectAssociateAttribute):
- def get_associate(self, session, pool):
- return pool.get_negotiator()
-
class QueueParameter(Parameter):
def do_unmarshal(self, string):
return Queue.get(int(string))