Рубрики

Лучшие статьи

Проверка канала

Опубликовал 23 июля 2011 в рубрике FreeBSD. Комментарии: Один комментарий   Просмотров: 1 просмотров

freebsd perl script проверка интернет каналНачальство захотело знать качество внешнего канала с более-менее подробной статистикой. Сколько потерь до первого шлюза, 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`;

Первый запуск скрипт создает табличкуи начинает собирать стату. В базе будет время отклика, % потерь.

Выглядит конечно сыровато, но работает. Дорабатывать буду потом.

Поделись:
  • Добавить ВКонтакте заметку об этой странице
  • Мой Мир
  • Facebook
  • Twitter
  • LiveJournal
  • MySpace
  • В закладки Google
  • Google Buzz
  • Яндекс.Закладки
  • LinkedIn
  • Technorati
  • del.icio.us
  • Digg
  • БобрДобр
  • Memori.ru
  • МоёМесто.ru
  • Сто закладок
  • Blogger
  • Блог Li.ру
  • Блог Я.ру
  • Одноклассники

Метки: ,
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Загрузка ... Загрузка ...

К записи Один комментарий

Здравствуйте. а скрин вэб-морды покажите?



Оставить комментарий или два

RSS

rss Подпишитесь на RSS для получения обновлений.

Add to Google Reader or Homepage

Подписаться на рассылку E-Mail:

Опрос

Статьи на какую тему Вам более интересны?

Просмотреть результаты

Загрузка ... Загрузка ...