sensor: towards profiler
[oweals/gnunet.git] / src / sensor / profiler.py
1 import argparse
2 import math
3 import networkx
4 import random
5 import tempfile
6
7 def get_args():
8   parser = argparse.ArgumentParser(description="Sensor profiler")
9   parser.add_argument('-p', '--peers', action='store', type=int, required=True,
10                       help='Number of peers to run')
11   return parser.parse_args()
12
13 def generate_topology(peers, links):
14   G = networkx.empty_graph(peers)
15   for i in range(0, links):
16     a = 0
17     b = 0
18     while a == b:
19       a = random.randint(0, peers)
20       b = random.randint(0, peers)
21     G.add_edge(a, b)
22   return G
23
24 def create_topology_file(graph):
25   nodes = list()
26   for i in range(len(graph.edge)):
27     nodes.append(list())
28   for e in graph.edges():
29     nodes[e[0]].append(e[1])
30   print nodes
31   f = tempfile.NamedTemporaryFile(delete=False)
32   for i in range(len(nodes)):
33     if len(nodes[i]) == 0:
34       continue
35     f.write('%d:' % i)
36     f.write('|'.join(map(str,nodes[i])))
37     f.write('\n')
38   #f.close()
39   return f.name
40
41 def main():
42   args = vars(get_args())
43   num_peers = args['peers']
44   if num_peers < 3:
45     print 'Min number of peers is 3'
46     return
47   num_links = int(math.log(num_peers) * math.log(num_peers) * num_peers / 2)
48   # Generate random topology
49   graph = generate_topology(num_peers, num_links)
50   print 'Generated random topology with %d peers and %d links' % (num_peers, num_links)
51   # Create TESTBED topology file
52   top_file = create_topology_file(graph)
53   print 'Created TESTBED topology file %s' % top_file
54   # Run c profiler
55   
56 if __name__ == "__main__":
57   main()