Skip to main content

Журналы

Экран «Логи» показывает журнал действий пользователей: кто добавил, изменил или удалил шлюз, устройство, приложение, экспортировал данные или выдал права. По нему выясняют, кто завёл устройство или удалил объект. Экран доступен только пользователям с признаком staff и показывает записи только после запроса за выбранный период.

Кто видит раздел​

Пункт меню «Логи» стоит после «Частотные планы» и перед «AI / MCP» и открывает экран по адресу /logs. Пункт видят только пользователи с признаком staff. Этот признак сервер добавляет при входе учётной записи администратора сервера. Остальным пункт не показывается, а прямой переход на /logs уводит на страницу входа /login.

Записи экран получает запросом GET /api/logs/. Сервер проверяет доступ и сам: на этот запрос он отвечает только учётным записям администраторов сервера.

Как получить записи​

При открытии экран ничего не загружает. Чтобы увидеть записи:

  1. Задайте фильтры — см. таблицу ниже.
  2. Нажмите «Получить данные за период». Пока идёт запрос, на кнопке написано «Загрузка».
Экран «Логи» с записями за последний час
  1. Логи — пункт меню между «Частотные планы» и «AI / MCP», его видят только пользователи с признаком staff.
  2. Тип данных — «Все» или «Действия пользователей»; оба варианта возвращают одни и те же записи.
  3. Начало и Конец — период в формате YYYY-MM-DD HH:mm по часам браузера; по умолчанию от часа до открытия экрана до минуты после. Границы не включаются.
  4. Лимит — сколько самых новых записей периода вернёт сервер, по умолчанию 50.
  5. Получить данные за период — запрашивает записи. При открытии экран ничего не загружает.
  6. Время — в текущей версии колонка пустая, см. Колонки таблицы.
  7. Пагинация и Найдено — страницы внутри полученных записей и их число, не больше «Лимита».
  8. Размер таблицы — число строк на странице, по умолчанию 25.
ФильтрЧто задаётПо умолчанию
«Тип данных»«Все» или «Действия пользователей». На сервере есть только один тип данных, «Действие пользователя», поэтому оба варианта возвращают одно и то же«Все»
«Начало»Начало периода в формате YYYY-MM-DD HH:mmВремя открытия экрана минус 1 час
«Конец»Конец периода в формате YYYY-MM-DD HH:mmВремя открытия экрана плюс 1 минута
«Лимит»Сколько самых новых записей периода вернёт сервер50

Время в полях «Начало» и «Конец» вводится по часам браузера. Перед отправкой интерфейс переводит его в UTC, и сервер разбирает его как UTC. Границы не включаются: попадают записи строго позже «Начала» и строго раньше «Конца».

Сервер сортирует записи периода по убыванию id и оставляет первые N, где N — значение «Лимит». Постраничный просмотр идёт уже внутри этих N записей, а «Найдено» под таблицей показывает их число.

Под таблицей есть пагинация и поле «Размер таблицы» — число строк на странице, по умолчанию 25; стрелками поля значение не опускается ниже 5. Переход на другую страницу заново запрашивает сервер.

Если запрос не удался, появляется окно «Ошибка» с текстом «Что-то пошло не так». Если за период записей нет, в таблице выводится «Список пуст». Сразу после открытия экрана, пока данные не запрошены, таблица тоже показывает «Список пуст».

Колонки таблицы​

КолонкаЧто показывает
«Время»Время действия. В текущей версии колонка пустая, см. ниже
«Пользователь»Учётная запись, выполнившая действие
«Действие»Вид действия, см. таблицу ниже
«Объект»Тип объекта
«Id»Внутренний первичный ключ объекта в базе — не DevEUI и не EUI шлюза
«Тип данных»«Действие пользователя» — другого типа на сервере нет
«Сообщение»Текст записи на английском, см. ниже

Щелчок по заголовку колонки сортирует строки текущей страницы, без нового запроса к серверу.

Текущая версия ONS

Колонка «Время» остаётся пустой: интерфейс берёт время из поля action_time, а сервер передаёт его в поле time. По той же причине сортировка по колонке «Время» не работает. Порядок строк задаёт сервер: новые записи сверху.

