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()