Pull to refresh

Comments 29

Спасибо за приложение! Планируется ли переезд на GitHub? (На GitHub легче отправлять pull request)
Да, планируется. Разместил на скорую руку. В том числе планируется выложить исходники.
Будут. Но попозже. Сейчас пытаюсь определить полезную составляющую приложения. Стоит ли развивать.
Выложите на гитхаб, по звездам и пулл реквестам можно будет судить о дальнейшем развитии. Да и трекать фичреквесты\баги будет удобнее.
UFO just landed and posted this here
И еще не плохо бы видеть статус интерфейса up/down. И чтобы можно было отключать шапку таблицы. Т.е. вывод выглядел бы по маске: ||ifDescription|\n. Было бы совсем круто.
UFO just landed and posted this here
UFO just landed and posted this here
Концепцию утилиты строил исходя из того, что входные параметры только по аргументам. Выводить информацию в лог, в принципе, можно реализовать.
Да и еще обнаружил что ifDescription режется. В варианте без шапки снять ограничение на длину дескприпшена и убрать не значившийся пробелы. Была бы клевая утиля для нагиособразных утилит.
UFO just landed and posted this here
Понял, рассмотрим. Если что напишу в личку.
UFO just landed and posted this here
Главный цель программы, выводить графики в консоли без лишних телодвижений. В том числе установки дополнительного ПО и библиотек.
UFO just landed and posted this here
Добавлено в новой версии:
аргумент -l может принимать значения
<wtraf HOST -l> — минимальный листинг без шапки
<wtraf HOST -lt> — минимальный листинг с шапкой
<wtraf HOST -l++> — больше информации без шапки
<wtraf HOST -lt+> — больше информации с шапкой, в т.ч. up/down
UFO just landed and posted this here
Про up/down хорошо подмечено!
Спасибо за программу! проверил с mikrotik работает:)
Мне идея утилиты понравилась. Но показалась, что она работает несколько медленно по крайней мере с опцией -l. Я тут пораскинул умишком и на коленках изобразил одну из возможностей Вашей утили на perl. Реализована опция только -l. Представляю на суд общественности свою версию. В моем случае Ваша утилита работает 18 секунд, а моя 4 секунды
#!/usr/bin/perl -w
#
use strict;
#
#OIDS
use Net::SNMP qw(:snmp);
use Data::Dumper qw(Dumper);
use vars qw($OURVAR);
#
#Debug mode
my $debug=0;
my $log_file="/usr/share/cacti/log/test_query_juniper_rsvp_pl.log";
my $log_open = 0;
my $verbose=1;
my $xml_delimiter=':';
#
my ($snmp_auth,$snmp_community,$snmp_version,$snmp_port,$timeout,$snmp_user,$snmp_pw);
my ($result,$session,$error);
my $retries=1;
#
#SNMP OIDS;
my $ifIndex =".1.3.6.1.2.1.2.2.1.1";
my $ifStatus = ".1.3.6.1.2.1.2.2.1.8";
my $ifDescription = ".1.3.6.1.2.1.2.2.1.2";
my $ifName = ".1.3.6.1.2.1.31.1.1.1.1";
my $ifAlias = ".1.3.6.1.2.1.31.1.1.1.18";
my $ifType = ".1.3.6.1.2.1.2.2.1.3";
my $ifSpeed = ".1.3.6.1.2.1.2.2.1.5";
my $ifHWaddress = ".1.3.6.1.2.1.2.2.1.6";
my $ifInOctets = ".1.3.6.1.2.1.2.2.1.10";
my $ifOutOctets = ".1.3.6.1.2.1.2.2.1.16";
my $ifOutOctets64 = ".1.3.6.1.2.1.31.1.1.1.10";
my $FcIdName = ".1.3.6.1.4.1.2636.3.15.3.1.2";
my $FabricPriority = ".1.3.6.1.4.1.2636.3.15.3.1.3";
#
sub usage()
{
print «Usage: wtraf.pl -cCommunity -v(1|2) -l ip_device\n»;
}
#
#Main
#
#
my ($command,$i,$option,$ip,$list,$short)=0;
$snmp_version=1;
$snmp_community=«public»;
$timeout=1;

