aboutsummaryrefslogtreecommitdiffstats
path: root/pingLogger.py
diff options
context:
space:
mode:
Diffstat (limited to 'pingLogger.py')
-rw-r--r--pingLogger.py58
1 files changed, 58 insertions, 0 deletions
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