|
|
@@ -14,15 +14,11 @@ sub cdata_extract_onu_info {
|
|
|
return map([ split(' ', $_) ], @onu_info );
|
|
|
};
|
|
|
|
|
|
-async cdata_inspect => sub
|
|
|
+async cdata_login => sub
|
|
|
{
|
|
|
- my $ip = shift;
|
|
|
- my $login = shift;
|
|
|
+ my $t = shift;
|
|
|
+ my $login = shift;
|
|
|
my $password = shift;
|
|
|
- my $tree = shift;
|
|
|
-
|
|
|
- my $t = new telnet($ip);
|
|
|
-# $t->debug(1);
|
|
|
|
|
|
await $t->connect;
|
|
|
|
|
|
@@ -36,47 +32,52 @@ async cdata_inspect => sub
|
|
|
await $t->cmd("config");
|
|
|
await $t->cmd("vty output show-all");
|
|
|
|
|
|
- $t->print("interface epon 0/0");
|
|
|
- $t->prompt(qr/#\s?$/);
|
|
|
+};
|
|
|
+
|
|
|
+async cdata_get_onu_info => sub
|
|
|
+{
|
|
|
+ my $t = shift;
|
|
|
+ my $tree = shift;
|
|
|
+
|
|
|
+ await $t->cmd("interface epon 0/0");
|
|
|
my @lines = await $t->cmd("show ont info $tree all");
|
|
|
|
|
|
my $onu_count_line = @lines[@lines-3];
|
|
|
|
|
|
-
|
|
|
$onu_count_line =~ m|Total: (\d+), online (\d+)|;
|
|
|
my $total_onu_cnt = $1;
|
|
|
my $online_onu_cnt = $2;
|
|
|
my $offline_onu_cnt = $total_onu_cnt - $online_onu_cnt;
|
|
|
|
|
|
- $t->close;
|
|
|
-
|
|
|
if ($lines[2] =~ /Error/) {
|
|
|
$total_onu_cnt = 0;
|
|
|
$online_onu_cnt = 0;
|
|
|
$offline_onu_cnt = 0;
|
|
|
}
|
|
|
|
|
|
+ await $t->cmd("exit");
|
|
|
+
|
|
|
my @onu_info = cdata_extract_onu_info(@lines);
|
|
|
|
|
|
my @online_onu = grep { @$_[5] =~ "online" } @onu_info;
|
|
|
- @online_onu = map join(' ', @$_[2,3]), @online_onu;
|
|
|
+ @online_onu = map [@$_[2,3]], @online_onu;
|
|
|
|
|
|
my @offline_onu = grep { @$_[5] =~ "offline|powerdown" } @onu_info;
|
|
|
- @offline_onu = map join(' ', @$_[2,3]), @offline_onu;
|
|
|
-
|
|
|
- my $res = "Всего: $total_onu_cnt
|
|
|
-Количество активных ONU: $online_onu_cnt
|
|
|
-Количество неактивных ONU: $offline_onu_cnt
|
|
|
-\n";
|
|
|
+ @offline_onu = map [@$_[2,3]], @offline_onu;
|
|
|
|
|
|
- $res = $res . "Неактивные ONU:\n" . join("\n", @offline_onu) . "\n\n" if $offline_onu_cnt;
|
|
|
+ my %res = (
|
|
|
+ 'total_cnt' => $total_onu_cnt,
|
|
|
+ 'active_cnt' => $online_onu_cnt,
|
|
|
+ 'inactive_cnt' => $offline_onu_cnt,
|
|
|
+ 'active' => [ @online_onu ],
|
|
|
+ 'inactive' => [ @offline_onu ],
|
|
|
+ );
|
|
|
|
|
|
- $res = $res . "Активные ONU:\n" . join("\n", @online_onu) if $online_onu_cnt;
|
|
|
+ return %res;
|
|
|
|
|
|
- return $res;
|
|
|
};
|
|
|
|
|
|
-async cdata_onu => sub
|
|
|
+async cdata_inspect => sub
|
|
|
{
|
|
|
my $ip = shift;
|
|
|
my $login = shift;
|
|
|
@@ -86,47 +87,27 @@ async cdata_onu => sub
|
|
|
my $t = new telnet($ip);
|
|
|
# $t->debug(1);
|
|
|
|
|
|
- await $t->connect;
|
|
|
-
|
|
|
- await $t->reply(qr/User name:/, $login);
|
|
|
- await $t->reply(qr/User password:/, $password);
|
|
|
-
|
|
|
- $t->print("enable");
|
|
|
- await $t->waitfor("#");
|
|
|
- $t->prompt(qr/#\s?$/);
|
|
|
-
|
|
|
- await $t->cmd("config");
|
|
|
- await $t->cmd("vty output show-all");
|
|
|
-
|
|
|
- $t->print("interface epon 0/0");
|
|
|
- $t->prompt(qr/#\s?$/);
|
|
|
- my @lines = await $t->cmd("show ont info $tree all");
|
|
|
-
|
|
|
- my $onu_count_line = @lines[@lines-3];
|
|
|
+ await cdata_login($t, $login, $password);
|
|
|
|
|
|
- $onu_count_line =~ m|Total: (\d+), online (\d+)|;
|
|
|
- my $total_onu_cnt = $1;
|
|
|
- my $online_onu_cnt = $2;
|
|
|
- my $offline_onu_cnt = $total_onu_cnt - $online_onu_cnt;
|
|
|
+ my %onu_info = await cdata_get_onu_info($t, $tree);
|
|
|
|
|
|
+# say Dumper \%onu_info;
|
|
|
+
|
|
|
$t->close;
|
|
|
|
|
|
- if ($lines[2] =~ /Error/) {
|
|
|
- $total_onu_cnt = 0;
|
|
|
- $online_onu_cnt = 0;
|
|
|
- $offline_onu_cnt = 0;
|
|
|
- }
|
|
|
-
|
|
|
- my $res = "Всего: $total_onu_cnt
|
|
|
-Количество активных ONU: $online_onu_cnt
|
|
|
-Количество неактивных ONU: $offline_onu_cnt
|
|
|
+ my $res = "Всего: $onu_info{'total_cnt'}
|
|
|
+Количество активных ONU: $onu_info{'active_cnt'}
|
|
|
+Количество неактивных ONU: $onu_info{'inactive_cnt'}
|
|
|
\n";
|
|
|
|
|
|
+ $res = $res . "Неактивные ONU:\n" . join("\n", map( join(" ", @$_), @{$onu_info{'inactive'}} ) ) . "\n\n";
|
|
|
+
|
|
|
+ $res = $res . "Активные ONU:\n" . join("\n", map( join(" ", @$_), @{$onu_info{'active'}} ) );
|
|
|
+
|
|
|
return $res;
|
|
|
};
|
|
|
|
|
|
-
|
|
|
-async cdata_purge => sub
|
|
|
+async cdata_onu => sub
|
|
|
{
|
|
|
my $ip = shift;
|
|
|
my $login = shift;
|
|
|
@@ -136,77 +117,71 @@ async cdata_purge => sub
|
|
|
my $t = new telnet($ip);
|
|
|
# $t->debug(1);
|
|
|
|
|
|
- await $t->connect;
|
|
|
+ await cdata_login($t, $login, $password);
|
|
|
|
|
|
- await $t->reply(qr/User name:/, $login);
|
|
|
- await $t->reply(qr/User password:/, $password);
|
|
|
+ my %onu_info = await cdata_get_onu_info($t, $tree);
|
|
|
|
|
|
- $t->print("enable");
|
|
|
- await $t->waitfor("#");
|
|
|
- $t->prompt(qr/#\s?$/);
|
|
|
+ $t->close;
|
|
|
|
|
|
- await $t->cmd("config");
|
|
|
- await $t->cmd("vty output show-all");
|
|
|
+ my $res = "Всего: $onu_info{'total_cnt'}
|
|
|
+Количество активных ONU: $onu_info{'active_cnt'}
|
|
|
+Количество неактивных ONU: $onu_info{'inactive_cnt'}
|
|
|
+\n";
|
|
|
|
|
|
- $t->print("interface epon 0/0");
|
|
|
- $t->prompt(qr/#\s?$/);
|
|
|
- my @lines = await $t->cmd("show ont info $tree all");
|
|
|
+ return $res;
|
|
|
+};
|
|
|
|
|
|
- my $onu_count_line = @lines[@lines-3];
|
|
|
+async cdata_purge => sub
|
|
|
+{
|
|
|
+ my $ip = shift;
|
|
|
+ my $login = shift;
|
|
|
+ my $password = shift;
|
|
|
+ my $tree = shift;
|
|
|
+ my $save = shift;
|
|
|
|
|
|
- $onu_count_line =~ m|Total: (\d+), online (\d+)|;
|
|
|
- my $total_onu_cnt = $1;
|
|
|
- my $online_onu_cnt = $2;
|
|
|
- my $offline_onu_cnt = $total_onu_cnt - $online_onu_cnt;
|
|
|
+ my $t = new telnet($ip);
|
|
|
+# $t->debug(1);
|
|
|
|
|
|
- if ($lines[2] =~ /Error/) {
|
|
|
- $total_onu_cnt = 0;
|
|
|
- $online_onu_cnt = 0;
|
|
|
- $offline_onu_cnt = 0;
|
|
|
- }
|
|
|
+ await cdata_login($t, $login, $password);
|
|
|
+
|
|
|
+ my %onu_info = await cdata_get_onu_info($t, $tree);
|
|
|
|
|
|
- if ($offline_onu_cnt == 0) {
|
|
|
+ if ($onu_info{'inactive_cnt'} == 0) {
|
|
|
$t->close;
|
|
|
return "Нечего чистить.";
|
|
|
}
|
|
|
|
|
|
- my @onu_info = cdata_extract_onu_info(@lines);
|
|
|
+ say Dumper \%onu_info;
|
|
|
|
|
|
- my @offline_onu = grep { @$_[5] =~ "offline|powerdown" } @onu_info;
|
|
|
+ await $t->cmd("interface epon 0/0");
|
|
|
|
|
|
- foreach my $i (@offline_onu) {
|
|
|
- my $onu_num = @$i[2];
|
|
|
+ foreach my $i ( @{$onu_info{'inactive'}} ) {
|
|
|
+ say Dumper @$i[0];
|
|
|
+ my $onu_num = @$i[0];
|
|
|
my @tmp = await $t->cmd("ont delete $tree $onu_num");
|
|
|
+ say Dumper @tmp;
|
|
|
}
|
|
|
|
|
|
- my @deleted_onu = map join(' ', @$_[2,3]), @offline_onu;
|
|
|
+ await $t->cmd("exit");
|
|
|
|
|
|
- @lines = await $t->cmd("show ont info $tree all");
|
|
|
- $onu_count_line = @lines[@lines-3];
|
|
|
+ my @deleted_onu = map( join(" ", @$_), @{$onu_info{'inactive'}});
|
|
|
|
|
|
- $onu_count_line =~ m|Total: (\d+), online (\d+)|;
|
|
|
- $total_onu_cnt = $1;
|
|
|
- $online_onu_cnt = $2;
|
|
|
- $offline_onu_cnt = $total_onu_cnt - $online_onu_cnt;
|
|
|
+ %onu_info = await cdata_get_onu_info($t, $tree);
|
|
|
|
|
|
- if ($lines[2] =~ /Error/) {
|
|
|
- $total_onu_cnt = 0;
|
|
|
- $online_onu_cnt = 0;
|
|
|
- $offline_onu_cnt = 0;
|
|
|
+ if ($save) {
|
|
|
+ await $t->cmd("save");
|
|
|
}
|
|
|
|
|
|
- my $res = "После чистки осталось ONU: $total_onu_cnt
|
|
|
-Количество активных ONU: $online_onu_cnt
|
|
|
-Количество неактивных ONU: $offline_onu_cnt
|
|
|
-\n";
|
|
|
-
|
|
|
- $res = $res . "Удалённые ONU:\n" . join("\n", @deleted_onu) if @deleted_onu > 0;
|
|
|
+ $t->close;
|
|
|
|
|
|
- await $t->cmd("exit");
|
|
|
+ my $res = "Осталось ONU: $onu_info{'total_cnt'}\n";
|
|
|
|
|
|
- await $t->cmd("save");
|
|
|
+ if ( $onu_info{'active_cnt'} != $onu_info{'total_cnt'} ) {
|
|
|
+ $res = $res . "Общее количество ONU и количество активных ONU не совпадает.
|
|
|
+Лучше обратиться к Вашему системноу администратору\n";
|
|
|
+ }
|
|
|
|
|
|
- $t->close;
|
|
|
+ $res = $res . "Удалённые ONU:\n" . join("\n", @deleted_onu) if @deleted_onu > 0;
|
|
|
|
|
|
return $res;
|
|
|
};
|