X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=lib%2FH1%2FZTEDSLAM.pm;h=8f9e8563a3b84b43c55c72e72ae9bca56abff430;hb=50a815ae91cf4d7bd387f9e560e950f36e0a0af0;hp=44079833ac61321260300b0ca32f1dfe76168fd6;hpb=91fd23b24b2a9e40f798c1fb6010bdda4bfe02ef;p=APKPM.git diff --git a/lib/H1/ZTEDSLAM.pm b/lib/H1/ZTEDSLAM.pm old mode 100755 new mode 100644 index 4407983..8f9e856 --- a/lib/H1/ZTEDSLAM.pm +++ b/lib/H1/ZTEDSLAM.pm @@ -1,36 +1,15 @@ package H1::ZTEDSLAM; -use warnings; -use strict; - use Moose; -use Net::Telnet; -use Data::Dump qw(dump); - -use Moose::Util::TypeConstraints; -use Regexp::Common qw(net); - -subtype IPAddr -=> as Str -=> where {/^$RE{net}{IPv4}$/} -=> message { 'invalid IP address'}; - -has 'ip' => ( is => 'rw', isa => 'IPAddr' ); +with 'H1::ZTE'; -our $telnet; - -sub telnet { - my $self = shift; - - my $ip = $self->ip; - - return $telnet->{$ip} if exists $telnet->{$ip}; +sub connect { + my ( $self, $ip ) = @_; my $t = Net::Telnet->new( Timeout => 10, Prompt => '/#/' ); $t->dump_log('/tmp/log') if $ENV{DEBUG}; - warn "open $ip"; $t->open( $ip ); $t->print(""); @@ -46,33 +25,17 @@ sub telnet { warn "login OK"; - return $telnet->{$ip} = $t; + return $t; } -sub command { - my ($self,$command) = @_; - - $command .= ' ' . $self->{port}; - my $t = $self->telnet; - - warn "# $command\n"; - $t->print($command); - - my $out; - while (1) { - my($prematch, $match) = $t->waitfor('/(Press any key to continue \(Q to quit\)|#)/'); - $out .= $prematch; - last if $match eq '#'; - $t->print(''); - } - - warn "## out = [$out]" if $ENV{DEBUG}; +sub parse { + my ( $self, $out ) = @_; my $hash; foreach my $line ( split(/[\n\r]+/, $out) ) { warn "# $line\n" if $ENV{DEBUG}; - if ( $line =~ m/^(\S+.*?)\s+:\s+(\S+.*)$/ ) { + if ( $line =~ m/^(\S+.*?)\s*:\s+(\S+.*)$/ ) { my ($n,$v) = ($1,$2); $n =~ s/\(.+\)//; $hash->{$n} = $v; @@ -81,42 +44,19 @@ sub command { } - warn "## ", $self->ip, " $command ",dump $hash; - return $hash; } -sub hash { - my ($self,$port) = @_; - - my $ip = $self->ip; - $self->{port} = $port; - - warn "# hash $ip $port"; - -our ( $row, $hash ); - -sub copy { - foreach my $name (@_) { -# warn "# copy $name ", dump( $row ),$/; - $row->{$name} = $hash->{$name}; - } -} - -$hash = $self->command('show interface'); -copy qw( +sub commands {{ + 'show interface %s' => [ qw( AdminStatus LinkStatus LastLinkUpTime -); - -$hash = $self->command('show adsl status'); -copy qw( + )], + 'show adsl status %s' => [ qw( LineConfProfile -); - -$hash = $self->command('show adsl physical'); -copy qw( + )], + 'show adsl physical %s' => [ qw( AtucCurrSnrMgn AtucCurrAtn AtucCurrStatus @@ -129,33 +69,8 @@ AturCurrStatus AturCurrOutputPwr AturAttainableRate AturDMTState -); - -warn "# row = ",dump $row if $ENV{DEBUG}; - -return $row; - -} # sub - - -sub logout { - my $self = shift; - my $ip = $self->ip; - my $t = delete $telnet->{$ip}; - die "no $ip telnet in ",dump($telnet) unless $t; - - warn "logout $ip"; - $t->print('logout'); - $t->waitfor('/:/'); - $t->print('y'); - -} - -sub DESTROY { - my $self = shift; - warn "# DESTROY telnet = ",dump( keys %$telnet ); - $self->logout($_) foreach keys %$telnet; -} + )], +}} 1;