浏览代码

refactor bdcom_onu bdcom_purge

alakiza 2 年之前
父节点
当前提交
74d1d3d7e0
共有 2 个文件被更改,包括 24 次插入71 次删除
  1. 23 70
      modules/bdcom.pm
  2. 1 1
      modules/commands.pm

+ 23 - 70
modules/bdcom.pm

@@ -115,13 +115,9 @@ async bdcom_inspect => sub
 
     $t->close;
 
-    my $total_count    = $onu_info{'total_cnt'};
-    my $active_count   = $onu_info{'active_cnt'};
-    my $inactive_count = $onu_info{'inactive_cnt'};
-
-    my $res = "Всего: $total_count
-Количество активных ONU: $active_count
-Количество неактивных ONU: $inactive_count
+    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";
@@ -147,30 +143,13 @@ async bdcom_onu => sub
 
     #######################
 
-    my @inactive_onu = await $t->cmd("show epon inactive-onu interface ePON 0/$tree");
-    $inactive_onu[0] =~ m|Interface EPON0/\d+ has bound (\d+)|;
-    my $inactive_count = $1 || "?";
-    if (@inactive_onu <= 1) {
-        $inactive_count = 0;
-    }
-
-    $t->prompt(qr/#/);
-
-    my @active_onu = await $t->cmd("show epon active-onu interface ePON 0/$tree");
-    $active_onu[0] =~ m|Interface EPON0/\d+ has bound (\d+)|;
-    my $active_count = $1 || "?";
-    if (@active_onu <= 1) {
-        $active_count = 0;
-    }
-
-
-    my $total_count = $active_count + $inactive_count;
+    my %onu_info = await bdcom_get_onu_info($t, $tree);
 
     $t->close;
 
-    my $res = "Всего: $total_count
-Количество активных ONU: $active_count
-Количество неактивных ONU: $inactive_count
+    my $res = "Всего: $onu_info{'total_cnt'};
+Количество активных ONU: $onu_info{'active_cnt'};
+Количество неактивных ONU: $onu_info{'inactive_cnt'};
 \n";
 
     return $res;
@@ -182,6 +161,7 @@ async bdcom_purge => sub
     my $login = shift;
     my $password = shift;
     my $tree = shift;
+    my $save = shift;
 
   ############################
 
@@ -192,23 +172,9 @@ async bdcom_purge => sub
 
   #######################
 
-    my @inactive_onu = await $t->cmd("show epon inactive-onu interface ePON 0/$tree");
-    $inactive_onu[0] =~ m|Interface EPON0/\d+ has bound (\d+)|;
-    my $inactive_count = $1 || "?";
-    if (@inactive_onu <= 1) {
-        $inactive_count = 0;
-    }
-
-    my @active_onu = await $t->cmd("show epon active-onu interface ePON 0/$tree");
-    $active_onu[0] =~ m|Interface EPON0/\d+ has bound (\d+)|;
-    my $active_count = $1 || "?";
-    if (@active_onu <= 1) {
-        $active_count = 0;
-    }
-
-    my $total_count = $active_count + $inactive_count;
+    my %onu_info = await bdcom_get_onu_info($t, $tree);
 
-    if ($inactive_count == 0) {
+    if ($onu_info{'inactive_cnt'} == 0) {
         $t->close;
         return "Нечего чистить";
     }
@@ -216,44 +182,31 @@ async bdcom_purge => sub
     await $t->cmd("config");
     await $t->cmd("interface EPON0/$tree");
 
-    my @in_onu_info = bdcom_extract_onu_info(@inactive_onu);
-    my @compact_in_onu_info = map( [bdcom_extract_onu_num(@$_[0]), @$_[1]], @in_onu_info );
-
-    foreach my $i ( @compact_in_onu_info ) {
-        say Dumper @$i[1];
+    foreach my $i ( @{$onu_info{'inactive'}} ) {
+#        say Dumper @$i[1];
         my $onu_mac = @$i[1];
         my @tmp = await $t->cmd("no epon bind-onu mac $onu_mac");
-        say Dumper @tmp;
+#        say Dumper @tmp;
     }
 
-    my @deleted_onu = map( join(" ", @$_), @compact_in_onu_info);
+    my @deleted_onu = map( join(" ", @$_), @{$onu_info{'inactive'}});
 
     await $t->cmd("exit");
 
-    @inactive_onu = await $t->cmd("show epon inactive-onu interface ePON 0/$tree");
-    $inactive_onu[0] =~ m|Interface EPON0/\d+ has bound (\d+)|;
-    $inactive_count = $1 || "?";
-    if (@inactive_onu <= 1) {
-        $inactive_count = 0;
-    }
+    %onu_info = await bdcom_get_onu_info($t, $tree);
 
-    @active_onu = await $t->cmd("show epon active-onu interface ePON 0/$tree");
-    $active_onu[0] =~ m|Interface EPON0/\d+ has bound (\d+)|;
-    $active_count = $1 || "?";
-    if (@active_onu <= 1) {
-        $active_count = 0;
+    if ($save) {
+        await $t->cmd("write all");
     }
 
-    $total_count = $active_count + $inactive_count;
-
-    await $t->cmd("write all");
-
     $t->close;
 
-    my $res = "После чистки осталось ONU: $total_count
-Количество активных ONU: $active_count
-Количество неактивных ONU: $inactive_count
-\n";
+    my $res = "Осталось ONU: $onu_info{'total_cnt'}\n";
+
+    if ( $onu_info{'active_cnt'} != $onu_info{'total_cnt'} ) {
+        $res = $res . "Общее количество ONU и количество активных ONU не совпадает.
+Лучше обратиться к Вашему системноу администратору\n";
+    }
 
     $res = $res . "Удалённые ONU:\n" . join("\n", @deleted_onu) if @deleted_onu > 0;
 

+ 1 - 1
modules/commands.pm

@@ -182,7 +182,7 @@ async command_purge => sub
 
   my $text;
   eval {
-    $text = await $sub->($ip, $dev->{login}, $dev->{password}, $tree);
+    $text = await $sub->($ip, $dev->{login}, $dev->{password}, $tree, 1);
   };
   
   return notify($chatid, "$ip '$dev->{name}': $@") if $@;