Author: croberts
Date: 2013-02-01 21:13:38 +0000 (Fri, 01 Feb 2013)
New Revision: 5669
Added:
branches/elephant/cumin/python/cumin/gridhadoop/scheduler.py
Modified:
branches/elephant/cumin/python/cumin/gridhadoop/datanode.py
branches/elephant/cumin/python/cumin/gridhadoop/jobtracker.py
branches/elephant/cumin/python/cumin/gridhadoop/main.py
branches/elephant/cumin/python/cumin/gridhadoop/namenode.py
branches/elephant/cumin/python/cumin/gridhadoop/tasktracker.py
Log:
first pass at new UI page "schedulers" for grid-hadoop. In addition to being
necessary to let us work with a chosen scheduler in a multi schedd environment, it will be
more congruent with the regular grid interface and will make other top-level tabs
possible.
Modified: branches/elephant/cumin/python/cumin/gridhadoop/datanode.py
===================================================================
--- branches/elephant/cumin/python/cumin/gridhadoop/datanode.py 2013-01-30 17:56:34 UTC
(rev 5668)
+++ branches/elephant/cumin/python/cumin/gridhadoop/datanode.py 2013-02-01 21:13:38 UTC
(rev 5669)
@@ -49,7 +49,7 @@
def __init__(self, app, name, cls):
super(DataNodeTable, self).__init__(app, name, cls)
- self.id_col = self.DataNodeColumn(app, "idcol", cls.Id, cls.Id,
".datanodeframe")
+ self.id_col = self.DataNodeColumn(app, "idcol", cls.Id, cls.Id,
"datanodeframe")
self.sub_col = SubmittedColumn(app, "sub", cls.Submitted)
self.state_col = ObjectTableColumn(app, "statecol", cls.State)
self.uptime_col = UptimeColumn(app, "uptimecol", cls.Uptime)
@@ -66,9 +66,9 @@
id = unescape_entity(record[self.id_field.index])
#need to make this work for user/grid-hadoop path too somehow
# this is way less than ideal
- frame = self.page.page_widgets_by_path[self.path.rsplit(".", 11)[0]
+ self.frame_path]
- hadoop_schedulers = self.app.remote.get_hosts("SCHEDULER",
"HADOOP")
- return frame.get_href(session, id, hadoop_schedulers[0])
+ frame = self.frame.children_by_name[self.frame_path]
+
+ return frame.get_href(session, id, frame.parent.host.get(session))
class DataNodeDelete(ObjectSelectorTask):
def __init__(self, app, selector, name):
@@ -144,7 +144,7 @@
self.form.id.set(form_session, obj._id)
## TODO find a better way to do this
- self.form.nn_id.set(form_session,
self.app.gridhadoop.frame.children_by_name["gridhadoop.namenodeframe"].id.get(session))
+ self.form.nn_id.set(form_session,
self.app.gridhadoop.frame.children_by_name["gridhadoop.ghschedframe"].children_by_name["gridhadoop.ghschedframe.namenodeframe"].id.get(session))
self.form.return_url.set(form_session, session.marshal())
self.form.show(form_session)
Modified: branches/elephant/cumin/python/cumin/gridhadoop/jobtracker.py
===================================================================
--- branches/elephant/cumin/python/cumin/gridhadoop/jobtracker.py 2013-01-30 17:56:34 UTC
(rev 5668)
+++ branches/elephant/cumin/python/cumin/gridhadoop/jobtracker.py 2013-02-01 21:13:38 UTC
(rev 5669)
@@ -69,12 +69,8 @@
class JobTrackerColumn(ObjectLinkColumn):
def render_cell_href(self, session, record):
id = unescape_entity(record[self.id_field.index])
- #need to make this work for user/grid-hadoop path too somehow
- frame = self.page.page_widgets_by_path[self.path.rsplit(".", 7)[0]
+ self.frame_path]
-
- #if isinstance(frame, TagObjectFrame):
- hadoop_schedulers = self.app.remote.get_hosts("SCHEDULER",
"HADOOP")
- return frame.get_href(session, id, hadoop_schedulers[0])
+ frame = self.frame.children_by_name[self.frame.name + self.frame_path]
+ return frame.get_href(session, id, frame.parent.host.get(session))
class JobTrackerDelete(ObjectSelectorTask):
def __init__(self, app, selector, name):
Modified: branches/elephant/cumin/python/cumin/gridhadoop/main.py
===================================================================
--- branches/elephant/cumin/python/cumin/gridhadoop/main.py 2013-01-30 17:56:34 UTC (rev
5668)
+++ branches/elephant/cumin/python/cumin/gridhadoop/main.py 2013-02-01 21:13:38 UTC (rev
5669)
@@ -14,6 +14,7 @@
from datanode import DataNodeSelector
from jobtracker import JobTrackerSelector
from tasktracker import TaskTrackerSelector
+from scheduler import HadoopSchedulerSelector, HadoopSchedulerFrame
strings = StringCatalog(__file__)
@@ -37,13 +38,16 @@
self.view = GridHadoopView(app, name + ".view", check_owner)
self.add_mode(self.view)
+
+ self.scheduler_frame = HadoopSchedulerFrame(app, name +
".ghschedframe", check_owner)
+ self.add_mode(self.scheduler_frame)
- self.name_node_frame = NameNodeFrame(app, name + ".namenodeframe")
- self.add_mode(self.name_node_frame)
+# self.name_node_frame = NameNodeFrame(app, name + ".namenodeframe")
+# self.add_mode(self.name_node_frame)
+#
+# self.job_tracker_frame = JobTrackerFrame(app, name +
".jobtrackerframe")
+# self.add_mode(self.job_tracker_frame)
- self.job_tracker_frame = JobTrackerFrame(app, name +
".jobtrackerframe")
- self.add_mode(self.job_tracker_frame)
-
def render_title(self, session):
return "Grid-hadoop"
@@ -57,5 +61,6 @@
self.tabs = TabbedModeSet(app, "childtabs")
self.add_child(self.tabs)
- self.tabs.add_tab(NameNodeSelector(app, name + ".namenodes",
check_owner))
- self.tabs.add_tab(JobTrackerSelector(app, name + ".jobtrackers",
check_owner))
+ #self.tabs.add_tab(NameNodeSelector(app, name + ".namenodes",
check_owner))
+ #self.tabs.add_tab(JobTrackerSelector(app, name + ".jobtrackers",
check_owner))
+ self.tabs.add_tab(HadoopSchedulerSelector(app, name + ".hscheds"))
Modified: branches/elephant/cumin/python/cumin/gridhadoop/namenode.py
===================================================================
--- branches/elephant/cumin/python/cumin/gridhadoop/namenode.py 2013-01-30 17:56:34 UTC
(rev 5668)
+++ branches/elephant/cumin/python/cumin/gridhadoop/namenode.py 2013-02-01 21:13:38 UTC
(rev 5669)
@@ -68,12 +68,8 @@
class NameNodeColumn(ObjectLinkColumn):
def render_cell_href(self, session, record):
id = unescape_entity(record[self.id_field.index])
- #need to make this work for user/grid-hadoop path too somehow
- # this is way less than ideal
- frame = self.page.page_widgets_by_path[self.path.rsplit(".", 7)[0]
+ self.frame_path]
-
- hadoop_schedulers = self.app.remote.get_hosts("SCHEDULER",
"HADOOP")
- return frame.get_href(session, id, hadoop_schedulers[0])
+ frame = self.frame.children_by_name[self.frame.name + self.frame_path]
+ return frame.get_href(session, id, frame.parent.host.get(session))
class NameNodeCreate(Task):
def __init__(self, app, name):
Added: branches/elephant/cumin/python/cumin/gridhadoop/scheduler.py
===================================================================
--- branches/elephant/cumin/python/cumin/gridhadoop/scheduler.py
(rev 0)
+++ branches/elephant/cumin/python/cumin/gridhadoop/scheduler.py 2013-02-01 21:13:38 UTC
(rev 5669)
@@ -0,0 +1,88 @@
+from cumin.objectframe import ObjectFrame
+
+from hadoop import *
+from hadoopobjectframe import *
+
+from jobtracker import JobTrackerFrame, JobTrackerSelector
+from namenode import NameNodeFrame, NameNodeSelector
+
+class HadoopSchedulerAdapter(HadoopAdapter):
+ def get_sage_results(self, values):
+ owner_filter = self.get_owner_filter(values['session'])
+ results = self.app.remote.get_hosts("SCHEDULER", "HADOOP")
+ return results
+
+ def do_get_data(self, values):
+ data = self.get_sage_results(values)
+ if data is None or len(data) == 0:
+ return {}
+ return data
+
+ def process_record(self, key, record):
+ field_data = list()
+ for column in self.columns:
+ val = record
+ field_data.append(val)
+ return field_data
+
+class HadoopSchedulerSelector(ObjectSelector):
+ def __init__(self, app, name, check_owner=False):
+ cls = app.model.com_redhat_cumin_grid_hadoop.Scheduler
+
+ super(HadoopSchedulerSelector, self).__init__(app, name, cls)
+
+ self.add_search_filter(self.table.id_col)
+ self.table.adapter = HadoopSchedulerAdapter(app, cls)
+
+ self.enable_csv_export()
+
+ def create_table(self, app, name, cls):
+ return HadoopSchedulerTable(app, name, cls)
+
+ def render_title(self, session):
+ return "Schedulers"
+
+class HadoopSchedulerTable(ObjectQmfSelectorTable):
+ def __init__(self, app, name, cls):
+ super(HadoopSchedulerTable, self).__init__(app, name, cls)
+
+ self.id_col = self.SchedNameColumn(app, "namecol", cls.Name, cls.Name,
".ghschedframe")
+ self.add_column(self.id_col)
+
+
+ class SchedNameColumn(ObjectLinkColumn):
+ def render_cell_href(self, session, record):
+ id = unescape_entity(record[self.id_field.index])
+ #need to make this work for user/grid-hadoop path too somehow
+ # this is way less than ideal
+ frame = self.page.page_widgets_by_path[self.path.rsplit(".", 7)[0]
+ self.frame_path]
+ return frame.get_href(session, id, id)
+
+class HadoopSchedulerFrame(HadoopObjectFrame):
+ def __init__(self, app, name, check_owner):
+ super(HadoopSchedulerFrame, self).__init__(app, name)
+
+ self.name_node_frame = NameNodeFrame(app, name + ".namenodeframe")
+ self.add_mode(self.name_node_frame)
+
+ self.job_tracker_frame = JobTrackerFrame(app, name +
".jobtrackerframe")
+ self.add_mode(self.job_tracker_frame)
+
+ self.view.add_tab(NameNodeSelector(app, name + ".namenodes",
check_owner))
+ self.view.add_tab(JobTrackerSelector(app, name + ".jobtrackers",
check_owner))
+
+ def get_object(self, session, id):
+ class Object(object):
+ pass
+ fake = Object()
+ fake.name = "fake scheduler"
+ fake.id = id
+ return fake
+
+ def get_title(self, session):
+ retval = ""
+ try:
+ retval = "Hadoop scheduler:'%s' (%s)" %
(xml_escape(self.object.get(session).name), xml_escape(self.object.get(session).id))
+ except Exception, e:
+ pass
+ return retval
Property changes on: branches/elephant/cumin/python/cumin/gridhadoop/scheduler.py
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: branches/elephant/cumin/python/cumin/gridhadoop/tasktracker.py
===================================================================
--- branches/elephant/cumin/python/cumin/gridhadoop/tasktracker.py 2013-01-30 17:56:34 UTC
(rev 5668)
+++ branches/elephant/cumin/python/cumin/gridhadoop/tasktracker.py 2013-02-01 21:13:38 UTC
(rev 5669)
@@ -49,7 +49,7 @@
def __init__(self, app, name, cls):
super(TaskTrackerTable, self).__init__(app, name, cls)
- self.id_col = self.TaskTrackerColumn(app, "idcol", cls.Id, cls.Id,
".tasktrackerframe")
+ self.id_col = self.TaskTrackerColumn(app, "idcol", cls.Id, cls.Id,
"tasktrackerframe")
self.sub_col = SubmittedColumn(app, "sub", cls.Submitted)
self.state_col = ObjectTableColumn(app, "statecol", cls.State)
self.uptime_col = UptimeColumn(app, "uptimecol", cls.Uptime)
@@ -64,11 +64,8 @@
class TaskTrackerColumn(ObjectLinkColumn):
def render_cell_href(self, session, record):
id = unescape_entity(record[self.id_field.index])
- #need to make this work for user/grid-hadoop path too somehow
- # this is way less than ideal
- frame = self.page.page_widgets_by_path[self.path.rsplit(".", 11)[0]
+ self.frame_path]
- hadoop_schedulers = self.app.remote.get_hosts("SCHEDULER",
"HADOOP")
- return frame.get_href(session, id, hadoop_schedulers[0])
+ frame = self.frame.children_by_name[self.frame_path]
+ return frame.get_href(session, id, frame.parent.host.get(session))
class TaskTrackerDelete(ObjectSelectorTask):
def __init__(self, app, selector, name):
@@ -138,7 +135,7 @@
self.form.id.set(form_session, obj._id)
## TODO find a better way to do this
- self.form.jt_id.set(form_session,
self.app.gridhadoop.frame.children_by_name["gridhadoop.jobtrackerframe"].id.get(session))
+ self.form.jt_id.set(form_session,
self.app.gridhadoop.frame.children_by_name["gridhadoop.ghschedframe"].children_by_name["gridhadoop.ghschedframe.jobtrackerframe"].id.get(session))
self.form.return_url.set(form_session, session.marshal())
self.form.show(form_session)