Проверка канала
Начальство захотело знать качество внешнего канала с более-менее подробной статистикой. Сколько потерь до первого шлюза, ya.ru за определенный промежуток времени. Решил поднять для начала на домашнем компутере, посмотреть как оно будет работать и будет ли вообще
Скрипт будет пинговать заданный адрес 30ю пакетами каждую минуту, а результаты складировать в базу mysql. Рисовать решил на perl, всё таки он побыстрее простого sh должен быть. Выполняться будет по крону каждую минуту. Структуру базы пока не особо продумал, в частности типы полей, но пока работает. Оптимизацией попозже займусь.
А имея заполненную БД, можно уже нарисовать веб-морду например. Или графики к кактусу. Графики мне больше нравятся, ибо визуально сразу видно когда падало, а с веб-мордой еще задавать входящие параметры, ждать результат обработки запросов…муторно вощем. Разве что показать статистику насяльнику, не залазяя в сам mysql
Вообщем вот мой скриптик
#!/usr/bin/perl #ping statistics for our inet-canals #ver 0.01 by maf#date vars $year=`date '+%Y'`; $year=substr($year,0,4); $month=`date '+%m'`; $month=substr($month,0,2); $day=`date '+%d'`; $day=substr($day,0,2); $hour=`date '+%H'`; $hour=substr($hour,0,2); $minute=`date '+%M'`; $minute=substr($minute,0,2); $sec=`date '+%S'`; $sec=substr($sec,0,2); #vars $lockfile=»/tmp/lockfile.gw_».$year.»_».$month.»_».$day.»_».$hour.»_».$minute; $tmp=»/tmp/tmp.gw_».$year.»_».$month.»_».$day.»_».$hour.»_».$minute.»_».$sec; $dt=$year . «-» . $month . «-» . $day . » » . $hour . «:» . $minute . «:» . $sec; #—db settings— $host='localhost'; $user='pingpong'; $pass='pass4ping'; $db='ping'; $table='ping_ya'; #—ping properities— $quan='30'; #quantity $inet_host='ya.ru'; if(-e «$lockfile») { print «$lockfile is already exist, check it. I'm quit.»; exit(); } `touch $lockfile`; use Mysql; use Time::localtime; $year=localtime->year() + 1900; $dbc = Mysql->Connect($host,$db,$user,$pass); if($dbc) { $sql=»CREATE TABLE IF NOT EXISTS `ping_ya_» . $year . «_» .$month . «` (`id` INT(16) NOT NULL auto_increment, `transm_pck` smallint(2) NOT NULL, `recieve_pck` smallint(2) NOT NULL, `avg` char(5) NOT NULL, `loss` char(4) NOT NULL, `date` DATETIME NOT NULL, PRIMARY KEY(`id`)) ENGINE=MyISAM»; } else { print «Could not connect to databse!»; } $dbc->Query(«$sql»); `ping -t $quan -q $inet_host > $tmp`; open(png, «cat $tmp | grep -e loss|») or die || «cannot get $tmp»; while() { ($p1, $p2, $p3, $p4, $p5, $p6, $p7, $p8, $p9) = split(' '); $p7 =~ s/%//g; } open(pckts, «cat $tmp | grep -e round-trip|»); while() { ($s1, $s2, $s3, $s4, $s5, $s6, $s7) = split ('/'); } $query=»INSERT INTO `ping_ya_» . $year . «_» . $month . «` (`transm_pck`, `recieve_pck`, `avg`, `loss`, `date`) VALUES('» . $p1 . «', '» . $p4 . «','» . $s5 . «','» . $p7 . «','» . $dt . «')»; $dbc->Query(«$query») or die $Mysql::db_errstr; `rm $lockfile`; `rm $tmp`; |
Первый запуск скрипт создает табличкуи начинает собирать стату. В базе будет время отклика, % потерь.
Выглядит конечно сыровато, но работает. Дорабатывать буду потом.
Здравствуйте. а скрин вэб-морды покажите?