# Run tests
just test
# Build project
just buildProject follows hexagonal architecture (ports & adapters):
ββββββββββββββββββββββββββββ
β Cronjobs/Scripts β
β (POST /callback/{id}) β
ββββββββββββββ¬ββββββββββββββ
β
β HTTP Ping (Callback)
v
βββββββββββββββββββββββββββ
β cronbird β
β β
β βββββββββββββββββββ β
β β In-memory State β β
β β (RwLock) β β
β ββββββββββ¬βββββββββ β
β β β
ββββββββββββββββββ΄βββββββββββββΌβββββββββββββ΄βββββββββββββββββ
β β β
v v v
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββββ
β State Snapshots β β /metrics β β /metrics/{id} β
β (JSON file) β β (Prometheus) β β (JSON API) β
βββββββββββββββββββ ββββββββββ¬βββββββββ βββββββββββββββββββββ
^
β Scrape (Pull)
β
ββββββββββββββ΄βββββββββββββ
β Prometheus / Victoria β
β Metrics β
βββββββββββββββββββββββββββ
File structure:
src/
βββ domain/ # Core business logic
β βββ model.rs # Identity, CallbackRecord
β βββ ports.rs # CallbackStore trait
βββ adapters/ # Implementations
β βββ memory_store.rs # In-memory HashMap store
β βββ file_persist.rs # JSON persistence
βββ http/ # HTTP layer
β βββ handlers.rs # Request handlers
β βββ metrics_format.rs # Prometheus/JSON formatters
β βββ auth.rs # Bearer token middleware
βββ config.rs # Environment configuration
βββ main.rs # Bootstrap & graceful shutdown
Design Decisions:
- In-memory storage - Fast, simple, suitable for cron metrics
- Periodic persistence - Balance between durability and performance
- Single instance - State is local; for HA, use Redis adapter (not in MVP)
- Lightweight - No heavy frameworks or external dependencies
Check API.md.