Persistence: - one delivery state per sink, with claim, crash recovery, and index replacement - retention for delivered and dead records - LMDB writes moved off the event loop Pipeline: - one attempt per dispatch, with the next try scheduled by next_retry_at - backpressure through max_queue_size - reload re-reads YAML; SIGTERM drains and SIGHUP reloads Plugins: - journald source, enricher and filter processors, Loki sink - built-ins register when entry points are missing API and CLI: - health, metrics, per-sink queue, and dead-letter replay - startup prints the pipeline on one line Tests: - dispatch, plugins, metrics, CLI, and persistence coverage
28 lines
556 B
Docker
28 lines
556 B
Docker
FROM python:3.13-slim AS builder
|
|
|
|
RUN pip install uv --no-cache-dir
|
|
|
|
WORKDIR /app
|
|
COPY pyproject.toml .
|
|
RUN uv sync --no-dev --frozen
|
|
|
|
FROM python:3.13-slim
|
|
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
liblmdb0 \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
RUN groupadd -r daena && useradd -r -g daena -d /var/lib/daena daena
|
|
|
|
COPY --from=builder /app /app
|
|
COPY src/ /app/src/
|
|
COPY proto/ /app/proto/
|
|
|
|
ENV PATH="/app/.venv/bin:$PATH" \
|
|
DAENA_CONFIG_PATH=/etc/daena/daena.yaml
|
|
|
|
EXPOSE 8642 8643
|
|
|
|
USER daena
|
|
ENTRYPOINT ["daena-serve"]
|