Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
abills:docs:manual:sender:browser [2016/08/01 10:54]
anton [Abills::Sender::Browser API]
abills:docs:manual:sender:browser [2017/07/19 12:53] (текущий)
anton [Abills::Sender::Browser API]
Строка 4: Строка 4:
 Сервер websoket_backend реализован асинхронно на AnyEvent. Сервер websoket_backend реализован асинхронно на AnyEvent.
  
-==== Установка сервера WebSocket ==== +[[abills:docs:manual:websocket_backend|Установка сервера ​WebSocket]] \\
-Установить perl модули: +
-  * AnyEvent::Socket +
-  * AnyEvent::​Handle +
-  * Protocol::​WebSocket +
- +
-Установить и включить модули ​апача: +
-  * mod_proxy +
-  * mod_proxy_wstunnel +
- +
-Прописать в конфигурацию apache2 ''​abills_httpd''​ в секцию VirtualHost биллинга +
-<​code>​ +
-  ProxyPass "/​admin/​wss/"​ "​ws://​127.0.0.1:​19443/​wss/​admin/"​ retry=1 +
-</​code>​ +
- +
-Установить и включить ​сервер ​вебсокетов +
-  ln -s /​usr/​abills/​misc/​websocket_backend.pl /​usr/​abills/​libexec/​websocket_backend.pl +
-  chmod +x /​usr/​abills/​libexec/​websocket_backend.pl +
-  iptables -I INPUT 1 -p tcp --dport 19443 -j ACCEPT +
-   +
-Включать при загрузке +
-**/​etc/​rc.local** +
-  /​usr/​abills/​libexec/​websocket_backend.pl -d+
  
 ** Конфигурация ** ** Конфигурация **
  
 **libexec/​config.pl** **libexec/​config.pl**
-  ​^$conf{WEBSOCKET_URL} = '​wss://​%host.example.com%/​admin/​wss/'​|URL WebSocket сервера |+  $conf{WEBSOCKET_ENABLED} = 1; 
 +\\
  
 ==== Abills::​Sender::​Browser API ==== ==== Abills::​Sender::​Browser API ====
Строка 38: Строка 17:
 ^has_connected_admin($aid)| Проверяет,​ есть ли admin на линии (подключился ли его браузер к серверу) | ^has_connected_admin($aid)| Проверяет,​ есть ли admin на линии (подключился ли его браузер к серверу) |
 ^send_message({ AID => 1, MESSAGE => $json_message })| Отправляет $json_message указаному администратору,​ [[abills:​docs:​events|формат сообщений]] | ^send_message({ AID => 1, MESSAGE => $json_message })| Отправляет $json_message указаному администратору,​ [[abills:​docs:​events|формат сообщений]] |
 +^json_request| Отсылает сообщение демону ''​websocket_backend''​ (Плагину ''​Internal''​) |
  
 Пример отправки сообщения администратору:​ Пример отправки сообщения администратору:​
 <​code>​ <​code>​
-use Abills::​Sender::​Browser+use Abills::​Sender::​Browser;
 my $Browser = Abills::​Sender::​Browser->​new( $db, $admin, \%conf); my $Browser = Abills::​Sender::​Browser->​new( $db, $admin, \%conf);
  
 my $test_aid = 1; my $test_aid = 1;
-my $test_notification = <<"​TEST_NOTIFICATION";​ +my $test_notification = { 
-+   ​TYPE => "​MESSAGE",​ 
-  "​TYPE" : "​MESSAGE",​ +   ​TITLE => "Test notification",​ 
-  "​TITLE" : "Test notification",​ +   ​TEXT => "​Just<​br/>​some<​br/>​text"​ 
-  "​TEXT" : "​Just<​br/>​some<​br/>​text"​ +};
-} +
-TEST_NOTIFICATION +
  
 # Проверяем,​ что админ есть на линии # Проверяем,​ что админ есть на линии
 my $test_admin_connected = $Browser->​has_connected_admin( $test_aid ); my $test_admin_connected = $Browser->​has_connected_admin( $test_aid );
  
-my $received = 0+return ​0 if ( !$test_admin_connected ); 
-if ( $test_admin_connected ){ + 
-  ​$received = $Browser->​send_message( { AID => $test_aid, MESSAGE => $test_notification } ); +return ​$Browser->​send_message( { AID => $test_aid, MESSAGE => $test_notification } ); 
-} + 
-else { +</​code>​ 
-  ​print "​Admin ​$test_aid is not online ​\n" + 
-  ​return 0; +==== Запуск внешней команды с уведомлением ==== 
-}+<​code>​ 
 +  ​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 
 +      } 
 +    } 
 +  }); 
 +</​code>​ 
 + 
 +Пример выше можно заменить вызовом функции Abills::​Misc::​run_in_background 
 +<​code>​ 
 +require Abills::​Misc;​
  
-return $received;+run_in_background('/​usr/​bin/​ping',​ { timeout => 5 }, { PROGRAM_ARGS => [ '-c 3', '​-q',​ '​192.168.1.1'​ ] });
  
 </​code>​ </​code>​