Тикер офлайн-детекции (internal/healthcheck) переехал из device-control-service в новый самостоятельный Go-сервис — как и планировалось с самого начала (см. изначальный README-заглушку). Детекция online остаётся в device-control-service: она происходит как побочный эффект уже имеющейся там MQTT-подписки на devices/+/telemetry и devices/+/ack, заводить для этого отдельный сервис с дублирующей MQTT-подпиской избыточно. health-check-service — свой Go-модуль (без зависимости от proto/, сборка из собственного контекста), читает только узкое read+offline-подмножество Device Shadow keyspace в Redis (devices:known, status, last_seen) — полный Shadow API с записью desired/reported state остаётся только в device-control-service. Метрика device_control_health_transitions_total переименована в device_health_transitions_total и теперь публикуется с этим именем из ДВУХ сервисов (device-control-service — direction=online, health-check-service — direction=offline): Prometheus агрегирует одноимённые метрики с разных таргетов прозрачно, поэтому Grafana- дашборд адаптирован простой сменой имени метрики в запросе, без переделки панели. Проверено вживую через docker compose: реальный online→offline переход (публикация тестовой телеметрии + ожидание таймаута) корректно долетает до Redis и RabbitMQ (device.status_changed), Prometheus видит новый scrape-таргет как up.
69 lines
1.8 KiB
Bash
69 lines
1.8 KiB
Bash
# --- PostgreSQL (users, zones, devices, device_types, automation_rules) ---
|
|
POSTGRES_HOST=postgres
|
|
POSTGRES_PORT=5432
|
|
POSTGRES_DB=home_automation
|
|
POSTGRES_USER=home_automation
|
|
POSTGRES_PASSWORD=change_me
|
|
|
|
# --- ClickHouse (telemetry, time-series) ---
|
|
CLICKHOUSE_HOST=clickhouse
|
|
CLICKHOUSE_HTTP_PORT=8123
|
|
CLICKHOUSE_NATIVE_PORT=9000
|
|
CLICKHOUSE_DB=telemetry
|
|
CLICKHOUSE_USER=default
|
|
CLICKHOUSE_PASSWORD=change_me
|
|
|
|
# --- Redis (device shadow: desired/reported state, status, last_seen) ---
|
|
REDIS_HOST=redis
|
|
REDIS_PORT=6379
|
|
REDIS_PASSWORD=
|
|
REDIS_DB=0
|
|
|
|
# --- RabbitMQ (async events between Go services) ---
|
|
RABBITMQ_HOST=rabbitmq
|
|
RABBITMQ_PORT=5672
|
|
RABBITMQ_MANAGEMENT_PORT=15672
|
|
RABBITMQ_USER=home_automation
|
|
RABBITMQ_PASSWORD=change_me
|
|
|
|
# --- Mosquitto (MQTT broker, device <-> ingest/device-control) ---
|
|
MQTT_HOST=mosquitto
|
|
MQTT_PORT=1883
|
|
|
|
# --- device-control-service (gRPC + HTTP) ---
|
|
DEVICE_CONTROL_GRPC_PORT=50051
|
|
DEVICE_CONTROL_HTTP_PORT=8090
|
|
DEVICE_CONTROL_MQTT_CLIENT_ID=device-control-service
|
|
|
|
# --- health-check-service ---
|
|
HEALTH_CHECK_TIMEOUT=60s
|
|
HEALTH_CHECK_INTERVAL=15s
|
|
HEALTH_CHECK_METRICS_PORT=9103
|
|
|
|
# --- ingest-service ---
|
|
INGEST_MQTT_CLIENT_ID=ingest-service
|
|
INGEST_MQTT_TOPIC=devices/+/telemetry
|
|
INGEST_BATCH_MAX_SIZE=500
|
|
INGEST_BATCH_FLUSH_INTERVAL=5s
|
|
INGEST_BATCH_FLUSH_TIMEOUT=10s
|
|
INGEST_METRICS_PORT=9101
|
|
|
|
# --- rule-engine-service ---
|
|
DEVICE_CONTROL_HOST=device-control-service
|
|
RULE_ENGINE_CACHE_REFRESH_INTERVAL=15s
|
|
RULE_ENGINE_METRICS_PORT=9102
|
|
|
|
# --- Laravel app (stage 2) ---
|
|
# Regenerate for anything beyond local dev: php artisan key:generate --show
|
|
APP_KEY=base64:bR7XdYPEJB20+lOd+mlpmuMMRJ/SVs69bHEmZrM2R90=
|
|
APP_ENV=local
|
|
APP_DEBUG=true
|
|
APP_URL=http://localhost:8000
|
|
LARAVEL_HTTP_PORT=8000
|
|
|
|
# --- Prometheus + Grafana (stage 2.5) ---
|
|
PROMETHEUS_PORT=9090
|
|
GRAFANA_PORT=3000
|
|
GRAFANA_ADMIN_USER=admin
|
|
GRAFANA_ADMIN_PASSWORD=change_me
|