docs: update README and docs with strict Quick Start (docker-compose-prod), fix WebSocket paths, enforce strict tone

This commit is contained in:
2025-09-04 13:43:10 +03:00
parent afa2829872
commit 7ccdf75bab
15 changed files with 825 additions and 131 deletions

View File

@@ -16,7 +16,7 @@
LogBoard+ предоставляет REST API и WebSocket API для работы с логами Docker контейнеров. API разработан для интеграции с системами мониторинга и автоматизации, а также для создания собственных клиентов.
### 🎯 **Применение API**
### Применение API
- **Интеграция с CI/CD** - автоматический мониторинг логов в пайплайнах
- **Собственные дашборды** - создание кастомных интерфейсов мониторинга
@@ -108,7 +108,7 @@ Authorization: Bearer <token>
### Контейнеры и сервисы
#### GET /api/services
#### GET /api/containers/services
Получение списка всех контейнеров.
@@ -122,7 +122,7 @@ Authorization: Bearer <token>
**Пример запроса:**
```bash
curl -X GET "http://localhost:9001/api/services?projects=myproject&include_stopped=true" \
curl -X GET "http://localhost:9001/api/containers/services?projects=myproject&include_stopped=true" \
-H "Authorization: Bearer YOUR_TOKEN"
```
@@ -157,7 +157,7 @@ curl -X GET "http://localhost:9001/api/services?projects=myproject&include_stopp
]
```
#### GET /api/projects
#### GET /api/containers/projects
Получение списка всех проектов Docker Compose.
@@ -268,7 +268,7 @@ curl -X GET "http://localhost:9001/api/logs/abc123def456?tail=100&since=2024-01-
}
```
#### GET /api/excluded-containers
#### GET /api/containers/excluded
Получение списка исключенных контейнеров.
@@ -283,7 +283,7 @@ curl -X GET "http://localhost:9001/api/logs/abc123def456?tail=100&since=2024-01-
}
```
#### POST /api/excluded-containers
#### POST /api/containers/excluded
Обновление списка исключенных контейнеров.
@@ -306,7 +306,7 @@ curl -X GET "http://localhost:9001/api/logs/abc123def456?tail=100&since=2024-01-
}
```
#### POST /api/snapshot
#### POST /api/logs/snapshot
Создание снимка логов.
@@ -374,7 +374,7 @@ ok
Все WebSocket endpoints требуют JWT токен в параметре `token`.
### ws://host:port/ws/logs/{container_id}
### ws://host:port/api/websocket/logs/{container_id}
Получение логов отдельного контейнера.
@@ -390,7 +390,7 @@ ok
```javascript
const token = "your-jwt-token";
const containerId = "abc123def456";
const ws = new WebSocket(`ws://localhost:9001/ws/logs/${containerId}?token=${token}&tail=100`);
const ws = new WebSocket(`ws://localhost:9001/api/websocket/logs/${containerId}?token=${token}&tail=100`);
ws.onmessage = function(event) {
console.log('Получены логи:', event.data);
@@ -401,7 +401,7 @@ ws.onerror = function(error) {
};
```
### ws://host:port/ws/fan/{service_name}
### ws://host:port/api/websocket/fan/{service_name}
Получение логов сервиса (все реплики).
@@ -416,14 +416,14 @@ ws.onerror = function(error) {
```javascript
const token = "your-jwt-token";
const serviceName = "web";
const ws = new WebSocket(`ws://localhost:9001/ws/fan/${serviceName}?token=${token}&tail=100`);
const ws = new WebSocket(`ws://localhost:9001/api/websocket/fan/${serviceName}?token=${token}&tail=100`);
ws.onmessage = function(event) {
console.log('Логи сервиса:', event.data);
};
```
### ws://host:port/ws/fan_group
### ws://host:port/api/websocket/fan_group
Получение логов группы сервисов.
@@ -438,7 +438,7 @@ ws.onmessage = function(event) {
```javascript
const token = "your-jwt-token";
const services = "web,db,redis";
const ws = new WebSocket(`ws://localhost:9001/ws/fan_group?services=${services}&token=${token}&tail=100`);
const ws = new WebSocket(`ws://localhost:9001/api/websocket/fan_group?services=${services}&token=${token}&tail=100`);
ws.onmessage = function(event) {
console.log('Логи группы сервисов:', event.data);
@@ -522,7 +522,7 @@ def login(username, password):
# Получение списка контейнеров
def get_containers(token):
headers = {"Authorization": f"Bearer {token}"}
response = requests.get(f"{BASE_URL}/api/services", headers=headers)
response = requests.get(f"{BASE_URL}/api/containers/services", headers=headers)
return response.json()
# Получение логов контейнера
@@ -563,7 +563,7 @@ class LogBoardAPI {
if (projects) params.append('projects', projects);
if (includeStopped) params.append('include_stopped', 'true');
const response = await fetch(`${this.baseUrl}/api/services?${params}`, {
const response = await fetch(`${this.baseUrl}/api/containers/services?${params}`, {
headers: this.headers
});
return await response.json();
@@ -592,7 +592,7 @@ class LogBoardAPI {
// WebSocket для live-логов
createLogsWebSocket(containerId, tail = 100) {
const ws = new WebSocket(
`ws://${this.baseUrl.replace('http://', '')}/ws/logs/${containerId}?token=${this.token}&tail=${tail}`
`ws://${this.baseUrl.replace('http://', '')}/api/websocket/logs/${containerId}?token=${this.token}&tail=${tail}`
);
return ws;
}
@@ -654,12 +654,12 @@ echo "Токен получен: ${TOKEN:0:20}..."
# Получение списка контейнеров
echo "Получение списка контейнеров..."
curl -s -X GET "$BASE_URL/api/services" \
curl -s -X GET "$BASE_URL/api/containers/services" \
-H "Authorization: Bearer $TOKEN" \
| jq '.[] | {name: .name, status: .status, project: .project}'
# Получение логов первого контейнера
CONTAINER_ID=$(curl -s -X GET "$BASE_URL/api/services" \
CONTAINER_ID=$(curl -s -X GET "$BASE_URL/api/containers/services" \
-H "Authorization: Bearer $TOKEN" \
| jq -r '.[0].id')

View File

@@ -109,7 +109,7 @@ LogBoard+ использует переменные окружения для н
- **ReDoc** - альтернативная документация по адресу `/redoc`
- **Подробное логирование** - детальные логи для отладки
**⚠️ Важно:** В продакшене обязательно установите `DEBUG_MODE=false`!
Важно: в продакшене обязательно установите `DEBUG_MODE=false`.
### Настройки уведомлений
@@ -311,11 +311,11 @@ volumes:
```bash
# Получение списка исключенных контейнеров
curl -X GET "http://localhost:9001/api/excluded-containers" \
curl -X GET "http://localhost:9001/api/containers/excluded" \
-H "Authorization: Bearer YOUR_TOKEN"
# Обновление списка
curl -X POST "http://localhost:9001/api/excluded-containers" \
curl -X POST "http://localhost:9001/api/containers/excluded" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '["container1", "container2"]'

View File

@@ -7,7 +7,7 @@
LogBoard+ - это современная веб-панель для мониторинга и просмотра логов Docker контейнеров в реальном времени. Приложение идеально подходит для локальной разработки, позволяя разработчикам всегда держать логи микросервисов перед глазами на втором мониторе.
### 🎯 **Идеально для локальной разработки**
### Идеально для локальной разработки
LogBoard+ особенно полезен для разработчиков, работающих с микросервисной архитектурой:
@@ -16,7 +16,7 @@ LogBoard+ особенно полезен для разработчиков, р
- **Мониторинг в реальном времени** - Видите проблемы сразу, как они возникают
- **Централизованный просмотр** - Все логи в одном месте, а не в десятках терминалов
### 🐳 **Оптимизирован для Docker и Docker Compose**
### Оптимизирован для Docker и Docker Compose
Если ваша инфраструктура основана на Docker и Docker Compose, LogBoard+ станет незаменимым инструментом:
@@ -26,13 +26,13 @@ LogBoard+ особенно полезен для разработчиков, р
- **Multi-view режим** - одновременный просмотр логов нескольких контейнеров
- **Интеграция с Docker API** - прямая работа с контейнерами
### 🚀 **Производительность и удобство**
### Производительность и удобство
Приложение предоставляет удобный веб-интерфейс для работы с логами микросервисов, поддерживает множественные проекты Docker Compose и включает в себя функции безопасности.
## Быстрый старт
### Установка
### Вариант A: Разработка
```bash
# Клонирование репозитория
@@ -40,17 +40,50 @@ git clone <repository-url>
cd logboard
# Настройка переменных окружения
cp env.example .env
make setup
# Запуск приложения
docker compose up --build -d
make up
```
### Доступ
### Вариант B: Продакшен (пример docker-compose-prod.yaml)
- **URL:** http://localhost:9001
- **Пользователь:** `admin`
- **Пароль:** `admin` (обязательно измените в продакшене!)
```yaml
services:
logboard:
image: docker.io/inecs/logboard:v1
container_name: logboard
environment:
LOGBOARD_PORT: "9001"
LOGBOARD_TAIL: "500"
LOGBOARD_USER: "admin"
LOGBOARD_PASS: "admin"
LOGBOARD_SNAPSHOT_DIR: "/app/snapshots"
LOGBOARD_STATIC_DIR: "/app/static"
LOGBOARD_INDEX_HTML: "./app/templates/index.html"
TZ_TS: "Europe/Moscow"
DOCKER_HOST: "unix:///var/run/docker.sock"
SECRET_KEY: "your-secret-key-here"
ENCRYPTION_KEY: "your-encryption-key-here"
LOG_LEVEL: "INFO"
LOG_FORMAT: "json"
DEBUG_MODE: "false"
AUTH_ENABLED: "true"
SESSION_TIMEOUT: "3600"
ports:
- "9001:9001"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./snapshots:/app/snapshots
restart: unless-stopped
user: 0:0
```
После запуска интерфейс доступен по адресу: http://localhost:9001
Учетные данные по умолчанию:
- Пользователь: `admin`
- Пароль: `admin` (обязательно измените в продакшене)
## Документация
@@ -106,35 +139,35 @@ docker compose up --build -d
## Скриншоты
### 🔐 Страница входа
### Страница входа
| Светлая тема | Темная тема |
|--------------|-------------|
| ![Вход - светлая тема](../screenshots/login-white.png) | ![Вход - темная тема](../screenshots/login-dark.png) |
### 📊 Основной интерфейс
### Основной интерфейс
| Светлая тема | Темная тема |
|--------------|-------------|
| ![Single View - светлая тема](../screenshots/single-view-white.png) | ![Single View - темная тема](../screenshots/single-view-dark.png) |
### 🖥️ Multi-view режим
### Multi-view режим
![Multi-view режим](../screenshots/multi-view.png)
### 📋 Карточки контейнеров
### Карточки контейнеров
![Карточки контейнеров](../screenshots/container-cards.png)
### 📁 Проекты
### Проекты
![Список проектов](../screenshots/projects.png)
### ⚙️ Настройки
### Настройки
![Панель настроек](../screenshots/options.png)
### 🔧 Сворачиваемая боковая панель
### Сворачиваемая боковая панель
![Сворачиваемая боковая панель](../screenshots/collapse-sidebar.png)
### Справка
### Справка
![Окно справки](../screenshots/help.png)
### 🚨 Страницы ошибок
### Страницы ошибок
![Страницы ошибок](../screenshots/error%20pages.png)
## Архитектура
@@ -169,22 +202,22 @@ docker compose up --build -d
- `GET /api/auth/me` - Информация о текущем пользователе
#### Контейнеры и сервисы
- `GET /api/services` - Список контейнеров
- `GET /api/projects` - Список проектов Docker Compose
- `GET /api/containers/services` - Список контейнеров
- `GET /api/containers/projects` - Список проектов Docker Compose
- `GET /api/logs/{container_id}` - Логи контейнера
- `GET /api/logs/stats/{container_id}` - Статистика логов
#### Управление
- `GET /api/settings` - Настройки приложения
- `GET /api/excluded-containers` - Список исключенных контейнеров
- `POST /api/excluded-containers` - Обновление исключенных контейнеров
- `POST /api/snapshot` - Создание снимка логов
- `GET /api/containers/excluded` - Список исключенных контейнеров
- `POST /api/containers/excluded` - Обновление исключенных контейнеров
- `POST /api/logs/snapshot` - Создание снимка логов
### WebSocket API
- `ws://host:port/ws/logs/{container_id}` - Логи отдельного контейнера
- `ws://host:port/ws/fan/{service_name}` - Логи сервиса (все реплики)
- `ws://host:port/ws/fan_group` - Логи группы сервисов
- `ws://host:port/api/websocket/logs/{container_id}` - Логи отдельного контейнера
- `ws://host:port/api/websocket/fan/{service_name}` - Логи сервиса (все реплики)
- `ws://host:port/api/websocket/fan_group` - Логи группы сервисов
## Конфигурация

View File

@@ -15,7 +15,7 @@
## Обзор и применение
### 🎯 **Идеально для локальной разработки**
### Идеально для локальной разработки
LogBoard+ создан специально для разработчиков, работающих с микросервисной архитектурой. Если вы используете Docker и Docker Compose для локальной разработки, этот инструмент станет незаменимым помощником:
@@ -24,7 +24,7 @@ LogBoard+ создан специально для разработчиков,
- **Мониторинг в реальном времени** - Видите проблемы сразу, как они возникают
- **Централизованный просмотр** - Все логи в одном месте, а не в десятках терминалов
### 🐳 **Оптимизирован для Docker и Docker Compose**
### Оптимизирован для Docker и Docker Compose
Если ваша инфраструктура основана на Docker и Docker Compose, LogBoard+ предоставляет:
@@ -34,7 +34,7 @@ LogBoard+ создан специально для разработчиков,
- **Multi-view режим** - одновременный просмотр логов нескольких контейнеров
- **Интеграция с Docker API** - прямая работа с контейнерами
### 💡 **Сценарии использования**
### Сценарии использования
- **Локальная разработка** - мониторинг логов микросервисов на втором мониторе
- **Отладка проблем** - быстрый поиск ошибок в логах
@@ -212,11 +212,11 @@ curl -X POST "http://localhost:9001/api/auth/login" \
```bash
# Проверка списка контейнеров
curl -X GET "http://localhost:9001/api/services" \
curl -X GET "http://localhost:9001/api/containers/services" \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
# Проверка списка проектов
curl -X GET "http://localhost:9001/api/projects" \
curl -X GET "http://localhost:9001/api/containers/projects" \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
```

View File

@@ -129,39 +129,39 @@ echo ""
# Проверка наличия OpenSSL
if ! command -v openssl &> /dev/null; then
echo "OpenSSL не найден. Установите OpenSSL для генерации ключей."
echo "OpenSSL не найден. Установите OpenSSL для генерации ключей."
exit 1
fi
echo "🔐 Генерация SECRET_KEY..."
echo "Генерация SECRET_KEY..."
SECRET_KEY=$(openssl rand -hex 32)
echo "SECRET_KEY=$SECRET_KEY"
echo ""
echo "🔐 Генерация ENCRYPTION_KEY..."
echo "Генерация ENCRYPTION_KEY..."
ENCRYPTION_KEY=$(openssl rand -hex 32)
echo "ENCRYPTION_KEY=$ENCRYPTION_KEY"
echo ""
echo "🔐 Генерация пароля пользователя..."
echo "Генерация пароля пользователя..."
USER_PASSWORD=$(openssl rand -base64 16 | tr -d "=+/" | cut -c1-16)
echo "LOGBOARD_PASS=$USER_PASSWORD"
echo ""
echo "📝 Обновление .env файла..."
echo "Обновление .env файла..."
if [ -f .env ]; then
# Создание резервной копии
cp .env .env.backup.$(date +%Y%m%d_%H%M%S)
echo "Создана резервная копия .env"
echo "Создана резервная копия .env"
# Обновление ключей
sed -i "s/^SECRET_KEY=.*/SECRET_KEY=$SECRET_KEY/" .env
sed -i "s/^ENCRYPTION_KEY=.*/ENCRYPTION_KEY=$ENCRYPTION_KEY/" .env
sed -i "s/^LOGBOARD_PASS=.*/LOGBOARD_PASS=$USER_PASSWORD/" .env
echo "Ключи обновлены в .env"
echo "Ключи обновлены в .env"
else
echo "⚠️ Файл .env не найден. Создайте его из env.example"
echo "Файл .env не найден. Создайте его из env.example"
fi
echo ""
@@ -171,7 +171,7 @@ echo "2. Не передавайте ключи через незащищенн
echo "3. Регулярно обновляйте ключи"
echo "4. Используйте разные ключи для разных окружений"
echo ""
echo "Генерация ключей завершена!"
echo "Генерация ключей завершена!"
```
```bash
@@ -213,9 +213,9 @@ def check_entropy(key_hex):
print(f'Энтропия: {entropy:.2%}')
if entropy > 0.8:
print('Ключ имеет хорошую энтропию')
print('Ключ имеет хорошую энтропию')
else:
print('⚠️ Ключ может иметь низкую энтропию')
print('Ключ может иметь низкую энтропию')
# Проверка вашего ключа
key = '8a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6'
@@ -660,43 +660,43 @@ echo ""
# Проверка паролей по умолчанию
if grep -q "LOGBOARD_PASS=admin" .env; then
echo "Пароль по умолчанию не изменен!"
echo "Пароль по умолчанию не изменен"
else
echo "Пароль изменен"
echo "Пароль изменен"
fi
# Проверка секретных ключей
if grep -q "SECRET_KEY=your-secret-key-here" .env; then
echo "SECRET_KEY не изменен!"
echo "SECRET_KEY не изменен"
else
echo "SECRET_KEY изменен"
echo "SECRET_KEY изменен"
fi
if grep -q "ENCRYPTION_KEY=your-encryption-key-here" .env; then
echo "ENCRYPTION_KEY не изменен!"
echo "ENCRYPTION_KEY не изменен"
else
echo "ENCRYPTION_KEY изменен"
echo "ENCRYPTION_KEY изменен"
fi
# Проверка HTTPS
if curl -s -I https://localhost:9001 > /dev/null 2>&1; then
echo "HTTPS доступен"
echo "HTTPS доступен"
else
echo "⚠️ HTTPS недоступен"
echo "HTTPS недоступен"
fi
# Проверка прав Docker
if ls -la /var/run/docker.sock | grep -q "srw-rw-rw-"; then
echo "Docker socket доступен"
echo "Docker socket доступен"
else
echo "Проблемы с доступом к Docker socket"
echo "Проблемы с доступом к Docker socket"
fi
# Проверка файрвола
if command -v ufw > /dev/null && sudo ufw status | grep -q "Status: active"; then
echo "Файрвол активен"
echo "Файрвол активен"
else
echo "⚠️ Файрвол не настроен"
echo "Файрвол не настроен"
fi
echo ""

View File

@@ -363,7 +363,7 @@ echo $SESSION_TIMEOUT
```bash
# Проверка WebSocket endpoint
curl -I "http://localhost:9001/ws/logs/test"
curl -I "http://localhost:9001/api/websocket/logs/test"
# Проверка логов приложения
make logs | grep -i websocket
@@ -376,8 +376,8 @@ make logs | grep -i websocket
1. **Проблема с прокси**
```nginx
# Настройка Nginx для WebSocket
location /ws/ {
# Настройка Nginx для WebSocket с корректными путями API
location /api/websocket/ {
proxy_pass http://localhost:9001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
@@ -390,7 +390,7 @@ make logs | grep -i websocket
```javascript
// Проверка токена в WebSocket URL
const token = "your-valid-token";
const ws = new WebSocket(`ws://localhost:9001/ws/logs/container-id?token=${token}`);
const ws = new WebSocket(`ws://localhost:9001/api/websocket/logs/container-id?token=${token}`);
```
3. **Проблема с CORS**
@@ -703,7 +703,7 @@ curl -X POST "http://localhost:9001/api/auth/login" \
# Проверка API с токеном
TOKEN="your-token"
curl -X GET "http://localhost:9001/api/services" \
curl -X GET "http://localhost:9001/api/containers/services" \
-H "Authorization: Bearer $TOKEN"
```
@@ -762,6 +762,6 @@ curl -s -X POST "http://localhost:9001/api/auth/login" \
TOKEN=$(curl -s -X POST "http://localhost:9001/api/auth/login" \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin"}' | jq -r '.access_token')
curl -s -X GET "http://localhost:9001/api/services" \
curl -s -X GET "http://localhost:9001/api/containers/services" \
-H "Authorization: Bearer $TOKEN" | jq 'length'
```

View File

@@ -45,12 +45,12 @@ curl -X POST "http://localhost:9001/api/auth/login" \
```javascript
const token = "your-jwt-token";
const ws = new WebSocket(`ws://localhost:9001/ws/logs/container-id?token=${token}`);
const ws = new WebSocket(`ws://localhost:9001/api/websocket/logs/container-id?token=${token}`);
```
## Endpoints
### ws://host:port/ws/logs/{container_id}
### ws://host:port/api/websocket/logs/{container_id}
Получение логов отдельного контейнера в реальном времени.
@@ -70,7 +70,7 @@ const ws = new WebSocket(`ws://localhost:9001/ws/logs/container-id?token=${token
const containerId = "abc123def456";
const token = "your-jwt-token";
const ws = new WebSocket(`ws://localhost:9001/ws/logs/${containerId}?token=${token}&tail=100`);
const ws = new WebSocket(`ws://localhost:9001/api/websocket/logs/${containerId}?token=${token}&tail=100`);
ws.onopen = function() {
console.log('WebSocket соединение установлено');
@@ -104,7 +104,7 @@ Connected to container: myproject_web_1
2024-01-15T10:30:15.123456789Z 2024/01/15 10:30:15 [notice] 1#1: start worker process 1234
```
### ws://host:port/ws/fan/{service_name}
### ws://host:port/api/websocket/fan/{service_name}
Получение логов всех реплик сервиса Docker Compose (fan-in).
@@ -123,7 +123,7 @@ Connected to container: myproject_web_1
const serviceName = "web";
const token = "your-jwt-token";
const ws = new WebSocket(`ws://localhost:9001/ws/fan/${serviceName}?token=${token}&tail=100`);
const ws = new WebSocket(`ws://localhost:9001/api/websocket/fan/${serviceName}?token=${token}&tail=100`);
ws.onmessage = function(event) {
// Логи приходят с префиксом ID контейнера
@@ -140,7 +140,7 @@ ws.onmessage = function(event) {
[def456gh] 2024-01-15T10:30:16.123456789Z 2024/01/15 10:30:16 [notice] 1#1: start worker processes
```
### ws://host:port/ws/fan_group
### ws://host:port/api/websocket/fan_group
Получение логов группы сервисов одновременно.
@@ -159,7 +159,7 @@ ws.onmessage = function(event) {
const services = "web,db,redis";
const token = "your-jwt-token";
const ws = new WebSocket(`ws://localhost:9001/ws/fan_group?services=${services}&token=${token}&tail=100`);
const ws = new WebSocket(`ws://localhost:9001/api/websocket/fan_group?services=${services}&token=${token}&tail=100`);
ws.onmessage = function(event) {
// Логи приходят с префиксом ID контейнера и имени сервиса
@@ -193,7 +193,7 @@ class LogBoardWebSocket {
connectToContainer(containerId, options = {}) {
const { tail = 100, onMessage, onError, onClose } = options;
const url = `ws://${this.baseUrl.replace('http://', '')}/ws/logs/${containerId}?token=${this.token}&tail=${tail}`;
const url = `ws://${this.baseUrl.replace('http://', '')}/api/websocket/logs/${containerId}?token=${this.token}&tail=${tail}`;
const ws = new WebSocket(url);
ws.onopen = () => {
@@ -222,7 +222,7 @@ class LogBoardWebSocket {
connectToService(serviceName, options = {}) {
const { tail = 100, project, onMessage, onError, onClose } = options;
let url = `ws://${this.baseUrl.replace('http://', '')}/ws/fan/${serviceName}?token=${this.token}&tail=${tail}`;
let url = `ws://${this.baseUrl.replace('http://', '')}/api/websocket/fan/${serviceName}?token=${this.token}&tail=${tail}`;
if (project) url += `&project=${project}`;
const ws = new WebSocket(url);
@@ -253,7 +253,7 @@ class LogBoardWebSocket {
connectToServiceGroup(services, options = {}) {
const { tail = 100, project, onMessage, onError, onClose } = options;
let url = `ws://${this.baseUrl.replace('http://', '')}/ws/fan_group?services=${services}&token=${this.token}&tail=${tail}`;
let url = `ws://${this.baseUrl.replace('http://', '')}/api/websocket/fan_group?services=${services}&token=${this.token}&tail=${tail}`;
if (project) url += `&project=${project}`;
const ws = new WebSocket(url);
@@ -393,7 +393,7 @@ class LogBoardWebSocket:
async def connect_to_container(self, container_id, tail=100, callback=None):
"""Подключение к логам контейнера"""
uri = f"{self.base_url}/ws/logs/{container_id}?token={self.token}&tail={tail}"
uri = f"{self.base_url}/api/websocket/logs/{container_id}?token={self.token}&tail={tail}"
try:
async with websockets.connect(uri) as websocket:
@@ -412,7 +412,7 @@ class LogBoardWebSocket:
async def connect_to_service(self, service_name, tail=100, project=None, callback=None):
"""Подключение к логам сервиса"""
uri = f"{self.base_url}/ws/fan/{service_name}?token={self.token}&tail={tail}"
uri = f"{self.base_url}/api/websocket/fan/{service_name}?token={self.token}&tail={tail}"
if project:
uri += f"&project={project}"
@@ -433,7 +433,7 @@ class LogBoardWebSocket:
async def connect_to_service_group(self, services, tail=100, project=None, callback=None):
"""Подключение к логам группы сервисов"""
uri = f"{self.base_url}/ws/fan_group?services={services}&token={self.token}&tail={tail}"
uri = f"{self.base_url}/api/websocket/fan_group?services={services}&token={self.token}&tail={tail}"
if project:
uri += f"&project={project}"
@@ -507,7 +507,7 @@ class LogBoardWebSocket {
connectToContainer(containerId, options = {}) {
const { tail = 100, onMessage, onError, onClose } = options;
const url = `${this.baseUrl}/ws/logs/${containerId}?token=${this.token}&tail=${tail}`;
const url = `${this.baseUrl}/api/websocket/logs/${containerId}?token=${this.token}&tail=${tail}`;
const ws = new WebSocket(url);
ws.on('open', () => {
@@ -538,7 +538,7 @@ class LogBoardWebSocket {
connectToService(serviceName, options = {}) {
const { tail = 100, project, onMessage, onError, onClose } = options;
let url = `${this.baseUrl}/ws/fan/${serviceName}?token=${this.token}&tail=${tail}`;
let url = `${this.baseUrl}/api/websocket/fan/${serviceName}?token=${this.token}&tail=${tail}`;
if (project) url += `&project=${project}`;
const ws = new WebSocket(url);