Merge branch 'devel' of h1dev:/srv/APKPM/
[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+([a-zA-Z]\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                         } elsif ( $v =~ s/(\d+)([a-zA-Z]\S+)\s*:\s*(\S*.*?)\s*$/$1/ ) { # numberField without space
46                                 # strip second column
47                                 my ($n2,$v2) = ($1,$2);
48                                 $n2 =~ s/\(.+\)//;
49                                 $hash->{ $section . $n2 } = $v2;
50                                 warn "## $n2 = $v2\n";
51                         }
52                         $hash->{ $section . $n } = $v;
53                         warn "## $n = $v\n";
54                 } elsif ( $line =~ m/^-+$/ ) {
55                         $section = $last_line . '_';
56                 }
57                 $last_line = $line;
58         }
59
60         warn "## hash = ",dump $hash;
61
62         return $hash;
63 }
64
65
66 sub commands {{
67         'show adsl port %s' => [],
68         'show adsl port %s line-config' => [],
69         'show adsl port %s physical-table' => [],
70         'show adsl port %s perf-data' => [],
71 }}
72
73 sub fixup_row {
74         my ( $self, $row ) = @_;
75         # cleanup column names
76         foreach my $n ( grep { m/[:\s]/ } keys %$row ) {
77                 my $v = delete $row->{$n};
78                 $n =~ s/\s+/_/g;
79                 $n =~ s/:$// && $v =~ s/\skbps$//; # special case
80                 $row->{$n} = $v;
81         }
82
83         return $row;
84 }
85
86 1;
87