{"id":37713870,"url":"https://github.com/ig-rudenko/ecstasy","last_synced_at":"2026-01-16T13:22:44.558Z","repository":{"id":64108105,"uuid":"530084460","full_name":"ig-rudenko/ecstasy","owner":"ig-rudenko","description":"🟣Ecstasy - Equipment Control System To Assist You - программа для управления сетевым оборудованием.","archived":false,"fork":false,"pushed_at":"2026-01-12T13:36:24.000Z","size":89553,"stargazers_count":10,"open_issues_count":7,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-12T17:44:10.023Z","etag":null,"topics":["ansible","celery","control-system","device-management","django","docker-compose","network-automation","network-devices","network-visualization","python","vue"],"latest_commit_sha":null,"homepage":"https://ig-rudenko.github.io/ecstasy/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ig-rudenko.png","metadata":{"files":{"readme":"README.md","changelog":"news/__init__.py","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-08-29T05:55:19.000Z","updated_at":"2026-01-12T13:36:28.000Z","dependencies_parsed_at":"2023-09-22T11:49:02.187Z","dependency_job_id":"b3e27b72-0048-49f0-bb30-24fc8b15b65a","html_url":"https://github.com/ig-rudenko/ecstasy","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/ig-rudenko/ecstasy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ig-rudenko%2Fecstasy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ig-rudenko%2Fecstasy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ig-rudenko%2Fecstasy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ig-rudenko%2Fecstasy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ig-rudenko","download_url":"https://codeload.github.com/ig-rudenko/ecstasy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ig-rudenko%2Fecstasy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28479033,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ansible","celery","control-system","device-management","django","docker-compose","network-automation","network-devices","network-visualization","python","vue"],"created_at":"2026-01-16T13:22:43.741Z","updated_at":"2026-01-16T13:22:44.553Z","avatar_url":"https://github.com/ig-rudenko.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ecstasy\n\n![Python](https://img.shields.io/badge/python-3.12+-blue.svg)\n![Code style: black](https://img.shields.io/badge/code_style-black-black.svg)\n![CI](https://github.com/ig-rudenko/ecstasy/actions/workflows/django.yml/badge.svg)\n\n[![](https://skillicons.dev/icons?i=vite,vue,tailwind,python,django)](https://skillicons.dev)\n\u003cimg src=\"https://havola.uz/uploads/logos/90/sb4u0gqv.png\" alt=\"celery\" width=\"50\" height=\"50\"/\u003e\n[![](https://skillicons.dev/icons?i=mysql,redis,docker)](https://skillicons.dev)\n\n## Веб-приложение для взаимодействия с сетевым оборудованием\n\nПозволяет отображать информацию о сетевых устройствах в удобном для чтения формате\nбез ввода консольных команд.\n\n![img.png](img/img_3.png)\n\n### Структура\n\n![img.png](img/img_8.png)\n\nWeb-console позволит подключаться к оборудованию через терминал в браузере\n\nЧтобы запустить и настроить web-console нужно [следовать инструкции](web-console/README.md).\n\n### Возможности:\n\n- Взаимодействие с сетевым оборудованием\n    - Отображение интерфейсов оборудования в реальном времени\n    - Сбор конфигурации\n    - Создание шаблонов команд ([wiki](https://github.com/ig-rudenko/ecstasy/wiki/Шаблоны-команд))\n    - Управление состоянием порта (up/down)\n    - Просмотр MAC адресов на порту\n    - Просмотр текущей конфигурации порта\n    - Перенаправление для просмотра логов в Elastic Stack\n    - Просмотр ошибок на порту\n    - Возможность просматривать и сбрасывать текущую сессию по MAC адресу\n    - Сохранение файлов конфигураций оборудования\n\nКроме того, Ecstasy предоставляет дополнительные функции для визуализации\nи поиска сетевой информации:\n\n- Отображение топологии VLAN / MAC\n- Поиск по текстовому описанию интерфейсов\n- Поиск IP/MAC адреса\n- Создание и просмотр интерактивных карт\n- Учёт загруженности оборудования\n- База GPON подключений и пользователей\n\n### Поддержка производителей оборудования:\n\nСписок поддерживаемых вендоров приведен ниже. Другие модели тоже могут быть совместимы, но я имею доступ только к этим\nустройствам.\n\n- `Cisco`\n    - Проверено для: `WS-C4500*` `WS-C35*0` `WS-C3750*` `ME-3*00X` `ME-4924` `ME-3400`\n- `Eltex`\n    - Проверено для: `MES3324*` `ESR-12VF` `LTP-4X(8X)-rev.*` `LTP-16N`\n- `MikroTik`\n    - Проверено для: `RouterOS v6.* (v7.*)`\n- `Huawei`\n    - Проверено для: `S2403TP` `S2326TP` `CX600-X8` `CE6865`\n- `Huawei DSL (GPON)`\n    - Проверено для: `MA5600T`\n- `Iskratel DSL`\n    - Проверено для: `MPC8560`\n- `D-Link`\n    - Проверено для: `DES-3200-*` `DES-3028` `DES-3526` `DGS-3420` `DGS-12**`\n- `Extreme`\n    - Проверено для: `X460-*` `X670-*`\n- `ZTE`\n    - Проверено для: `ZXR10 2928E` `2936-FI` `2952E`\n- `Q-Tech`\n    - Проверено для: `QSW-3450-*` `QSW-8200-*`\n\n## Запуск\n\n### Docker\n\nРекомендуемым и простым способом является запуск через docker compose.\n\nДля начала скопируйте файл `.env.example` в `.env` и укажите свои данные в нём.\n\n```shell\ncp .env.example .env\n```\n\nСоздайте папки для хранения данных. И дайте права на запись.\n\n```shell\nmkdir logs static media map_layer_files configurations\nchmod 777 logs static media map_layer_files configurations\n```\n\nТеперь запустите контейнеры.\n\n```shell\ndocker compose build;\ndocker compose up -d;\n```\n\nПо умолчанию создастся пользователь: `admin/password1`.\n\n---\n\n### Удобный поиск оборудования\n\n![img.png](img/img_4.png)\n\n### Просмотр загруженности интерфейсов оборудований\n\n![img.png](img/img_9.png)\n\nПри выборе оборудования показывается его информация:\n\n- Состояние оборудования\n- Нагрузка CPU, RAM, Flash и температура\n- Подробная информация (берется из Zabbix)\n- Ссылка в Zabbix\n- Ссылка на карту с местоположением оборудования\n- Логи в Elastic Search\n- Перечень конфигураций\n- Медиафайлы\n- Интерфейсы\n\n![img.png](img/img.png)\n\nПри выборе конкретного порта открывается его информация:\nОписание, конфигурация, счетчик ошибок, диагностика состояния кабеля, список MAC адресов.\n\n![img_1.png](img/img_1.png)\n\nДля станционных терминалов GPON OLT возможен следующий вывод информации об интерфейсе (указан ниже).\n\n![img.png](img/img_2.png)\n\n## Карты\n\nРеализована возможность отображать и создавать интерактивные карты:\n\n- Из ссылки на внешнюю карту;\n- Из HTML файла карты;\n- Из совокупности различных слоев. Слой может быть представлен:\n    - Из группы в Zabbix (будут отображаться узлы сети, которые имеют координаты);\n    - Из файла формата GEOJSON.\n\nИнтерактивные карты со слоями из Zabbix группы отображают доступность оборудования\nс описанием проблемы в Zabbix.\n\n![img.png](img/interactive-map.png)\n\n## Топология VLAN\n\nПостроение топологии VLAN по оборудованию.\n\n![img.png](img/img_6.png)\n\n## Топология прохождения MAC адреса\n\nОпределение маршрута MAC адреса между оборудованиями.\n\n![img.png](img/img_10.png)\n\n## Поиск по описанию порта\n\n![img.png](img/img_5.png)\n\n### Технические данные GPON подключений\n\n![img.png](img/img_7.png)\n\n## Кастомные команды\n\n### import_from_zabbix\n\n    # python manage.py import_from_zabbix\n\n    Импорт узлов сети из zabbix\n    \n    options:\n      -h, --help            show this help message and exit\n      -g GROUPS, --groups GROUPS\n                            Имена Zabbix групп через запятую\n      -a AUTH, --auth AUTH  Имя группы авторизации для узла сети\n      -s, --save            Сохранить в базу узлы сети\n      --change-group CHANGE_GROUP\n                            Имя группы Ecstasy, которая будет использоваться для всех узлов сети. Если не указана, то будет использована оригинальная группа Zabbix\n      --all-status          Импортируем также узлы сети, которые деактивированы в Zabbix\n      --interface-scan {telnet,ssh,snmp}\n                            Протокол для сбора интерфейсов узла сети. (по умолчанию ssh)\n      --snmp-community SNMP_COMMUNITY\n                            SNMP Community (необязательно)\n      --cli-protocol {telnet,ssh}\n                            Протокол для выполнения команд узла сети. (по умолчанию ssh)\n      --name-pattern NAME_PATTERN\n                            Паттерн для имени узлов сети. Если совпадает, то будет импортирован. (необязательно)\n      --ip-pattern IP_PATTERN\n                            Паттерн для IP узла сети. Если совпадает, то будет импортирован. (необязательно)\n      --server SERVER       URL сервера Zabbix (необязательно)\n      --user USER           Имя пользователя Zabbix (необязательно)\n      --password PASSWORD   Пароль пользователя Zabbix (необязательно)\n      --debug               Выводить дополнительную информацию\n      --version             Show program's version number and exit.\n      -v {0,1,2,3}, --verbosity {0,1,2,3}\n                            Verbosity level; 0=minimal output, 1=normal output, 2=verbose output, 3=very verbose output\n      --settings SETTINGS   The Python path to a settings module, e.g. \"myproject.settings.main\". If this isn't provided, the DJANGO_SETTINGS_MODULE environment variable will be used.\n      --pythonpath PYTHONPATH\n                            A directory to add to the Python path, e.g. \"/home/djangoprojects/myproject\".\n      --traceback           Raise on CommandError exceptions.\n      --no-color            Don't colorize the command output.\n      --force-color         Force colorization of the command output.\n      --skip-checks         Skip system checks.\n\n\u003e [!NOTE]\n\u003e По умолчанию используются данные авторизации Zabbix хранимые в базе.\n\u003e Указывается через панель администратора: `App settings -\u003e Zabbix API settings`\n\u003e Чтобы не сохранять в базу данных, а только протестировать какие узлы будут учитываться\n\u003e нужно выполнять команды без параметра `--save`.\n\n### Примеры:\n\nИмпорт активных узлов сети из Zabbix группы `devs` в новую группу `devs` ecstasy,\nс указанием группы авторизации `creds-1`, а также использование `telnet`\nкак способа подключения к оборудованию:\n\n```shell\npython manage.py import_from_zabbix --save -g devs -a creds-1 --interface-scan=telnet --cli-protocol=telnet\n```\n\n---\n\nИмпорт активных узлов сети из диапазона `172.30.0.0/24` Zabbix группы `devs` в новую группу `devs` ecstasy,\nс указанием группы авторизации `creds-1`, а также использование `ssh` (По умолчанию SSH)\nкак способа подключения к оборудованию:\n\n```shell\npython manage.py import_from_zabbix --save -g devs -a creds-1 --ip-pattern='172\\.30\\.0\\.\\d+'\n```\n\n## Создание связей моделей\n\n```shell\npython manage.py graph_models -a --rankdir LR --dot -g -o ./docs/models.dot\ndot -Tsvg ./docs/models.dot -o ./docs/models.svg\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fig-rudenko%2Fecstasy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fig-rudenko%2Fecstasy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fig-rudenko%2Fecstasy/lists"}