Сервис собирает метрики о производительности загрузки платёжной формы из разных регионов.
Точка входа в приложение: dev.vality.beholder.service.BeholderService.behold
. Этот метод вызывается по расписанию, указанном в свойстве schedule.cron
.
Для загрузки платёжной формы необходимы InvoiceId
и InvoiceAccessToken
.
Схема взаимодействия с swag-payments:
Алгоритм взаимодействия реализован здесь: dev.vality.beholder.service.PaymentsService.prepareFormData
Beholder умеет работать c простым selenium-hub и с lambdatest. В реальности обе интеграции работают через selenium API и являются совместимыми.
Алгоритм загрузки и сбора метрик формы реализован здесь: dev.vality.beholder.service.SeleniumService.executePaymentRequest
Его можно разбить на следующие шаги:
- Установить подключение с selenium-hub/lambdatest
- Отправить запрос на загрузку формы
- Собрать метрики загрузки формы посредством javascript'а (
dev.vality.beholder.util.SeleniumUtil.PERFORMANCE_SCRIPT
) - Заполнить форму и отправить запрос на проведение платежа
- Собрать логи производительности браузера
Собранная на предыдущем шаге информация о производительности формы записывается в соответствующие метрики 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
Подготовка к запуску теста:
- Прописать валидные значения в следующих свойствах:
- payments.api-url - адрес для обращения к api
- payments.form-url - адрес для загрузки платёжной формы
- payments.request.shop-id - идентификатор магазина, который нужно использовать
- Прописать в свойстве
dev.vality.beholder.IntegrationTest.TEST_USER_TOKEN
валидный токен - Готово, можно запускать тест.
Описание метрик производительности, которые можно получить через JS.
Описание метрик сети, которые можно получить от chromium'а.
Регионы, доступные для тестирования. На их основе заполнен справочник regions.json