import subprocess
from random import choice
import logging
from datetime import datetime

def load_ips(filename):
    with open(filename, 'r') as file:
        ips = file.read().splitlines()
    return ips

def run_server_commands(server_ips):
    for ip in server_ips:
        cmd = f"ssh root@{ip} 'nohup iperf -s > /dev/null 2>&1 &'"
        subprocess.Popen(cmd, shell=True)

def run_client_commands(client_ips, server_ips):
    """让客户端连接到对应的服务器进行性能测试，并保存日志。"""
    for client_ip, server_ip in zip(client_ips, server_ips):
        server_ip = choice(server_ips)
        # 为每个客户端生成日志文件名
        log_filename = f"/root/presurelog/iperf.log"
        cmd = f"ssh root@{client_ip} 'iperf -c {server_ip} -P 16 -l 4096 -f g -t 30' > {log_filename}"
        logging.info(f"Running command: {cmd}")
        subprocess.Popen(cmd, shell=True)

def main(ip_list_file):
    """主函数，从文件中读取IP列表，分配服务器和客户端，然后进行测试。"""
    ips = load_ips(ip_list_file)
    mid_index = len(ips) // 2

    server_ips = ips[:mid_index]
    client_ips = ips[mid_index:]

    # 确保服务器和客户端数量相匹配
    assert len(server_ips) == len(client_ips), "服务器和客户端的数量不匹配。"

    run_server_commands(server_ips)
    # 给服务器一些时间来启动
    subprocess.run(["sleep", "5"])
    run_client_commands(client_ips, server_ips)

if __name__ == "__main__":
    ip_list_file = 'path_to_your_ip_list_file.txt'  # 替换为你的IP列表文件路径
    main(ip_list_file)