return $telnet->{$ip} = $t;
}
-sub command {
+sub command_out {
my ($self,$command) = @_;
my $t = $self->telnet;
warn "## out = [$out]" if $ENV{DEBUG};
+ return $out;
+}
+
+sub command {
+ my ($self,$command) = @_;
+ my $out = $self->command_out( $command );
my $hash = $self->parse( $out );
warn "## ", $self->ip, " $command ",dump $hash;
copy ref $commands->{$command} eq 'ARRAY' ? @{$commands->{$command}} : undef;
}
+ if ( $self->can('custom') ) {
+ $hash = $self->custom( $port );
+ copy keys %$hash;
+ }
+
warn "# row = ",dump $row if $ENV{DEBUG};
$row = $self->fixup_row( $row ) if $self->can('fixup_row');
)],
}}
+sub custom {
+ my ($self,$port) = @_;
+
+ my $out = $self->command_out("show interface $port adsl-status");
+ my @lines = split(/\s*[\n\r]+/,$out);
+
+ shift @lines if $lines[0] =~ m/adsl-status/; # skip command
+ if ( $lines[2] !~ m/^-+$/ ) {
+ warn "Can't parse into table - missing header separator at index 2: $lines[2]";
+ return;
+ }
+ my @h1 = split(/\s+/, $lines[0]);
+ my @h2 = split(/\s+/, $lines[1]);
+ my @v = split(/\s+/, $lines[3]);
+
+ my $hash;
+ foreach my $i ( 0 .. $#v ) {
+ my $k = $h1[$i];
+
+ $h2[$i] =~ s/\(\w\)\s*$//; # remove unit
+
+ if ( $h2[$i] =~ m/\// && $v[$i] =~ m/\// ) {
+ my ($ln,$rn) = split(/\//, $h2[$i]);
+ my ($lv,$rv) = split(/\//, $v[$i]);
+ $hash->{ join('_',$k,$ln) } = $lv;
+ $hash->{ join('_',$k,$rn) } = $rv;
+ } else {
+ $hash->{ $h2[$i] ? $h1[$i] .'_'. $h2[$i] : $h1[$i] } = $v[$i];
+ }
+ }
+
+ return $hash;
+}
+
1;