Сервис Eltex Polly предоставляет приложение для создания опросов на веб-портале при подключении hotspot-пользователей в схемах с ТД и BRAS.
Для демонстрации опроса сервис предоставляет web-интерфейс. Опрос представляет собой набор вопросов с вариантам ответов. Данные о пройденных опросах сохраняются в базе для последующего сбора статистики.
Управление опросами происходит в интерфейсе Конструктора порталов, настройки доступа к нему указываются в свойствах соответствующей роли в Личном кабинете.
Возможны две схемы работы сервиса Polly: с применением реверсного прокси, либо без него.
В первом случае перед порталом и Конструктором порталов необходимо установить nginx, который будет проксировать трафик к сервису Polly.
Во втором случае понадобятся дополнительные настройки точек доступа, а также понадобится открыть дополнительный порт в ядро SoftWLC из клиентской сети.
Схема с проксированием используется тогда, когда необходимо сохранить изоляцию контура ядра SoftWLC от клиентского трафика.
Рекомендуется схема работы с применением реверсного прокси nginx.
Для работы сервиса необходима установка схемы на сервер БД:
apt install eltex-polly-db |
Установка сервиса:
apt install eltex-polly |
Действие | Команда | Ответ | ||
---|---|---|---|---|
Проверка состояния | service eltex-polly status | Сервис запущен
Cервис не запущен
| ||
Запуск сервиса | service eltex-polly start | Сервис успешно запущен
| ||
Остановка сервиса | service eltex-polly stop | Сервис успешно остановлен
| ||
Перезапуск сервиса | service eltex-polly restart | Сервис успешно перезапущен
|
Основной конфигурационный файл сервиса
access { secret = password } database { host = localhost port = 3306 name = eltex_poll user = javauser password = javapassword pool { # Time to wait for a connection connectionTimeout = 10s # Time to wait for connection validation validationTimeout = 3s min = 1 max = 5 } cache { enabled = true expireAfterWrite = 3m maximumSize = 500 } resources { readChunkSize = 256k writeChunkSize = 256k } } images { maxSize = 15MB cache { expireAfterWrite = 30s storagePath = /tmp/eltex-polly/cache/ } } |
access { secret = password } |
database { host = localhost IP-адрес БД port = 3306 Порт обращения к БД name = eltex_poll Название БД user = javauser Имя пользователя password = javapassword Пароль ... |
pool { # Time to wait for a connection connectionTimeout = 10s Время ожидания подключения к БД # Time to wait for connection validation validationTimeout = 3s Время ожидания валидации min = 1 Минимальное количество подключений к БД max = 5 Максимальное количество подключений к БД } |
cache { enabled = true Активация записи expireAfterWrite = 3m Время хранения maximumSize = 500 Максимальный размер } |
resources { readChunkSize = 256k writeChunkSize = 256k } |
images { maxSize = 15MB Максимальный размер загружаемого изображения cache { expireAfterWrite = 30s storagePath = /tmp/eltex-polly/cache/ } } |
Файл настройки инициализации сервиса.
# Eltex-Polly daemon parameters # HTTP Port for use by Eltex Polly HTTP_PORT=9089 GRPC_PORT=9088 # Initial size of Java heap JAVA_INIT_HEAP=16m # Maximum size of Java heap JAVA_MAX_HEAP=128m # Additional arguments to pass to java JAVA_OPTS="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/eltex-polly" |
# HTTP Port for use by Eltex Polly HTTP_PORT=9089 GRPC_PORT=9088 |
# Initial size of Java heap JAVA_INIT_HEAP=16m |
# Maximum size of Java heap JAVA_MAX_HEAP=256m |
# Additional arguments to pass to java JAVA_OPTS="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/eltex-polly" |
Файл настройки логирования.
<?xml version="1.0" encoding="UTF-8"?> <Configuration monitorInterval="10"> <Properties> <Property name="rootLevel">${env:LOG_LEVEL:-ERROR}</Property> <Property name="baseDir">/var/log/eltex-polly</Property> <Property name="maxFileSize">20 MB</Property> <Property name="accumulatedFileSize">10 GB</Property> <Property name="lastModified">4d</Property> <Property name="maxCount">20</Property> <Property name="logPattern">%d{ISO8601} [%t] %-5p %logger{12} %C{1}.%M(line:%L). %m%n</Property> <Property name="dateSuffix">%d{yyyyMMdd}</Property> <Property name="consoleLevel">${env:CONSOLE_LEVEL:-OFF}</Property> <Property name="gelfLevel">${env:GELF_LEVEL:-OFF}</Property> <Property name="gelfHost">${env:GELF_HOST:-udp:lab3-test.eltex.loc}</Property> <Property name="gelfPort">${env:GELF_PORT:-12201}</Property> </Properties> <Appenders> <Console name="STDERR" target="System.err"> <PatternLayout pattern="${logPattern}"/> </Console> <RollingFile name="RollingFile" fileName="${baseDir}/polly.log" filePattern="${baseDir}/log/polly-%i.log.gz"> <PatternLayout pattern="${logPattern}"/> <Policies> <SizeBasedTriggeringPolicy size="${maxFileSize}"/> <OnStartupTriggeringPolicy /> </Policies> <DefaultRolloverStrategy max="${maxCount}"> <Delete basePath="${baseDir}" maxDepth="3"> <IfFileName glob="*/polly-*.log.gz"> <IfAny> <IfAccumulatedFileSize exceeds="${accumulatedFileSize}" /> <IfLastModified age="${lastModified}" /> </IfAny> </IfFileName> </Delete> </DefaultRolloverStrategy> </RollingFile> <Gelf name="Gelf" host="${gelfHost}" port="${gelfPort}" version="1.1" facility="eltex-polly" extractStackTrace="true" originHost="%host{fqdn}" maximumMessageSize="8192" > <Field name="thread" pattern="%t" /> <Field name="level" pattern="%level" /> <Field name="severity" pattern="%-5level" /> <Field name="logger" pattern="%logger{12}" /> <Field name="location" pattern="%C{1}.%M(line:%L)" /> </Gelf> </Appenders> <Loggers> <Root level="${rootLevel}"> <AppenderRef ref="RollingFile"/> <AppenderRef ref="STDERR" level="${consoleLevel}"/> <AppenderRef ref="Gelf" level="${gelfLevel}"/> </Root> <!--SQL logger--> <Logger name="org.jooq.tools.LoggerListener" level="OFF"/> <Logger name="org.springframework" level="ERROR"/> <Logger name="org.hibernate" level="ERROR"/> <Logger name="com.zaxxer.hikari" level="ERROR"/> <Logger name="io.netty" level="ERROR"/> <Logger name="io.grpc" level="ERROR"/> <!--Disabled loggers--> <Logger name="org.apache" level="OFF"/> </Loggers> </Configuration> |
<Configuration monitorInterval="10"> |
<Property name="rootLevel">${env:LOG_LEVEL:-ERROR}</Property> |
<Property name="baseDir">/var/log/eltex-polly</Property> |
<Property name="maxFileSize">20 MB</Property> |
<Property name="accumulatedFileSize">10 GB</Property> |
<Property name="lastModified">4d</Property> |
<Property name="maxCount">20</Property> |
<Property name="gelfLevel">${env:GELF_LEVEL:-OFF}</Property> <Property name="gelfHost">${env:GELF_HOST:-udp:lab3-test.eltex.loc}</Property> <Property name="gelfPort">${env:GELF_PORT:-12201}</Property> |
Ниже представлена конфигурация nginx.
Подразумевается, что сервисы запущены на следующих портах:
Сервис | Порт |
---|---|
eltex-portal-constructor | 9001 |
eltex-portal | 9000 |
eltex-polly | 9089 |
В случае необходимости следует изменить адреса и порты в конфигурационном файле.
Если eltex-portal и eltex-portal-constructor установлены на разных хостах, то nginx необходимо установить на каждом из них и настроить соответствующие location.
server { listen 8080; listen [::]:8080; gzip off; proxy_cache_background_update on; proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; proxy_cache_revalidate on; proxy_cache_min_uses 2; client_max_body_size 25m; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; # Eltex Portal section location ~* /eltex_portal/(gif|jpeg|jpg|png|svg|js|css|fonts)/ { proxy_cache eltex_cache; proxy_ignore_headers Cache-Control Expires; proxy_cache_valid any 1h; # адрес eltex portal proxy_pass http://127.0.0.1:9000; } location ~* /eltex_portal/(portal/download/shared/[0-9]+|img/) { proxy_cache eltex_cache; proxy_ignore_headers Cache-Control Expires; proxy_cache_valid 404 302 304 5m; proxy_cache_valid any 24h; # адрес eltex portal proxy_pass http://127.0.0.1:9000; } location ~* /eltex_portal/(portal/download/private|portal)/ { proxy_cache eltex_cache; proxy_ignore_headers Cache-Control Expires; proxy_cache_valid 404 302 304 5m; proxy_cache_valid any 1h; # адрес eltex portal proxy_pass http://127.0.0.1:9000; } location /eltex_portal/ { proxy_pass http://127.0.0.1:9000; } location /eltex_portal/polly { rewrite ^(/eltex_portal)/(.*)$ /$2 break; proxy_cookie_path /polly /eltex_portal/polly; # адрес eltex polly proxy_pass http://127.0.0.1:9089; } # Eltex Portal Constructor section location ~* /epadmin/(portal/download/[0-9]+|portal/download/shared/[0-9]+|font-awesome|img|js|css) { proxy_cache eltex_cache; proxy_cache_valid any 24h; # адрес eltex portal constructor proxy_pass http://127.0.0.1:9001; } location /epadmin { proxy_pass http://127.0.0.1:9001; } location /ep-demo { proxy_pass http://127.0.0.1:9001; } location /epadmin/polly { rewrite ^(/epadmin)/(.*)$ /$2 break; proxy_cookie_path /polly /epadmin/polly; # адрес eltex polly proxy_pass http://127.0.0.1:9089; } location / { deny all; } } |
Необходимо включить интеграцию с сервисом опросов в системных настройках Конструктора порталов:
Здесь указываются настройки подключения к сервису опросов и общие настройки опросов.
Если используется схема с реверсным прокси nginx, то необходимо установить флаг "Включить сквозной прокси". В данном случае поле HTTP URL блокируется.
Если используется схема без реверсного прокси nginx, то необходимо снять флаг "Включить сквозной прокси", в поле HTTP URL ввести адрес вида http://<ip_address>:<port>, где ip_address это адрес сервера, на котором установлен сервис eltex_polly, а port это порт, соответствующий параметру HTTP_PORT конфигурационного файла /etc/defaut/eltex-polly.
Параметр GRPC хост определяет адрес сервера, на котором установлен сервис eltex-polly.
Параметр GRPC порт определяет порт, соответствующий параметру GRPC_PORT конфигурационного файла /etc/defaut/eltex-polly.
Параметр Секретный ключ соответствует параметру secret основного файла конфигурации /etc/eltex-polly/application.conf.
Для управления опросами нужно зайти в Конструктор порталов и выбрать необходимый портал.
В разделе Опросы доступен интерфейс для управления опросами:
В левой части указаны опросы, привязанные к выбранному порталу, в правой части указаны все опросы, доступные для управления.
Для создания опроса необходимо нажать на кнопку Создать опрос.
В открывшемся редакторе указываются следующие настройки:
Возможные типы вопросов:
Каждый вопрос может быть обязательным, для этого необходимо установить соответствующий флаг. Если вопрос помечен как обязательный, то пользователь обязан дать на него ответ, прежде чем сможет перейти к следующему вопросу. Чтобы подтвердить отправку результатов, все обязательные вопросы должны быть отвечены. Необязательные вопросы можно пропускать.
Сервис поддерживает использование изображений в вопросах. Поддерживаются следующие форматы изображений:
Максимальный размер загружаемого изображения задаётся в конфигурационном файле в параметре maxSize секции images.
На всех этапах работы с опросами доступен предварительный просмотр опросов. Нажатие на кнопку Просмотр открывает предварительный просмотр опроса в том виде, в котором его увидит пользователь:
Для просмотра статистики опроса необходимо выделить нужный опрос, после чего появится кнопка Статистика.
Статистика ответов на вопросы типов один из списка, один из списка (радио), несколько из списка отображается в виде круговой диаграммы. В легенде отображается не более 7 вариантов ответа. Если вариантов больше, то в легенду добавляется пагинация.
Если на вопрос можно дать собственный ответ, то эти ответы буду выведены в отдельный сектор (их количество будет учтено), а сами ответы будут приведены в отдельном списке под диаграммой:
Статистика ответов на вопросы с изображениями отображается в виде круговой диаграммы. В центре круговой диаграммы отображается изображение, соответствующее выбранному сектору. Чтобы открыть изображение в полном размере, необходимо щёлкнуть по нему.
Статистика ответов на вопросы типа текст отображается в виде обычного списка:
Статистика ответов на вопросы типа шкала отображается в виде гистограммы:
Есть возможность сбросить результаты статистики опроса, за это отвечает кнопка Сбросить.
Возможен экспорт статистики в формат CSV, за это отвечает кнопка Экспорт.
Настройка работы опросов в схеме с применением реверсного прокси nginx состоит из следующих шагов:
В качестве первого сценария необходимо указать URL-адрес в виде http://<portal-ip-address>:<portal_port>/eltex_portal/poll-redirect. Дальнейшие сценарии можно задать в стандартном виде (например, доступ в интернет в сценарии 2 в течение 1 минуты, третий сценарий - возврат на портал и повторная авторизация клиента).
Для корректной работы в тарифе должны присутствовать не менее двух сценариев |
Настройка работы опросов в схеме без применения реверсного прокси nginx состоит из следующих шагов:
В качестве первого сценария необходимо указать URL-адрес в виде http://<portal-ip-address>:<portal_port>/eltex_portal/poll-redirect, в список разрешённых хостов добавить адрес серевера, на котором установлен сервис eltex-polly. Дальнейшие сценарии можно задать в стандартном виде (например, доступ в интернет в сценарии 2 в течение 1 минуты, третий сценарий - возврат на портал и повторная авторизация клиента).
Для корректной работы в тарифе должны присутствовать не менее двух сценариев |
Настройка работы опросов происходит по аналогии с настройкой интеграции с рекламной площадкой HotWiFi.
Далее предполагается, что схема BRAS уже настроена, произведены необходимые настройки ESR. Если работающей схемы BRAS нет, необходимо обратиться к соответствующему руководству. |
Зайти в меню Настройки PCRF → Списки URL, создать список polly.
Список должен содержать адрес портала и URL для корректной работы AndroidConnectivityManager. Если есть корректно настроенный и работающий список для рекламной площадки Hot-WiFi, то можно использовать его вместо создания нового списка.
URL: |
Необходимо следить за корректным назначением тарифов. Возможно появление ошибок на портале в следующих случаях:
|