if ($#ARGV == -1 ){usage();exit;}
else{$i=0;
foreach $option (@ARGV)
{
chomp ($option);
if (($option =~ m/^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/) and ($i == $#ARGV)){$ip=$option;print «IPV4: $option\n»;}
elsif (($option =~ m/^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/) and ($i != $#ARGV)){
print «Wrong command line ip address must be last.\n»;
usage; exit;}
elsif ($option =~ m/\-l/){$command=$option;print «Option: $list\n»;$list=1;}
elsif ($option =~ m/^\-c\w+?$/) {
$snmp_community=$option;$snmp_community =~ s/^\-c//;
print«Community:$snmp_community\n»;}
elsif ($option =~ m/(^\-v\d$)/) {
$snmp_version=$option;
$snmp_version =~ s/^\-v//;
print«Version:$snmp_version\n»;}
$i++;
}
if ($command eq "-l"){print«List intrefaces:\n»}
print «Command line options:\nipv4:$ip\ncomunity:$snmp_community\nversion:$snmp_version\n»;
}
my %index_table;
if ($list==1){
($session,$error) = Net::SNMP->session(
-hostname => $ip,
-community => $snmp_community,
-version => $snmp_version,
-timeout => $timeout,
-retries=> 1,
-nonblocking => 0,
);
if ( !defined $session) { printf «ERROR: %s.\n», $error; exit 1}
####ifIndex
my $request_oid=$ifIndex;
$result = $session->get_table(
-baseoid => $request_oid,
-maxrepetitions => 10,
);
my %ifIndex=();
my %table=%{$result};
foreach my $key (keys %table)
{
my $data= $table{$key};
if ($key =~ /\.(\d+)$/)
{$key=$1;}
$ifIndex{$key}=$data;

}
####ifName
$request_oid=$ifName;
$result = $session->get_table(
-baseoid => $request_oid,
-maxrepetitions => 10,
);
if (!defined $result) { printf «ERROR: %s\n», $session->error(); $session->close(); exit 1; }
my %ifName=();
%table=%{$result};
foreach my $key (keys %table)
{
my $data= $table{$key};
if ($key =~ /\.(\d+)$/)
{$key=$1;}
$ifName{$key}=$data;
}
####ifAlias
$request_oid=$ifAlias;
$result = $session->get_table(
-baseoid => $request_oid,
-maxrepetitions => 10,
);
if (!defined $result) { printf «ERROR: %s\n», $session->error(); $session->close(); exit 1; }
my %ifAlias=();
%table=%{$result};
foreach my $key (keys %table)
{
my $data= $table{$key};
if ($key =~ /\.(\d+)$/)
{$key=$1;}
$ifAlias{$key}=$data;
}
####ifStatus
$request_oid=$ifStatus;
$result = $session->get_table(
-baseoid => $request_oid,
-maxrepetitions => 10,
);
if (!defined $result) { printf «ERROR: %s\n», $session->error(); $session->close(); exit 1; }
my %ifStatus=();
%table=%{$result};
foreach my $key (keys %table)
{
my $data= $table{$key};
if ($key =~ /\.(\d+)$/)
{$key=$1;}
$ifStatus{$key}=$data;

}
###############################
snmp_dispatcher();
$session->close();
my data="";
foreach my $key (sort keys %ifIndex)
{
print "$ifIndex{$key}|$ifName{$key}|$ifAlias{$key}|$ifStatus{$key}\n";
}
}
#End
Спасибо, как раз ранее был написан скрипт на perl.
Для автономности решено было собрать статические библиотеки net-snmp, pdcurses(ncurses) и boost. И написать утилитку на c++.
Ввиду сырости программы такая пока скорость, буду улучшать.
Для сбора информации по интерфейсам использую функцию библиотеки net-snmp:
«netsnmp_query_walk(hrprload_var, sess_handle);»
Кстати проверил у себя, сканирует в лет — 1 сек.
Вероятно у тебя низкий la на сервере.
Поподробней пожалуйста. Может реализуем.
Имеется ввиду возможность сборки (или готовый бинарник) для архитектуры arm, armv7l и т.п.(всевозможные одноплатники). Вероятно, после переезда исходников на github проблем собрать самому не возникнет, но всё же…
Sign up to leave a comment.

Articles