# -*- coding: utf-8 -*-


class SeaLantConfig(object):
    """
    Конфигурация.
    Можно подключить метрики, которые будут сниматься перед и после тестов
    и сравниваться между собой.
    Например, размер DOM дерева и количество EventListeners до и после тестов.
    func_metric - код для выполнения черещ домен Runtime
    metrics - кортеж с метриками
    В ответ приходит словарь, откуда достается ['result']['value']
    """

    number_of_test_repeats = 5             # Количество повторов теста в течение одной проверки (для таймлайна необходимо добавить 1 прогревочный и 1 последний повтор)
    unique_header_name = 'unique_header'   # Заголовок запроса, по которому определяется уникальность метода
    host = 'http://localhost'              # Хост для подключения к ноде
    port = '9222'                          # Порт для подключения к ноде
    websocket_url = ''                     # Адрес для  подключения к вебсокету ноды ws://
    measure_repeat = 1                     # Количество перепроверок найденной утечки
    logging_level = 20                     # 0 - NOTSET; 10 - DEBUG; 20 -INFO; 30 - WARNING; 40 - ERROR; 50 - CRITICAL
    leak_size_limit = 400                  # Порог утечки, после которого сигнализировать о ее наличии, КБ
    logging_function = None                # Внешняя функция логгирования, None - внутреннее логгирование
    default_wait_full_load = True          # Использовать функцию ожидания завершения загрузки после каждого повторения теста
                                           # Иначе - можно самостоятельно выбрать место запуска этой функции или не использовать ее
    save_leaked_heapfile = True            # Сохранение heapfile в случае нахождения утечки
    get_xml_table = True                   # Составление xml отчета в случае нахождения утечки
    path_to_save = ''                      # Путь сохранения архива с отчетом и heapfile, по умолчанию создается папка leaks в папке с тестом

    # Дополнительные метрики

    func_metric_1 = "document.getElementsByTagName('*').length"
    func_metric_2 = """
                    Array.from(document.querySelectorAll('*'))
                      .reduce(function(pre, dom){
                        var clks = getEventListeners(dom).click;
                        pre += clks ? clks.length || 0 : 0;
                        return pre
                      }, 0)
                    """
    metrics = (
        (func_metric_1, "DOM элементы"),
        (func_metric_2, "EventListeners")
    )
    cdp = None
    clear_conf_cdp = True
    time_after_last_resp = 7
    heap_interval_min = 2
    heap_interval_max = 7
    max_heap_size = 10000
