Home | History | Annotate | Download | only in analyzer
      1 #!/usr/bin/env python
      2 #
      3 #                     The LLVM Compiler Infrastructure
      4 #
      5 # This file is distributed under the University of Illinois Open Source
      6 # License. See LICENSE.TXT for details.
      7 #
      8 ##===----------------------------------------------------------------------===##
      9 #
     10 # This script reads visualization data emitted by the static analyzer for
     11 # display in Ubigraph.
     12 #
     13 ##===----------------------------------------------------------------------===##
     14 
     15 import xmlrpclib
     16 import sys
     17 
     18 def Error(message):
     19     print >> sys.stderr, 'ubiviz: ' + message
     20     sys.exit(1)
     21     
     22 def StreamData(filename):
     23   file = open(filename)
     24   for ln in file:
     25     yield eval(ln)
     26   file.close()
     27 
     28 def Display(G, data):
     29   action = data[0]
     30   if action == 'vertex':
     31     vertex = data[1]
     32     G.new_vertex_w_id(vertex)
     33     for attribute in data[2:]:
     34       G.set_vertex_attribute(vertex, attribute[0], attribute[1])
     35   elif action == 'edge':
     36     src = data[1]
     37     dst = data[2]
     38     edge = G.new_edge(src,dst)
     39     for attribute in data[3:]:
     40       G.set_edge_attribute(edge, attribute[0], attribute[1])
     41   elif action == "vertex_style":
     42     style_id = data[1]
     43     parent_id = data[2]
     44     G.new_vertex_style_w_id(style_id, parent_id)
     45     for attribute in data[3:]:
     46       G.set_vertex_style_attribute(style_id, attribute[0], attribute[1])
     47   elif action == "vertex_style_attribute":
     48     style_id = data[1]
     49     for attribute in data[2:]:
     50       G.set_vertex_style_attribute(style_id, attribute[0], attribute[1])
     51   elif action == "change_vertex_style":
     52      vertex_id = data[1]
     53      style_id = data[2]
     54      G.change_vertex_style(vertex_id,style_id)
     55 
     56 def main(args):
     57   if len(args) == 0:
     58     Error('no input files')    
     59 
     60   server = xmlrpclib.Server('http://127.0.0.1:20738/RPC2')
     61   G = server.ubigraph
     62             
     63   for arg in args:
     64     G.clear()
     65     for x in StreamData(arg):
     66       Display(G,x)
     67   
     68   sys.exit(0)
     69   
     70 
     71 if __name__ == '__main__':
     72     main(sys.argv[1:])
     73     
     74