Author: sleon
Date: 2006-01-07 13:57:22 +0000 (Sat, 07 Jan 2006)
New Revision: 7797

Modified:
   trunk/apps/freeviz/db.py
   trunk/apps/freeviz/gen.py
Log:
added code for detection location swaps, could not test if working

Modified: trunk/apps/freeviz/db.py
===================================================================
--- trunk/apps/freeviz/db.py    2006-01-07 12:51:40 UTC (rev 7796)
+++ trunk/apps/freeviz/db.py    2006-01-07 13:57:22 UTC (rev 7797)
@@ -1,7 +1,7 @@
 from sqlobject import *
 from sqlobject.sqlbuilder import *
 import sys,os
-from datetime import *
+import datetime
 #mport pydot


@@ -21,7 +21,7 @@

 class Node(SQLObject):
        identity = StringCol(length=100, notNull=True)
-       lastUpdate = DateTimeCol(notNull=True, default=datetime.now())
+       lastUpdate = DateTimeCol(notNull=True, default=datetime.datetime.now())
        name = StringCol(length=50, notNull=True, default='dummy')
        version = StringCol(length=50, notNull=True, default='0')

@@ -77,7 +77,7 @@
        for key in nodeinfo.keys():
                setattr(n, key, nodeinfo[key])

-       n.lastUpdate = datetime.now()
+       n.lastUpdate = datetime.datetime.now()


 def getIdFromInfo(nodeinfo):

Modified: trunk/apps/freeviz/gen.py
===================================================================
--- trunk/apps/freeviz/gen.py   2006-01-07 12:51:40 UTC (rev 7796)
+++ trunk/apps/freeviz/gen.py   2006-01-07 13:57:22 UTC (rev 7797)
@@ -1,106 +1,166 @@
 #! /usr/bin/python
-from sqlobject import *
+#from sqlobject import *
 import sys,os
 import pydot
 import sys
+sys.path+=['/home/sleon/freeviz/']
 import re
 import handler
 import math
+import time
+import histogram

-sys.path+=['/home/sleon/public_html/bla/']
-from db import *
+import db
+import sqlobject

-regver = re.compile('.*,(\d+)')

-#COLORS
-nodeOK='#9dfbb9'
-nodeOUTDATED='#f3fb9d'
-edgeOK='#238500'
-edgeBLOCKED='#ee4a1e'
-defaultSize='8px'


-def gentopology():
-       #NodePair.createTable( ifNotExists=True )
-       node_pairs = list(NodePair.select())
-       nodes = handler.get_activenodes()
-       g=pydot.Dot(type='digraph')
-       lastver = regver.match( getLastVer()).group(1)
+class Generator(object):

-       
-       for node in nodes:

-               nodecolor=nodeOK
-               transinfosize=defaultSize

-               matc = regver.match(node.version)
-               if matc:
-                       nversion = matc.group(1)
-               else:
-                       nversion = '0'
+       regver = re.compile('.*,(\d+)')
+       #COLORS
+       nodeOK='#9dfbb9'
+       nodeOUTDATED='#f3fb9d'
+       edgeOK='#238500'
+       edgeBLOCKED='#ee4a1e'
+       defaultSize='8px'
+       
+       #saves previous state of nodes
+       oldnstate={}

+       
+       #returns identyt location dictionaries list for all ndoes
+       def getnstate(self,nodes):
+               nstate={}
+       
+               for node in nodes:
+                       nstate[node.identity] = (node.location, node.name)
+       
+               return nstate
+       
+       def find_and_addswapedge(self, g, nodes, identity, nstate):

