Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
abills:docs:manual:sender:browser [2017/03/07 23:14] 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 | + | |
- | + | ||
- | **Включать при загрузке** | + | |
- | + | ||
- | === FreeBSD === | + | |
- | # fetch -o /etc/rc.d/abills_websocket http://abills.net.ua/misc/abills_websocket_rc.d | + | |
- | # chmod +x /etc/rc.d/abills_websocket | + | |
- | + | ||
- | === Debian/Ubuntu/CentOS === | + | |
- | **/etc/systemd/system/abills-backend.service** | + | |
- | <code> | + | |
- | [Unit] | + | |
- | Description=ABillS Websocket Server | + | |
- | After=network.target | + | |
- | After=mysql.service | + | |
- | Requires=mysql.service | + | |
- | + | ||
- | [Service] | + | |
- | Type=forking | + | |
- | + | ||
- | PIDFile=/usr/abills/var/log/websocket_backend.pid | + | |
- | + | ||
- | ExecStartPre=/bin/chown -R nobody /usr/abills/var/ | + | |
- | ExecStart=/usr/abills/libexec/websocket_backend.pl -d | + | |
- | ExecReload=/usr/abills/libexec/websocket_backend.pl stop | + | |
- | + | ||
- | [Install] | + | |
- | WantedBy=multi-user.target | + | |
- | </code> | + | |
- | Включить службу | + | |
- | <code> | + | |
- | systemctl enable abills-backend.service | + | |
- | </code> | + | |
- | + | ||
- | ====Возможные проблемы==== | + | |
- | **Не установлен systemd**\\ | + | |
- | Решения: | + | |
- | * установить ''systemd'' | + | |
- | * Использовать ''rc.d'' скрипт | + | |
- | + | ||
- | **Ошибки с mysql.service** | + | |
- | Если в системе есть ''systemd'', а вместо ''mysql', установлена ''mariadb'', служба может называться ''mariadb.service'', переименуйте зависимую службу.\\ | + | |
- | Если система не поддерживает запуск mysql через systemd, используйте init.d скрипт. | + | |
** Конфигурация ** | ** Конфигурация ** | ||
**libexec/config.pl** | **libexec/config.pl** | ||
- | До версии 0.75.107 | ||
- | $conf{WEBSOCKET_URL} = 'wss://%host.example.com%:9443/admin/wss/'; # URL WebSocket сервера | ||
- | | ||
- | После | ||
$conf{WEBSOCKET_ENABLED} = 1; | $conf{WEBSOCKET_ENABLED} = 1; | ||
\\ | \\ | ||
Строка 82: | Строка 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'') | | + | ^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 } ); | + | |
- | } | + | |
- | else { | + | |
- | print "Admin $test_aid is not online \n" | + | |
- | return 0; | + | |
- | } | + | |
- | return $received; | + | return $Browser->send_message( { AID => $test_aid, MESSAGE => $test_notification } ); |
</code> | </code> | ||
- | Пример запуска внешней команды с уведомлением | + | ==== Запуск внешней команды с уведомлением ==== |
<code> | <code> | ||
use Abills::Sender::Browser; | use Abills::Sender::Browser; | ||
Строка 124: | Строка 49: | ||
TYPE => 'COMMAND', | TYPE => 'COMMAND', | ||
AID => $admin->{AID}, # Кому придёт уведомление | AID => $admin->{AID}, # Кому придёт уведомление | ||
- | PROGRAM => '/usr/bin/ping', # Имя програмы | + | PROGRAM => '/usr/bin/ping', # Имя программы |
- | PROGRAM_ARGS => [ '-c 3', '-q', '192.168.1.1' ], # Масив аргументов для програмы | + | PROGRAM_ARGS => [ '-c 3', '-q', '192.168.1.1' ], # Массив аргументов для программы |
ARGS => { # Аргументы для Abills::Base::cmd | ARGS => { # Аргументы для Abills::Base::cmd | ||
timeout => 5 | timeout => 5 |