SIDEL_ScriptsManager/README.md

304 lines
8.7 KiB
Markdown

# ScriptsManager
A comprehensive web-based application for managing and executing Python scripts with multi-user support, conda environment integration, and real-time monitoring.
## Features
- **Multi-user support** with role-based access control
- **Multi-language interface** (English, Spanish, Italian, French)
- **Conda environment integration** for isolated script execution
- **Real-time log streaming** with WebSocket connections
- **Script parameter management** with web forms
- **Dark/Light theme support**
- **Responsive web interface** with Bootstrap 5
- **Script discovery and automatic registration**
- **Web interface support** for scripts with UI components
- **Project-based data isolation** for multi-user environments
## Requirements
- Python 3.8+
- Conda (for environment management)
- Modern web browser with WebSocket support
## Installation
1. **Clone or extract the project:**
```bash
cd SIDELManagerScripts
```
2. **Install Python dependencies:**
```bash
pip install -r requirements.txt
```
3. **Initialize the database:**
```bash
python scripts/init_db.py
```
4. **Create admin user (if not created by init_db):**
```bash
python scripts/create_admin.py
```
## Quick Start
1. **Start the application:**
```bash
python scripts/run_app.py
```
2. **Open your browser and navigate to:**
```
http://localhost:5000
```
3. **Login with default admin credentials:**
- Username: `admin`
- Password: `admin123`
- **Important:** Change the password after first login!
4. **Explore the dashboard and script groups**
## Project Structure
```
SIDELManagerScripts/
├── app/ # Main application package
│ ├── config/ # Configuration files
│ │ ├── config.py # App configuration
│ │ ├── database.py # Database setup
│ │ └── permissions.py # Role-based permissions
│ ├── models/ # Database models
│ │ ├── user.py # User and role models
│ │ └── script.py # Script and group models
│ ├── services/ # Business logic services
│ │ ├── conda_service.py # Conda environment management
│ │ ├── discovery_service.py # Script discovery and parsing
│ │ ├── script_executor.py # Script execution engine
│ │ ├── data_manager.py # Multi-user data isolation
│ │ ├── port_manager.py # Dynamic port allocation
│ │ └── translation_service.py # Multi-language support
│ ├── templates/ # HTML templates
│ │ ├── base.html # Base template
│ │ ├── login.html # Login page
│ │ ├── dashboard.html # Main dashboard
│ │ └── script_group.html # Script group view
│ ├── static/ # Static assets
│ │ ├── css/ # Stylesheets
│ │ ├── js/ # JavaScript files
│ │ └── translations/ # Language files
│ └── __init__.py # App factory
├── backend/ # Script groups directory
│ └── script_groups/ # Individual script collections
├── scripts/ # Utility scripts
│ ├── init_db.py # Database initialization
│ ├── create_admin.py # Admin user creation
│ └── run_app.py # Application runner
├── instance/ # Instance-specific files
├── logs/ # Application logs
├── requirements.txt # Python dependencies
├── requirements-dev.txt # Development dependencies
└── README.md # This file
```
## Script Groups
Script groups are collections of related Python scripts stored in the `app/backend/script_groups/` directory. Each group contains:
- **metadata.json**: Group configuration and script list
- **Python scripts**: The actual executable scripts
- **Optional conda environment**: Isolated execution environment
### Creating Script Groups
1. Create a new directory in `app/backend/script_groups/`
2. Add a `metadata.json` file with group configuration
3. Add your Python scripts with proper parameter headers
4. Restart the application to discover new scripts
### Example metadata.json:
```json
{
"name": "data_processing",
"display_name": "Data Processing Tools",
"description": "Scripts for data analysis and processing",
"conda_env": "data_science",
"scripts": [
"data_analyzer.py",
"csv_processor.py"
]
}
```
### Script Parameter Headers
Scripts can define parameters in their docstring headers:
```python
"""
Script Name
Script description
Parameters:
- input_file: Input file path
- output_format: Output format (json/csv/xlsx)
Interface: Yes/No
"""
```
## Configuration
### Environment Variables
- `FLASK_ENV`: Application environment (development/production)
- `SECRET_KEY`: Flask secret key for sessions
- `DATABASE_URL`: Database connection string
- `CONDA_PATH`: Path to conda executable
### Database Configuration
The application uses SQLite by default. For production, configure PostgreSQL or MySQL in `app/config/config.py`.
### Conda Integration
The application automatically detects conda environments and can execute scripts in isolated environments. Ensure conda is installed and accessible in your PATH.
## Multi-Language Support
The application supports multiple languages:
- English (en)
- Spanish (es)
- Italian (it)
- French (fr)
Language files are stored in `app/static/translations/` and can be extended with additional languages.
## Security Features
- **Role-based access control** (Admin, User, Viewer)
- **Session management** with secure cookies
- **CSRF protection** for forms
- **Input validation** for script parameters
- **Process isolation** for script execution
- **Multi-user data separation**
## API Endpoints
The application provides REST API endpoints for:
- Script execution: `POST /api/scripts/run`
- Log retrieval: `GET /api/scripts/{id}/logs`
- Interface access: `GET /api/scripts/{id}/interface`
- User management: `/api/users/*`
- System status: `GET /api/status`
## WebSocket Events
Real-time updates are provided via WebSocket:
- `script_started`: Script execution begins
- `script_completed`: Script execution finishes
- `script_failed`: Script execution fails
- `script_output`: Real-time log output
- `system_notification`: System messages
## Development
### Setting up Development Environment
1. Install development dependencies:
```bash
pip install -r requirements-dev.txt
```
2. Set Flask environment:
```bash
export FLASK_ENV=development
```
3. Enable debug mode:
```bash
export FLASK_DEBUG=1
```
### Running Tests
```bash
python -m pytest tests/
```
### Code Style
The project follows PEP 8 style guidelines. Use flake8 for linting:
```bash
flake8 app/
```
## Deployment
### Production Deployment
1. Set production environment:
```bash
export FLASK_ENV=production
```
2. Configure a production WSGI server (gunicorn):
```bash
pip install gunicorn
gunicorn -w 4 -b 0.0.0.0:5000 "app:create_app()"
```
3. Set up a reverse proxy (nginx/Apache)
4. Configure SSL certificates
5. Set up monitoring and logging
### Docker Deployment
A Dockerfile can be created for containerized deployment:
```dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "scripts/run_app.py"]
```
## Troubleshooting
### Common Issues
1. **Database errors**: Run `python scripts/init_db.py` to recreate database
2. **Conda not found**: Ensure conda is in your PATH
3. **Port conflicts**: Check that port 5000 is available
4. **Permission errors**: Ensure proper file permissions for script execution
### Log Files
Application logs are stored in the `logs/` directory:
- `app.log`: General application logs
- `scripts.log`: Script execution logs
- `errors.log`: Error logs
### Debug Mode
Enable debug mode for detailed error messages:
```bash
export FLASK_DEBUG=1
python scripts/run_app.py
```
## Support
For issues and questions:
1. Check the troubleshooting section
2. Review application logs
3. Verify configuration settings
4. Check script group metadata and permissions
## License
This project is licensed under the MIT License. See LICENSE file for details.