Created
February 2, 2021 16:21
-
-
Save ara-ta3/fbdde9ffe437f612eb696177ee5e5556 to your computer and use it in GitHub Desktop.
ping.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import argparse | |
from typing import NamedTuple, Dict | |
# 下記commandを前提にしてる | |
# ping -s 16 -i 1 -c 86400 google.com | LANG=C xargs -I_ gdate +'%c _' > ping.txt | |
def main(): | |
parser = argparse.ArgumentParser() | |
parser.add_argument('infile', type=argparse.FileType('r', encoding='utf-8')) | |
parser.add_argument('--mode', type=str) | |
parser.add_argument('--csv', action='store_true') | |
args = parser.parse_args() | |
mode = args.mode | |
ping = Ping() | |
for i in args.infile: | |
if 'PING' in i or 'ping statistics' in i or 'packets transmitted' in i or 'round-trip' in i or 'Destination' in i or 'Vr HL TOS Len ID Flg off TTL Pro cks Src Dst' in i: | |
pass | |
elif 'Request' in i: | |
_, month, day, t, y, _, _, _, _, _ = i.split() | |
h, m, s = t.split(":") | |
m = None if mode is None else int(int(m) / 10) * 10 | |
ping.plus_timeout(y, month, day, h, m) | |
else: | |
_, month, day, t, y, _, _, _, _, _, _, time_ms, _ = i.split() | |
h, m, s = t.split(":") | |
m = None if mode is None else int(int(m) / 10) * 10 | |
_, sec = time_ms.split("=") | |
ping.plus_ping(y, month, day, h, m, float(sec)) | |
if args.csv: | |
print("Time,N,Timeout,Ping,Avg ms") | |
for k, v in ping.data.items(): | |
p = v["ping"] | |
t = v["timeout"] | |
n = p + t | |
avg = v["ms"] / p if p != 0 else 0 | |
print("{},{},{},{},{}".format(k, n, t, p, avg)) | |
else: | |
for k, v in ping.data.items(): | |
p = v["ping"] | |
t = v["timeout"] | |
n = p + t | |
avg = v["ms"] / p if p != 0 else 0 | |
print("{} --- N: {}, Timeout: {}, Ping: {}, Avg ms: {}".format(k, n, t, p, avg)) | |
class Ping: | |
data: Dict[str, Dict[str, float]] = {} | |
def plus_timeout(self, year, month, day, hour, m): | |
key = self._to_key(year, month, day, hour, m) | |
self._plus(key, "timeout") | |
def plus_ping(self, year, month, day, hour, min, ms): | |
key = self._to_key(year, month, day, hour, min) | |
self._plus(key, "ping") | |
self.data[key]["ms"] += ms | |
def _to_key(self, year, month, day, hour, min): | |
return "{} {} {} {}:00".format(year, month, day, hour) if min is None else "{} {} {} {}:{}".format(year, month, day, hour, str(min).zfill(2)) | |
def _plus(self, key: str, timeout_or_ping: str): | |
self.data.setdefault(key, { | |
"timeout": 0, | |
"ping": 0, | |
"ms": 0 | |
}) | |
self.data[key][timeout_or_ping] += 1 | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment