KUK
Server: Apache
System: Linux 247.44.167.72.host.secureserver.net 5.14.0-611.49.2.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Apr 30 09:05:08 EDT 2026 x86_64
User: root (0)
PHP: 8.0.30
Disabled: exec,passthru,shell_exec,system
Upload Files
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")