Changeset eab6ae1 for fedd


Ignore:
Timestamp:
May 17, 2010 3:31:16 AM (15 years ago)
Author:
Ted Faber <faber@…>
Branches:
axis_example, compt_changes, info-ops, master, version-3.01, version-3.02
Children:
f00fb7d
Parents:
5f6c3af
Message:

Fix ns_image, which still believed that there was an Ns2Split interface. Now
it calls Ns2Topdl and draws the image from that. Internally, this means that
the ns_image class has become a subclass of topdl_image.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • fedd/fedd_client.py

    r5f6c3af reab6ae1  
    916916            sys.exit("Bad response. %s" % e.message)
    917917
    918 class ns_image(image):
    919     def __init__(self):
    920         """
    921         Null constructor
    922         """
    923 
    924         image.__init__(self)
    925 
    926     def generate_topo_dict(self, splitout):
    927         class topo_parse:
    928             """
    929             Parse the topology XML and create the dats structure.  This class
    930             is copied from federation.experiment_control.
    931             """
    932             def __init__(self):
    933                 # Typing of the subelements for data conversion
    934                 self.str_subelements = ('vname', 'vnode', 'ips', 'ip', 'member')
    935                 self.int_subelements = ( 'bandwidth',)
    936                 self.float_subelements = ( 'delay',)
    937                 # The final data structure
    938                 self.nodes = [ ]
    939                 self.lans =  [ ]
    940                 self.topo = { \
    941                         'node': self.nodes,\
    942                         'lan' : self.lans,\
    943                     }
    944                 self.element = { }  # Current element being created
    945                 self.chars = ""     # Last text seen
    946 
    947             def end_element(self, name):
    948                 # After each sub element the contents is added to the current
    949                 # element or to the appropriate list.
    950                 if name == 'node':
    951                     self.nodes.append(self.element)
    952                     self.element = { }
    953                 elif name == 'lan':
    954                     self.lans.append(self.element)
    955                     self.element = { }
    956                 elif name in self.str_subelements:
    957                     self.element[name] = self.chars
    958                     self.chars = ""
    959                 elif name in self.int_subelements:
    960                     self.element[name] = int(self.chars)
    961                     self.chars = ""
    962                 elif name in self.float_subelements:
    963                     self.element[name] = float(self.chars)
    964                     self.chars = ""
    965 
    966             def found_chars(self, data):
    967                 self.chars += data.rstrip()
    968 
    969 
    970         tp = topo_parse();
    971         parser = xml.parsers.expat.ParserCreate()
    972         parser.EndElementHandler = tp.end_element
    973         parser.CharacterDataHandler = tp.found_chars
    974 
    975         m = re.search('^#\s+Begin\s+Vtopo\s*$(.*)^#\s+End\s+Vtopo', splitout,
    976                 re.MULTILINE | re.DOTALL)
    977         if m:
    978             str = m.group(1)
    979         else:
    980             sys.exit("Badly formatted split")
    981 
    982         parser.Parse(str)
    983 
    984         return tp.topo
    985 
    986     def __call__(self):
    987         """
    988         The control flow.  Compose the request and print the response.
    989         """
    990         # Process the options using the customized option parser defined above
    991         parser = fedd_ns_image_opts()
    992 
    993         (opts, args) = parser.parse_args()
    994 
    995         if opts.trusted:
    996             if ( not os.access(opts.trusted, os.R_OK) ) :
    997                 sys.exit("Cannot read trusted certificates (%s)" % opts.trusted)
    998 
    999         if opts.debug > 0: opts.tracefile=sys.stderr
    1000 
    1001         (user, cert) = self.get_user_info()
    1002 
    1003         if opts.cert != None: cert = opts.cert
    1004 
    1005         if cert == None:
    1006             sys.exit("No certificate given (--cert) or found")
    1007 
    1008         if os.access(cert, os.R_OK):
    1009             fid = fedid(file=cert)
    1010         else:
    1011             sys.exit("Cannot read certificate (%s)" % cert)
    1012 
    1013         if opts.file:
    1014             exp_desc = ""
    1015             try:
    1016                 f = open(opts.file, 'r')
    1017                 for line in f:
    1018                     exp_desc += line
    1019                 f.close()
    1020             except IOError:
    1021                 sys.exit("Cannot read description file (%s)" %opts.file)
    1022         else:
    1023             sys.exit("Must specify an experiment description (--file)")
    1024 
    1025         if not opts.master:
    1026             opts.master="dummy"
    1027 
    1028 
    1029         req = {
    1030                 'description': { 'ns2description': exp_desc },
    1031                 'master': opts.master,
    1032                 'include_fedkit': opts.fedkit,
    1033                 'include_gatewaykit': opts.gatewaykit,
    1034                 }
    1035 
    1036 
    1037         if opts.format and opts.outfile:
    1038             fmt = opts.format
    1039             file = opts.outfile
    1040         elif not opts.format and opts.outfile:
    1041             fmt = opts.outfile[-3:]
    1042             if fmt not in ("png", "jpg", "dot", "svg"):
    1043                 sys.exit("Unexpected file type and no format specified")
    1044             file = opts.outfile
    1045         elif opts.format and not opts.outfile:
    1046             fmt = opts.format
    1047             file = None
    1048         else:
    1049             fmt="dot"
    1050             file = None
    1051 
    1052         try:
    1053             resp_dict = self.do_rpc(req,
    1054                     opts.url, opts.transport, cert, opts.trusted,
    1055                     serialize_only=opts.serialize_only,
    1056                     tracefile=opts.tracefile,
    1057                     caller=self.caller('Ns2Split'))
    1058         except self.RPCException, e:
    1059             exit_with_fault(\
    1060                     {'desc': e.desc, 'errstr': e.errstr, 'code': e.code})
    1061         except RuntimeError, e:
    1062             sys.exit("Error processing RPC: %s" % e)
    1063 
    1064 
    1065         if resp_dict.has_key('output'):
    1066             if len(resp_dict['output']) < 1:
    1067                 sys.exit("Bad response: could not split")
    1068             topo = self.generate_topo_dict(resp_dict['output'])
    1069             self.gen_image(topo, len(topo.get('node', [])), file, fmt,
    1070                     opts.neato, opts.labels, opts.pixels)
    1071         elif opts.serialze_only:
    1072             sys.exit(0)
    1073         else:
    1074             sys.exit("Bad response. %s" % e.message)
    1075 
    1076918class topdl_image(image):
    1077919    def __init__(self):
     
    11811023        self.gen_image(top, len(top.elements), file, fmt, opts.neato,
    11821024                opts.labels, opts.pixels)
     1025
     1026class ns_image(topdl_image):
     1027    def __init__(self):
     1028        """
     1029        Null constructor
     1030        """
     1031
     1032        topdl_image.__init__(self)
     1033
     1034    def __call__(self):
     1035        """
     1036        The control flow.  Compose the request and print the response.
     1037        """
     1038        # Process the options using the customized option parser defined above
     1039        parser = fedd_ns_image_opts()
     1040
     1041        (opts, args) = parser.parse_args()
     1042
     1043        if opts.trusted:
     1044            if ( not os.access(opts.trusted, os.R_OK) ) :
     1045                sys.exit("Cannot read trusted certificates (%s)" % opts.trusted)
     1046
     1047        if opts.debug > 0: opts.tracefile=sys.stderr
     1048
     1049        (user, cert) = self.get_user_info()
     1050
     1051        if opts.cert != None: cert = opts.cert
     1052
     1053        if cert == None:
     1054            sys.exit("No certificate given (--cert) or found")
     1055
     1056        if os.access(cert, os.R_OK):
     1057            fid = fedid(file=cert)
     1058        else:
     1059            sys.exit("Cannot read certificate (%s)" % cert)
     1060
     1061        if opts.file:
     1062            exp_desc = ""
     1063            try:
     1064                f = open(opts.file, 'r')
     1065                for line in f:
     1066                    exp_desc += line
     1067                f.close()
     1068            except IOError:
     1069                sys.exit("Cannot read description file (%s)" %opts.file)
     1070        else:
     1071            sys.exit("Must specify an experiment description (--file)")
     1072
     1073        if not opts.master:
     1074            opts.master="dummy"
     1075
     1076        req = { 'description': { 'ns2description': exp_desc }, }
     1077
     1078        if opts.format and opts.outfile:
     1079            fmt = opts.format
     1080            file = opts.outfile
     1081        elif not opts.format and opts.outfile:
     1082            fmt = opts.outfile[-3:]
     1083            if fmt not in ("png", "jpg", "dot", "svg"):
     1084                sys.exit("Unexpected file type and no format specified")
     1085            file = opts.outfile
     1086        elif opts.format and not opts.outfile:
     1087            fmt = opts.format
     1088            file = None
     1089        else:
     1090            fmt="dot"
     1091            file = None
     1092
     1093        try:
     1094            resp_dict = self.do_rpc(req,
     1095                    opts.url, opts.transport, cert, opts.trusted,
     1096                    serialize_only=opts.serialize_only,
     1097                    tracefile=opts.tracefile,
     1098                    caller=self.caller('Ns2Topdl'))
     1099        except self.RPCException, e:
     1100            exit_with_fault(\
     1101                    {'desc': e.desc, 'errstr': e.errstr, 'code': e.code})
     1102        except RuntimeError, e:
     1103            sys.exit("Error processing RPC: %s" % e)
     1104
     1105
     1106        if 'experimentdescription' in resp_dict:
     1107            if 'topdldescription' in resp_dict['experimentdescription']:
     1108                exp = resp_dict['experimentdescription']['topdldescription']
     1109                top = topdl.Topology(**exp)
     1110                self.gen_image(top, len(top.elements), file, fmt, opts.neato,
     1111                        opts.labels, opts.pixels)
     1112            else:
     1113                sys.exit("Bad response: could not translate")
     1114        elif opts.serialze_only:
     1115            sys.exit(0)
     1116        else:
     1117            sys.exit("Bad response. %s" % e.message)
    11831118
    11841119class terminate(fedd_rpc):
Note: See TracChangeset for help on using the changeset viewer.