Author: justi9
Date: 2008-09-02 14:45:22 -0400 (Tue, 02 Sep 2008)
New Revision: 2382
Added:
mgmt/trunk/cumin/python/cumin/submitter.py
mgmt/trunk/cumin/python/cumin/submitter.strings
Modified:
mgmt/trunk/cumin/python/cumin/model.py
mgmt/trunk/cumin/python/cumin/parameters.py
mgmt/trunk/cumin/python/cumin/pool.py
Log:
Add basic submitter UI
Modified: mgmt/trunk/cumin/python/cumin/model.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/model.py 2008-09-02 18:19:54 UTC (rev 2381)
+++ mgmt/trunk/cumin/python/cumin/model.py 2008-09-02 18:45:22 UTC (rev 2382)
@@ -41,6 +41,7 @@
# Grid
CuminScheduler(self)
+ CuminSubmitter(self)
CuminPool(self)
@@ -1488,6 +1489,40 @@
return frame
+class CuminSubmitter(RemoteClass):
+ def __init__(self, model):
+ super(CuminSubmitter, self).__init__(model, "submitter",
+ Submitter, SubmitterStats)
+
+ prop = CuminProperty(self, "Name")
+ prop.title = "Name"
+
+ stat = CuminStat(self, "RunningJobs")
+ stat.title = "Running Jobs"
+
+ stat = CuminStat(self, "IdleJobs")
+ stat.title = "Idle Jobs"
+
+ stat = CuminStat(self, "HeldJobs")
+ stat.title = "Held Jobs"
+
+ def get_title(self, session):
+ return "Submitter"
+
+ def get_object_name(self, sub):
+ return sub.Name
+
+ def show_object(self, session, sub):
+ # XXX temporary solution
+ for pool in Pool.selectBy(name="main"):
+ break
+
+ frame = self.cumin_model.show_main(session)
+ frame = frame.show_pool(session, pool)
+ frame = frame.show_submitter(session, sub).show_view(session)
+
+ return frame
+
class ModelPage(Page):
def __init__(self, app, name):
super(ModelPage, self).__init__(app, name)
Modified: mgmt/trunk/cumin/python/cumin/parameters.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/parameters.py 2008-09-02 18:19:54 UTC (rev 2381)
+++ mgmt/trunk/cumin/python/cumin/parameters.py 2008-09-02 18:45:22 UTC (rev 2382)
@@ -100,6 +100,13 @@
def do_marshal(self, session):
return str(session.id)
+class SubmitterParameter(Parameter):
+ def do_unmarshal(self, string):
+ return Submitter.get(int(string))
+
+ def do_marshal(self, sub):
+ return str(sub.id)
+
class SystemParameter(Parameter):
def do_unmarshal(self, string):
return System.get(int(string))
Modified: mgmt/trunk/cumin/python/cumin/pool.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/pool.py 2008-09-02 18:19:54 UTC (rev 2381)
+++ mgmt/trunk/cumin/python/cumin/pool.py 2008-09-02 18:45:22 UTC (rev 2382)
@@ -13,6 +13,7 @@
from util import *
from job import JobSet
from scheduler import SchedulerSet, SchedulerFrame
+from submitter import SubmitterSet, SubmitterFrame
strings = StringCatalog(__file__)
log = logging.getLogger("cumin.pool")
@@ -53,6 +54,9 @@
self.__sched = SchedulerFrame(app, "sched")
self.add_mode(self.__sched)
+ self.__sub = SubmitterFrame(app, "sub")
+ self.add_mode(self.__sub)
+
def show_job(self, session, job):
return self
@@ -61,6 +65,11 @@
self.page.set_current_frame(session, self.__sched)
return self.show_mode(session, self.__sched)
+ def show_submitter(self, session, sub):
+ self.__sub.set_object(session, sub)
+ self.page.set_current_frame(session, self.__sub)
+ return self.show_mode(session, self.__sub)
+
class PoolView(CuminView):
def __init__(self, app, name):
super(PoolView, self).__init__(app, name)
@@ -77,12 +86,18 @@
scheds = self.SchedulersTab(app, "scheds")
self.__tabs.add_tab(scheds)
+ subs = self.SubmittersTab(app, "subs")
+ self.__tabs.add_tab(subs)
+
class JobsTab(JobSet):
pass
class SchedulersTab(SchedulerSet):
pass
+ class SubmittersTab(SubmitterSet):
+ pass
+
class PoolStatus(CuminStatus):
pass
Added: mgmt/trunk/cumin/python/cumin/submitter.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/submitter.py (rev 0)
+++ mgmt/trunk/cumin/python/cumin/submitter.py 2008-09-02 18:45:22 UTC (rev 2382)
@@ -0,0 +1,95 @@
+import logging
+
+from wooly import *
+from wooly.widgets import *
+from wooly.forms import *
+from wooly.resources import *
+from wooly.tables import *
+
+from stat import *
+from widgets import *
+from parameters import *
+from formats import *
+from util import *
+
+strings = StringCatalog(__file__)
+log = logging.getLogger("cumin.submitter")
+
+class SubmitterSet(CuminTable):
+ def __init__(self, app, name):
+ super(SubmitterSet, self).__init__(app, name)
+
+ col = self.NameColumn(app, "name")
+ self.add_column(col)
+
+ self.set_default_column(col)
+
+ def render_title(self, session):
+ return "Submitters %s" % fmt_count(Submitter.select().count())
+
+ class NameColumn(SqlTableColumn):
+ def render_title(self, session, data):
+ return "Name"
+
+ def render_content(self, session, data):
+ sub = Identifiable(data["id"])
+ branch = session.branch()
+ self.frame.show_submitter(branch, sub).show_view(branch)
+ return fmt_olink(branch, sub, name=data["name"])
+
+class SubmitterFrame(CuminFrame):
+ def __init__(self, app, name):
+ super(SubmitterFrame, self).__init__(app, name)
+
+ self.object = SubmitterParameter(app, "id")
+ self.add_parameter(self.object)
+
+ view = SubmitterView(app, "view")
+ self.add_mode(view)
+ self.set_view_mode(view)
+
+class SubmitterView(CuminView):
+ def __init__(self, app, name):
+ super(SubmitterView, self).__init__(app, name)
+
+ status = SubmitterStatus(app, "status")
+ self.add_child(status)
+
+ self.__tabs = TabbedModeSet(app, "tabs")
+ self.add_child(self.__tabs)
+
+ stats = SubmitterStats(app, "stats")
+ self.__tabs.add_tab(stats)
+
+ details = CuminDetails(app, "details")
+ self.__tabs.add_tab(details)
+
+ def render_script(self, session, sched):
+ data = "model.xml?class=scheduler;id=%i" % sched.id
+ return "wooly.setIntervalUpdate('%s', updateSubmitter, 3000)" %
data
+
+class SubmitterStatus(CuminStatus):
+ pass
+
+class SubmitterStats(Widget):
+ def __init__(self, app, name):
+ super(SubmitterStats, self).__init__(app, name)
+
+ stats = StatSet(app, "general", "general")
+ self.add_child(stats)
+
+ chart = self.JobsChart(app, "jobs")
+ self.add_child(chart)
+
+ def render_title(self, session):
+ return "Statistics"
+
+ class JobsChart(StatValueChart):
+ def __init__(self, app, name):
+ super(SubmitterStats.JobsChart, self).__init__ \
+ (app, name)
+
+ self.stats = ("RunningJobs", "IdleJobs",
"HeldJobs")
+
+ def render_title(self, session, sched):
+ return "Jobs"
Added: mgmt/trunk/cumin/python/cumin/submitter.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/submitter.strings (rev 0)
+++ mgmt/trunk/cumin/python/cumin/submitter.strings 2008-09-02 18:45:22 UTC (rev 2382)
@@ -0,0 +1,40 @@
+[SubmitterSet.sql]
+select
+ s.id,
+ s.name
+from submitter as s
+
+[SubmitterSet.count_sql]
+select count(*) from submitter
+
+[SubmitterView.javascript]
+function updateSubmitter(data) {
+ var model = data.objectify();
+ var subs = model.submitter;
+ var sub;
+
+ for (var key in subs) {
+ sub = subs[key];
+ break;
+ }
+
+ cumin.runModelListeners(model);
+ cumin.runObjectListeners(sub);
+
+ //throw new Error();
+}
+
+[SubmitterStats.html]
+<table class="twocol">
+ <tbody>
+ <tr>
+ <td>
+ <h2>General</h2>
+ {general}
+ </td>
+ <td>
+ {jobs}
+ </td>
+ </tr>
+ </tbody>
+</table>