12 KiB
beholder
Сервис собирает метрики о производительности загрузки платёжной формы из разных регионов.
Особенности имплементации
Точка входа в приложение: 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