From 59313925ddce08cbcadca8605fc5a3c1d5b6d439 Mon Sep 17 00:00:00 2001 From: jwansek Date: Thu, 26 Feb 2026 18:13:08 +0000 Subject: Initial commit --- pingLogger.py | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 pingLogger.py (limited to 'pingLogger.py') diff --git a/pingLogger.py b/pingLogger.py new file mode 100644 index 0000000..e114780 --- /dev/null +++ b/pingLogger.py @@ -0,0 +1,58 @@ +from influxdb_client import InfluxDBClient, Point, WritePrecision +from influxdb_client.client.write_api import SYNCHRONOUS +import subprocess +import dotenv +import json +import re +import os + +PING_INDEXES = ["rtt_min", "rtt_avg", "rtt_max", "rtt_mdev"] + +def do_ping(host, numpings): + proc = subprocess.Popen(["ping", host, "-c", str(numpings)], stdout = subprocess.PIPE) + out = [] + while True: + line = proc.stdout.readline() + if not line: + break + line = line.rstrip().decode() + print(line) + out.append(line) + + return { + "packet_loss_percent": int(re.findall(r"\d+", out[-2].split(", ")[2])[0]), + "total_time": int(re.findall(r"\d+", out[-2].split(", ")[3])[0]) + } | {PING_INDEXES[i]: float(f) for i, f in enumerate(out[-1].split(" ")[3].split("/"), 0)} + +def influx_write(fields): + influxc = InfluxDBClient( + url = "http://%s:8086" % INFLUXDB_HOST, + token = os.environ["DOCKER_INFLUXDB_INIT_ADMIN_TOKEN"], + org = os.environ["DOCKER_INFLUXDB_INIT_ORG"] + ) + influxc.ping() + + write_api = influxc.write_api(write_options = SYNCHRONOUS) + write_api.write( + os.environ["DOCKER_INFLUXDB_INIT_BUCKET"], + os.environ["DOCKER_INFLUXDB_INIT_ORG"], + [{ + "measurement": "ping_logger", + "fields": fields + }], + write_precision = WritePrecision.S + ) + +def main(): + fields = do_ping(os.environ["PING_HOST"], os.environ["NUM_PINGS"]) + print(json.dumps(fields, indent = 4)) + influx_write(fields) + +if __name__ == "__main__": + env_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "config.env") + if os.path.exists(env_path): + import dotenv + dotenv.load_dotenv(dotenv_path = env_path) + INFLUXDB_HOST = "192.168.69.5" + + main() \ No newline at end of file -- cgit v1.2.3