Web GUI (dataflow-web)
Веб-интерфейс для управления DataFlow через браузер без необходимости использовать kubectl или редактировать YAML вручную.
Обзор
GUI состоит из двух частей:
-
Backend (Go) — сервер в составе
dataflow-web, который подключается к кластеру Kubernetes (in-cluster или поKUBECONFIG), отдаёт REST API по префиксу/apiи раздаёт статику собранного фронтенда (SPA). -
Frontend (Vue 3 + Vite) — одностраничное приложение, которое обращается к backend по
/api, отображает дашборд, список манифестов, логи и метрики, поддерживает смену языка (русский/английский) и темы (светлая/тёмная).
Запросы к API идут через тот же хост, что и интерфейс. Backend по запросу обращается к Kubernetes API и возвращает данные в JSON.
Возможности
Дашборд
- Сводка по всем namespace: общее число DataFlow, разбивка по фазам (Running, Pending, Error, Stopped).
- Список namespace с количеством потоков в каждом и быстрым переходом к манифестам выбранного namespace.
Манифесты (DataFlow)
- Список DataFlow в выбранном namespace с отображением имени, статуса (phase), счётчиков обработанных сообщений и ошибок.
- Поиск по имени манифеста.
- Создание нового DataFlow: кнопка «Создать новый» открывает модальное окно с YAML-редактором и шаблоном манифеста (source, sink, transformations).
- Редактирование: просмотр и изменение существующего DataFlow в YAML (сохранение через PUT в API).
- Удаление DataFlow с подтверждением.
Переключение namespace выполняется через выпадающий список; при необходимости в URL подставляется ?namespace=....
Логи
- Выбор namespace и конкретного DataFlow из списка.
- Настройка количества строк (tail lines) для однократной загрузки.
- Загрузка логов — разовый запрос к API, отображение логов в текстовом блоке.
- Подписка на логи (follow) — поток логов через Server-Sent Events (SSE), обновление в реальном времени; кнопка «Остановить» отключает подписку.
- Кнопка Копировать для копирования текущего текста логов в буфер обмена.
Логи читаются из пода процессора DataFlow (контейнер processor), при необходимости — по label'ам dataflow.dataflow.io/name или app=dataflow-processor.
Метрики и статус
- Выбор namespace и DataFlow.
- Отображение статуса потока: фаза (phase), сообщение (message), количество обработанных сообщений, количество ошибок, время последней обработки.
- Данные берутся из
statusресурса DataFlow и из эндпоинта/api/status(и при необходимости/api/metrics).
Прочее
- Переключение namespace — на дашборде, на странице манифестов, логов и метрик доступен выбор namespace; список namespace запрашивается через
/api/namespaces. - Локализация — интерфейс на русском и английском (vue-i18n).
- Тема — светлая и тёмная (переключатель в интерфейсе).
Конфигурация
GUI настраивается через Helm values при развёртывании чарта dataflow-operator. Основные параметры:
| Параметр | Описание | По умолчанию |
|---|---|---|
gui.enabled |
Включить веб-интерфейс | false |
gui.image.repository |
Образ сервера GUI (отдельно от оператора) | ghcr.io/dataflow-operator/dataflow-web |
gui.image.tag |
Тег образа | v0.2.3 |
gui.image.pullPolicy |
Политика загрузки образа | IfNotPresent |
gui.replicaCount |
Количество реплик сервера GUI | 1 |
gui.port |
Порт для сервера GUI | 8080 |
gui.logLevel |
Уровень логирования: debug, info, warn, error |
(пусто, используется по умолчанию) |
gui.extraEnv |
Дополнительные переменные окружения (напр. KUBECONFIG, переопределение OPERATOR_METRICS_URL) |
[] |
gui.resources |
Лимиты и запросы ресурсов | {} |
gui.serviceAccount.name |
Отдельный ServiceAccount (если пусто — используется SA оператора) | "" |
Ingress
| Параметр | Описание | По умолчанию |
|---|---|---|
gui.ingress.enabled |
Включить Ingress для GUI | false |
gui.ingress.className |
Имя класса Ingress | "" |
gui.ingress.annotations |
Аннотации Ingress | {} |
gui.ingress.hosts |
Конфигурация хоста и путей | [{ host: dataflow-gui.local, paths: [{ path: /, pathType: Prefix }] }] |
gui.ingress.tls |
Конфигурация TLS | [] |
Проксирование метрик
GUI проксирует метрики Prometheus с оператора, когда задан OPERATOR_METRICS_URL. В Helm это настраивается автоматически на сервис оператора в том же release. Если оператор работает в другом namespace, переопределите через gui.extraEnv:
gui:
extraEnv:
- name: OPERATOR_METRICS_URL
value: "http://dataflow-operator.dataflow-system:9090/metrics"
Развёртывание
В кластере (Helm)
Включите GUI при установке или обновлении оператора:
helm install dataflow-operator oci://ghcr.io/dataflow-operator/helm-charts/dataflow-operator \
--set gui.enabled=true
С Ingress (например, nginx):
# custom-values.yaml
gui:
enabled: true
ingress:
enabled: true
className: nginx
hosts:
- host: dataflow.example.com
paths:
- path: /
pathType: Prefix
helm install dataflow-operator oci://ghcr.io/dataflow-operator/helm-charts/dataflow-operator -f custom-values.yaml
Доступ к GUI — через Service (port-forward) или URL Ingress.
Port-forward (быстрый доступ)
Без Ingress используйте port-forward:
kubectl port-forward svc/dataflow-operator-gui 8080:8080 -n <namespace>
Откройте http://localhost:8080 в браузере.
Локальная разработка
Запустите backend и frontend отдельно из каталога dataflow-web:
- Backend:
go run ./cmd/server --bind-address=:8080(при необходимости задатьKUBECONFIG). - Frontend: в
dataflow-web/webвыполнитьnpm install && npm run dev; приложение откроется на http://localhost:5173, запросы к API проксируются на backend (порт 8080).
Подробнее о сборке и структуре фронтенда см. dataflow-web/README.md.
API backend
Все эндпоинты отдаются в JSON (кроме логов — текст или SSE, и метрик — Prometheus text format при настроенном URL оператора).
| Метод | Путь | Описание |
|---|---|---|
| GET | /api/namespaces |
Список namespace кластера |
| GET | /api/dataflows?namespace=<ns> |
Список DataFlow в namespace |
| GET | /api/dataflows/<name>?namespace=<ns> |
Один DataFlow |
| POST | /api/dataflows?namespace=<ns> |
Создать DataFlow (тело — JSON манифест) |
| PUT | /api/dataflows/<name>?namespace=<ns> |
Обновить spec DataFlow |
| DELETE | /api/dataflows/<name>?namespace=<ns> |
Удалить DataFlow |
| GET | /api/logs?namespace=&name=&tailLines=&follow=true\|false |
Логи пода процессора (текст или SSE при follow=true) |
| GET | /api/status?namespace=&name= |
Статус DataFlow (phase, message, processedCount, errorCount, lastProcessedTime) |
| GET | /api/metrics?namespace=&name= |
Prometheus-метрики (проксируются с оператора при заданном OPERATOR_METRICS_URL) |
Для CORS заданы заголовки, чтобы к API можно было обращаться с другого порта при локальной разработке.