Значения колонки «Действие»​

Текст «Сообщения» сервер составляет в момент записи по английскому шаблону.

Код«Действие»Шаблон «Сообщения»
1ДобавлениеAdded <id> <тип>.
2ИзменениеChanged <id> <тип>.
3УдалениеDeleted <id> <тип>.
4Установление правPermissions are set for <id> <тип>.
5Экспортирование данныхData exported from <id> <тип>.
6Специфичное изменениеSomething has changed in <id> <тип>.

<id> — значение из колонки «Id», записанное английским порядковым числительным, например 12th. <тип> — тип объекта. Русских переводов этих шаблонов нет, поэтому сообщения остаются английскими и в русском интерфейсе.

Какие действия попадают в журнал​

ОбъектЧто записывается
ШлюзыСоздание — «Добавление»; сохранение формы — «Изменение»; массовое удаление — «Удаление»; экспорт в CSV — «Экспортирование данных»; выдача прав — «Установление прав»; «Обновить покрытие» — «Специфичное изменение»
Устройства (раздел «Узлы»)Создание — «Добавление»; сохранение формы — «Изменение»; массовое изменение «Изменить настройки узла» — «Изменение» по каждому устройству, только если вся выборка прошла проверку; удаление — «Удаление»; экспорт в CSV — «Экспортирование данных»; выдача прав — «Установление прав»
Multicast-группыСоздание, изменение и удаление. В базе группа хранится как устройство, поэтому в колонке «Объект» у неё тот же тип, что у устройств
ПриложенияСоздание — «Добавление»; изменение — «Изменение»; удаление — «Удаление»; выдача прав — «Установление прав». При удалении приложения его устройства деактивируются, но строки журнала пишутся только для самого приложения
ПрофилиТолько удаление — «Удаление». Создание и правка профиля не записываются
УведомленияСоздание — «Добавление»; изменение — «Изменение»

Устройства, созданные через WebSocket API и MCP​

Устройство, созданное командой WebSocket API create_device_req или MCP-инструментом ONS create_devices, тоже даёт в журнале строку «Добавление». Строка пишется в той же транзакции, что и само устройство. В её сообщении два элемента:

  • Added <id> <тип>. — тип объекта и его номер; <id> записан порядковым числительным, как в остальных записях;
  • DevEUI <DevEUI> — DevEUI созданного устройства.

У строк, созданных через MCP, в колонке «Пользователь» — учётная запись, под чьим токеном работает MCP. У строк от WebSocket API колонка пуста.

Что в журнал не попадает​

Журнал записывает действия в веб-интерфейсе, а также создание устройств через WebSocket API и MCP.

Что важно знать​

  • «Лимит» ограничивает всю выборку, а не страницу. Сервер отдаёт не больше N самых новых записей периода, и «Найдено» не превысит лимит. Если «Найдено» равно лимиту, за период могут быть и более ранние записи — поднимите лимит или сузьте период.
  • Если поле «Лимит» очистить, интерфейс передаёт limit=null, и сервер возвращает не больше 10 записей. То же при нуле и любом значении, которое не является целым положительным числом. Запрос к GET /api/logs/ совсем без параметра limit или data_type сервер не обрабатывает и отвечает ошибкой.
  • При массовых операциях — удалении и выдаче прав — строка журнала пишется по каждому выбранному объекту, в том числе по тем, где операция отклонена из-за прав: у профилей сервер отвечает «Not completely profiles deleted.», у шлюзов, устройств и приложений — «Permission denied». Строка «Удаление» или «Установление прав» не доказывает, что операция выполнена.
  • Фильтр «Тип данных» на результат не влияет: «Все» и «Действия пользователей» возвращают одни и те же записи.

См. также​

  • Профили — группы пользователей и пункты меню, которые они видят.
  • Приложения — удаление приложения и права пользователей на приложения.
  • Создать устройство — создание устройства через WebSocket API.
  • WebSocket API — описание интерфейса для внешних систем.