From e8b04dd7ddc2ffb22d72098400cdbf676453a094 Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Thu, 9 Sep 2010 16:39:53 +0200 Subject: [PATCH] displays if assigned or not, currently assigned first --- sfaconfigscreen.py | 3 +-- sfadata.py | 12 +++++---- sfamainscreen.py | 65 ++++++++++++++++++++++++++++++++++------------ 3 files changed, 57 insertions(+), 23 deletions(-) diff --git a/sfaconfigscreen.py b/sfaconfigscreen.py index 2ce3e1a..3933122 100644 --- a/sfaconfigscreen.py +++ b/sfaconfigscreen.py @@ -27,8 +27,7 @@ class ConfigWidget(QWidget): layout.addStretch() self.setLayout(layout) - self.connect(apply, SIGNAL('clicked()'), - self.apply) + self.connect(apply, SIGNAL('clicked()'), self.apply) def apply(self): self.data.setUser("%s" % self.user.text()) diff --git a/sfadata.py b/sfadata.py index e5cf224..1fc3708 100644 --- a/sfadata.py +++ b/sfadata.py @@ -33,10 +33,12 @@ class SfaData: 'SFI_REGISTRY' : "http://www.planet-lab.org:12345", 'SFI_AM' : "http://www.planet-lab.org:12346", 'SFI_SM' : "http://www.planet-lab.org:12347", - 'SFAUI_VERBOSE' : False, + 'SFACE_VERBOSE' : False, + 'SFACE_DEBUG' : False, } - def __init__(self): + # let the UI set the slicename if that was set by user + def __init__(self, slice=None): self.read_config() def read_config(self): @@ -44,7 +46,7 @@ class SfaData: execfile(filename, SfaData.__dict__) for (k,v) in SfaData.defaults.items(): if not hasattr(SfaData,k): setattr(SfaData,k,v) - if SfaData.SFAUI_VERBOSE: + if SfaData.SFACE_VERBOSE: print "After reading config from %s"%filename for (k,v) in SfaData.defaults.items(): print "%-20s: %r"%(k,getattr(SfaData,k)) @@ -101,11 +103,11 @@ class SfaData: def trace_command (self, command): self._trace=time.time() - if self.SFAUI_VERBOSE: + if self.SFACE_VERBOSE: print time.strftime('%M:%S'),'Invoking',' '.join(command) def trace_end (self): - if self.SFAUI_VERBOSE: + if self.SFACE_VERBOSE: print time.strftime('%M:%S'),"[%.3f s]"%(time.time()-self._trace),'Done' def getRecord(self, hrn): diff --git a/sfamainscreen.py b/sfamainscreen.py index 3ba9c03..1ded231 100644 --- a/sfamainscreen.py +++ b/sfamainscreen.py @@ -17,52 +17,84 @@ class SliceWidget(QWidget): self.nodeView.setAlternatingRowColors(True) self.nodeView.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) - self.nodeModel = QStandardItemModel(0, 2, self) + self.nodeModel = QStandardItemModel(0, 3, self) self.nodeModel.setHeaderData(0, Qt.Horizontal, QString("Testbed")) self.nodeModel.setHeaderData(1, Qt.Horizontal, QString("Hostname")) + self.nodeModel.setHeaderData(2, Qt.Horizontal, QString("IsIn")) self.nodeView.setModel(self.nodeModel) label = QLabel("Refresh", self) label.setScaledContents(False) + self.connect(label, SIGNAL('linkActivated(QString)'), self.refresh) + + # mmhh. + data=SfaData() + slicename = QLabel ("Slice : %s"%(data.getSlice() or "None"),self) layout = QVBoxLayout() layout.addWidget(label) + layout.addWidget(slicename) layout.addWidget(self.nodeView) self.setLayout(layout) self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) - self.connect(label, SIGNAL('linkActivated(QString)'), - self.refresh) # TODO: use the methods from sfa-trunk def rspec_get_networks(self, rspec_string): rspec = RSpec (rspec_string) return rspec.rspec.xpath("./network[@name]/@name") - def rspec_get_nodes_from_network(self, rspec_string, network): + def rspec_get_xml_nodes_from_network(self, rspec_string, network): + rspec = RSpec (rspec_string) + return rspec.rspec.xpath("./network[@name='%s']/site/node" % network) + def rspec_get_sliver_nodes_from_network(self, rspec_string, network): + rspec = RSpec (rspec_string) + return rspec.rspec.xpath("./network[@name='%s']/site/node[sliver]/hostname/text()" % network) + def rspec_get_other_nodes_from_network(self, rspec_string, network): rspec = RSpec (rspec_string) - return rspec.rspec.xpath("./network[@name='%s']/site/node/hostname/text()" % network) + # xxx todo - could not find the xpath syntax for 'does not have the sliver attribute' + return rspec.rspec.xpath("./network[@name='%s']/site/node[~sliver]/hostname/text()" % network) def refresh(self, link=None): data = SfaData() - rspec = data.getRSpecFromSM() -# import os -# xml = open(os.path.expanduser("~/.sfi/ple.inria.heartbeat.rspec")).read() -# rspec = RSpec(xml) - - networks = self.rspec_get_networks(rspec) + if not data.getSlice(): + print 'slice not set yet' + return + if not data.SFACE_DEBUG: + rspec_string = data.getRSpecFromSM() + else: + print 'SFACE_DEBUG : using local file' + import os + rspec_string = open(os.path.expanduser("~/.sfi/%s.rspec"%data.getSlice())).read() + + networks = self.rspec_get_networks(rspec_string) networks.reverse() for network in networks: - nodes = self.rspec_get_nodes_from_network(rspec, network) - for node in nodes: - self.addNode(network, node) - - def addNode(self, testbed, hostname): +# nodes = self.rspec_get_sliver_nodes_from_network(rspec_string, network) +# for node in nodes: self.addNode(network, node, True) +# nodes = self.rspec_get_other_nodes_from_network(rspec_string, network) +# for node in nodes: self.addNode(network, node, False) + # hacky - i'm just gettin used to this xml navigation stuff + xml_nodes = self.rspec_get_xml_nodes_from_network(rspec_string, network) + from lxml import etree + # addNode inserts before, so let's start with the ones that are not in + for xml_node in xml_nodes: + if not xml_node.xpath('sliver'): + self.addNode(network,xml_node.xpath('hostname/text()')[0],False) + for xml_node in xml_nodes: + if xml_node.xpath('sliver'): + self.addNode(network,xml_node.xpath('hostname/text()')[0],True) + + + def addNode(self, testbed, hostname, mark): self.nodeModel.insertRow(0) self.nodeModel.setData(self.nodeModel.index(0,0), QString(testbed)) self.nodeModel.setData(self.nodeModel.index(0,1), QString(hostname)) + if mark:msg="x" + else: msg="-" + self.nodeModel.setData(self.nodeModel.index(0,2), QString(msg)) @@ -72,3 +104,4 @@ class SfaMainScreen(SfaScreen): slice = SliceWidget(self) self.init(slice, "Main Window", "PlanetLab Federation GUI") + slice.refresh() -- 2.43.0