| --- |
| title: Crypto API Monitor Backend |
| emoji: π |
| colorFrom: blue |
| colorTo: purple |
| sdk: docker |
| app_port: 7860 |
| --- |
| |
| # Crypto API Monitor Backend |
|
|
| Real-time cryptocurrency API monitoring backend service built with FastAPI. |
|
|
| ## Features |
|
|
| - **Real-time Health Monitoring**: Automatically monitors 11+ cryptocurrency API providers every 5 minutes |
| - **WebSocket Support**: Live updates for frontend dashboard integration |
| - **REST API**: Comprehensive endpoints for status, logs, categories, and analytics |
| - **SQLite Database**: Persistent storage for connection logs, metrics, and configuration |
| - **Rate Limit Tracking**: Monitor API usage and rate limits per provider |
| - **Connection Logging**: Track all API requests with response times and error details |
| - **Authentication**: Token-based authentication and IP whitelist support |
|
|
| ## API Providers Monitored |
|
|
| ### Market Data |
| - CoinGecko (free) |
| - CoinMarketCap (requires API key) |
| - CryptoCompare (requires API key) |
| - Binance (free) |
|
|
| ### Blockchain Explorers |
| - Etherscan (requires API key) |
| - BscScan (requires API key) |
| - TronScan (requires API key) |
|
|
| ### News & Sentiment |
| - CryptoPanic (free) |
| - NewsAPI (requires API key) |
| - Alternative.me Fear & Greed (free) |
|
|
| ### On-chain Analytics |
| - The Graph (free) |
| - Blockchair (free) |
|
|
| ## API Documentation |
|
|
| Visit `/docs` for interactive API documentation (Swagger UI). |
| Visit `/redoc` for alternative API documentation (ReDoc). |
|
|
| ## Main Endpoints |
|
|
| ### Status & Monitoring |
| - `GET /api/status` - Overall system status |
| - `GET /api/categories` - Category statistics |
| - `GET /api/providers` - List all providers with filters |
| - `GET /api/logs` - Connection logs with pagination |
| - `GET /api/failures` - Failure analysis |
| - `GET /api/rate-limits` - Rate limit status |
|
|
| ### Configuration |
| - `GET /api/config/keys` - API key configuration |
| - `GET /api/schedule` - Schedule configuration |
| - `POST /api/schedule/trigger` - Manually trigger scheduled task |
|
|
| ### Analytics |
| - `GET /api/charts/health-history` - Health history for charts |
| - `GET /api/charts/compliance` - Compliance chart data |
| - `GET /api/freshness` - Data freshness status |
|
|
| ### WebSocket |
| - `WS /ws/live` - Real-time updates |
|
|
| ## Environment Variables |
|
|
| Create a `.env` file or set environment variables: |
|
|
| ```bash |
| # Optional: API authentication tokens (comma-separated) |
| API_TOKENS=token1,token2 |
| |
| # Optional: IP whitelist (comma-separated) |
| ALLOWED_IPS=192.168.1.1,10.0.0.1 |
| |
| # Optional: Database URL (default: sqlite:///./crypto_monitor.db) |
| DATABASE_URL=sqlite:///./crypto_monitor.db |
| |
| # Optional: Server port (default: 7860) |
| PORT=7860 |
| ``` |
|
|
| ## Deployment to Hugging Face Spaces |
|
|
| ### Option 1: Docker SDK |
|
|
| 1. Create a new Hugging Face Space |
| 2. Select **Docker** SDK |
| 3. Push this repository to GitHub |
| 4. Connect the GitHub repository to your Space |
| 5. Add environment variables in Space settings: |
| - `API_TOKENS=your_secret_token_here` |
| - `ALLOWED_IPS=` (optional, leave empty for no restriction) |
| 6. The Space will automatically build and deploy |
|
|
| ### Option 2: Local Docker |
|
|
| ```bash |
| # Build Docker image |
| docker build -t crypto-api-monitor . |
| |
| # Run container |
| docker run -p 7860:7860 \ |
| -e API_TOKENS=your_token_here \ |
| crypto-api-monitor |
| ``` |
|
|
| ## Local Development |
|
|
| ```bash |
| # Install dependencies |
| pip install -r requirements.txt |
| |
| # Run the application |
| python app.py |
| |
| # Or with uvicorn |
| uvicorn app:app --host 0.0.0.0 --port 7860 --reload |
| ``` |
|
|
| Visit `http://localhost:7860` to access the API. |
| Visit `http://localhost:7860/docs` for interactive documentation. |
|
|
| ## Database Schema |
|
|
| The application uses SQLite with the following tables: |
|
|
| - **providers**: API provider configurations |
| - **connection_attempts**: Log of all API connection attempts |
| - **data_collections**: Data collection records |
| - **rate_limit_usage**: Rate limit tracking |
| - **schedule_config**: Scheduled task configuration |
| |
| ## WebSocket Protocol |
| |
| Connect to `ws://localhost:7860/ws/live` for real-time updates. |
| |
| ### Message Types |
| |
| **Status Update** |
| ```json |
| { |
| "type": "status_update", |
| "data": { |
| "total_apis": 11, |
| "online": 10, |
| "degraded": 1, |
| "offline": 0 |
| } |
| } |
| ``` |
| |
| **New Log Entry** |
| ```json |
| { |
| "type": "new_log_entry", |
| "data": { |
| "timestamp": "2025-11-11T00:00:00", |
| "provider": "CoinGecko", |
| "status": "success", |
| "response_time_ms": 120 |
| } |
| } |
| ``` |
| |
| **Rate Limit Alert** |
| ```json |
| { |
| "type": "rate_limit_alert", |
| "data": { |
| "provider": "CoinMarketCap", |
| "usage_percentage": 85 |
| } |
| } |
| ``` |
| |
| ## Frontend Integration |
| |
| Update your frontend dashboard configuration: |
| |
| ```javascript |
| // config.js |
| const config = { |
| apiBaseUrl: 'https://YOUR_USERNAME-crypto-api-monitor.hf.space', |
| wsUrl: 'wss://YOUR_USERNAME-crypto-api-monitor.hf.space/ws/live', |
| authToken: 'your_token_here' // Optional |
| }; |
| ``` |
| |
| ## Architecture |
| |
| ``` |
| app.py # FastAPI application entry point |
| config.py # Configuration & API registry loader |
| database/ |
| βββ db.py # Database initialization |
| βββ models.py # SQLAlchemy models |
| monitoring/ |
| βββ health_monitor.py # Background health monitoring |
| api/ |
| βββ endpoints.py # REST API endpoints |
| βββ websocket.py # WebSocket handler |
| βββ auth.py # Authentication |
| utils/ |
| βββ http_client.py # Async HTTP client with retry |
| βββ logger.py # Structured logging |
| βββ validators.py # Input validation |
| ``` |
| |
| ## API Keys |
| |
| API keys are loaded from `all_apis_merged_2025.json` in the `discovered_keys` section: |
| |
| ```json |
| { |
| "discovered_keys": { |
| "etherscan": ["key1", "key2"], |
| "bscscan": ["key1"], |
| "coinmarketcap": ["key1", "key2"], |
| ... |
| } |
| } |
| ``` |
| |
| ## Performance |
| |
| - Health checks run every 5 minutes |
| - Response time tracking for all providers |
| - Automatic retry with exponential backoff |
| - Connection timeout: 10 seconds |
| - Database queries optimized with indexes |
| |
| ## Security |
| |
| - Optional token-based authentication |
| - IP whitelist support |
| - API keys masked in logs and responses |
| - CORS enabled for frontend access |
| - SQL injection protection via SQLAlchemy ORM |
| |
| ## License |
| |
| MIT License |
| |
| ## Author |
| |
| **Nima Zasinich** |
| - GitHub: [@nimazasinich](https://github.com/nimazasinich) |
| - Project: Crypto API Monitor Backend |
| |
| --- |
| |
| **Built for the crypto dev community** |
| |