Jump to content

Question

Posted

Как получить лог через REST API?

Пробовал по аналогии с CLI запросы get /rci/show/log /rci/show/log/once /rci/show/log/10 /rci/show/log/10/once - отвечает 404 Not Found

6 answers to this question

Recommended Posts

  • 1
Posted
В 05.03.2021 в 18:39, fps сказал:

Как получить лог через REST API?

Пробовал по аналогии с CLI запросы get /rci/show/log /rci/show/log/once /rci/show/log/10 /rci/show/log/10/once - отвечает 404 Not Found

GET-запрос не работает потому что это т.н. "background process" и он еще не запущен.
См. B.1.2.3 Background processes в Command Reference Guide:
image.png


Чтобы получить лог необходимо:

  • отправить POST-запрос к rci/show/log с аргументами команды в JSON в качестве данных (без аргументов -- "{}"; другой пример "{"max-lines": 100}"). Этот запрос вернет весь текущий лог.
  • далее отправлять GET-запросы к rci/show/log (будет приходить объект вида {continued: true, <новые сообщения, если они появились с момента последнего опроса>}
  • в момент, когда вы хотите прекратить получение сообщений из лога -- отправить запрос с методом DELETE
  • Upvote 1
  • 1
Posted
8 минут назад, fps сказал:

Если отправить POST-запрос с пустым JSON-объектом "{}" многократно без команд DELETE, то еще один background process будет запускаться каждый раз и устройству рано или поздно поплохеет? Или это нормальная практика?

Нужно провести эксперимент. Особенность лога в том, что он продолжает присылать признак "continued" бесконечно, в отличие от других подобных процессов.("show site-survey", "components commit", ...). Отсутствие признака "continued" в ответе на GET-запрос (или на исходных POST-запрос), значит, что процесс в системе завершен (и последующие GET-запросы снова будут возвращать 404).

Я не знаю случаев когда устройству плохело бы из-за запросов лога, но я запустить много копий получения лога не пробовал.

14 минуты назад, fps сказал:

Если отправить POST-запрос с пустым JSON-объектом "{}" однократно, то потом до перезагрузки устройства можно слать GET? Или background process через какое-то время завершится?

В случае с логом получение новых событий через GET-запрос после запуска должно работать пока не протухнет сессия авторизации (она протухает через 10 минут отсутствия активности).

 

16 минут назад, fps сказал:

Какой правильный способ получить последние 100 строк лога безотносительно предыдущих действий? По аналогии с cli командой "show log 100 once"

Гм, похоже, что достаточно отправить POST-запрос к rci/show/log с такими данными:
 

{
    "once": true,
    "max-lines": 100
}

Этот запрос вернет 100 последних сообщений и при этом фоновый процесс не остается висеть после ответа. Надеюсь, что это подойдет)

  • Upvote 1
  • 1
Posted
41 минуту назад, fps сказал:

Больше никакие параметры не поддерживаются? 

Запросить только ошибки {"once": true, "max-lines": 100, "level": "Error"} не получится, только фильтровать на стороне клиента? 

Запросить только ошибки, к сожалению, нельзя. Параметры в REST API повторяют аргументы команды в CLI:
 

(config)> show log

 Usage template:
              log [{max-lines}] [once]

 

  • Upvote 1
  • 0
Posted (edited)

Спасибо. Так работает.

  • Если отправить POST-запрос с пустым JSON-объектом "{}" многократно без команд DELETE, то еще один background process будет запускаться каждый раз и устройству рано или поздно поплохеет? Или это нормальная практика?
  • Если отправить POST-запрос с пустым JSON-объектом "{}" однократно, то потом до перезагрузки устройства можно слать GET? Или background process через какое-то время завершится?
  • Какой правильный способ получить последние 100 строк лога безотносительно предыдущих действий? По аналогии с cli командой "show log 100 once"
Edited by fps
  • 0
Posted

Это именно то, что искал:

POST /rci/show/log {"once": true, "max-lines": 100}

Спасибо. Вопрос исчерпан.

  • 0
Posted

Больше никакие параметры не поддерживаются? 

Запросить только ошибки {"once": true, "max-lines": 100, "level": "Error"} не получится, только фильтровать на стороне клиента? 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...