96a56f5d5ef51ed6079e85643c539ad8d9f342e0
[dell-switch] / vlan-ports.pl
1 #!/usr/bin/perl
2 use warnings;
3 use strict;
4 use autodie;
5 use Data::Dump qw(dump);
6
7 # ./vlan-ports.pl ./log/*sw-{dpc,e300}*vlan* | less
8
9 my @logs = @ARGV;
10
11 my $stat;
12
13 foreach my $log ( @logs ) {
14         open(my $log_fh, '<', $log);
15         my $sw = $log; $sw =~ s/^.*?_//; $sw =~ s/_.*$//;
16         while(<$log_fh>) {
17                 chomp;
18                 if ( m/\s*(\d+)\s+(\S+)\s+([gc]\S+)\s+(\w+)\s+(\w+)/ ) {
19                         my ($vlan,$name,$ports,$type,$authorization) = ( $1,$2,$3,$4,$5 );
20
21                         warn "$sw $vlan $name $ports $type $authorization\n";
22                         $stat->{$sw}->{_vlan_count}->{$vlan}++;
23
24                         while ( $ports =~ s/(ch\([^\)]+\))// ) {
25                                 warn "# removed [$1] from ports\n";
26                         }
27
28                         while ( $ports =~ s/(\d+)-(\d+)// ) {
29                                 foreach my $port ( $1 .. $2 ) {
30                                         push @{ $stat->{$sw}->{$port} }, $vlan;
31                                 }
32                         }
33                         while ( $ports =~ s/(\d+)// ) {
34                                 my $port = $1;
35                                 push @{ $stat->{$sw}->{$port} }, $vlan;
36                         }
37                         #warn "# ports left:[$ports] stat = ",dump($stat);
38                 } else {
39                         warn "INGORED [$_]";
40                 }
41         }
42 }
43
44 print dump($stat);
45