237 lines
5.6 KiB
Markdown
237 lines
5.6 KiB
Markdown
# Hybrid Architecture Setup Guide
|
|
|
|
This guide explains how to set up and use the hybrid Node.js + Python architecture.
|
|
|
|
## Architecture Overview
|
|
|
|
```
|
|
┌─────────────┐
|
|
│ React UI │
|
|
└──────┬──────┘
|
|
│
|
|
┌──────▼──────────┐
|
|
│ Node.js API │ ← Handles WebSockets, routing, real-time features
|
|
│ (Express) │
|
|
└──────┬──────────┘
|
|
│ HTTP
|
|
┌──────▼──────────┐
|
|
│ Python Service │ ← Handles complex data processing
|
|
│ (FastAPI) │
|
|
└──────┬──────────┘
|
|
│
|
|
┌──────▼──────────┐
|
|
│ PostgreSQL │
|
|
└─────────────────┘
|
|
```
|
|
|
|
## Benefits
|
|
|
|
1. **Node.js**: Fast, efficient for I/O-bound operations (WebSockets, API routing)
|
|
2. **Python**: Better for data processing, analytics, and complex calculations
|
|
3. **Maintainability**: Complex SQL logic moved to Python for easier debugging
|
|
4. **Flexibility**: Can gradually migrate more logic to Python
|
|
|
|
## Setup Instructions
|
|
|
|
### 1. Python Service Setup
|
|
|
|
```bash
|
|
# Navigate to Python service directory
|
|
cd backend/python_service
|
|
|
|
# Create virtual environment (recommended)
|
|
python -m venv venv
|
|
|
|
# Activate virtual environment
|
|
# On Windows:
|
|
venv\Scripts\activate
|
|
# On macOS/Linux:
|
|
source venv/bin/activate
|
|
|
|
# Install dependencies
|
|
pip install -r requirements.txt
|
|
|
|
# Configure environment
|
|
cp .env.example .env
|
|
# Edit .env with your database credentials
|
|
```
|
|
|
|
### 2. Start Python Service
|
|
|
|
```bash
|
|
# Development mode (with auto-reload)
|
|
cd backend/python_service
|
|
uvicorn main:app --reload --port 8000
|
|
|
|
# Or use the Python script
|
|
python main.py
|
|
```
|
|
|
|
The service will be available at `http://localhost:8000`
|
|
|
|
### 3. Node.js Backend Setup
|
|
|
|
```bash
|
|
# Install dependencies (including node-fetch)
|
|
cd backend
|
|
npm install
|
|
|
|
# Configure environment
|
|
# Add to your .env file:
|
|
PYTHON_SERVICE_URL=http://localhost:8000
|
|
USE_PYTHON_SERVICE=true # Set to 'false' to disable Python service
|
|
```
|
|
|
|
### 4. Start Node.js Backend
|
|
|
|
```bash
|
|
cd backend
|
|
npm run dev
|
|
```
|
|
|
|
## Configuration
|
|
|
|
### Environment Variables
|
|
|
|
**Python Service (.env in `backend/python_service/`):**
|
|
```env
|
|
# Database Configuration
|
|
USE_LOCAL_DB=true
|
|
LOCAL_DB_HOST=localhost
|
|
LOCAL_DB_PORT=5432
|
|
LOCAL_DB_USER=postgres
|
|
LOCAL_DB_PASSWORD=postgres
|
|
LOCAL_DB_NAME=institutional_trader
|
|
|
|
# Or use DATABASE_URL for remote database
|
|
# DATABASE_URL=postgresql://user:password@host:port/database
|
|
```
|
|
|
|
**Node.js Backend (.env in `backend/`):**
|
|
```env
|
|
# Python Service Configuration
|
|
PYTHON_SERVICE_URL=http://localhost:8000
|
|
USE_PYTHON_SERVICE=true # Enable/disable Python service
|
|
|
|
# Existing database configuration...
|
|
```
|
|
|
|
## How It Works
|
|
|
|
### Request Flow
|
|
|
|
1. **Client** makes request to Node.js API: `GET /api/options/flow`
|
|
2. **Node.js** checks if Python service is enabled
|
|
3. **If enabled**: Node.js calls Python service via HTTP
|
|
4. **Python service** processes data using pandas (replaces complex SQL)
|
|
5. **Python service** returns processed data
|
|
6. **Node.js** enriches data with additional features (badges, signals)
|
|
7. **Node.js** returns final response to client
|
|
|
|
### Fallback Mechanism
|
|
|
|
If Python service is unavailable or disabled:
|
|
- Node.js automatically falls back to the original SQL query
|
|
- No breaking changes to existing functionality
|
|
- Seamless transition
|
|
|
|
## API Endpoints
|
|
|
|
### Python Service
|
|
|
|
- `GET /health` - Health check
|
|
- `GET /api/options-flow` - Processed options flow data
|
|
- `GET /api/options-flow/stats` - Flow statistics
|
|
|
|
### Node.js API (unchanged)
|
|
|
|
- `GET /api/options/flow` - Options flow (now calls Python service)
|
|
- All other endpoints remain the same
|
|
|
|
## Testing
|
|
|
|
### Test Python Service
|
|
|
|
```bash
|
|
# Health check
|
|
curl http://localhost:8000/health
|
|
|
|
# Get options flow
|
|
curl "http://localhost:8000/api/options-flow?start_date=2024-01-01&end_date=2024-01-02"
|
|
```
|
|
|
|
### Test Node.js Integration
|
|
|
|
```bash
|
|
# Should use Python service if available
|
|
curl "http://localhost:3010/api/options/flow?startDate=2024-01-01&endDate=2024-01-02"
|
|
```
|
|
|
|
## Migration Status
|
|
|
|
✅ **Completed:**
|
|
- Python service structure
|
|
- Options flow processing (replaces `optionflowrockerscorer.sql`)
|
|
- Node.js integration with fallback
|
|
- Health checks and error handling
|
|
|
|
⏳ **In Progress:**
|
|
- Additional SQL script migrations
|
|
- Performance optimization
|
|
- Full test coverage
|
|
|
|
## Troubleshooting
|
|
|
|
### Python Service Not Starting
|
|
|
|
1. Check database credentials in `.env`
|
|
2. Verify PostgreSQL is running
|
|
3. Check port 8000 is not in use
|
|
4. Review Python service logs
|
|
|
|
### Node.js Can't Connect to Python Service
|
|
|
|
1. Verify Python service is running: `curl http://localhost:8000/health`
|
|
2. Check `PYTHON_SERVICE_URL` in Node.js `.env`
|
|
3. Check firewall/network settings
|
|
4. Node.js will automatically fallback to SQL if Python unavailable
|
|
|
|
### Performance Issues
|
|
|
|
1. Python service processes data in memory (pandas)
|
|
2. For large datasets, consider:
|
|
- Adding pagination
|
|
- Implementing caching
|
|
- Optimizing pandas operations
|
|
- Using database indexes
|
|
|
|
## Next Steps
|
|
|
|
1. **Migrate Additional SQL Scripts:**
|
|
- `intradaysignalscorer.sql`
|
|
- `premarketgaprangescreener.sql`
|
|
- Other complex queries
|
|
|
|
2. **Add Caching:**
|
|
- Cache processed results
|
|
- Reduce database load
|
|
|
|
3. **Add Monitoring:**
|
|
- Service health monitoring
|
|
- Performance metrics
|
|
- Error tracking
|
|
|
|
4. **Optimize:**
|
|
- Batch processing
|
|
- Parallel processing
|
|
- Database query optimization
|
|
|
|
## Support
|
|
|
|
For issues or questions:
|
|
1. Check service logs
|
|
2. Verify environment configuration
|
|
3. Test individual services independently
|
|
4. Review this documentation
|
|
|