Table of Contents |
---|
Благодаря технологии WebSocket, браузер может держать постоянное подключение к серверу, что дает нам постоянный двусторонний канал обмена сообщениями.
Сервер websoket_backend реализован асинхронно на AnyEvent.
Конфигурация
libexec/config.pl
Code Block | ||
---|---|---|
| ||
$conf{WEBSOCKET_ENABLED} = 1; |
Abills::Sender::Browser API
Методы
is_connected() | Проверяет внутреннее соединение с WebSocket сервером |
---|---|
has_connected_admin($aid) | Проверяет есть ли admin на линии (подключился ли его браузер к серверу) |
send_message({ AID ⇒ 1, MESSAGE ⇒ $json_message }) | Отправляет $json_message указанному администратору, формат сообщений |
json_request | Отсылает сообщение демону websocket_backend (Плагину Internal ) |
Пример отправки сообщения администратору:
Code Block | ||
---|---|---|
| ||
use Abills::Sender::Browser;
my $Browser = Abills::Sender::Browser->new(\%conf);
send_message();
sub send_message {
my $Browser = Abills::Sender::Browser->new(\%conf);
$Browser->{debug} = 1; # Debug mode
my $test_aid = 1;
# Проверяем, что админ есть на линии
my $test_admin_connected = $Browser->has_connected_admin($test_aid);
if (!$test_admin_connected) {
print "Admin not connected Error: $test_admin_connected / \n";
return 0;
}
if ( $Browser->send_message({
AID => $test_aid,
TITLE => 'Test message',
MESSAGE => 'test message'
}) ) {
print "Message sendded\n";
}
return 1;
}
|
Запуск внешней команды с уведомлением
Code Block | ||
---|---|---|
| ||
use Abills::Sender::Browser;
my Abills::Sender::Browser $Browser = Abills::Sender::Browser->new($db, $admin, \%conf);
my $sended = $Browser->json_request( {
MESSAGE => {
TYPE => 'COMMAND',
AID => $admin->{AID}, # Кому придёт уведомление
PROGRAM => '/usr/bin/ping', # Имя программы
PROGRAM_ARGS => [ '-c 3', '-q', '192.168.1.1' ], # Массив аргументов для программы
ARGS => { # Аргументы для Abills::Base::cmd
timeout => 5
}
}
}); |
Пример выше можно заменить вызовом функции Abills::Misc::run_in_background
Code Block | ||
---|---|---|
| ||
require Abills::Misc;
run_in_background('/usr/bin/ping', { timeout => 5 }, { PROGRAM_ARGS => [ '-c 3', '-q', '192.168.1.1' ] }); |
Когда сообщение приходит в браузер администратора, оно передаётся AMesssageChecker.