Monitoreo con ping
A veces mi proveedor de internet anda mal. Una de las cosas que pasan es que empieza a dropear muchos paquetes y, para ver eso, hago un ping. El problema es que el ping no te dice el porcentaje de los paquetes que se cayeron :/. Por lo tanto hice un script en python, al que llamé pingmon.py, que wrappea ping y da esa información en cada vuelta exitosa de un paquete.
La salida se ve así:
$ pingmon.py 8.8.8.8
Packets returned: 1 Packet count: 1 Return percentage: 100.00 %
Packets returned: 2 Packet count: 4 Return percentage: 50.00 %
Packets returned: 3 Packet count: 5 Return percentage: 60.00 %
Packets returned: 4 Packet count: 7 Return percentage: 57.14 %
Packets returned: 5 Packet count: 8 Return percentage: 62.50 %
Packets returned: 6 Packet count: 11 Return percentage: 54.55 %
Y el código del script es éste:
import subprocess
import sys
import re
SEQ_NUMBER_RE = re.compile(".*icmp_seq=(\d+) ttl.*")
def monitor(ip):
ping = subprocess.Popen(["ping", ip], stdout=subprocess.PIPE)
stdout = ping.stdout
stdout.readline() # Ignore first line
line_count = 0
while True:
line_count +=1
seq_number = int( SEQ_NUMBER_RE.match(stdout.readline()).group(1))
print "Packets returned: %d Packet count: %d Return percentage: %.2f %%" % (line_count, seq_number, (100.0 * line_count)/seq_number )
def main(argv):
monitor(argv[1])
Espero que les sirva,
Aureliano.