GetFullDomainsPartition - Получить полный список доменов с пагинацией

Общая информация

  1. Команда актуальна, начиная с версии 1.18. Пришла как альтернатива GetFullDomainsChanged.

  2. Особенности работы команды:

    • Выдает порцию данные по skip, count;

    • Вычитывает плоский список доменов с сортировкой по ID (select DOMAINS, join DOMAIN_PARAMS);

    • Используется новая колонка fullName в DOMAINS;

    • Не обращается к родителям. Выдает сырые данные (как в БД), тип родителя ЛК будет подтягивать самостоятельно (при пагинации нет обращений к родителям, были бы лишние запросы).

  3. В отличие от указанной выше команды, GetFullDomainsPartition не работает с параметром hash. Значение hash в БД все равно будет приложено в ответ, но на вход оно уже не передается. Причина тому, опять же, пагинация. Нет смысла как-то проверять hash, когда вычитываем данные частями.

Входные параметры

Параметр Значение Формат значения Расшифровка формата Ссылка

skip

Число доменов, которые нужно пропустить (по умолчанию 0)

int

В случае ошибки чтения, будет использоваться значение по умолчанию 0

count

Число доменов, которые нужно вернуть (по умолчанию 10)

int

В случае ошибки чтения, будет использоваться значение по умолчанию 10

Выходные параметры

Параметр Значение Формат значения

array

Массив объектов NbiDomain2 с описанием доменов

NbiDomain2

hash

Хэш последнего изменения дерева доменов

Integer

code

Код ответа

int

detail

Пояснение к ответу

String

Примеры команд и кодов

Код Описание

0

Успешно

Запрос
      <nbi:GetFullDomainsPartition>
         <nbi:skip>0</nbi:skip>
         <nbi:count>3</nbi:count>
      </nbi:GetFullDomainsPartition>
Ответ
      <ns:GetFullDomainsPartitionResponse>
         <ns:return xsi:type="ax218:NbiDomain2ArrayResponse">
            <ax21:code>0</ax21:code>
            <ax21:detail/>
            <ax218:array xsi:type="ax218:NbiDomain2">
               <ax218:descr>root domain</ax218:descr>
               <ax218:domain>root</ax218:domain>
               <ax218:type>both</ax218:type>
            </ax218:array>
            <ax218:array xsi:type="ax218:NbiDomain2">
               <ax218:descr>sandbox</ax218:descr>
               <ax218:domain>found.root</ax218:domain>
               <ax218:type>both</ax218:type>
            </ax218:array>
            <ax218:array xsi:type="ax218:NbiDomain2">
               <ax218:descr>OTT</ax218:descr>
               <ax218:domain>ott.root</ax218:domain>
               <ax218:type xsi:nil="true"/>
            </ax218:array>
            <ax218:hash>205262</ax218:hash>
         </ns:return>
      </ns:GetFullDomainsPartitionResponse>

Код Описание ошибки

2

Ошибка взаимодействия с базой данных доменов

Пример использования

Пример работы кэша доменов с получением всех доменов порциями по 1000 шт на python3.

container_hash = 0
container_content = []


def get_current_domain_counter(nbiclient) -> int:
    method_response = nbiclient.service.GetCurrentDomainCounter()
    if method_response['code'] == 0:  # OK
        return int(method_response['detail'])
    else:  # Error
        print("Error of GetCurrentDomainCounter: {}".format(method_response['detail']))
        return 0


def get_full_domains_partiotion(nbiclient) -> (int, List[str]):
    count = 1000
    skip = 0
    full = []
    dbhash = 0
    start = time.time()
    while 1:
        result = nbiclient.service.GetFullDomainsPartition(skip, count)
        code = result['code']
        if code == 0:
            rhash = result['hash']
            if dbhash == 0:  # keep first selected
                dbhash = rhash
            total = len(result['array'])
            if total == 0:  # no more domains
                break
            else:
                full += result['array']
                skip += count
        else:  # Error. return error code.
            print("Error of GetFullDomainsPartition: {}".format(result['detail']))
            return -1, []
    elapsed = time.time() - start
    print("GetFullDomainsPartition {} domain (hash {}) in {} s".format(len(full), dbhash, elapsed))
    return dbhash, full


if __name__ == '__main__':
    client = softwlc_nbi.create_client()
    result = client.service.GetVersion()
    print("Current NBI version {}".format(result['response']['message']))
    while 1:
        actual = get_current_domain_counter(client)
        if actual != container_hash:  # if hash changed
            rh, rt = get_full_domains_partiotion(client)
            if rh > 0:  # check hash his valid
                print("Update container to hash {} of {} domains".format(rh, len(rt)))
                container_hash = rh
                container_content = rt
        else:
            print("Skip container update, hash doesn't changed")
        time.sleep(60)

Вывод скрипта

Current NBI version 1.18-75 (10-11-2020 06:29:00)
GetFullDomainsPartition 31917 domain (hash 205262) in 52.04143667221069 s
Update container to hash 205262 of 31917 domains
GetFullDomainsPartition 31929 domain (hash 205276) in 62.21472215652466 s
Update container to hash 205276 of 31929 domains
GetFullDomainsPartition 31935 domain (hash 205300) in 62.280704736709595 s
Update container to hash 205300 of 31935 domains
Skip container update, hash doesn't changed
Skip container update, hash doesn't changed

См. также

Вернуться к списку команд
Версия 1.26-3053
Дата публикации 31-03-2023 06:03:06