Author: eallen
Date: 2008-10-03 14:24:52 -0400 (Fri, 03 Oct 2008)
New Revision: 2590
Modified:
mgmt/trunk/cumin/python/cumin/collector.py
mgmt/trunk/cumin/python/cumin/collector.strings
mgmt/trunk/cumin/python/cumin/job.py
mgmt/trunk/cumin/python/cumin/job.strings
mgmt/trunk/cumin/python/cumin/model.py
mgmt/trunk/cumin/python/cumin/negotiator.py
mgmt/trunk/cumin/python/cumin/negotiator.strings
mgmt/trunk/cumin/python/cumin/pool.py
mgmt/trunk/cumin/python/cumin/scheduler.py
mgmt/trunk/cumin/python/cumin/scheduler.strings
Log:
Adding Start/Stop methods to Scheduler, Collector, Negotiator
Using CustomId as default column for JobSet
Modified: mgmt/trunk/cumin/python/cumin/collector.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/collector.py 2008-10-03 15:56:12 UTC (rev 2589)
+++ mgmt/trunk/cumin/python/cumin/collector.py 2008-10-03 18:24:52 UTC (rev 2590)
@@ -16,15 +16,23 @@
strings = StringCatalog(__file__)
log = logging.getLogger("cumin.collector")
-class CollectorSet(CuminTable):
+class CollectorSet(CuminTable, Form):
def __init__(self, app, name):
super(CollectorSet, self).__init__(app, name)
+ self.ids = CheckboxIdColumn(app, "id")
+ self.add_column(self.ids)
+
col = self.NameColumn(app, "name")
self.add_column(col)
-
self.set_default_column(col)
+ self.__start = self.StartButton(app, "start")
+ self.add_child(self.__start)
+
+ self.__stop = self.StopButton(app, "stop")
+ self.add_child(self.__stop)
+
def render_title(self, session):
return "Collectors %s" % fmt_count(Collector.select().count())
@@ -38,6 +46,32 @@
self.frame.show_collector(branch, sub).show_view(branch)
return fmt_olink(branch, sub, name=data["name"])
+ class StartButton(FormButton):
+ def process_submit(self, session):
+ ids = self.parent.ids.get(session)
+ self.parent.ids.clear(session)
+
+ branch = session.branch()
+ frame = self.frame.show_colls_start(branch)
+ frame.ids.set(branch, ids)
+ self.page.set_redirect_url(session, branch.marshal())
+
+ def render_content(self, session):
+ return "Start"
+
+ class StopButton(FormButton):
+ def process_submit(self, session):
+ ids = self.parent.ids.get(session)
+ self.parent.ids.clear(session)
+
+ branch = session.branch()
+ frame = self.frame.show_colls_stop(branch)
+ frame.ids.set(branch, ids)
+ self.page.set_redirect_url(session, branch.marshal())
+
+ def render_content(self, session):
+ return "Stop"
+
class CollectorFrame(CuminFrame, JobSetFrame):
def __init__(self, app, name):
super(CollectorFrame, self).__init__(app, name)
@@ -70,3 +104,35 @@
class CollectorStatus(CuminStatus):
pass
+class CollectorStart(CuminBulkActionForm):
+ def render_title(self, session, *args):
+ return "Start Collector"
+
+ def render_form_heading(self, session, *args):
+ return ""
+
+ def render_item_content(self, session, id):
+ return "Start Collector '%s'" % Collector.get(id).Name
+
+ def process_item(self, session, item):
+ collector = Collector.get(item)
+ action = self.app.model.collector.start
+ action.invoke(collector)
+ self.process_cancel(session)
+
+class CollectorStop(CuminBulkActionForm):
+ def render_title(self, session, *args):
+ return "Stop Collector"
+
+ def render_form_heading(self, session, *args):
+ return ""
+
+ def render_item_content(self, session, id):
+ return "Stop Collector '%s'" % Collector.get(id).Name
+
+ def process_item(self, session, item):
+ collector = Collector.get(item)
+ action = self.app.model.collector.stop
+ action.invoke(collector)
+ self.process_cancel(session)
+
Modified: mgmt/trunk/cumin/python/cumin/collector.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/collector.strings 2008-10-03 15:56:12 UTC (rev 2589)
+++ mgmt/trunk/cumin/python/cumin/collector.strings 2008-10-03 18:24:52 UTC (rev 2590)
@@ -23,3 +23,26 @@
//throw new Error();
}
+
+[CollectorSet.html]
+<form id="{id}" method="post" action="?">
+
+ <div class="sactions">
+ <h2>Act on Selected Collectors:</h2>
+ {start} {stop}
+ </div>
+
+ <table class="mobjects">
+ <thead>
+ <tr>
+ <th class="setnav" colspan="{column_count}">
+ <div class="rfloat">{page}</div>
+ {count}
+ </th>
+ </tr>
+ <tr>{headers}</tr>
+ </thead>
+ <tbody>{items}</tbody>
+ </table>
+ <div>{hidden_inputs}</div>
+</form>
Modified: mgmt/trunk/cumin/python/cumin/job.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/job.py 2008-10-03 15:56:12 UTC (rev 2589)
+++ mgmt/trunk/cumin/python/cumin/job.py 2008-10-03 18:24:52 UTC (rev 2590)
@@ -15,18 +15,19 @@
strings = StringCatalog(__file__)
log = logging.getLogger("cumin.job")
-class JobSet(CuminTable):
+class JobSet(CuminTable, Form):
def __init__(self, app, name):
super(JobSet, self).__init__(app, name)
self.ids = CheckboxIdColumn(app, "id")
self.add_column(self.ids)
- col = self.GlobalJobIdColumn(app, "global_job_id")
+ col = self.CustomIdColumn(app, "custom_id")
self.add_column(col)
self.set_default_column(col)
- col = self.CustomIdColumn(app, "custom_id")
+ col = self.GlobalJobIdColumn(app, "global_job_id")
+ col.visible = False
self.add_column(col)
col = self.CommandColumn(app, "cmd")
@@ -113,6 +114,15 @@
def render_title(self, session, data):
return "Custom Id"
+ def render_content(self, session, data):
+ job = Identifiable(data["id"])
+ if data[self.name]:
+ branch = session.branch()
+ self.frame.show_job(branch, job).show_view(branch)
+ return fmt_olink(branch, job, name=data[self.name])
+ else:
+ return data[self.name] # none
+
class CustomPriorityColumn(SqlTableColumn):
def render_title(self, session, data):
return "Custom Priority"
@@ -178,12 +188,10 @@
def render_title(self, session, data):
return "Title"
-class JobTab(JobSet, Form):
+class JobTab(JobSet):
def __init__(self, app, name):
super(JobTab, self).__init__(app, name)
- self.set_default_column_name("global_job_id")
-
self.__remove = JobRemoveButton(app, "remove")
self.add_child(self.__remove)
@@ -414,8 +422,6 @@
def __init__(self, app, name):
super(JobGroupJobSet, self).__init__(app, name)
- self.set_default_column_name("global_job_id")
-
self.__remove = JobRemoveButton(app, "remove")
self.add_child(self.__remove)
@@ -870,38 +876,9 @@
self.job_output = "Unable to get file at %s. Reason: time
out" % file
except Exception, e:
self.job_output = "Unable to get file at %s. Reason: %s" %
(file, e)
- #self.job_output = self.get_fake_output()
return self.job_output and escape_entity(self.job_output)
- def get_fake_output(self):
- return """fcrawler.looksmart.com - - [26/Apr/2000:00:00:12 -0400]
"GET /contacts.html HTTP/1.0" 200 4595 "-"
"FAST-WebCrawler/2.1-pre2 (ashen(a)looksmart.net)"
-fcrawler.looksmart.com - - [26/Apr/2000:00:17:19 -0400] "GET /news/news.html
HTTP/1.0" 200 16716 "-" "FAST-WebCrawler/2.1-pre2
(ashen(a)looksmart.net)"
-
-ppp931.on.bellglobal.com - - [26/Apr/2000:00:16:12 -0400] "GET
/download/windows/asctab31.zip HTTP/1.0" 200 1540096
"http://www.htmlgoodies.com/downloads/freeware/webdevelopment/15.html"
"Mozilla/4.7 [en]C-SYMPA (Win95; U)"
-
-123.123.123.123 - - [26/Apr/2000:00:23:48 -0400] "GET /pics/wpaper.gif
HTTP/1.0" 200 6248 "http://www.jafsoft.com/asctortf/" "Mozilla/4.05
(Macintosh; I; PPC)"
-123.123.123.123 - - [26/Apr/2000:00:23:47 -0400] "GET /asctortf/ HTTP/1.0" 200
8130 "http://search.netscape.com/Computers/Data_Formats/Document/Text/RTF"
"Mozilla/4.05 (Macintosh; I; PPC)"
-123.123.123.123 - - [26/Apr/2000:00:23:48 -0400] "GET /pics/5star2000.gif
HTTP/1.0" 200 4005 "http://www.jafsoft.com/asctortf/" "Mozilla/4.05
(Macintosh; I; PPC)"
-123.123.123.123 - - [26/Apr/2000:00:23:50 -0400] "GET /pics/5star.gif HTTP/1.0"
200 1031 "http://www.jafsoft.com/asctortf/" "Mozilla/4.05 (Macintosh; I;
PPC)"
-123.123.123.123 - - [26/Apr/2000:00:23:51 -0400] "GET /pics/a2hlogo.jpg
HTTP/1.0" 200 4282 "http://www.jafsoft.com/asctortf/" "Mozilla/4.05
(Macintosh; I; PPC)"
-123.123.123.123 - - [26/Apr/2000:00:23:51 -0400] "GET
/cgi-bin/newcount?jafsof3&width=4&font=digital&noshow HTTP/1.0" 200 36
"http://www.jafsoft.com/asctortf/" "Mozilla/4.05 (Macintosh; I; PPC)"
-192.168.2.20 - - [28/Jul/2006:10:27:10 -0300] "GET /cgi-bin/try/ HTTP/1.0" 200
3395
-127.0.0.1 - - [28/Jul/2006:10:22:04 -0300] "GET / HTTP/1.0" 200 2216
-195.146.134.15 - - [20/Jan/2003:08:55:36 -0800] "GET /path/to/page.html
HTTP/1.0" 200 4649 "http://www.somedomain.com/020602/page.html"
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
-195.146.134.15 - - [20/Jan/2003:08:55:36 -0800] "GET /path/to/page.html
HTTP/1.0" 200 4649 "http://www.somedomain.com/020602/page.html"
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
-
-195.146.134.15 - - [20/Jan/2003:08:55:36 -0800] "GET /path/to/page.html
HTTP/1.0" 200 4649 "http://www.somedomain.com/020602/page.html"
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
-195.146.134.15 - - [20/Jan/2003:08:55:36 -0800] "GET /path/to/page.html
HTTP/1.0" 200 4649 "http://www.somedomain.com/020602/page.html"
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
-195.146.134.15 - - [20/Jan/2003:08:55:36 -0800] "GET /path/to/page.html
HTTP/1.0" 200 4649 "http://www.somedomain.com/020602/page.html"
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
-195.146.134.15 - - [20/Jan/2003:08:55:36 -0800] "GET /path/to/page.html
HTTP/1.0" 200 4649 "http://www.somedomain.com/020602/page.html"
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
-
-123.123.123.123 - - [26/Apr/2000:00:23:48 -0400] "GET /pics/5star2000.gif
HTTP/1.0" 200 4005 "http://www.jafsoft.com/asctortf/" "Mozilla/4.05
(Macintosh; I; PPC)"
-123.123.123.123 - - [26/Apr/2000:00:23:50 -0400] "GET /pics/5star.gif HTTP/1.0"
200 1031 "http://www.jafsoft.com/asctortf/" "Mozilla/4.05 (Macintosh; I;
PPC)"
-123.123.123.123 - - [26/Apr/2000:00:23:51 -0400] "GET /pics/a2hlogo.jpg
HTTP/1.0" 200 4282 "http://www.jafsoft.com/asctortf/" "Mozilla/4.05
(Macintosh; I; PPC)"
-123.123.123.123 - - [26/Apr/2000:00:23:51 -0400] "GET
/cgi-bin/newcount?jafsof3&width=4&font=digital&noshow HTTP/1.0" 200 36
"http://www.jafsoft.com/asctortf/" "Mozilla/4.05 (Macintosh; I; PPC)"
-192.168.2.20 - - [28/Jul/2006:10:27:10 -0300] "GET /cgi-bin/try/ HTTP/1.0" 200
3395"""
-
class FetchButton(FormButton):
def render_content(self, session):
return "Refresh"
@@ -1190,7 +1167,7 @@
return len(ids) > 1 and "Hold Jobs" or "Hold Job"
def render_item_content(self, session, id):
- return "Hold Job '%s'" % Job.get(id).GlobalJobId
+ return "Hold Job '%s'" % Job.get(id).CustomId
def render_reason_text(self, session, *args):
return "Hold Reason"
@@ -1207,7 +1184,7 @@
return len(ids) > 1 and "Release Jobs" or "Release Job"
def render_item_content(self, session, id):
- return "Release Job '%s'" % Job.get(id).GlobalJobId
+ return "Release Job '%s'" % Job.get(id).CustomId
def render_reason_text(self, session, *args):
return "Release Reason"
@@ -1224,7 +1201,7 @@
return len(ids) > 1 and "Remove Jobs" or "Remove Job"
def render_item_content(self, session, id):
- return "Remove Job '%s'" % Job.get(id).GlobalJobId
+ return "Remove Job '%s'" % Job.get(id).CustomId
def render_reason_text(self, session, *args):
return "Remove Reason"
Modified: mgmt/trunk/cumin/python/cumin/job.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/job.strings 2008-10-03 15:56:12 UTC (rev 2589)
+++ mgmt/trunk/cumin/python/cumin/job.strings 2008-10-03 18:24:52 UTC (rev 2590)
@@ -9,7 +9,6 @@
j.custom_id,
j.custom_priority,
j.job_status,
- j.global_job_id,
j.title,
s.name as scheduler,
b.name as submitter,
Modified: mgmt/trunk/cumin/python/cumin/model.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/model.py 2008-10-03 15:56:12 UTC (rev 2589)
+++ mgmt/trunk/cumin/python/cumin/model.py 2008-10-03 18:24:52 UTC (rev 2590)
@@ -1828,7 +1828,7 @@
return "Job"
def get_object_name(self, job):
- return job.GlobalJobId
+ return job.CustomId
def show_object(self, session, job):
frame = self.get_pool_frame(session)
@@ -1993,23 +1993,54 @@
stat = CuminStat(self, "TotalRemovedJobs")
stat.title = "Removed Jobs"
+ action = self.Start(self, "start")
+ action.summary = True
+
+ action = self.Stop(self, "stop")
+ action.summary = True
+
def get_title(self, session):
return "Scheduler"
def get_object_name(self, sched):
return sched.Name
+ def get_pool_frame(self, session):
+ frame = self.cumin_model.show_main(session)
+ return frame.children_by_name["pool"]
+
def show_object(self, session, sched):
- # XXX temporary solution
- for pool in Pool.selectBy(name="main"):
- break
+ frame = self.get_pool_frame(session)
+ return frame.show_scheduler(session, sched).show_view(session)
+
+ class Start(CuminAction):
+ def show(self, session, sched):
+ frame = self.cumin_class.get_pool_frame(session)
+ frame = frame.show_scheds_start(session)
+ ids = [sched.id]
+ frame.ids.set(session, ids)
+ return frame
+
+ def get_title(self, session):
+ return "Start"
- frame = self.cumin_model.show_main(session)
- frame = frame.show_pool(session, pool)
- frame = frame.show_scheduler(session, sched).show_view(session)
+ def do_invoke(self, scheduler, args, completion):
+ scheduler.Start(self.cumin_model.data, completion)
+
+ class Stop(CuminAction):
+ def show(self, session, sched):
+ frame = self.cumin_class.get_pool_frame(session)
+ frame = frame.show_scheds_stop(session)
+ ids = [sched.id]
+ frame.ids.set(session, ids)
+ return frame
+
+ def get_title(self, session):
+ return "Stop"
- return frame
-
+ def do_invoke(self, scheduler, args, completion):
+ scheduler.Stop(self.cumin_model.data, completion)
+
class CuminSubmitter(RemoteClass):
def __init__(self, model):
super(CuminSubmitter, self).__init__(model, "submitter",
@@ -2055,19 +2086,54 @@
prop = CuminProperty(self, "PublicNetworkIpAddr")
prop.title = "IP Address"
+ action = self.Start(self, "start")
+ action.summary = True
+
+ action = self.Stop(self, "stop")
+ action.summary = True
+
+ def get_pool_frame(self, session):
+ frame = self.cumin_model.show_main(session)
+ return frame.children_by_name["pool"]
+
+ def show_object(self, session, coll):
+ frame = self.get_pool_frame(session)
+ return frame.show_collector(session, coll).show_view(session)
+
def get_title(self, session):
return "Collector"
def get_object_name(self, coll):
return coll.Name
- def show_object(self, session, coll):
- frame = self.cumin_model.show_main(session)
- frame = frame.children_by_name["pool"]
- frame = frame.show_collector(session, coll).show_view(session)
+ class Start(CuminAction):
+ def show(self, session, collector):
+ frame = self.cumin_class.get_pool_frame(session)
+ frame = frame.show_colls_start(session)
+ ids = [collector.id]
+ frame.ids.set(session, ids)
+ return frame
+
+ def get_title(self, session):
+ return "Start"
- return frame
+ def do_invoke(self, collector, args, completion):
+ collector.Start(self.cumin_model.data, completion)
+
+ class Stop(CuminAction):
+ def show(self, session, collector):
+ frame = self.cumin_class.get_pool_frame(session)
+ frame = frame.show_colls_stop(session)
+ ids = [collector.id]
+ frame.ids.set(session, ids)
+ return frame
+
+ def get_title(self, session):
+ return "Stop"
+ def do_invoke(self, collector, args, completion):
+ collector.Stop(self.cumin_model.data, completion)
+
class CuminNegotiator(RemoteClass):
def __init__(self, model):
super(CuminNegotiator, self).__init__(model, "negotiator",
@@ -2100,19 +2166,54 @@
stat = CuminStat(self, "MonitorSelfTime")
stat.title = "Time"
+ action = self.Start(self, "start")
+ action.summary = True
+
+ action = self.Stop(self, "stop")
+ action.summary = True
+
def get_title(self, session):
return "Negotiator"
def get_object_name(self, neg):
return neg.Name
+ def get_pool_frame(self, session):
+ frame = self.cumin_model.show_main(session)
+ return frame.children_by_name["pool"]
+
def show_object(self, session, neg):
- frame = self.cumin_model.show_main(session)
- frame = frame.children_by_name["pool"]
- frame = frame.show_negotiator(session, neg).show_view(session)
+ frame = self.get_pool_frame(session)
+ return frame.show_negotiator(session, neg).show_view(session)
- return frame
+ class Start(CuminAction):
+ def show(self, session, neg):
+ frame = self.cumin_class.get_pool_frame(session)
+ frame = frame.show_negs_start(session)
+ ids = [neg.id]
+ frame.ids.set(session, ids)
+ return frame
+
+ def get_title(self, session):
+ return "Start"
+ def do_invoke(self, negotiator, args, completion):
+ negotiator.Start(self.cumin_model.data, completion)
+
+ class Stop(CuminAction):
+ def show(self, session, neg):
+ frame = self.cumin_class.get_pool_frame(session)
+ frame = frame.show_negs_stop(session)
+ ids = [neg.id]
+ frame.ids.set(session, ids)
+ return frame
+
+ def get_title(self, session):
+ return "Stop"
+
+ def do_invoke(self, negotiator, args, completion):
+ negotiator.Stop(self.cumin_model.data, completion)
+
class ModelPage(Page):
def __init__(self, app, name):
super(ModelPage, self).__init__(app, name)
Modified: mgmt/trunk/cumin/python/cumin/negotiator.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/negotiator.py 2008-10-03 15:56:12 UTC (rev 2589)
+++ mgmt/trunk/cumin/python/cumin/negotiator.py 2008-10-03 18:24:52 UTC (rev 2590)
@@ -16,15 +16,26 @@
strings = StringCatalog(__file__)
log = logging.getLogger("cumin.negotiator")
-class NegotiatorSet(CuminTable):
+class NegotiatorSet(CuminTable, Form):
def __init__(self, app, name):
super(NegotiatorSet, self).__init__(app, name)
+ self.ids = CheckboxIdColumn(app, "id")
+ self.add_column(self.ids)
+
col = self.NameColumn(app, "name")
self.add_column(col)
-
self.set_default_column(col)
+
+ col = self.StartedColumn(app, "started")
+ self.add_column(col)
+ self.__start = self.StartButton(app, "start")
+ self.add_child(self.__start)
+
+ self.__stop = self.StopButton(app, "stop")
+ self.add_child(self.__stop)
+
def render_title(self, session):
return "Negotiators %s" % fmt_count(Negotiator.select().count())
@@ -38,6 +49,40 @@
self.frame.show_negotiator(branch, sub).show_view(branch)
return fmt_olink(branch, sub, name=data["name"])
+ class StartedColumn(SqlTableColumn):
+ def render_title(self, session, data):
+ return "Started"
+
+ def render_content(self, session, data):
+ started = data[self.name]
+ return started and "Yes" or "No"
+
+ class StartButton(FormButton):
+ def process_submit(self, session):
+ ids = self.parent.ids.get(session)
+ self.parent.ids.clear(session)
+
+ branch = session.branch()
+ frame = self.frame.show_negs_start(branch)
+ frame.ids.set(branch, ids)
+ self.page.set_redirect_url(session, branch.marshal())
+
+ def render_content(self, session):
+ return "Start"
+
+ class StopButton(FormButton):
+ def process_submit(self, session):
+ ids = self.parent.ids.get(session)
+ self.parent.ids.clear(session)
+
+ branch = session.branch()
+ frame = self.frame.show_negs_stop(branch)
+ frame.ids.set(branch, ids)
+ self.page.set_redirect_url(session, branch.marshal())
+
+ def render_content(self, session):
+ return "Stop"
+
class NegotiatorFrame(CuminFrame, JobSetFrame):
def __init__(self, app, name):
super(NegotiatorFrame, self).__init__(app, name)
@@ -49,7 +94,6 @@
self.add_mode(view)
self.set_view_mode(view)
-
class NegotiatorView(CuminView):
def __init__(self, app, name):
super(NegotiatorView, self).__init__(app, name)
@@ -70,3 +114,35 @@
class NegotiatorStatus(CuminStatus):
pass
+class NegStart(CuminBulkActionForm):
+ def render_title(self, session, *args):
+ return "Start Negotiator"
+
+ def render_form_heading(self, session, *args):
+ return ""
+
+ def render_item_content(self, session, id):
+ return "Start Negotiator '%s'" % Negotiator.get(id).Name
+
+ def process_item(self, session, item):
+ negotiator = Negotiator.get(item)
+ action = self.app.model.negotiator.start
+ action.invoke(negotiator)
+ self.process_cancel(session)
+
+class NegStop(CuminBulkActionForm):
+ def render_title(self, session, *args):
+ return "Stop Negotiator"
+
+ def render_form_heading(self, session, *args):
+ return ""
+
+ def render_item_content(self, session, id):
+ return "Stop Negotiator '%s'" % Negotiator.get(id).Name
+
+ def process_item(self, session, item):
+ negotiator = Negotiator.get(item)
+ action = self.app.model.negotiator.stop
+ action.invoke(negotiator)
+ self.process_cancel(session)
+
Modified: mgmt/trunk/cumin/python/cumin/negotiator.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/negotiator.strings 2008-10-03 15:56:12 UTC (rev 2589)
+++ mgmt/trunk/cumin/python/cumin/negotiator.strings 2008-10-03 18:24:52 UTC (rev 2590)
@@ -1,7 +1,8 @@
[NegotiatorSet.sql]
select
n.id,
- n.name
+ n.name,
+ n.daemon_start_time as started
from negotiator as n
[NegotiatorSet.count_sql]
@@ -23,3 +24,26 @@
//throw new Error();
}
+
+[NegotiatorSet.html]
+<form id="{id}" method="post" action="?">
+
+ <div class="sactions">
+ <h2>Act on Selected Negotiators:</h2>
+ {start} {stop}
+ </div>
+
+ <table class="mobjects">
+ <thead>
+ <tr>
+ <th class="setnav" colspan="{column_count}">
+ <div class="rfloat">{page}</div>
+ {count}
+ </th>
+ </tr>
+ <tr>{headers}</tr>
+ </thead>
+ <tbody>{items}</tbody>
+ </table>
+ <div>{hidden_inputs}</div>
+</form>
Modified: mgmt/trunk/cumin/python/cumin/pool.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/pool.py 2008-10-03 15:56:12 UTC (rev 2589)
+++ mgmt/trunk/cumin/python/cumin/pool.py 2008-10-03 18:24:52 UTC (rev 2590)
@@ -12,10 +12,10 @@
from formats import *
from util import *
from job import *
-from scheduler import SchedulerSet, SchedulerFrame
+from scheduler import SchedulerSet, SchedulerFrame, SchedulerStart, SchedulerStop
from submitter import SubmitterSet, SubmitterFrame
-from collector import CollectorSet, CollectorFrame
-from negotiator import NegotiatorSet, NegotiatorFrame
+from collector import CollectorSet, CollectorFrame, CollectorStart, CollectorStop
+from negotiator import NegotiatorSet, NegotiatorFrame, NegStart, NegStop
from limits import LimitsSet, LimitsFrame
strings = StringCatalog(__file__)
@@ -95,6 +95,24 @@
self.__neg = NegotiatorFrame(app, "neg")
self.add_mode(self.__neg)
+ self.__startneg = NegStart(app, "startneg")
+ self.add_mode(self.__startneg)
+
+ self.__stopneg = NegStop(app, "stopneg")
+ self.add_mode(self.__stopneg)
+
+ self.__startcoll = CollectorStart(app, "startcoll")
+ self.add_mode(self.__startcoll)
+
+ self.__stopcoll = CollectorStop(app, "stopcoll")
+ self.add_mode(self.__stopcoll)
+
+ self.__startsched = SchedulerStart(app, "startsched")
+ self.add_mode(self.__startsched)
+
+ self.__stopsched = SchedulerStop(app, "stopsched")
+ self.add_mode(self.__stopsched)
+
self.__jobs_hold = JobSetHold(app, "jobshold")
self.add_mode(self.__jobs_hold)
@@ -154,6 +172,30 @@
self.page.set_current_frame(session, self.__neg)
return self.show_mode(session, self.__neg)
+ def show_negs_start(self, session):
+ self.page.set_current_frame(session, self.__startneg)
+ return self.show_mode(session, self.__startneg)
+
+ def show_negs_stop(self, session):
+ self.page.set_current_frame(session, self.__stopneg)
+ return self.show_mode(session, self.__stopneg)
+
+ def show_scheds_start(self, session):
+ self.page.set_current_frame(session, self.__startsched)
+ return self.show_mode(session, self.__startsched)
+
+ def show_scheds_stop(self, session):
+ self.page.set_current_frame(session, self.__stopsched)
+ return self.show_mode(session, self.__stopsched)
+
+ def show_colls_start(self, session):
+ self.page.set_current_frame(session, self.__startcoll)
+ return self.show_mode(session, self.__startcoll)
+
+ def show_colls_stop(self, session):
+ self.page.set_current_frame(session, self.__stopcoll)
+ return self.show_mode(session, self.__stopcoll)
+
def show_jobs_hold(self, session):
self.page.set_current_frame(session, self.__jobs_hold)
return self.show_mode(session, self.__jobs_hold)
@@ -224,3 +266,4 @@
class PoolStatus(CuminStatus):
def render_status(self, session, pool):
return "Active"
+
Modified: mgmt/trunk/cumin/python/cumin/scheduler.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/scheduler.py 2008-10-03 15:56:12 UTC (rev 2589)
+++ mgmt/trunk/cumin/python/cumin/scheduler.py 2008-10-03 18:24:52 UTC (rev 2590)
@@ -16,15 +16,23 @@
strings = StringCatalog(__file__)
log = logging.getLogger("cumin.scheduler")
-class SchedulerSet(CuminTable):
+class SchedulerSet(CuminTable, Form):
def __init__(self, app, name):
super(SchedulerSet, self).__init__(app, name)
+ self.ids = CheckboxIdColumn(app, "id")
+ self.add_column(self.ids)
+
col = self.NameColumn(app, "name")
self.add_column(col)
-
self.set_default_column(col)
+ self.__start = self.StartButton(app, "start")
+ self.add_child(self.__start)
+
+ self.__stop = self.StopButton(app, "stop")
+ self.add_child(self.__stop)
+
def render_title(self, session):
return "Schedulers %s" % fmt_count(Scheduler.select().count())
@@ -38,6 +46,32 @@
self.frame.show_scheduler(branch, sched).show_view(branch)
return fmt_olink(branch, sched, name=data["name"])
+ class StartButton(FormButton):
+ def process_submit(self, session):
+ ids = self.parent.ids.get(session)
+ self.parent.ids.clear(session)
+
+ branch = session.branch()
+ frame = self.frame.show_scheds_start(branch)
+ frame.ids.set(branch, ids)
+ self.page.set_redirect_url(session, branch.marshal())
+
+ def render_content(self, session):
+ return "Start"
+
+ class StopButton(FormButton):
+ def process_submit(self, session):
+ ids = self.parent.ids.get(session)
+ self.parent.ids.clear(session)
+
+ branch = session.branch()
+ frame = self.frame.show_scheds_stop(branch)
+ frame.ids.set(branch, ids)
+ self.page.set_redirect_url(session, branch.marshal())
+
+ def render_content(self, session):
+ return "Stop"
+
class SchedulerFrame(CuminFrame, JobSetFrame):
def __init__(self, app, name):
super(SchedulerFrame, self).__init__(app, name)
@@ -126,3 +160,35 @@
where_scheduler = "scheduler_id = %i" % scheduler.id
return "Jobs %s" % fmt_count(Job.select(where_scheduler).count())
+class SchedulerStart(CuminBulkActionForm):
+ def render_title(self, session, *args):
+ return "Start Scheduler"
+
+ def render_form_heading(self, session, *args):
+ return ""
+
+ def render_item_content(self, session, id):
+ return "Start Scheduler '%s'" % Scheduler.get(id).Name
+
+ def process_item(self, session, item):
+ scheduler = Scheduler.get(item)
+ action = self.app.model.scheduler.start
+ action.invoke(scheduler)
+ self.process_cancel(session)
+
+class SchedulerStop(CuminBulkActionForm):
+ def render_title(self, session, *args):
+ return "Stop Scheduler"
+
+ def render_form_heading(self, session, *args):
+ return ""
+
+ def render_item_content(self, session, id):
+ return "Stop Scheduler '%s'" % Scheduler.get(id).Name
+
+ def process_item(self, session, item):
+ scheduler = Scheduler.get(item)
+ action = self.app.model.scheduler.stop
+ action.invoke(scheduler)
+ self.process_cancel(session)
+
Modified: mgmt/trunk/cumin/python/cumin/scheduler.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/scheduler.strings 2008-10-03 15:56:12 UTC (rev 2589)
+++ mgmt/trunk/cumin/python/cumin/scheduler.strings 2008-10-03 18:24:52 UTC (rev 2590)
@@ -24,6 +24,29 @@
//throw new Error();
}
+[SchedulerSet.html]
+<form id="{id}" method="post" action="?">
+
+ <div class="sactions">
+ <h2>Act on Selected Schedulers:</h2>
+ {start} {stop}
+ </div>
+
+ <table class="mobjects">
+ <thead>
+ <tr>
+ <th class="setnav" colspan="{column_count}">
+ <div class="rfloat">{page}</div>
+ {count}
+ </th>
+ </tr>
+ <tr>{headers}</tr>
+ </thead>
+ <tbody>{items}</tbody>
+ </table>
+ <div>{hidden_inputs}</div>
+</form>
+
[SchedulerStats.html]
<table class="twocol">
<tbody>