Author: croberts
Date: 2013-02-14 16:18:53 +0000 (Thu, 14 Feb 2013)
New Revision: 5705
Modified:
branches/elephant/cumin/python/cumin/gridhadoop/datanode.py
branches/elephant/cumin/python/cumin/gridhadoop/hadoop.py
branches/elephant/cumin/python/cumin/gridhadoop/tasktracker.py
Log:
Now filtering task trackers and data nodes by their parent (job tracker/name node). When
clicking on a name node or job tracker, the list of data nodes/task trackers will be
limited to only the children of that object.
Modified: branches/elephant/cumin/python/cumin/gridhadoop/datanode.py
===================================================================
--- branches/elephant/cumin/python/cumin/gridhadoop/datanode.py 2013-02-13 20:25:56 UTC
(rev 5704)
+++ branches/elephant/cumin/python/cumin/gridhadoop/datanode.py 2013-02-14 16:18:53 UTC
(rev 5705)
@@ -58,11 +58,21 @@
self.uptime_col = UptimeColumn(app, "uptimecol", cls.Uptime)
self.owner_col = ObjectTableColumn(app, "ownercol", cls.Owner)
+ # we need to be able to filter by parent_id, but don't need to see it
+ self.parent_id_col = ObjectTableColumn(app, "parentid", cls.Parent_id)
+ self.parent_id_col.visible = False
+
self.add_column(self.id_col)
self.add_column(self.sub_col)
self.add_column(self.state_col)
self.add_column(self.uptime_col)
self.add_column(self.owner_col)
+ self.add_column(self.parent_id_col)
+
+ def get_data_options(self, session):
+ options = super(DataNodeTable, self).get_data_options(session)
+ options.parent_filter = {"column":self.parent_id_col,
"value":self.frame.id.get(session)}
+ return options
class DataNodeColumn(ObjectLinkColumn):
def render_cell_href(self, session, record):
Modified: branches/elephant/cumin/python/cumin/gridhadoop/hadoop.py
===================================================================
--- branches/elephant/cumin/python/cumin/gridhadoop/hadoop.py 2013-02-13 20:25:56 UTC (rev
5704)
+++ branches/elephant/cumin/python/cumin/gridhadoop/hadoop.py 2013-02-14 16:18:53 UTC (rev
5705)
@@ -47,10 +47,12 @@
field_data = list()
for column in self.columns:
try:
- if column.name == "State":
+ if column.name.lower() in ["parent_id",
"parent_ipc"]:
+ val = record.parent[column.name.lower().split("_")[1]]
+ elif column.name == "State":
val = record[column.name.lower()].title()
else:
- val = record[column.name.lower()]
+ val = record[column.name.lower()]
except AttributeError:
if (column.name == "Ipc"):
val = record.ref.ipc
@@ -65,6 +67,22 @@
else:
owner_list = None
return owner_list
+
+ def filter_rows(self, rows, values, options):
+ rows = super(HadoopAdapter, self).filter_rows(rows, values, options)
+ try:
+ if getattr(options, "parent_filter") is not None:
+ rows = self.filter_by_parent(rows, options.parent_filter)
+ except AttributeError, e:
+ pass
+ return rows
+
+ def filter_by_parent(self, rows, parent_filter):
+ filtered_rows = []
+ for row in rows:
+ if row[parent_filter["column"].field.index] ==
parent_filter["value"]:
+ filtered_rows.append(row)
+ return filtered_rows
class HadoopNodeDeleteForm(ObjectSelectorTaskForm):
def __init__(self, app, name, task, cls):
@@ -255,7 +273,7 @@
else:
setattr(self, prop.name, aviary_response[1][0][prop.name.lower()])
except AttributeError, e:
- print "Attribute error %s" % e
+ pass
self.Name = self.Ipc
self._id = self.Id
Modified: branches/elephant/cumin/python/cumin/gridhadoop/tasktracker.py
===================================================================
--- branches/elephant/cumin/python/cumin/gridhadoop/tasktracker.py 2013-02-13 20:25:56 UTC
(rev 5704)
+++ branches/elephant/cumin/python/cumin/gridhadoop/tasktracker.py 2013-02-14 16:18:53 UTC
(rev 5705)
@@ -56,14 +56,24 @@
self.sub_col = SubmittedColumn(app, "sub", cls.Submitted)
self.state_col = ObjectTableColumn(app, "statecol", cls.State)
self.uptime_col = UptimeColumn(app, "uptimecol", cls.Uptime)
- self.owner_col = ObjectTableColumn(app, "ownercol", cls.Owner)
+ self.owner_col = ObjectTableColumn(app, "ownercol", cls.Owner)
+ # we need to be able to filter by parent_id, but don't need to see it
+ self.parent_id_col = ObjectTableColumn(app, "parentid", cls.Parent_id)
+ self.parent_id_col.visible = False
+
self.add_column(self.id_col)
self.add_column(self.sub_col)
self.add_column(self.state_col)
self.add_column(self.uptime_col)
self.add_column(self.owner_col)
+ self.add_column(self.parent_id_col)
+ def get_data_options(self, session):
+ options = super(TaskTrackerTable, self).get_data_options(session)
+ options.parent_filter = {"column":self.parent_id_col,
"value":self.frame.id.get(session)}
+ return options
+
class TaskTrackerColumn(ObjectLinkColumn):
def render_cell_href(self, session, record):
id = unescape_entity(record[self.id_field.index])