Skip to content

Repository files navigation

Visiology Dump

Инструмент для автоматической выгрузки дашбордов и датасетов из Visiology через API с сохранением в JSON-файлы. Предоставляет четыре интерфейса: CLI, TUI (whiptail), веб-панель (Flask) и REST API.

Возможности

  • Экспорт дашбордов — выгрузка всех дашбордов из всех рабочих областей через dashboard-service API
  • Экспорт датасетов — выгрузка всех датасетов через formula-engine API
  • Авторизация — Keycloak password grant с поддержкой refresh токена
  • Три интерфейса:
    • CLI (python3 export_all.py)
    • TUI (bash run.sh, whiptail)
    • Веб-панель (Flask, http://localhost:5000)
  • Docker — готовый Dockerfile + docker-compose
  • Прогресс-бар — отображение прогресса экспорта в реальном времени (SSE)
  • Расписание — автоматическая выгрузка по cron-выражению
  • Архивация — автоматическое удаление старых выгрузок (MAX_ARCHIVE_COPIES, по умолчанию 30)
  • Папки с таймстемпом — каждая выгрузка сохраняется в YYYY-MM-DD_HH-MM-SS, поддержка множественных экспортов в день
  • Безопасность — поддержка самоподписанных сертификатов (VISIOLOGY_VERIFY_SSL=false)

Структура проекта

visiology_dump/
├── .env                          # конфигурация (логин, пароль, базовый путь)
├── .gitignore
├── auth.py                       # аутентификация через Keycloak
├── dashboard_exporter/           # выгрузка дашбордов (dashboard-service)
│   ├── __init__.py
│   ├── client.py                 # API клиент
│   └── cli.py                    # CLI
├── dataset_exporter/             # выгрузка датасетов (formula-engine)
│   ├── __init__.py
│   ├── client.py                 # API клиент
│   └── cli.py                    # CLI
├── export_all.py                 # массовая выгрузка (--type all/dashboards/datasets)
├── export_all_dashboards.py      # быстрый запуск: только дашборды
├── export_all_datasets.py        # быстрый запуск: только датасеты
├── run.sh                        # TUI-скрипт (whiptail)
├── webapp/                       # Flask веб-интерфейс
│   ├── __init__.py
│   ├── __main__.py               # точка входа
│   ├── app.py                    # Flask приложение (API + SSE + планировщик)
│   └── templates/
│       └── index.html            # HTML-шаблон
├── Dockerfile                    # сборка Docker-образа
├── docker-compose.yml            # запуск Docker
├── dashboards/                   # выгруженные дашборды (игнорируется git)
│   └── YYYY-MM-DD_HH-MM-SS/
│       └── Workspace__id/
│           └── Dashboard Name.json
├── datasets/                     # выгруженные датасеты (игнорируется git)
│   └── YYYY-MM-DD_HH-MM-SS/
│       └── Workspace__id/
│           └── Dataset Name.json
└── README.md

Быстрый старт

Локально

git clone https://github.com/rufoss/visiology_dump.git
cd visiology_dump

# Установка зависимостей
pip install requests python-dotenv croniter

# Настройка
cp .env.example .env
# отредактировать .env

# Запуск
python3 export_all.py

Docker

docker compose up -d
# Открыть http://localhost:5000

Настройка (.env)

VISIOLOGY_BASE_URL=https://visiology.udigit.ru
VISIOLOGY_USERNAME=логин
VISIOLOGY_PASSWORD=пароль
VISIOLOGY_CLIENT_ID=visiology_designer
VISIOLOGY_SCOPE=openid profile email data_management_service forms_service ai_agent_service formula_engine dashboard_service edge_service groups workspace_service
VISIOLOGY_VERIFY_SSL=false
DUMP_BASE_PATH=/home/Visiology_dump
CRON_SCHEDULE=0 2 * * *
MAX_ARCHIVE_COPIES=30

Запуск

CLI

# Массовая выгрузка
python3 export_all.py

# Выборочно
python3 export_all.py --type dashboards
python3 export_all.py --type datasets

# С параметрами
python3 export_all.py --verbose --delay 0.5 --insecure

# Быстрые скрипты
python3 export_all_dashboards.py
python3 export_all_datasets.py

TUI (whiptail)

bash run.sh

Интерактивное меню с выбором действия и настройками.

Веб-интерфейс (Flask)

# Локально
python3 -m webapp

# Docker
docker compose up -d
# http://localhost:5000

Порт можно изменить: WEB_PORT=8080 docker compose up -d

Веб-интерфейс (4 вкладки)

Вкладка Описание
Экспорт Кнопки Export All / Dashboards / Datasets, прогресс-бар, лог в реальном времени (SSE)
Расписание Настройка cron-выражения для автоматической выгрузки, статус и время следующего запуска
Настройки Редактирование .env: URL, логин/пароль, scope, SSL, путь сохранения, MAX_ARCHIVE_COPIES
Выгрузки Просмотр сохранённых дашбордов и датасетов по датам, раскрытие деталей, удаление

REST API

Метод Путь Описание
GET /api/env Получить настройки
POST /api/env Сохранить настройки
POST /api/export/{all,dashboards,datasets} Запустить экспорт
GET /api/export/stream/{job_id} SSE-поток (лог + прогресс)
GET /api/schedule Статус расписания
POST /api/schedule Установить/отключить cron
GET /api/dumps Список выгрузок
GET /api/dumps/{type}/{date} Детали выгрузки
DELETE /api/dumps/{type}/{date} Удалить выгрузку

Отдельные модули (для отладки)

python3 -m dashboard_exporter.cli list-workspaces
python3 -m dashboard_exporter.cli list-dashboards <workspace_id>
python3 -m dashboard_exporter.cli download-all

python3 -m dataset_exporter.cli list-datasets <workspace_id>
python3 -m dataset_exporter.cli download-all

Результат

Файлы сохраняются в:

{DUMP_BASE_PATH}/dashboards/YYYY-MM-DD_HH-MM-SS/Workspace__id/Dashboard Name.json
{DUMP_BASE_PATH}/datasets/YYYY-MM-DD_HH-MM-SS/Workspace__id/Dataset Name.json

Пример:

/home/Visiology_dump/dashboards/2026-07-13_13-02-33/05. Финансовая служба__ca87efd6/Холдинг Сводные данные по ДДС.json
/home/Visiology_dump/datasets/2026-07-13_13-03-31/05. Финансовая служба__ca87efd6/План_факт_Финансы_Холдинг.json

Расписание (cron)

Автоматическая выгрузка настраивается через веб-интерфейс (вкладка Расписание) или через .env:

CRON_SCHEDULE=0 2 * * *

Формат: минута час день месяц день_недели

Примеры:

  • 0 2 * * * — ежедневно в 2:00
  • 0 */2 * * * — каждые 2 часа
  • 30 6 * * 1-5 — будни в 6:30

Архивация

Параметр MAX_ARCHIVE_COPIES (по умолчанию 30) контролирует максимальное количество хранимых выгрузок. Старые выгрузки автоматически удаляются после каждого экспорта. Работает отдельно для дашбордов и датасетов.

Требования

  • Python 3.10+
  • requests, python-dotenv, croniter (для планировщика)
  • Docker (опционально)
  • whiptail (для TUI, обычно предустановлен)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages