Files
cacto abc83faf05 Реализация rule-engine-service: RabbitMQ → правила из PostgreSQL → gRPC
Слушает telemetry.new_reading (ручной ack/nack, реквизишн только при
транспортных ошибках gRPC), кэширует активные automation_rules в памяти
с периодическим обновлением из PostgreSQL (JOIN с devices — резолвит
внутренние ID в external_id, которым оперируют MQTT/Redis/gRPC). Условия
правил (>,<,>=,<=,=,!=) оцениваются обобщённо, без привязки к конкретным
типам устройств. При срабатывании вызывает device-control-service по gRPC
и публикует automation.rule_triggered в RabbitMQ.

Проверено сквозным тестом через docker compose на полном пайплайне:
mosquitto_pub → ingest-service (ClickHouse + telemetry.new_reading) →
rule-engine-service (совпадение правила) → device-control-service (gRPC →
Redis desired_state + MQTT-команда) → automation.rule_triggered. Показание
ниже порога проверено отдельно — правило корректно не срабатывает.
2026-07-26 21:18:59 +05:00

16 lines
616 B
Docker

# Build context is the repo root (not this directory) — rule-engine-service
# depends on the sibling proto/ Go module via a relative `replace` directive.
FROM golang:1.25-alpine AS build
WORKDIR /src
COPY proto/ ./proto/
COPY services/rule-engine-service/ ./services/rule-engine-service/
WORKDIR /src/services/rule-engine-service
RUN go mod download
RUN CGO_ENABLED=0 go build -o /out/rule-engine-service ./cmd/rule-engine-service
FROM alpine:3.20
RUN adduser -D -u 10001 app
COPY --from=build /out/rule-engine-service /usr/local/bin/rule-engine-service
USER app
ENTRYPOINT ["/usr/local/bin/rule-engine-service"]