Skip to content

Latest commit

Β 

History

History
75 lines (64 loc) Β· 3.68 KB

File metadata and controls

75 lines (64 loc) Β· 3.68 KB

Development

Getting Started

# Run tests
just test

# Build project
just build

Architecture

Project 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

API

Check API.md.