Author: eallen
Date: 2008-09-03 16:15:49 -0400 (Wed, 03 Sep 2008)
New Revision: 2399
Modified:
mgmt/trunk/cumin/python/cumin/job.py
mgmt/trunk/cumin/python/cumin/job.strings
Log:
Refactor JobEditAds to avoid unnessary middle classes
Add scheduler column to jobset
Modified: mgmt/trunk/cumin/python/cumin/job.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/job.py 2008-09-03 20:12:35 UTC (rev 2398)
+++ mgmt/trunk/cumin/python/cumin/job.py 2008-09-03 20:15:49 UTC (rev 2399)
@@ -11,7 +11,7 @@
from parameters import *
from formats import *
from util import *
-#from scheduler import *
+from scheduler import *
#from submitter import *
from system import *
@@ -38,8 +38,8 @@
#col = self.SubmitterColumn(app, "submitter")
#self.add_hidden_column(col)
- #col = self.SchedulerColumn(app, "scheduler")
- #self.add_hidden_column(col)
+ col = self.SchedulerColumn(app, "scheduler")
+ self.add_hidden_column(col)
col = self.ClusterIdColumn(app, "cluster_id")
col.alignment = "right"
@@ -127,15 +127,15 @@
# self.frame.show_job(branch, job).show_view(branch)
# return fmt_olink(branch, job, name=data["submitter"])
-# class SchedulerColumn(SqlTableColumn):
-# def render_title(self, session, data):
-# return "Scheduler"
-#
-# def render_content(self, session, data):
-# job = Identifiable(data["id"])
-# branch = session.branch()
-# self.frame.show_job(branch, job).show_view(branch)
-# return fmt_olink(branch, job, name=data["scheduler"])
+ class SchedulerColumn(SqlTableColumn):
+ def render_title(self, session, data):
+ return "Scheduler"
+
+ def render_content(self, session, data):
+ scheduler = Identifiable(data["scheduler_id"])
+ branch = session.branch()
+ self.frame.show_scheduler(branch, scheduler).show_view(branch)
+ return fmt_olink(branch, scheduler, name=data["scheduler"])
class CommandColumn(SqlTableColumn):
def render_title(self, session, data):
@@ -168,8 +168,8 @@
self.__edit_ads = JobEditAds(app, "editads")
self.add_mode(self.__edit_ads)
- #self.__scheduler = SchedulerFrame(app, "scheduler")
- #self.add_mode(self.__scheduler)
+ self.__scheduler = SchedulerFrame(app, "scheduler")
+ self.add_mode(self.__scheduler)
#self.__submitter = SubmitterFrame(app, "submitter")
#self.add_mode(self.__submitter)
@@ -298,8 +298,110 @@
def render_title(self, session, job):
return "Ad"
+class JobAdsSet(PropertySet):
+ def __init__(self, app, name):
+ super(JobAdsSet, self).__init__(app, name, )
+# self.got_data = False
+ self.item_renderer = JobPropertyRenderer(self, "ad_html")
-class JobEditAds(CuminForm, CuminEditableProperties):
+ def get_args(self, session):
+ return self.frame.get_args(session)
+
+ def do_get_items(self, session, job):
+
+# def completion(status, args=None):
+# self.got_data = True
+#
+# ads = dict()
+# model = self.app.model
+# job.GetAd(model.data, completion, ads)
+# wait(self.got_data)
+
+ # stolen straight for qpid-tool
+ ads = {u'CondorPlatform': u'$CondorPlatform: I386-LINUX_RHEL5 $',
+ u'KillSig': u'SIGTERM',
+ u'TransferFiles': u'ONEXIT',
+ u'Requirements': u'(Arch == "INTEL") &&
(OpSys == "LINUX") && (Disk >= DiskUsage) && ((Memory * 1024)
>= ImageSize) && ((HasFileTransfer) || (TARGET.FileSystemDomain ==
MY.FileSystemDomain))',
+ u'ImageSize': 20,
+ u'TargetType': u'Machine',
+ u'OnExitHold': u'FALSE',
+ u'NumCkpts': 0,
+ u'PeriodicRelease': u'FALSE',
+ u'BufferBlockSize': 32768,
+ u'Environment': u'',
+ u'RootDir': u'/',
+ u'JobPrio': 0,
+ u'MinHosts': 1,
+ u'WantCheckpoint': u'FALSE',
+ u'CumulativeSuspensionTime': 0,
+ u'WantRemoteSyscalls': u'FALSE',
+ u'FileSystemDomain': u'mrg2.lab.bos.redhat.com',
+ u'GlobalJobId': u'mrg-test(a)#1219326763#1.0',
+ u'ExitStatus': 0,
+ u'WhenToTransferOutput': u'ON_EXIT',
+ u'CurrentHosts': 0,
+ u'ProcId': 0,
+ u'ImageSize_RAW': 20,
+ u'Iwd': u'/home/remote/mfarrell',
+ u'HoldReasonCode': 15,
+ u'NumSystemHolds': 0,
+ u'PeriodicHold': u'FALSE',
+ u'Args': u'100',
+ u'ClusterId': 1,
+ u'OnExitRemove': u'TRUE',
+ u'RemoteWallClockTime': 0,
+ u'HoldReason': u"submitted on hold at user's
request",
+ u'NiceUser': u'FALSE',
+ u'PeriodicRemove': u'FALSE',
+ u'UserLog': u'/home/remote/mfarrell/log.1.0',
+ u'MyType': u'Job',
+ u'WantRemoteIO': u'TRUE',
+ u'LocalUserCpu': 0,
+ u'BufferSize': 524288,
+ u'ScheddBday': 12059630,
+ u'CompletionDate': 0,
+ u'JobLeaseDuration': 1200,
+ u'LastSuspensionTime': 0,
+ u'NumRestarts': 0,
+ u'Err': u'/dev/null',
+ u'QDate': 11367211,
+ u'RemoteSysCpu': 0,
+ u'Cmd': u'/bin/sleep',
+ u'TransferOut': u'FALSE',
+ u'DiskUsage_RAW': 20,
+ u'ExecutableSize': 20,
+ u'Owner': u'mfarrell',
+ u'LeaveJobInQueue': u'FALSE',
+ u'JobStatus': 5,
+ u'ExecutableSize_RAW': 20,
+ u'JobUniverse': 5,
+ u'DiskUsage': 20,
+ u'EnteredCurrentStatus': 11367211,
+ u'TotalSuspensions': 0,
+ u'ShouldTransferFiles': u'IF_NEEDED',
+ u'NumCkpts_RAW': 0,
+ u'MaxHosts': 1,
+ u'CommittedTime': 0,
+ u'In': u'/dev/null',
+ u'CoreSize': 0,
+ u'Rank': 0,
+ u'RemoteUserCpu': 0,
+ u'User': u'mfarrell(a)mrg2.lab.bos.redhat.com',
+ u'LocalSysCpu': 0,
+ u'TransferErr': u'FALSE',
+ u'ExitBySignal': u'FALSE',
+ u'CondorVersion': u'$CondorVersion: 7.0.4 Aug 6 2008 BuildID:
RH-7.0.4-4.el5 $',
+ u'TransferIn': u'FALSE',
+ u'JobNotification': 0,
+ u'NumJobStarts': 0,
+ u'Out': u'/dev/null'}
+
+ cls = self.app.model.get_class_by_object(job)
+ keys = ads.keys()
+ keys.sort()
+ return [[x, ads[x], cls] for x in keys]
+
+class JobEditAds(CuminForm, JobAdsSet):
def __init__(self, app, name):
super(JobEditAds, self).__init__(app, name)
@@ -308,12 +410,8 @@
self.add_parameter(self.ads)
self.add_form_parameter(self.ads)
- self.__items = JobAdsSet(app, name)
- self.add_child(self.__items)
+ self.item_renderer = EditablePropertyRenderer(self, "property_html")
- self.props = CuminProperties(app, "properties")
- #self.add_child(props)
-
def get_args(self, session):
return self.frame.get_args(session)
@@ -328,7 +426,7 @@
keys.sort()
return [self.gen_item(x, ads[x]["value"], cls,
dtype=ads[x]["type"], error=ads[x]) for x in keys]
else:
- items = self.__items.do_get_items(session, job)
+ items = super(JobEditAds,self).do_get_items(session, job)
return [self.gen_item(x[0], x[1], cls) for x in items]
def gen_item(self, name, value, cls, dtype=None, error=None):
@@ -410,109 +508,6 @@
props = None
return name, value, props
-class JobAdsSet(PropertySet):
- def __init__(self, app, name):
- super(JobAdsSet, self).__init__(app, name, )
-# self.got_data = False
- self.item_renderer = JobPropertyRenderer(self, "ad_html")
-
- def get_args(self, session):
- return self.frame.get_args(session)
-
- def do_get_items(self, session, job):
-
-# def completion(status, args=None):
-# self.got_data = True
-#
-# ads = dict()
-# model = self.app.model
-# job.GetAd(model.data, completion, ads)
-# wait(self.got_data)
-
- # stolen straight for qpid-tool
- ads = {u'CondorPlatform': u'$CondorPlatform: I386-LINUX_RHEL5 $',
- u'KillSig': u'SIGTERM',
- u'TransferFiles': u'ONEXIT',
- u'Requirements': u'(Arch == "INTEL") &&
(OpSys == "LINUX") && (Disk >= DiskUsage) && ((Memory * 1024)
>= ImageSize) && ((HasFileTransfer) || (TARGET.FileSystemDomain ==
MY.FileSystemDomain))',
- u'ImageSize': 20,
- u'TargetType': u'Machine',
- u'OnExitHold': u'FALSE',
- u'NumCkpts': 0,
- u'PeriodicRelease': u'FALSE',
- u'BufferBlockSize': 32768,
- u'Environment': u'',
- u'RootDir': u'/',
- u'JobPrio': 0,
- u'MinHosts': 1,
- u'WantCheckpoint': u'FALSE',
- u'CumulativeSuspensionTime': 0,
- u'WantRemoteSyscalls': u'FALSE',
- u'FileSystemDomain': u'mrg2.lab.bos.redhat.com',
- u'GlobalJobId': u'mrg-test(a)#1219326763#1.0',
- u'ExitStatus': 0,
- u'WhenToTransferOutput': u'ON_EXIT',
- u'CurrentHosts': 0,
- u'ProcId': 0,
- u'ImageSize_RAW': 20,
- u'Iwd': u'/home/remote/mfarrell',
- u'HoldReasonCode': 15,
- u'NumSystemHolds': 0,
- u'PeriodicHold': u'FALSE',
- u'Args': u'100',
- u'ClusterId': 1,
- u'OnExitRemove': u'TRUE',
- u'RemoteWallClockTime': 0,
- u'HoldReason': u"submitted on hold at user's
request",
- u'NiceUser': u'FALSE',
- u'PeriodicRemove': u'FALSE',
- u'UserLog': u'/home/remote/mfarrell/log.1.0',
- u'MyType': u'Job',
- u'WantRemoteIO': u'TRUE',
- u'LocalUserCpu': 0,
- u'BufferSize': 524288,
- u'ScheddBday': 12059630,
- u'CompletionDate': 0,
- u'JobLeaseDuration': 1200,
- u'LastSuspensionTime': 0,
- u'NumRestarts': 0,
- u'Err': u'/dev/null',
- u'QDate': 11367211,
- u'RemoteSysCpu': 0,
- u'Cmd': u'/bin/sleep',
- u'TransferOut': u'FALSE',
- u'DiskUsage_RAW': 20,
- u'ExecutableSize': 20,
- u'Owner': u'mfarrell',
- u'LeaveJobInQueue': u'FALSE',
- u'JobStatus': 5,
- u'ExecutableSize_RAW': 20,
- u'JobUniverse': 5,
- u'DiskUsage': 20,
- u'EnteredCurrentStatus': 11367211,
- u'TotalSuspensions': 0,
- u'ShouldTransferFiles': u'IF_NEEDED',
- u'NumCkpts_RAW': 0,
- u'MaxHosts': 1,
- u'CommittedTime': 0,
- u'In': u'/dev/null',
- u'CoreSize': 0,
- u'Rank': 0,
- u'RemoteUserCpu': 0,
- u'User': u'mfarrell(a)mrg2.lab.bos.redhat.com',
- u'LocalSysCpu': 0,
- u'TransferErr': u'FALSE',
- u'ExitBySignal': u'FALSE',
- u'CondorVersion': u'$CondorVersion: 7.0.4 Aug 6 2008 BuildID:
RH-7.0.4-4.el5 $',
- u'TransferIn': u'FALSE',
- u'JobNotification': 0,
- u'NumJobStarts': 0,
- u'Out': u'/dev/null'}
-
- cls = self.app.model.get_class_by_object(job)
- keys = ads.keys()
- keys.sort()
- return [[x, ads[x], cls] for x in keys]
-
class JobAdsViewer(JobAdsSet):
def __init__(self, app, name):
super(JobAdsViewer, self).__init__(app, name)
@@ -667,7 +662,7 @@
self.set_default_column_name("global_job_id")
self.show_column("cmd")
#self.show_column("submitter")
- #self.show_column("scheduler")
+ self.show_column("scheduler")
self.show_column("job_status")
self.__remove = self.Remove(app, "remove", self)
Modified: mgmt/trunk/cumin/python/cumin/job.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/job.strings 2008-09-03 20:12:35 UTC (rev 2398)
+++ mgmt/trunk/cumin/python/cumin/job.strings 2008-09-03 20:15:49 UTC (rev 2399)
@@ -12,10 +12,13 @@
j.global_job_id,
/* j.owner as submitter, */
j.title,
+ s.name as scheduler,
+ j.scheduler_id,
j.cmd
from job as j
left outer join job_stats as c on c.id = j.stats_curr_id
left outer join job_stats as p on p.id = j.stats_prev_id
+left outer join scheduler as s on s.id = j.scheduler_id
{sql_where}
{sql_orderby}
{sql_limit}
@@ -175,3 +178,8 @@
{help} {submit} {cancel}
<div>{hidden_inputs}</div>
</form>
+
+[JobEditAds.property_html]
+<tr>
+ <th>{title}</th><td>{value}</td><td>{inline_help}</td>
+</tr>