|
|
@@ -5,6 +5,10 @@ use Mojo::AsyncAwait;
|
|
|
use Data::Dumper;
|
|
|
use purge_cdata;
|
|
|
use purge_bdcom;
|
|
|
+use inspect_bdcom;
|
|
|
+use inspect_cdata;
|
|
|
+use onu_bdcom;
|
|
|
+use onu_cdata;
|
|
|
|
|
|
our $client;
|
|
|
|
|
|
@@ -17,9 +21,121 @@ sub command_help
|
|
|
my $chatid = shift;
|
|
|
my $rest = shift;
|
|
|
|
|
|
- notify($chatid, "<b>/purge</b> <i>ip-адрес-устройства номер-дерева</i> - Очистить дерево PON", $rest);
|
|
|
+ notify($chatid,
|
|
|
+"<b>/purge </b> <i>ip-адрес-устройства номер-дерева</i> - Очистить дерево PON
|
|
|
+<b>/inspect</b> <i>ip-адрес-устройства номер-дерева</i> - Информация об ONU на дереве
|
|
|
+<b>/onu</b> <i>ip-адрес-устройства номер-дерева</i> - Краткая информация ONU на дереве", $rest);
|
|
|
}
|
|
|
|
|
|
+# inspect 172.25.7.1 2 - посмотреть информацию об ONU на дереве 2 устройства 172.25.7.1
|
|
|
+async command_inspect => 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);
|
|
|
+
|
|
|
+ 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("inspect_bdcom");
|
|
|
+ }
|
|
|
+ elsif ($dev->{type} =~ /^C-DATA/)
|
|
|
+ {
|
|
|
+ $sub = reference("inspect_cdata");
|
|
|
+ }
|
|
|
+
|
|
|
+ return notify($chatid, "Неправильный номер дерева: $tree") unless is_valid_tree($dev->{type}, $tree);
|
|
|
+
|
|
|
+ return notify($chatid, "Устройство $ip '$dev->{name}' неизвестного типа $dev->{type}") unless $sub;
|
|
|
+
|
|
|
+# notify($chatid, "Смотрю дерево $tree на устройстве $ip '$dev->{name}'");
|
|
|
+
|
|
|
+ my $text;
|
|
|
+ eval {
|
|
|
+ $text = await $sub->($ip, $dev->{login}, $dev->{password}, $tree);
|
|
|
+ };
|
|
|
+
|
|
|
+ return notify($chatid, "$ip '$dev->{name}': $@") if $@;
|
|
|
+
|
|
|
+ notify($chatid, "$ip '$dev->{name}' дерево $tree
|
|
|
+<code>$text</code>");
|
|
|
+
|
|
|
+};
|
|
|
+
|
|
|
+# onu 172.25.7.1 2 - получить короткую информацию об ONU на дереве 2 устройства 172.25.7.1
|
|
|
+async command_onu => 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);
|
|
|
+
|
|
|
+ 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("onu_bdcom");
|
|
|
+ }
|
|
|
+ elsif ($dev->{type} =~ /^C-DATA/)
|
|
|
+ {
|
|
|
+ $sub = reference("onu_cdata");
|
|
|
+ }
|
|
|
+
|
|
|
+ return notify($chatid, "Неправильный номер дерева: $tree") unless is_valid_tree($dev->{type}, $tree);
|
|
|
+
|
|
|
+ return notify($chatid, "Устройство $ip '$dev->{name}' неизвестного типа $dev->{type}") unless $sub;
|
|
|
+
|
|
|
+# notify($chatid, "Смотрю дерево $tree на устройстве $ip '$dev->{name}'");
|
|
|
+
|
|
|
+ my $text;
|
|
|
+ eval {
|
|
|
+ $text = await $sub->($ip, $dev->{login}, $dev->{password}, $tree);
|
|
|
+ };
|
|
|
+
|
|
|
+ return notify($chatid, "$ip '$dev->{name}': $@") if $@;
|
|
|
+
|
|
|
+ notify($chatid, "$ip '$dev->{name}' дерево $tree
|
|
|
+<code>$text</code>");
|
|
|
+
|
|
|
+};
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
# purge 172.1.1.1 2 - почистить дерево 2 на ПОН
|
|
|
async command_purge => sub
|
|
|
{
|
|
|
@@ -35,8 +151,7 @@ async command_purge => sub
|
|
|
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\"");
|
|
|
@@ -55,6 +170,8 @@ async command_purge => sub
|
|
|
{
|
|
|
$sub = reference("purge_cdata");
|
|
|
}
|
|
|
+
|
|
|
+ return notify($chatid, "Неправильный номер дерева: $tree") unless is_valid_tree($dev->{type}, $tree);
|
|
|
|
|
|
return notify($chatid, "Устройство $ip '$dev->{name}' неизвестного типа $dev->{type}") unless $sub;
|
|
|
|
|
|
@@ -77,6 +194,36 @@ 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 get_tree_count
|
|
|
+{
|
|
|
+ my $devtype = shift;
|
|
|
+ if ($devtype =~ /^BDCOM P3608/) {
|
|
|
+ return 8;
|
|
|
+ } elsif ($devtype =~ /^BDCOM P3600-08/) {
|
|
|
+ return 8;
|
|
|
+ } elsif ($devtype =~ /^BDCOM P3616/) {
|
|
|
+ return 16;
|
|
|
+ } elsif ($devtype =~ /^BDCOM P3310/) {
|
|
|
+ return 4;
|
|
|
+ } elsif ($devtype =~ /^C-DATA FD1208/) {
|
|
|
+ return 8;
|
|
|
+ } elsif ($devtype =~ /^C-DATA FD1216/) {
|
|
|
+ return 16;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+sub is_valid_tree
|
|
|
+{
|
|
|
+ my $devtype = shift;
|
|
|
+ my $tree_num = shift;
|
|
|
+
|
|
|
+ my $tree_count = get_tree_count($devtype);
|
|
|
+
|
|
|
+ return ($tree_num <= $tree_count)&&($tree_num > 0);
|
|
|
+}
|
|
|
+
|
|
|
sub parse_error
|
|
|
{
|
|
|
my $e = shift;
|