Журналы
Экран «Логи» показывает журнал действий пользователей: кто добавил, изменил или удалил шлюз, устройство, приложение, экспортировал данные или выдал права. По нему выясняют, кто завёл устройство или удалил объект. Экран доступен только пользователям с признаком staff и показывает записи только после запроса за выбранный период.
Кто видит раздел
Пункт меню «Логи» стоит после «Частотные планы» и перед «AI / MCP» и открывает экран по адресу /logs. Пункт видят только пользователи с признаком staff. Этот признак сервер добавляет при входе учётной записи администратора сервера. Остальным пункт не показывается, а прямой переход на /logs уводит на страницу входа /login.
Записи экран получает запросом GET /api/logs/. Сервер проверяет доступ и сам: на этот запрос он отвечает только учётным записям администраторов сервера.
Как получить записи
При открытии экран ничего не загружает. Чтобы увидеть записи:
- Задайте фильтры — см. таблицу ниже.
- Нажмите «Получить данные за период». Пока идёт запрос, на кнопке написано «Загрузка».
- Логи — пункт меню между «Частотные планы» и «AI / MCP», его видят только пользователи с признаком
staff. - Тип данных — «Все» или «Действия пользователей»; оба варианта возвращают одни и те же записи.
- Начало и Конец — период в формате
YYYY-MM-DD HH:mmпо часам браузера; по умолчанию от часа до открытия экрана до минуты после. Границы не включаются. - Лимит — сколько самых новых записей периода вернёт сервер, по умолчанию 50.
- Получить данные за период — запрашивает записи. При открытии экран ничего не загружает.
- Время — в текущей версии колонка пустая, см. Колонки таблицы.
- Пагинация и Найдено — страницы внутри полученных записей и их число, не больше «Лимита».
- Размер таблицы — число строк на странице, по умолчанию 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 шлюза |
| «Тип данных» | «Действие пользователя» — другого типа на сервере нет |
| «Сообщение» | Текст записи на английском, см. ниже |
Щелчок по заголовку колонки сортирует строки текущей страницы, без нового запроса к серверу.
Колонка «Время» остаётся пустой: интерфейс берёт время из поля 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 — описание интерфейса для внешних систем.