4bf814497031785b7c50617ce1f1fb67ae43e6e0
[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 } = $2;
44                         }
45                         $hash->{ $section . $n } = $v;
46                         warn "## $n = $v\n";
47                 } elsif ( $line =~ m/^-+$/ ) {
48                         $section = $last_line . '_';
49                 }
50                 $last_line = $line;
51         }
52
53         warn "## hash = ",dump $hash;
54
55         return $hash;
56 }
57
58
59 sub commands {{
60         'show adsl port %s' => [],
61         'show adsl port %s line-config' => [],
62         'show adsl port %s physical-table' => [],
63 }}
64
65 sub fixup_row {
66         my ( $self, $row ) = @_;
67         # cleanup column names
68         foreach my $n ( grep { m/[:\s]/ } keys %$row ) {
69                 my $v = delete $row->{$n};
70                 $n =~ s/\s+/_/g;
71                 $n =~ s/:$// && $v =~ s/\skbps$//; # special case
72                 $row->{$n} = $v;
73         }
74
75         return $row;
76 }
77
78 1;
79