Skip to content
ping2.py 1.63 KiB
Newer Older
import socket
import re
import time
import subprocess

socket_path = "./tmp/sock"

def get_kpi_value():
    hostname = "8.8.8.8"
    count = 1
    wait = 5

    total_pings = 0
    successful_pings = 0
    try:
        # Run the ping command and capture the output
        result = subprocess.check_output(["ping", "-W", str(wait), "-c", str(count), hostname], universal_newlines=True)

        response_time = float(re.findall(r"time=([0-9.]+) ms", result)[0])
        successful_pings += 1

    except subprocess.CalledProcessError as e:
        response_time = -1

    total_pings += 1
    moving_loss_ratio = round(((total_pings - successful_pings) / total_pings * 100), 2)

    print("Packet loss: {}%".format(moving_loss_ratio))
    print("Latency: {} ms".format(response_time))
    return response_time

def main():
    try:
        while True:
            start_time = time.time()

            # Ping and capture latency and packet loss
            data = str(get_kpi_value())

            # Write results in socket
            try:
                client_socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
                client_socket.connect(socket_path)
                client_socket.send(data.encode())
                client_socket.close()
            except Exception as e:
                print(e)

            # Calculate the time taken by get_kpi_value()
            execution_time = time.time() - start_time
            # Wait the rest of the time
            wait_time = max(0, 6 - execution_time)
            time.sleep(wait_time)

    except KeyboardInterrupt:
        print("Script terminated.")

if __name__ == "__main__":
    main()