-               if nversion < lastver:
-                       nodecolor=nodeOUTDATED
-
-               if node.requests != '0' or node.inserts != '0' or 
node.transferring_requests != '0':
-                       transinfosize="10px"
-
-               gnode = pydot.Node(node.name, style='filled', color=nodecolor , 
label='''\
+               oldidentities=[]
+               
+               for okey in self.oldnstate.keys():
+                       if oldstate[okey][0] == oldlocation:
+                               oldidentities.append(okey)
+       
+               #not eindeutig!!
+               if len(oldidentities) != 1 :
+                       print("name not eindeutig!")    
+       
+               oldidentity = oldidentities[0]
+               print "showing edge between %s and %s" % ( nstate[identity][1], 
nstate[oldidentity][1])
+               gedge=pydot.Gedge(nstate[identity][1], nstate[oldidentity][1], 
label='swap', taillabel='nstate[identity][0]'
+                                       , headlabel='nstate[oldidentity][0]', 
arrowtail='vee', arrowhead='vee'  )
+       
+               g.add_ege(gedge)
+       
+               
+       
+       def gentopology(self):
+               #NodePair.createTable( ifNotExists=True )
+               node_pairs = list(db.NodePair.select())
+               nodes = handler.get_activenodes()
+               nstate = self.getnstate(nodes)
+               g=pydot.Dot(type='digraph')
+               lastver = self.regver.match( db.getLastVer()).group(1)
+       
+               
+               for node in nodes:
+       
+                       nodecolor=self.nodeOK
+                       transinfosize=self.defaultSize
+       
+                       matc = self.regver.match(node.version)
+                       if matc:
+                               nversion = matc.group(1)
+                       else:
+                               nversion = '0'
+       
+                       
+                       if nversion < lastver:
+                               nodecolor=self.nodeOUTDATED
+       
+                       if node.requests != '0' or node.inserts != '0' or 
node.transferring_requests != '0':
+                               transinfosize="10px"
+       
+                       gnode = pydot.Node(node.name, style='filled', 
color=nodecolor , label='''\
 <
-<table CELLBORDER="0" border="0"
-  CELLPADDING="2"
-  CELLSPACING="3">
-<tr><td align="left"><FONT point-size="%s">%s</FONT></td>
-</tr>
-<tr><td align="left"><FONT point-size="%s">%s</FONT></td></tr>
-<tr><td align="left"><FONT point-size="%s">R:%s I:%s TR:%s</FONT></td></tr>
-<tr><td align="left"><FONT point-size="5px">Ver. %s</FONT></td></tr>
-
-</table>
->''' % (transinfosize, node.name,transinfosize, 
-       node.location[0:7], transinfosize, node.requests, 
-       node.inserts, node.transferring_requests,nversion))
-               g.add_node(gnode)
+       <table CELLBORDER="0" border="0"
+         CELLPADDING="2"
+         CELLSPACING="3">
+       <tr><td align="left"><FONT point-size="%s">%s</FONT></td>
+       </tr>
+       <tr><td align="left"><FONT point-size="%s">%s</FONT></td></tr>
+       <tr><td align="left"><FONT point-size="%s">R:%s I:%s 
TR:%s</FONT></td></tr>
+       <tr><td align="left"><FONT point-size="5px">Ver. %s</FONT></td></tr>

-       #there are no dublicate edges in the database 
-       for node_pair in node_pairs:
-               edgecolor = edgeOK
-
-               node1loc = node_pair.node1.location
-               node2loc = node_pair.node2.location
-               distance = str( int ( math.floor( abs ( (( float(node1loc) - 
float(node2loc)) * 10.0)) )) )
-
-               if node_pair.backoffcur_node1 != '0' or 
node_pair.backoffcur_node2 != '0':
-                       edgecolor= edgeBLOCKED
-               gedge = pydot.Edge(node_pair.node1.name , node_pair.node2.name, 
color=edgecolor , fontcolor=edgecolor,
-                                               label='d: %s' % distance, 
fontsize='9.5',arrowhead='none')
-               #node1 is tail, node2 is head
-               if edgecolor == edgeBLOCKED:
-                       if node_pair.backoffcur_node1 != '0':
-                               gedge.taillabel='%s (%s)' % 
(node_pair.backoffmax_node1, node_pair.backoffcur_node1 ) 
-                               gedge.arrowtail='tee'
-                       if node_pair.backoffcur_node2 != '0':
-                               gedge.headlabel='%s (%s)' % 
(node_pair.backoffmax_node2, node_pair.backoffcur_node2 ) 
-                               gedge.arrowhead='tee'
-
-
-               g.add_edge(gedge)
+       </table>
+       >''' % (transinfosize, node.name,transinfosize, 
+               node.location[0:7], transinfosize, node.requests, 
+               node.inserts, node.transferring_requests,nversion))
+                       g.add_node(gnode)
+               
+               #there are no dublicate edges in the database 
+               for node_pair in node_pairs:
+                       edgecolor = self.edgeOK
+       
+                       node1loc = node_pair.node1.location
+                       node2loc = node_pair.node2.location
+                       distance = str( int ( math.floor( abs ( (( 
float(node1loc) - float(node2loc)) * 10.0)) )) )
+       
+                       if node_pair.backoffcur_node1 != '0' or 
node_pair.backoffcur_node2 != '0':
+                               edgecolor= self.edgeBLOCKED
+                       gedge = pydot.Edge(node_pair.node1.name , 
node_pair.node2.name, color=edgecolor , fontcolor=edgecolor,
+                                                       label='d: %s' % 
distance, fontsize='9.5',arrowhead='none')
+                       #node1 is tail, node2 is head
+                       if edgecolor == self.edgeBLOCKED:
+                               if node_pair.backoffcur_node1 != '0':
+                                       gedge.taillabel='%s (%s)' % 
(node_pair.backoffmax_node1, node_pair.backoffcur_node1 ) 
+                                       gedge.arrowtail='tee'
+                               if node_pair.backoffcur_node2 != '0':
+                                       gedge.headlabel='%s (%s)' % 
(node_pair.backoffmax_node2, node_pair.backoffcur_node2 ) 
+                                       gedge.arrowhead='tee'
+       
+       
+                       g.add_edge(gedge)
+       

+               if self.oldnstate:
+                       for identity in nstate.keys():
+                               if identity in self.oldnstate:
+                                       if self.oldnstate[identity] != 
nstate[identity]:
+                                               print('location swap detected')
+                                               self.find_and_addswapedge(g, 
nodes, identity, nstate) 
+               else:
+                       print "oldnstate empty!"
+       
+               g.write_png('/tmp/output.png',prog='dot')
+       
+               self.oldnstate = nstate
+       #       g.write_dot('bla.dot')
+       
+       #       return """\
+       #       <html>
+       #       <head>
+       #       <title>Topology of testnetwork(s):</title>
+       #       <META HTTP-EQUIV="REFRESH" 
CONTENT="180;URL=http://sleon.dyndns.org/~sleon/functions.py/gentopology";>
+       #       </head>
+       #       <body>
+       #       <img alt="topologymap" src=/~sleon/output.png>
+       #       </body>
+       #       </html>
+       #       """

-       g.write_png('/tmp/output.png',prog='dot')
-#      g.write_dot('bla.dot')
+generator = Generator()
+while(True):
+       generator.gentopology()
+       histogram.gen()
+       time.sleep(100)
+       print "iter"

-#      return """\
-#      <html>
-#      <head>
-#      <title>Topology of testnetwork(s):</title>
-#      <META HTTP-EQUIV="REFRESH" 
CONTENT="180;URL=http://sleon.dyndns.org/~sleon/functions.py/gentopology";>
-#      </head>
-#      <body>
-#      <img alt="topologymap" src=/~sleon/output.png>
-#      </body>
-#      </html>
-#      """
-
-gentopology()


Reply via email to