netbox-incidents
Плагин для NetBox — учёт инцидентов, привязанных к устройствам, интерфейсам, модулям и стойкам. Полностью независим от extras.JournalEntry.
Содержание
Возможности
- Отдельная модель
Incident:- Статус (Открыто / Закрыто)
- Дата начала и окончания
- Контактное лицо (выбор из
tenancy.Contact, опционально фильтруется по группе) - Причина (настраиваемый список)
- Комментарий (поддерживает Markdown, есть шаблон по умолчанию)
- Привязка к объектам:
- Device
- Interface
- Module
- Rack
- Используется Generic Foreign Key — ровно один объект на инцидент.
- Вкладка «Incidents» на карточках Device / Interface / Module / Rack:
- Список привязанных инцидентов
- Форма быстрого добавления нового инцидента
- Стандартные механизмы NetBox:
- Список, фильтры, массовое редактирование/удаление
- Импорт из CSV
- Построено на
NetBoxModelForm,NetBoxModelFilterSetи т.д.
- Отчёты (xlsx):
- Период задаётся датами «с» / «по»
- Общий отчёт — построчный список инцидентов по группам сайтов (место установки, оборудование, начало/конец простоя, причина, контакт, примечание — комментарий инцидента целиком)
- Детальный отчёт — те же инциденты с группировкой «группа сайтов → причина → тип объекта (Стойка/Устройство/Модуль/Интерфейс)» и подытогами на каждом уровне
- Статистика — количество и суммарное время простоя по причинам (колонки), в разрезе группы сайтов и типа объекта (строки), с итогами по группе и по всем данным
- REST API (
/api/plugins/incidents/incidents/) — обязателен для самого NetBox (используется системой логирования изменений), также доступен для внешних интеграций.
Скриншоты
- Список инцидентов — общий вид таблицы с фильтрами, статусами и причинами.
- Форма создания инцидента — выбор объекта (устройство/интерфейс/модуль/стойка), контактного лица, статуса, причины, дат и комментария.
- Страница отчётов — три блока: «Общий отчёт», «Детальный отчёт», «Статистика» с выбором периода.
- Вкладка Incidents на карточке устройства — список инцидентов и форма быстрого добавления.
- Пример общего отчёта (xlsx) — плоская таблица с группировкой по группам сайтов.
- Пример детального отчёта (xlsx) — иерархическая группировка с подытогами.
- Пример статистики (xlsx) — сводная таблица по причинам и типам объектов.
Требования
- NetBox >= 4.6.0
- Python >= 3.10
- Django (устанавливается вместе с NetBox)
openpyxl(для генерации xlsx-отчётов)
Установка
-
Активируйте виртуальное окружение NetBox:
source /opt/netbox/venv/bin/activate
-
Установите плагин одним из способов:
Из исходников:
pip install /path/to/netbox-incidents
Через local_requirements.txt (рекомендуется для разработки):
-e /opt/netbox_incidents
-
Установите зависимость openpyxl:
pip install openpyxl
-
Включите плагин в
configuration.py(см. раздел Настройка). -
Выполните миграции (см. раздел Миграции).
-
Перезапустите NetBox и RQ:
sudo systemctl restart netbox netbox-rq
Быстрый деплой (пример):
sudo /opt/netbox/venv/bin/pip install --force-reinstall --no-deps /opt/netbox_incidents
sudo /opt/netbox/venv/bin/pip install openpyxl
sudo chown -R user:user /opt/netbox/venv/lib/python3.12/site-packages/netbox_incidents
sudo systemctl restart netbox netbox-rq
Настройка
В файле configuration.py добавьте плагин в PLUGINS и при необходимости настройте параметры:
PLUGINS = ['netbox_incidents']
PLUGINS_CONFIG = {
'netbox_incidents': {
# slug группы Contact (tenancy.Contact), из которой выбирается
# "Контактное лицо". Оставьте '' — без фильтра, доступны все контакты.
'contact_group_slug': '',
}
}
Использование
Создание инцидента
- Перейдите в раздел Инциденты в главном меню.
- Нажмите Добавить.
- Заполните поля:
- Объект — выберите тип (Устройство, Интерфейс, Модуль, Стойка) и конкретный объект.
- Контактное лицо — выберите контакт (список может фильтроваться настройкой
contact_group_slug). - Статус — Открыто / Закрыто.
- Причина — выберите из списка.
- Дата начала — обязательное поле.
- Дата окончания — опционально (для закрытых инцидентов).
- Комментарий — поддерживает Markdown.
- Нажмите Создать или Создать и добавить ещё.
Просмотр инцидентов на объектах
На карточках Device, Interface, Module и Rack появилась вкладка Incidents. Она содержит:
- Таблицу связанных инцидентов.
- Форму быстрого добавления нового инцидента (без перехода в общий список).
Список инцидентов
Раздел Инциденты предоставляет:
- Фильтры по статусу, причине, дате, объекту и т.д.
- Массовые действия: редактирование, удаление.
- Экспорт в CSV (стандартный функционал NetBox).
- Импорт из CSV.
Отчёты
Раздел Отчёты содержит три формы для выгрузки xlsx-файлов:
-
Общий отчёт
- Выберите период (даты «с» и «по»).
- Нажмите Скачать.
- Файл содержит плоский список инцидентов, сгруппированный по группам сайтов.
- Колонки: место установки, оборудование, начало простоя, конец простоя, время простоя, причина, кому сообщили, примечание.
-
Детальный отчёт
- Выберите период.
- Нажмите Скачать.
- Файл содержит иерархическую структуру: группа сайтов → причина → тип объекта (Стойка/Устройство/Модуль/Интерфейс).
- На каждом уровне выводятся подытоги.
-
Статистика
- Выберите период.
- Нажмите Скачать.
- Файл содержит сводную таблицу:
- Строки: группа сайтов + тип объекта.
- Колонки: причины (количество и общее время простоя).
- Итоги по группе и общий итог.
REST API
Плагин предоставляет стандартный REST API по адресу:
/api/plugins/incidents/incidents/
Доступны все операции CRUD, фильтрация, пагинация. API используется самим NetBox для логирования изменений, а также может применяться для внешних интеграций.
Разработка
Миграции
В репозитории пока не закоммичены файлы миграций Django — сгенерируйте их в своём dev-окружении перед первым запуском. Рекомендуется закоммитить папку netbox_incidents/migrations/ в репозитории перед публикацией релиза, чтобы конечным пользователям не нужно было включать DEVELOPER = True.
Порядок действий:
-
Включите режим разработчика:
cd /opt/netbox sudo nano netbox/netbox/settings.py # или configuration.py: DEVELOPER = True
-
Сгенерируйте миграции:
sudo -u netbox venv/bin/python3 netbox/manage.py makemigrations netbox_incidents
-
Примените миграции:
sudo -u netbox venv/bin/python3 netbox/manage.py migrate netbox_incidents
-
Выключите
DEVELOPER = Falseи перезапустите сервисы:sudo systemctl restart netbox netbox-rq
Тестирование
Для запуска тестов используйте стандартные средства Django:
python manage.py test netbox_incidents
Вклад в развитие
Pull request'ы приветствуются. Пожалуйста, создавайте issue для обсуждения новых функций или сообщений об ошибках.
Лицензия
Apache 2.0
Metadata
Release files for netbox-incidents 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| netbox_incidents-1.0.0.tar.gz | 34.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| netbox_incidents-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 71.1 kB
Release files / netbox_incidents-1.0.0.tar.gz
| Download URL | netbox_incidents-1.0.0.tar.gz |
|---|---|
| Size | 34.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
21021aa5299734dc071764358895b60beeb7b05eae281e58a84a8b14c863b722
|
|
BLAKE2b-256 checksum How to use checksums |
9bb9630b4126d29c114c69cc5c9e277ca68f1f74cd84e394327ab5717e6a662f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / netbox_incidents-1.0.0-py3-none-any.whl
| Download URL | netbox_incidents-1.0.0-py3-none-any.whl |
|---|---|
| Size | 36.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
db0556a50b842ae5699fefbb04f41c4f67d8f0ff606923b989d3df7a0042bc60
|
|
BLAKE2b-256 checksum How to use checksums |
e54e6dfc2f4f8b71e5bd9976cf3b449475fd918dd107e9361c093ee085980d0c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|