Flow Downloader System - Detailed Design
Overview
The Flow Downloader System is an automated data ingestion pipeline that downloads river flow data from NOAA's SFTP server and processes it into either a TimescaleDB (Vanilla) or SQL Server (RSMS) database. The system runs daily at 5 PM (17:00) via cron job and consists of two main components:
- SFTP file downloader (shell script)
- Django data processor (Python)
System Architecture
1. Components
Vanilla Implementation
Flow Downloader System
├── cron-ftp-flows-key-verbose.sh # Shell script for SFTP operations
├── download_process_hdf.py # Django management command
├── upsert_flows.py # Flow data processor
└── upsert_dailies.py # Daily aggregator
RSMS Implementation
Flow Downloader System
├── cron-ftp-flows-key-verbose.sh # Shell script for SFTP operations
├── process_hdf_rsms.py # Django management command
├── upsert_flows_rsms.py # Flow data processor
└── [Windows-specific scripts] # PowerShell scripts for Windows
2. Data Flow
Vanilla Implementation
RSMS Implementation
Detailed Component Design
1. SFTP Downloader
Vanilla Configuration
# Environment Variables
SFTP_USER="skshirsagar"
SFTP_HOST="data7.erh.noaa.gov"
SFTP_KEY="/home/gqc/.ssh/noaa-flows-ftp"
LOCAL_PATH="/dbdrive/orsanco/"
DJANGO_PROJECT_PATH="/home/gqc/riverflows_django"
PYTHON_PATH="/home/gqc/.virtualenvs/orsanco/bin/python"
LOG_FILE="/home/gqc/cron-ftp-flows.log"
RSMS Configuration
# Environment Variables
SFTP_USER="skshirsagar"
SFTP_HOST="data7.erh.noaa.gov"
SFTP_KEY="/path/to/ssh/key"
LOCAL_PATH="/path/to/hdf_downloads/"
DJANGO_PROJECT_PATH="/path/to/project"
PYTHON_PATH="/path/to/python"
LOG_FILE="/path/to/log"
Process Flow
Initialization
- Log start time
- Verify local directory existence
- Create directory if missing
Remote File Discovery
- Create temporary SFTP script
- List remote *.tgz files
- Parse file list
Download Management
- Compare remote and local files
- Create download list for new files
- Generate SFTP batch script
- Execute downloads
Error Handling
- Directory creation failures
- SFTP connection issues
- File download failures
- Log all errors
2. Data Processors
Vanilla Implementation (download_process_hdf.py)
File Processing
- Extract HDF5 files from .tgz archives
- Process each HDF5 file
- Track processed files in Django model
Data Transformation
- Convert HDF5 data to DataFrame
- Normalize timestamps
- Map station indices
- Process velocity data
Database Operations
- Bulk upsert operations
- Transaction management
- Error handling
RSMS Implementation (process_hdf_rsms.py)
File Processing
- Extract HDF5 files from .tgz archives
- Process each HDF5 file
- Track processed files in SQL Server
Data Transformation
- Convert HDF5 data to DataFrame
- Calculate area from flow/velocity
- Map station indices using RivermileIndex
- Process area data
Database Operations
- SQL Server bulk upserts
- Transaction management
- Error handling
3. Data Aggregator (Vanilla only)
Process Flow
- Daily Aggregation
- Calculate daily statistics
- Store in DailyRiverFlow table
- Maintain data consistency
Error Handling and Logging
1. Logging System
Shell Script Logs
- Start/end times
- File operations
- SFTP operations
- Error messages
Django Logs
- Processing status
- Database operations
- Error tracking
- Performance metrics
2. Error Recovery
SFTP Errors
- Connection retries
- File verification
- Partial download handling
Processing Errors
- Transaction rollback
- File tracking
- Error reporting
Security Implementation
1. Authentication
- SSH key-based SFTP authentication
- Encrypted credentials
- Secure file transfers
2. Access Control
- File system permissions
- Database access control
- Process isolation
Performance Considerations
1. Optimization Strategies
- Bulk file downloads
- Parallel processing
- Efficient database operations
- Memory management
2. Resource Management
- Disk space monitoring
- Memory usage control
- Process scheduling
- Network bandwidth
Monitoring and Maintenance
1. System Monitoring
- File system usage
- Database performance
- Process status
- Error rates
2. Maintenance Procedures
- Log rotation
- Disk cleanup
- Database optimization
- Backup verification
Deployment Configuration
1. Cron Configuration
# Run daily at 5 PM
0 17 * * * ~/cron-ftp-flows-key-verbose.sh >> ~/cron.log
2. Environment Setup
- Python virtual environment
- Database configuration
- SFTP key setup
- Directory permissions
Future Enhancements
1. Planned Improvements
- Parallel file processing
- Enhanced error recovery
- Performance monitoring
- Automated testing
2. Scalability Considerations
- Distributed processing
- Load balancing
- Resource optimization
- Data partitioning