| | --- |
| | 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** |
| | |