fix more quirks in right column parsing
[APKPM.git] / lib / H1 / ZTEMSAN.pm
1 package H1::ZTEMSAN;
2 use Moose;
3
4 with 'H1::ZTE';
5 use Data::Dump qw(dump);
6
7 sub connect {
8         my ( $self,$ip ) = @_;
9
10         my $t = Net::Telnet->new( Timeout => 20, Port => 1123, Prompt => '/#/' );
11
12         $t->dump_log('/tmp/log') if $ENV{DEBUG};
13
14         warn "open";
15         $t->open( $ip );
16
17         $t->waitfor('/Login:/');
18         $t->print('root');
19         $t->waitfor('/Password:/');
20         $t->print('root');
21         $t->waitfor('/#/');
22
23         warn "login OK";
24
25         return $t;
26 }
27
28 sub parse {
29         my ( $self, $out ) = @_;
30
31         my $hash;
32         my $section = '';
33         my $last_line;
34         foreach my $line ( split(/[\n\r]+/, $out) ) {
35                 warn "# $line\n";
36                 if ( $line =~ m/^(\S+.*?)\s*:+\s+(\S+.*?)\s*$/ ) {
37                         my ($n,$v) = ($1,$2);
38                         $n =~ s/\(.+\)//;
39                         if ( $v =~ s/\s+(\S+)\s*:\s+(\S+.+)// ) {
40                                 # strip second column
41                                 my ($n2,$v2) = ($1,$2);
42                                 $n2 =~ s/\(.+\)//;
43                                 $hash->{ $section . $n2 } = $v2;
44                                 warn "## $n2 = $v2\n";
45                         }
46                         $hash->{ $section . $n } = $v;
47                         warn "## $n = $v\n";
48                 } elsif ( $line =~ m/^-+$/ ) {
49                         $section = $last_line . '_';
50                 }
51                 $last_line = $line;
52         }
53
54         warn "## hash = ",dump $hash;
55
56         return $hash;
57 }
58
59
60 sub commands {{
61         'show adsl port %s' => [],
62         'show adsl port %s line-config' => [],
63         'show adsl port %s physical-table' => [],
64 }}
65
66 sub fixup_row {
67         my ( $self, $row ) = @_;
68         # cleanup column names
69         foreach my $n ( grep { m/[:\s]/ } keys %$row ) {
70                 my $v = delete $row->{$n};
71                 $n =~ s/\s+/_/g;
72                 $n =~ s/:$// && $v =~ s/\skbps$//; # special case
73                 $row->{$n} = $v;
74         }
75
76         return $row;
77 }
78
79 1;
80