EVOLUTION-NINJA
Edit File: iperf3.py
import json import logging import os import subprocess class Iperf3Runner: def __init__(self, iperf3_bin, url=None): if url is None: self.url = "speed.fortisase.com" else: self.url = url self.port = 30000 self.iperf_bin = iperf3_bin stat = os.stat(self.iperf_bin) perms = oct(stat.st_mode)[-3:] if "744" != perms: os.chmod(iperf3_bin, 0o744) self.log = logging.getLogger("Agent") def _run_test(self, iperf_args, response_key): p = subprocess.run( iperf_args, shell=True, capture_output=True, check=True, encoding="utf-8" ) response = json.loads(p.stdout) bps = response["end"]["streams"][0][response_key]["bits_per_second"] metric_name = "download speed" if response_key == "sender": metric_name = "upload speed" self.log.info( "Metric {} args {} -> {} bits/s".format(metric_name, iperf_args, bps) ) return bps def get_download_speed(self): info = {"ip": self.url, "download_port": self.port} args = "{} -c {} -p {} -t 10 -R --json".format( self.iperf_bin, info["ip"], info["download_port"] ) return self._run_test(iperf_args=args, response_key="receiver") def get_upload_speed(self): info = {"ip": self.url, "upload_port": self.port} args = "{} -c {} -p {} -t 10 --json".format( self.iperf_bin, info["ip"], info["upload_port"] ) return self._run_test(iperf_args=args, response_key="sender")