|  | import texttable as tt | 
|  |  | 
|  | class helpers(object): | 
|  | def __init__ (self, local_salt_client): | 
|  | self.local_salt_client = local_salt_client | 
|  |  | 
|  | def start_iperf_between_hosts(self, global_results, node_i, node_j, ip_i, ip_j, net_name): | 
|  | result = [] | 
|  | direct_raw_results = self.start_iperf_client(node_i, ip_j) | 
|  | result.append(direct_raw_results) | 
|  | print "1 forward" | 
|  | forward = "1 thread:\n" | 
|  | forward += direct_raw_results + " Gbits/sec" | 
|  |  | 
|  | direct_raw_results = self.start_iperf_client(node_i, ip_j, 10) | 
|  | result.append(direct_raw_results) | 
|  | print "10 forward" | 
|  | forward += "\n\n10 thread:\n" | 
|  | forward += direct_raw_results + " Gbits/sec" | 
|  |  | 
|  | reverse_raw_results = self.start_iperf_client(node_j, ip_i) | 
|  | result.append(reverse_raw_results) | 
|  | print "1 backward" | 
|  | backward = "1 thread:\n" | 
|  | backward += reverse_raw_results + " Gbits/sec" | 
|  |  | 
|  | reverse_raw_results = self.start_iperf_client(node_j, ip_i, 10) | 
|  | result.append(reverse_raw_results) | 
|  | print "10 backward" | 
|  | backward += "\n\n10 thread:\n" | 
|  | backward += reverse_raw_results + " Gbits/sec" | 
|  | global_results.append([node_i, node_j, | 
|  | net_name, forward, backward]) | 
|  |  | 
|  | self.kill_iperf_processes(node_i) | 
|  | self.kill_iperf_processes(node_j) | 
|  | return result | 
|  |  | 
|  | def draw_table_with_results(self, global_results): | 
|  | tab = tt.Texttable() | 
|  | header = [ | 
|  | 'node name 1', | 
|  | 'node name 2', | 
|  | 'network', | 
|  | 'bandwidth >', | 
|  | 'bandwidth <', | 
|  | ] | 
|  | tab.set_cols_align(['l', 'l', 'l', 'l', 'l']) | 
|  | tab.set_cols_width([27, 27, 15, 20, '20']) | 
|  | tab.header(header) | 
|  | for row in global_results: | 
|  | tab.add_row(row) | 
|  | s = tab.draw() | 
|  | print s | 
|  |  | 
|  | def start_iperf_client(self, minion_name, target_ip, thread_count=None): | 
|  | iperf_command = 'timeout --kill-after=20 19 iperf -c {0}'.format(target_ip) | 
|  | if thread_count: | 
|  | iperf_command += ' -P {0}'.format(thread_count) | 
|  | output = self.local_salt_client.cmd(tgt=minion_name, | 
|  | fun='cmd.run', | 
|  | param=[iperf_command]) | 
|  | # self.kill_iperf_processes(minion_name) | 
|  | try: | 
|  | result = output.values()[0].split('\n')[-1].split(' ')[-2:] | 
|  | if result[1] == 'Mbits/sec': | 
|  | return str(float(result[0])*0.001) | 
|  | if result[1] != 'Gbits/sec': | 
|  | return "0" | 
|  | return result[0] | 
|  | except: | 
|  | print "No iperf result between {} and {} (maybe they don't have connectivity)".format(minion_name, target_ip) | 
|  |  | 
|  |  | 
|  | def kill_iperf_processes(self, minion_name): | 
|  | kill_command = "for pid in $(pgrep  iperf); do kill $pid; done" | 
|  | output = self.local_salt_client.cmd(tgt=minion_name, | 
|  | fun='cmd.run', | 
|  | param=[kill_command]) |