mirror of
https://github.com/valitydev/beholder.git
synced 2024-11-06 00:35:19 +00:00
85 lines
12 KiB
Markdown
85 lines
12 KiB
Markdown
# beholder
|
||
|
||
Сервис собирает метрики о производительности загрузки платёжной формы из разных регионов.
|
||
|
||
## Особенности имплементации
|
||
|
||
Точка входа в приложение: ```dev.vality.beholder.service.BeholderService.behold```. Этот метод вызывается по расписанию, указанном в свойстве ```schedule.cron```.
|
||
|
||
### Подготовка данных для загрузки платёжной формы
|
||
|
||
Для загрузки платёжной формы необходимы ```InvoiceId``` и ```InvoiceAccessToken```.
|
||
|
||
Схема взаимодействия с [swag-payments](https://github.com/valitydev/swag-payments):
|
||
|
||
![PaymentsImage](img/payments.drawio.svg)
|
||
|
||
Алгоритм взаимодействия реализован здесь: ```dev.vality.beholder.service.PaymentsService.prepareFormData```
|
||
|
||
### Загрузка платёжной формы
|
||
|
||
Beholder умеет работать c простым selenium-hub и с [lambdatest](https://www.lambdatest.com/).
|
||
В реальности обе интеграции работают через 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](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/connectEnd), полученное через [PerformanceResourceTiming](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming) |
|
||
| beholder_form_performance_timing_connect_start_millis | browser, region | Свойство [connectStart](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/connectStart), полученное через [PerformanceResourceTiming](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming) |
|
||
| beholder_form_performance_timing_dom_complete_millis | browser, region | Свойство [domComplete](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming/domComplete), полученное через [PerformanceNavigationTiming](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming) |
|
||
| beholder_form_performance_timing_dom_content_loaded_event_end_millis | browser, region | Свойство [domContentLoadedEventEnd](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming/domContentLoadedEventEnd), полученное через [PerformanceNavigationTiming](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming) |
|
||
| beholder_form_performance_timing_dom_content_loaded_event_start_millis | browser, region | Свойство [domContentLoadedEventStart](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming/domContentLoadedEventStart), полученное через [PerformanceNavigationTiming](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming) |
|
||
| beholder_form_performance_timing_dom_interactive_millis | browser, region | Свойство [domInteractive](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming/domInteractive), полученное через [PerformanceNavigationTiming](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming) |
|
||
| beholder_form_performance_timing_domain_lookup_end_millis | browser, region | Свойство [domainLookupEnd](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/domainLookupEnd), полученное через [PerformanceResourceTiming](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming) |
|
||
| beholder_form_performance_timing_domain_lookup_start_millis | browser, region | Свойство [domainLookupStart](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/domainLookupStart), полученное через [PerformanceResourceTiming](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming) |
|
||
| beholder_form_performance_timing_fetch_start_millis | browser, region | Свойство [fetchStart](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/fetchStart), полученное через [PerformanceResourceTiming](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming) |
|
||
| beholder_form_performance_timing_load_event_start_millis | browser, region | Свойство [loadEventStart](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming/loadEventStart), полученное через [PerformanceResourceTiming](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming) |
|
||
| beholder_form_performance_timing_redirect_end_millis | browser, region | Свойство [redirectEnd](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/redirectEnd), полученное через [PerformanceResourceTiming](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming) |
|
||
| beholder_form_performance_timing_redirect_start_millis | browser, region | Свойство [redirectStart](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/redirectStart), полученное через [PerformanceResourceTiming](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming) |
|
||
| beholder_form_performance_timing_request_start_millis | browser, region | Свойство [requestStart](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/requestStart), полученное через [PerformanceResourceTiming](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming) |
|
||
| beholder_form_performance_timing_response_end_millis | browser, region | Свойство [responseEnd](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/responseEnd), полученное через [PerformanceResourceTiming](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming) |
|
||
| beholder_form_performance_timing_response_start_millis | browser, region | Свойство [responseStart](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/responseStart), полученное через [PerformanceResourceTiming](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming) |
|
||
| beholder_form_performance_timing_secure_connection_start_millis | browser, region | Свойство [secureConnectionStart](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/secureConnectionStart), полученное через [PerformanceResourceTiming](https://developer.mozilla.org/en-US/docs/Web/API/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. Готово, можно запускать тест.
|
||
|
||
## Полезные ссылки
|
||
|
||
[Описание метрик производительности](https://developer.mozilla.org/en-US/docs/Web/Performance/Navigation_and_resource_timings), которые можно получить через JS.
|
||
|
||
[Описание метрик сети](https://chromedevtools.github.io/devtools-protocol/tot/Network/), которые можно получить от chromium'а.
|
||
|
||
[Регионы](https://www.lambdatest.com/capabilities-generator/), доступные для тестирования. На их основе заполнен справочник ```regions.json```
|