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)
cumin-developers@lists.fedorahosted.org