inspect_bdcom.pm 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #package inspect_bdcom;
  2. use Modern::Perl;
  3. use utf8;
  4. use telnet;
  5. use Exporter;
  6. our @ISA= qw( Exporter );
  7. our @EXPORT = qw( inspect_bdcom );
  8. sub inspect_bdcom::_extract_onu_num {
  9. my $onu_name = shift;
  10. $onu_name =~ m|EPON0/\d+:(\d+)|;
  11. return $1;
  12. };
  13. sub inspect_bdcom::_extract_onu_info {
  14. my @lines = @_;
  15. return map([substr($_, 0, 11), split(' ', substr($_, 11, -1))], @lines[3..@lines-3]);
  16. };
  17. async inspect_bdcom => sub
  18. {
  19. my $ip = shift;
  20. my $login = shift;
  21. my $password = shift;
  22. my $tree = shift;
  23. ############################
  24. my $t = new telnet($ip);
  25. # $t->debug(1);
  26. await $t->connect;
  27. await $t->reply(qr/Username:/, $login);
  28. await $t->reply(qr/Password:/, $password);
  29. my @greeting = await $t->waitfor(qr/>/);
  30. my $version = "C";
  31. for (@greeting)
  32. {
  33. $version = $1 if /Welcome to BDCOM P3310(\w)/;
  34. }
  35. $t->print("enable");
  36. my @next = await $t->waitfor(qr/#|password:/);
  37. if (grep {$_ =~ /password:/} @next)
  38. {
  39. $t->print($password);
  40. await $t->waitfor(qr/#/);
  41. }
  42. $t->prompt(qr/#/);
  43. await $t->cmd("terminal length 0");
  44. await $t->cmd("terminal width 200");
  45. #######################
  46. my @inactive_onu = await $t->cmd("show epon inactive-onu interface ePON 0/$tree");
  47. $inactive_onu[0] =~ m|Interface EPON0/\d+ has bound (\d+)|;
  48. my $inactive_count = $1 || "?";
  49. if (@inactive_onu <= 1) {
  50. $inactive_count = 0;
  51. }
  52. my @active_onu = await $t->cmd("show epon active-onu interface ePON 0/$tree");
  53. $active_onu[0] =~ m|Interface EPON0/\d+ has bound (\d+)|;
  54. my $active_count = $1 || "?";
  55. if (@active_onu <= 1) {
  56. $active_count = 0;
  57. }
  58. my $total_count = $active_count + $inactive_count;
  59. $t->close;
  60. my $res = "Всего: $total_count
  61. Количество активных ONU: $active_count
  62. Количество неактивных ONU: $inactive_count
  63. \n";
  64. my @in_onu_info = inspect_bdcom::_extract_onu_info(@inactive_onu);
  65. my @compact_in_onu_info = map( [inspect_bdcom::_extract_onu_num(@$_[0]), @$_[1]], @in_onu_info );
  66. @compact_in_onu_info = map( join(" ", @$_), @compact_in_onu_info);
  67. say Dumper @active_onu;
  68. my @a_onu_info = inspect_bdcom::_extract_onu_info(@active_onu);
  69. say "test2";
  70. my @compact_a_onu_info = map( [inspect_bdcom::_extract_onu_num(@$_[0]), @$_[1]], @a_onu_info );
  71. @compact_a_onu_info = map( join(" ", @$_), @compact_a_onu_info);
  72. $res = $res . "Неактивные ONU:\n" . join("\n", @compact_in_onu_info) . "\n\n";
  73. $res = $res . "Активные ONU:\n" . join("\n", @compact_a_onu_info);
  74. return $res;
  75. };
  76. 1;