Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Nurlan Mukhanov                      2:5020/400     21 Apr 2002  03:27:36
 To : All
 Subject : Скорость сети
 -------------------------------------------------------------------------------- 
 
 сразу скажу, что Linuxe и Perl новичек и возможно есть другие способы
 определения скорости, но я намутил вот что
 
 скрипт запускается с периодичностью в минуту.. поэтому в подпрограмме идет
 деление на 60 (секунд)
 ============================================================================
 ============
 #!/usr/bin/perl
 
 my $tr = traf('eth1');
 
 my $speed = speed($tr);
 print STDERR "\nIN: $speed->{'in'} kb/s, OUT: $speed->{'out'} kb/s\n\n";
 
 sub traf {
     my $int = shift;
     my @eth = `ifconfig $int`;
     my %traf;
     $traf{'collis'} = "0";
     $traf{'output'} = "0";
     $traf{'input'} = "0";
 # Возвращаем нули, если был указан не правильный интерфейс
     return \%traf if (scalar(@eth)<3);
 # Считываем весь массив и забираем только те значения
 # где хранятся коллизии и переданные байты
     my @val = grep(/.*?(collisions|RX bytes)/,@eth);
     $val[0] =~ /.*?(\d+)\s+.*/;
     $traf{'collis'} = $1;
 
     $val[1] =~ /.*?(\d+)\s+\(.*?\).*?(\d+)\s+.*/;
     $traf{'output'} = $2;
     $traf{'input'} = $1;
 
 # Открываем файл и забираем от туда значения
     open(ETH,"$DIR/eth_last");
     my @value = split(/\s/,<ETH>);
     close(ETH);
 # Открываем еще раз файл, но уже на запись
 # Записываем туда последние значения, которые были получены
     open(ETH,">$DIR/eth_last");
     print ETH "$traf{'collis'} $traf{'output'} $traf{'input'}";
     close(ETH);
 
 # Сравниваем те значения, которые были считанны с файла
 # и те, которые только что получили.
 # Если в файле значения меньше тех которые мы только что получили, то
 # от текущих значений отнимаем предыдущие.
 # Мы бы могли использовать в базе значения COUNT, но тогда будет не
 # верный отсчет, если интерфейс упадет, или компьютер будет
 # перезапущен.
     if (defined($value[0]) and $traf{'output'} > $value[1]) {
         $traf{'output'} -= $value[1];
         $traf{'input'} -= $value[2];
         $traf{'collis'} -= $value[0];
     } else {
 # Мы не можем с точностью определить сколько времени работал
 # интерфейс, и поэтому приравняем элементы хеша к нулю.
 # При следующем запросе мы высчитаем разницу с теми значениями,
 # которые были записаны в файл
         $traf{'collis'} = 0;
         $traf{'output'} = 0;
         $traf{'input'} = 0;
     };
 # Записываем в файл текущие значения
     open(ETH,">$DIR/eth_cur");
     print ETH "$traf{'collis'} $traf{'output'} $traf{'input'}";
     close(ETH);
 
     return \%traf;
 }
 
 sub speed {
     my $pk = shift;
     my %spd;
     $spd{'in'} = sprintf("%.1f",$pk->{'input'} / 60 / 1024 * 10);
     $spd{'out'} = sprintf("%.1f",$pk->{'output'} / 60 / 1024 * 10);
     return \%spd;
 }
 ============================================================================
 ============
 Получаю примерно вот что:
 
 IN: 35.3 kb/s, OUT: 165.9 kb/s
 
 Hа сколько точно измерения?
 Может есть другие способы?
 
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Скорость сети   Nurlan Mukhanov   21 Apr 2002 03:27:36 
 Скорость сети   Alan Long   23 Apr 2002 12:47:14 
Архивное /ru.perl/78240036b8f5.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional