Go to file
2022-06-23 14:26:34 +03:00
.github OPS-68: Implementation (#4) 2022-05-31 18:30:04 +03:00
img OPS-68: Implementation (#4) 2022-05-31 18:30:04 +03:00
src Fix capabilities (#12) 2022-06-23 14:26:34 +03:00
.gitignore OPS-68: Implementation (#4) 2022-05-31 18:30:04 +03:00
LICENSE OPS-68: Implementation (#4) 2022-05-31 18:30:04 +03:00
pom.xml Fix keycloak response parsing (#10) 2022-06-02 11:26:19 +03:00
README.md Feedback edits (#7) 2022-06-01 14:30:59 +03:00
renovate.json OPS-68: Implementation (#4) 2022-05-31 18:30:04 +03:00

beholder

Сервис собирает метрики о производительности загрузки платёжной формы из разных регионов.

Особенности имплементации

Точка входа в приложение: dev.vality.beholder.service.BeholderService.behold. Этот метод вызывается по расписанию, указанном в свойстве schedule.cron.

Подготовка данных для загрузки платёжной формы

Для загрузки платёжной формы необходимы InvoiceId и InvoiceAccessToken.

Схема взаимодействия с swag-payments:

PaymentsImage

Алгоритм взаимодействия реализован здесь: dev.vality.beholder.service.PaymentsService.prepareFormData

Загрузка платёжной формы

Beholder умеет работать c простым selenium-hub и с lambdatest. В реальности обе интеграции работают через selenium API и являются совместимыми.

Алгоритм загрузки и сбора метрик формы реализован здесь: dev.vality.beholder.service.SeleniumService.executePaymentRequest

Его можно разбить на следующие шаги:

  1. Установить подключение с selenium-hub/lambdatest
  2. Отправить запрос на загрузку формы
  3. Собрать метрики загрузки формы посредством javascript'а (dev.vality.beholder.util.SeleniumUtil.PERFORMANCE_SCRIPT)
  4. Заполнить форму и отправить запрос на проведение платежа
  5. Собрать логи производительности браузера

Обновление метрик

Собранная на предыдущем шаге информация о производительности формы записывается в соответствующие метрики prometheus'а. Этот функционал реализован в классе dev.vality.beholder.service.MetricsService

Метрики

Название Лейблы Описание
beholder_form_loading_requests_total browser, region, result счетчик запросов на загрузку формы
beholder_form_dom_complete_duration_millis browser, region время от момента отправки запроса до полной загрузки формы в миллисекундах
beholder_form_waiting_response_duration_millis browser, region время от момента отправки запроса до начала получения ответа в миллисекундах
beholder_form_receiving_response_duration_millis browser, region время между получением первым и последним байтом информации в миллисекундах
beholder_form_resource_loading_duration_millis browser, region, resource время, затраченное на загрузку ресурса (включая блокировки, ожидание и т.д)

Тестирование

Поскольку загружать во время юнит-тестирования реальную платежную форму не представляется возможным, реализован интеграционный тест, который отключен по умолчанию, однако может использоваться для локальной отладки сервиса.

Тест: dev.vality.beholder.IntegrationTest Подготовка к запуску теста:

  1. Прописать валидные значения в следующих свойствах:
    1. payments.api-url - адрес для обращения к api
    2. payments.form-url - адрес для загрузки платёжной формы
    3. payments.request.shop-id - идентификатор магазина, который нужно использовать
  2. Прописать в свойстве dev.vality.beholder.IntegrationTest.TEST_USER_TOKEN валидный токен
  3. Готово, можно запускать тест.

Полезные ссылки

Описание метрик производительности, которые можно получить через JS.

Описание метрик сети, которые можно получить от chromium'а.

Регионы, доступные для тестирования. На их основе заполнен справочник regions.json