Browser ( WebSocket )
Благодаря технологии WebSocket, браузер может держать постоянное подключение к серверу, что дает нам постоянный двусторонний канал обмена сообщениями.
Сервер websoket_backend реализован асинхронно на AnyEvent.
Конфигурация
libexec/config.pl
$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 ) |
Пример отправки сообщения администратору:
use Abills::Sender::Browser; my $Browser = Abills::Sender::Browser->new( $db, $admin, \%conf); my $test_aid = 1; my $test_notification = { TYPE => "MESSAGE", TITLE => "Test notification", TEXT => "Just<br/>some<br/>text" }; # Проверяем, что админ есть на линии my $test_admin_connected = $Browser->has_connected_admin( $test_aid ); return 0 if ( !$test_admin_connected ); return $Browser->send_message( { AID => $test_aid, MESSAGE => $test_notification } );
Запуск внешней команды с уведомлением
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
require Abills::Misc; run_in_background('/usr/bin/ping', { timeout => 5 }, { PROGRAM_ARGS => [ '-c 3', '-q', '192.168.1.1' ] });
Когда сообщение приходит в браузер администратора, оно передаётся AMesssageChecker.