Go to file
2024-11-01 14:23:16 +00: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 Remove email field (#27) 2023-05-19 15:54:21 +03:00
.codecov.yml 🔄 Synced file(s) with valitydev/configurations (#11) 2022-09-28 12:39:13 +03:00
.gitignore OPS-68: Implementation (#4) 2022-05-31 18:30:04 +03:00
CODEOWNERS 🔄 Synced file(s) with valitydev/configurations (#11) 2022-09-28 12:39:13 +03:00
LICENSE OPS-68: Implementation (#4) 2022-05-31 18:30:04 +03:00
pom.xml Update dependency org.keycloak:keycloak-admin-client to v26 2024-11-01 14:23:16 +00:00
README.md Upd readme (#16) 2022-07-06 15:11:18 +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_resource_loading_duration_millis browser, region, resource время, затраченное на загрузку ресурса (включая блокировки, ожидание и т.д)
beholder_form_performance_timing_connect_end_millis browser, region Свойство connectEnd, полученное через PerformanceResourceTiming
beholder_form_performance_timing_connect_start_millis browser, region Свойство connectStart, полученное через PerformanceResourceTiming
beholder_form_performance_timing_dom_complete_millis browser, region Свойство domComplete, полученное через PerformanceNavigationTiming
beholder_form_performance_timing_dom_content_loaded_event_end_millis browser, region Свойство domContentLoadedEventEnd, полученное через PerformanceNavigationTiming
beholder_form_performance_timing_dom_content_loaded_event_start_millis browser, region Свойство domContentLoadedEventStart, полученное через PerformanceNavigationTiming
beholder_form_performance_timing_dom_interactive_millis browser, region Свойство domInteractive, полученное через PerformanceNavigationTiming
beholder_form_performance_timing_domain_lookup_end_millis browser, region Свойство domainLookupEnd, полученное через PerformanceResourceTiming
beholder_form_performance_timing_domain_lookup_start_millis browser, region Свойство domainLookupStart, полученное через PerformanceResourceTiming
beholder_form_performance_timing_fetch_start_millis browser, region Свойство fetchStart, полученное через PerformanceResourceTiming
beholder_form_performance_timing_load_event_start_millis browser, region Свойство loadEventStart, полученное через PerformanceResourceTiming
beholder_form_performance_timing_redirect_end_millis browser, region Свойство redirectEnd, полученное через PerformanceResourceTiming
beholder_form_performance_timing_redirect_start_millis browser, region Свойство redirectStart, полученное через PerformanceResourceTiming
beholder_form_performance_timing_request_start_millis browser, region Свойство requestStart, полученное через PerformanceResourceTiming
beholder_form_performance_timing_response_end_millis browser, region Свойство responseEnd, полученное через PerformanceResourceTiming
beholder_form_performance_timing_response_start_millis browser, region Свойство responseStart, полученное через PerformanceResourceTiming
beholder_form_performance_timing_secure_connection_start_millis browser, region Свойство secureConnectionStart, полученное через PerformanceResourceTiming

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

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

Тест: 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