1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| # -*- coding: cp1252 -*-
## Ping Logger
## The script ping an host and add an entry on the ping database (used with crontab each minutes)
##== MYSQL TABLE ==
## CREATE TABLE `kedare`.`ping` (
##`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
##`when` DATETIME NOT NULL ,
##`result` TEXT NOT NULL ,
##`transmitted` TINYINT NOT NULL ,
##`received` TINYINT NOT NULL ,
##`duplicates` TINYINT NOT NULL ,
##`loss` TINYINT NOT NULL ,
##`time` INT NOT NULL ,
##PRIMARY KEY ( `id` ) ,
##INDEX ( `when` , `transmitted` , `received` , `duplicates` , `loss` , `time` ) ,
##FULLTEXT (
##`result`
##)
##) ENGINE = MYISAM
##
import MySQLdb
import subprocess
import re
HOME = "***.***.***.***"
PING = ["/bin/ping","-c5", "-v", "-W2", "%s" % (HOME)]
def main():
dbcon = MySQLdb.connect(
host = "127.0.0.1",
user = "kedare",
passwd = "****",
db = "kedare")
output = subprocess.Popen(PING, stdout=subprocess.PIPE).communicate()
result = output[0].split("\n")[-3]
parsed = parse_ping_output(result)
if parsed[2] == "":
parsed[2] = "0"
(ptransmitted, preceived, pduplicates, ploss, ptime) = [int(e) for e in parsed]
dbcur = dbcon.cursor()
dbcur.execute("""
INSERT INTO ping VALUES
(
DEFAULT,
NOW(),
%s,
%s,
%s,
%s,
%s,
%s
);""", (output[0], ptransmitted, preceived, pduplicates, ploss, ptime))
dbcur.close()
def parse_ping_output(ping_output):
reobj = re.compile(r"([0-9]+)\spackets\stransmitted,\s([0-9]+)\sreceived,\s(\+([0-9]+)\sduplicates,\s)*([0-9]+)%\spacket\sloss,\stime\s([0-9]+)ms")
match = reobj.search(ping_output)
result_list = list()
if match:
find_result = reobj.findall(ping_output)
for i in range(len(find_result[0])):
if i != 2:
result_list.append(find_result[0][i])
return result_list
if __name__ == "__main__":
main() |
Partager