8 from subprocess import Popen, PIPE, STDOUT
11 parser = argparse.ArgumentParser(description="Sensor profiler")
12 parser.add_argument('-p', '--peers', action='store', type=int, required=True,
13 help='Number of peers to run')
14 return parser.parse_args()
16 def generate_topology(peers, links):
17 G = networkx.empty_graph(peers)
18 for i in range(0, links):
22 a = random.randint(0, peers)
23 b = random.randint(0, peers)
27 def create_topology_file(graph):
29 for i in range(len(graph.edge)):
31 for e in graph.edges():
32 nodes[e[0]].append(e[1])
34 f = tempfile.NamedTemporaryFile(delete=False)
35 for i in range(len(nodes)):
36 if len(nodes[i]) == 0:
39 f.write('|'.join(map(str, nodes[i])))
44 def handle_profiler_line(line):
49 def run_profiler(peers, topology_file):
50 cmd = "GNUNET_FORCE_LOG='gnunet-sensor-profiler;;;;DEBUG' gnunet-sensor-profiler -p %d -t %s > log 2>&1" % (peers, topology_file)
51 process = Popen([cmd], shell=True)
55 while process.poll() is None:
57 if not c or c == '\n':
58 handle_profiler_line(line)
65 args = vars(get_args())
66 num_peers = args['peers']
68 print 'Min number of peers is 3'
70 num_links = int(math.log(num_peers) * math.log(num_peers) * num_peers / 2)
71 # Generate random topology
72 graph = generate_topology(num_peers, num_links)
73 print 'Generated random topology with %d peers and %d links' % (num_peers, num_links)
74 # Create TESTBED topology file
75 top_file = create_topology_file(graph)
76 print 'Created TESTBED topology file %s' % top_file
78 run_profiler(num_peers, top_file)
80 if __name__ == "__main__":