GetFullDomainsPartition - Получить полный список доменов с пагинацией
Общая информация
-
Команда актуальна, начиная с версии 1.18. Пришла как альтернатива GetFullDomainsChanged.
-
Особенности работы команды:
-
Выдает порцию данные по skip, count;
-
Вычитывает плоский список доменов с сортировкой по ID (select DOMAINS, join DOMAIN_PARAMS);
-
Используется новая колонка fullName в DOMAINS;
-
Не обращается к родителям. Выдает сырые данные (как в БД), тип родителя ЛК будет подтягивать самостоятельно (при пагинации нет обращений к родителям, были бы лишние запросы).
-
-
В отличие от указанной выше команды, GetFullDomainsPartition не работает с параметром hash. Значение hash в БД все равно будет приложено в ответ, но на вход оно уже не передается. Причина тому, опять же, пагинация. Нет смысла как-то проверять hash, когда вычитываем данные частями.
Входные параметры
| Параметр | Значение | Формат значения | Расшифровка формата | Ссылка |
|---|---|---|---|---|
skip |
Число доменов, которые нужно пропустить (по умолчанию 0) |
int |
В случае ошибки чтения, будет использоваться значение по умолчанию 0 |
|
count |
Число доменов, которые нужно вернуть (по умолчанию 10) |
int |
В случае ошибки чтения, будет использоваться значение по умолчанию 10 |
Выходные параметры
| Параметр | Значение | Формат значения |
|---|---|---|
array |
Массив объектов 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.23-2635
Дата публикации 12-08-2022 08:29:16