Рефакторинг обработчиков. Финальное тестирование #21

This commit is contained in:
2026-05-18 14:37:59 +03:00
parent 40806df62a
commit 3abf5c94ee
21 changed files with 630 additions and 89 deletions

View File

@@ -42,6 +42,9 @@ EXPOSE 8080 8081 8445 8446
ENV PATH="/app/erts-16.3.1/bin:$PATH"
ENV RELX_REPLACE_OS_VARS=true
ENV MNESIA_DIR=/app/data
CMD /app/bin/eventhub foreground
CMD /app/bin/eventhub foreground
# COPY docker/entrypoint.sh /app/entrypoint.sh
# RUN chmod +x /app/entrypoint.sh
#
# ENTRYPOINT ["/app/entrypoint.sh"]

View File

@@ -11,4 +11,6 @@ docker build -t observer_web:latest -f docker/ObserverWeb.Dockerfile .
docker build -t logrotate:latest -f docker/logrotate/Dockerfile docker/logrotate
# Admin UI из соседней папки EventHubFrontAdmin
docker build -t admin-ui:latest -f ../EventHubFrontAdmin/Dockerfile ../EventHubFrontAdmin
docker build -t admin-ui:latest -f ../EventHubFrontAdmin/Dockerfile ../EventHubFrontAdmin
docker build -t eventhub-emulator -f test/emulate_users/Dockerfile .

View File

@@ -59,11 +59,11 @@ services:
- RELEASE_COOKIE=${RELEASE_COOKIE:-eventhub_cookie}
- JWT_SECRET=${JWT_SECRET:-eventhub_top_secret}
- ADMIN_SUPER_EMAIL=${ADMIN_SUPER_EMAIL:-superadmin@eventhub.local}
- ADMIN_SUPER_PASSWORD=${ADMIN_SUPER_PASSWORD:-SuperAdmin123!}
- ADMIN_SUPER_PASSWORD=${ADMIN_SUPER_PASSWORD:-123456}
- ADMIN_MODER_EMAIL=${ADMIN_MODER_EMAIL:-moderator@eventhub.local}
- ADMIN_MODER_PASSWORD=${ADMIN_MODER_PASSWORD:-Moderator123!}
- ADMIN_MODER_PASSWORD=${ADMIN_MODER_PASSWORD:-123456}
- ADMIN_SUPPORT_EMAIL=${ADMIN_SUPPORT_EMAIL:-support@eventhub.local}
- ADMIN_SUPPORT_PASSWORD=${ADMIN_SUPPORT_PASSWORD:-Support123!}
- ADMIN_SUPPORT_PASSWORD=${ADMIN_SUPPORT_PASSWORD:-123456}
- CLUSTER_MODE=true
- DNS_NAME=eventhub-node
networks:
@@ -71,9 +71,13 @@ services:
aliases:
- eventhub-node
volumes:
- eventhub-data:/app/data
- type: volume
source: eventhub-data
target: /app/data
# volume:
# nocopy: true
deploy:
replicas: 1
replicas: 2
endpoint_mode: dnsrr
restart_policy:
condition: any
@@ -110,7 +114,7 @@ services:
ports:
- "9090:9090"
deploy:
replicas: 0
replicas: 1
restart_policy:
condition: any
@@ -130,7 +134,7 @@ services:
ports:
- "3000:3000"
deploy:
replicas: 0
replicas: 1
restart_policy:
condition: any
@@ -180,12 +184,37 @@ services:
restart_policy:
condition: any
bot-emulator-users:
image: bot-emulator-users:latest
environment:
- ADMIN_API_HOST=http://eventhub-node:8445
- CLIENT_API_HOST=http://eventhub-node:8080
- ADMIN_EMAIL=admin@eventhub.local
- ADMIN_PASSWORD=123456
- BOT_PASSWORD=botpass123
- MIN_DELAY=0.5
- MAX_DELAY=3.0
- LOOP_FOREVER=true
- BOT_REFRESH_INTERVAL=300
- DEBUG=false
networks:
- eventhub-net
deploy:
mode: replicated
replicas: 1
restart_policy:
condition: any
delay: 5s
max_attempts: 3
window: 120s
networks:
eventhub-net:
driver: overlay
volumes:
eventhub-data:
# name: 'eventhub-data-{{.Task.Slot}}'
prometheus-data:
grafana-data:
traefik-logs:

20
docker/entrypoint.sh Normal file
View File

@@ -0,0 +1,20 @@
#!/bin/sh
# Динамически подставляет имя Erlang-узла в vm.args перед запуском релиза
set -e
# Имя узла берётся из переменной окружения NODENAME (задаётся в docker-compose)
# или определяется по hostname контейнера (как fallback)
NODENAME="${NODENAME:-$(hostname)}"
ERL_NAME="${NODENAME}@${NODENAME}"
# Путь к vm.args в релизе (обычно /app/releases/<version>/vm.args)
VM_ARGS="/app/releases/0.0.1/vm.args"
# Подставляем корректное имя узла
sed -i "s/^-sname.*/-sname ${ERL_NAME}/" "$VM_ARGS"
echo "Starting EventHub with Erlang node name: ${ERL_NAME}"
# Запускаем релиз
exec /app/bin/eventhub foreground

View File

@@ -2,26 +2,25 @@ global:
scrape_interval: 5s
scrape_configs:
- job_name: 'eventhub-node1'
static_configs:
- targets: ['eventhub-node1:8080'] # http://localhost:8080/metrics/default
labels:
node: 'node1'
metrics_path: '/metrics/default'
- job_name: 'eventhub-node2'
static_configs:
- targets: ['eventhub-node2:8080']
labels:
node: 'node2'
metrics_path: '/metrics/default'
- job_name: 'eventhub-node3'
static_configs:
- targets: ['eventhub-node3:8080']
labels:
node: 'node3'
# Динамическое обнаружение нод eventhub через DNS Aзаписи
- job_name: 'eventhub-nodes'
dns_sd_configs:
- names:
- 'eventhub-node' # имя, резолвящееся во все ноды
type: 'A' # использовать Aзаписи (IPv4)
port: 8080 # порт, на котором слушает eventhub
metrics_path: '/metrics/default'
# Добавляем лейблы, если нужно идентифицировать ноду
relabel_configs:
- source_labels: [__meta_dns_name]
target_label: dns_name
- source_labels: [__address__]
target_label: instance
replacement: '${1}:8080'
# Остальные джобы без изменений
- job_name: 'traefik'
scrape_interval: 15s
static_configs:
- targets: [ 'traefik:8080' ]
- targets: ['traefik:8080']
metrics_path: '/metrics'