Author: justi9
Date: 2009-08-24 11:01:44 -0400 (Mon, 24 Aug 2009)
New Revision: 3585
Added:
mgmt/trunk/cumin/resources/mrg-logo-32.png
Modified:
mgmt/trunk/cumin/python/cumin/grid/model.py
mgmt/trunk/cumin/python/cumin/grid/pool.py
mgmt/trunk/cumin/python/cumin/grid/pool.strings
mgmt/trunk/cumin/python/cumin/grid/scheduler.py
mgmt/trunk/cumin/python/cumin/grid/submission.py
mgmt/trunk/cumin/python/cumin/widgets.py
mgmt/trunk/cumin/python/cumin/widgets.strings
Log:
- Make the submission add form scheduler-agnostic
- For now, set the User attr on submissions, not Owner
- More graceful recovery from incomplete grid resource data
- Reorganize grid stats and charts a little
- Add a mrg-customized logo (just a stand-in for now)
- Clean up notification output
Modified: mgmt/trunk/cumin/python/cumin/grid/model.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/grid/model.py 2009-08-18 19:57:46 UTC (rev 3584)
+++ mgmt/trunk/cumin/python/cumin/grid/model.py 2009-08-24 15:01:44 UTC (rev 3585)
@@ -9,6 +9,8 @@
from collector import *
from negotiator import *
+from cumin.model import Pool
+
class SeePoolsTask(Task):
def get_title(self, session):
return "Create submission"
@@ -34,20 +36,27 @@
def get_title(self, session):
return "Create submission"
- def get_description(self, session, scheduler):
- return "Create submission to scheduler '%s'" % scheduler.Name
+ def get_description(self, session, pool):
+ return "Create submission"
+ #return "Create submission to pool '%s'" % pool.name
- def do_enter(self, session, scheduler):
- self.form.scheduler.set(session, scheduler)
+ def do_enter(self, session, pool):
+ assert isinstance(pool, Pool)
+ self.form.pool.set(session, pool)
+
+
def do_invoke(self, completion, session, scheduler, command, args):
+ user = session.user_session.subject.name
+
ad = {"Cmd": {"TYPE": self.STRING_TYPE,
"VALUE": command},
"Args": {"TYPE": self.STRING_TYPE,
"VALUE": args},
"Requirements": {"TYPE": self.EXPR_TYPE,
"VALUE": "TRUE"},
"JobUniverse": {"TYPE": self.INTEGER_TYPE,
"VALUE": "%s" %
(self.UNIVERSE["VANILLA"],)},
"Iwd": {"TYPE": self.STRING_TYPE,
"VALUE": "/tmp"},
- "Owner": {"TYPE": self.STRING_TYPE,
"VALUE": "nobody"}}
+ "User": {"TYPE": self.STRING_TYPE,
+ "VALUE": "%s(a)example.com" % user}}
scheduler.Submit(self.app.model.mint.model, completion, ad, None)
Modified: mgmt/trunk/cumin/python/cumin/grid/pool.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/grid/pool.py 2009-08-18 19:57:46 UTC (rev 3584)
+++ mgmt/trunk/cumin/python/cumin/grid/pool.py 2009-08-24 15:01:44 UTC (rev 3585)
@@ -154,6 +154,10 @@
self.pool = pool
+ task = main.module.submission_add
+ link = TaskLink(app, "add", task, self.pool)
+ self.links.add_child(link)
+
def render_sql_where(self, session):
return "where d.pool = %(pool)s"
@@ -315,15 +319,19 @@
def get_grid_args(self, session):
pool = self.frame.get_args(session)[0]
- return Grid.select("pool='%s'" % pool.id)
+ for grid in Grid.selectBy(Pool=pool.id):
+ return (grid,)
+
+ return ()
+
def render_grid_name(self, session):
grid = self.get_grid_args(session)[0]
return grid.Name
def render(self, session):
- grid = self.get_grid_args(session)
- if grid.count() > 0:
+ args = self.get_grid_args(session)
+ if len(args):
return super(PoolStats.GridStats, self).render(session)
class GridJobChart(StatFlashChart):
@@ -345,8 +353,9 @@
return self.parent.get_grid_args(session)
def render(self, session):
- grid = self.parent.get_grid_args(session)
- if grid.count() > 0:
+ args = self.parent.get_grid_args(session)
+
+ if len(args):
return super(PoolStats.GridStats.GridStatSet, self).render(session)
class PoolSlotMap(SlotMap):
Modified: mgmt/trunk/cumin/python/cumin/grid/pool.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/grid/pool.strings 2009-08-18 19:57:46 UTC (rev 3584)
+++ mgmt/trunk/cumin/python/cumin/grid/pool.strings 2009-08-24 15:01:44 UTC (rev 3585)
@@ -45,22 +45,21 @@
[PoolStats.html]
<div id="poolStats">
<div class="col1">
- <h2>Stats for Pool {pool_name}</h2>
+ <h2>Statistics</h2>
{slot_stats}
<div>{jobs}</div>
<div>{slots}</div>
+ {grid_stats}
</div>
<div class="col2">
<div>{pool_slot_map}</div>
- {grid_stats}
</div>
</div>
<div style="clear:left;"><!-- --></div>
[GridStats.html]
- <h2>Stats for Grid {grid_name}</h2>
- {stats}
- <blockquote>
- {jobs_chart}
- {submit_chart}
- </blockquote>
+<br/>
+<h2>External Cloud 'Amazon EC2'</h2>
+{stats}
+<div>{jobs_chart}</div>
+<div>{submit_chart}</div>
Modified: mgmt/trunk/cumin/python/cumin/grid/scheduler.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/grid/scheduler.py 2009-08-18 19:57:46 UTC (rev 3584)
+++ mgmt/trunk/cumin/python/cumin/grid/scheduler.py 2009-08-24 15:01:44 UTC (rev 3585)
@@ -86,6 +86,44 @@
href = self.page.main.inventory.system.get_href(session, sys)
return fmt_link(href, data["system_name"])
+class SchedulerSelectField(FormField):
+ def __init__(self, app, name, pool):
+ super(SchedulerSelectField, self).__init__(app, name)
+
+ assert isinstance(pool, PoolParameter)
+
+ self.pool = pool
+
+ self.param = SchedulerParameter(app, "param")
+ self.add_parameter(self.param)
+
+ self.schedulers = self.SchedulerOptions(app, "schedulers", self.param)
+ self.add_child(self.schedulers)
+
+ def get(self, session):
+ return self.param.get(session)
+
+ def render_title(self, session):
+ return "Scheduler"
+
+ def render_inputs(self, session):
+ return self.schedulers.render(session)
+
+ class SchedulerOptions(OptionInputSet):
+ def do_get_items(self, session):
+ pool = self.parent.pool.get(session)
+ return list(Scheduler.selectBy(Pool=pool.id))
+
+ def render_item_value(self, session, item):
+ return item.id
+
+ def render_item_content(self, session, item):
+ return item.Name
+
+ def render_item_selected_attr(self, session, item):
+ if item is self.param.get(session):
+ return "selected=\"selected\""
+
class SchedulerFrame(CuminFrame):
def __init__(self, app, name, pool):
super(SchedulerFrame, self).__init__(app, name)
Modified: mgmt/trunk/cumin/python/cumin/grid/submission.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/grid/submission.py 2009-08-18 19:57:46 UTC (rev 3584)
+++ mgmt/trunk/cumin/python/cumin/grid/submission.py 2009-08-24 15:01:44 UTC (rev 3585)
@@ -121,10 +121,15 @@
def __init__(self, app, name, task):
super(SubmissionAddForm, self).__init__(app, name)
+ self.pool = PoolParameter(app, "pool")
+ self.add_parameter(self.pool)
+
self.task = task
- self.scheduler = SchedulerParameter(app, "scheduler")
- self.add_parameter(self.scheduler)
+ from scheduler import SchedulerSelectField # XXX
+
+ self.scheduler = SchedulerSelectField(app, "scheduler", self.pool)
+ self.add_field(self.scheduler)
self.description = self.DescriptionField(app, "description")
self.description.input.size = 50
@@ -144,8 +149,8 @@
self.outputs = self.OutputsField(app, "outputs")
self.add_field(self.outputs)
- self.options = self.OptionsField(app, "options")
- self.add_field(self.options)
+ #self.options = self.OptionsField(app, "options")
+ #self.add_field(self.options)
def process_submit(self, session):
self.check(session)
@@ -160,8 +165,8 @@
self.task.exit_with_redirect(session, scheduler)
def render_title(self, session):
- scheduler = self.scheduler.get(session)
- return self.task.get_description(session, scheduler)
+ pool = self.pool.get(session)
+ return self.task.get_description(session, pool)
class TemplateField(FormField):
def __init__(self, app, name):
Modified: mgmt/trunk/cumin/python/cumin/widgets.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/widgets.py 2009-08-18 19:57:46 UTC (rev 3584)
+++ mgmt/trunk/cumin/python/cumin/widgets.py 2009-08-24 15:01:44 UTC (rev 3585)
@@ -1467,4 +1467,4 @@
code = str(item.status_code)
outs = str(item.output_args)
- return " | ".join((description, status, exc, code, outs))
+ return ": ".join((description, status))
Modified: mgmt/trunk/cumin/python/cumin/widgets.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/widgets.strings 2009-08-18 19:57:46 UTC (rev 3584)
+++ mgmt/trunk/cumin/python/cumin/widgets.strings 2009-08-24 15:01:44 UTC (rev 3585)
@@ -153,7 +153,7 @@
<a id="logout" onclick="wooly.clearUpdates()"
href="{logout_href}">Log Out</a>
</div>
- <img id="logo" src="resource?name=rhlogo-32.png"/>
+ <img id="logo" src="resource?name=mrg-logo-32.png"/>
<ul id="tabs">{tabs}</ul>
</div>
Added: mgmt/trunk/cumin/resources/mrg-logo-32.png
===================================================================
(Binary files differ)
Property changes on: mgmt/trunk/cumin/resources/mrg-logo-32.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream