304 lines
8.7 KiB
Markdown
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. |