55ok
| Direktori : /lib/fm-agent/library/ |
| Current File : //lib/fm-agent/library/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")