| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- use Modern::Perl;
- use utf8;
- use Mojo::AsyncAwait;
- use Data::Dumper;
- use purge_cdata;
- use purge_bdcom;
- our $client;
- ##############################################
- sub command_help
- {
- my $cmd = shift;
- my $args = shift;
- my $chatid = shift;
- my $rest = shift;
-
- notify($chatid, "<b>/purge</b> <i>ip-адрес-устройства номер-дерева</i> - Очистить дерево PON", $rest);
- }
- # purge 172.1.1.1 2 - почистить дерево 2 на ПОН
- async command_purge => sub
- {
- my $cmd = shift;
- my $args = shift;
- my $chatid = shift;
- my $rest = shift;
- my $ip = $args->[0];
- my $tree = $args->[1];
- return notify($chatid, "Не указан IP-адрес") unless $ip;
- return notify($chatid, "Не указан номер дерева") unless $tree;
- return notify($chatid, "Неправильный IP-адрес: $ip") unless is_valid_ip($ip);
- return notify($chatid, "Неправильный номер дерева: $tree") unless $tree =~ /^\d+$/;
- my $res;
- eval {
- $res = await $client->get_p("device", "/pon?query=ip=\"$ip\"");
- };
- return notify($chatid, "Ошибка: " . parse_error($@)) if $@;
- return notify($chatid, "Устройство с ip=$ip не найдено") if @$res<1;
-
- my $dev = $res->[0];
- my $sub;
- if ($dev->{type} =~ /^BDCOM/)
- {
- $sub = reference("purge_bdcom");
- }
- elsif ($dev->{type} =~ /^C-DATA/)
- {
- $sub = reference("purge_cdata");
- }
-
- return notify($chatid, "Устройство $ip '$dev->{name}' неизвестного типа $dev->{type}") unless $sub;
-
- notify($chatid, "Очищаю дерево $tree на устройстве $ip '$dev->{name}'");
- my $count;
- eval {
- $count = await $sub->($ip, $dev->{login}, $dev->{password}, $tree);
- };
-
- return notify($chatid, "$ip '$dev->{name}': $@") if $@;
-
- notify($chatid, "$ip '$dev->{name}': работает $count ONU");
- };
- ###################################
- sub is_valid_ip
- {
- return $_[0] =~ /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
- }
- sub parse_error
- {
- my $e = shift;
- return $e unless ref $e;
-
- return "$e->{code} $e->{message} $e->{body}";
- }
- 1;
|