12c1af0261
crates/horizon-telemetry-server, its own workspace like the launcher's (the game's workspace never builds a web server): - POST /v1/batch (zstd, decoded and checked by horizon-telemetry), DELETE /v1/installs/<id>, GET /v1/aggregate (cached 10 min, CORS for the website), GET /healthz. - SQLite: machine descriptions stored once, one row of columns per session with 80-byte summary blobs, zstd bodies for crash/bug/benchmark, daily totals rebuilt when a day changes and kept after raw rows expire (180 days). About 190 bytes per session on disk. - Per-address token bucket (addresses in memory only), per-install daily cap, groups under 5 install-days hidden from the totals. - Tests: refusals, rate limit, daily cap, deletion (rows and totals), retention, storage size, and end to end with the launcher's uploader. - Dockerfile and a path-filtered CI workflow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
14 lines
714 B
Docker
14 lines
714 B
Docker
# Built from the repository root: docker build -f crates/horizon-telemetry-server/Dockerfile .
|
|
FROM rust:1-slim AS build
|
|
WORKDIR /src
|
|
# The root manifest only for the shared crate's workspace settings (edition, lints).
|
|
COPY Cargo.toml Cargo.toml
|
|
COPY crates/horizon-telemetry crates/horizon-telemetry
|
|
COPY crates/horizon-telemetry-server crates/horizon-telemetry-server
|
|
RUN cargo build --release --locked --manifest-path crates/horizon-telemetry-server/Cargo.toml
|
|
|
|
FROM debian:stable-slim
|
|
COPY --from=build /src/crates/horizon-telemetry-server/target/release/horizon-telemetry-server /usr/local/bin/
|
|
ENV HORIZON_TELEMETRY_DB=/data/telemetry.sqlite3 HORIZON_TELEMETRY_TRUST_PROXY=1
|
|
CMD ["horizon-telemetry-server"]
|