|
# Workers Documentation
|
|
|
|
Background workers process long-running operations asynchronously, allowing the web interface to remain responsive.
|
|
|
|
## Overview
|
|
|
|
Workers are long-running PHP CLI scripts that:
|
|
|
|
- Poll the database for queued jobs
|
|
- Process jobs of a specific type
|
|
- Handle errors gracefully
|
|
- Log progress and results
|
|
- Run continuously until stopped
|
|
|
|
## Worker Architecture
|
|
|
|
All workers follow a similar pattern:
|
|
|
|
1. **Initialization**: Connect to database, verify connection
|
|
2. **Main Loop**: Continuously poll for jobs
|
|
3. **Job Processing**: Fetch, process, and complete jobs
|
|
4. **Error Handling**: Log errors and mark failed jobs
|
|
|
|
## Running Workers
|
|
|
|
Workers are designed to run as systemd services:
|
|
|
|
```bash
|
|
# Enable and start a worker
|
|
sudo systemctl enable hotspot_worker.service
|
|
sudo systemctl start hotspot_worker.service
|
|
|
|
# Check status
|
|
sudo systemctl status hotspot_worker.service
|
|
|
|
# View logs
|
|
sudo journalctl -u hotspot_worker.service -f
|
|
```
|
|
|
|
## Available Workers
|
|
|
|
```{toctree}
|
|
:maxdepth: 2
|
|
|
|
hotspot_analysis
|
|
outlier_analysis
|
|
nearest_analysis
|
|
dissolve
|
|
clip
|
|
raster_clip
|
|
create_view
|
|
erase_analysis
|
|
hotspot_timeseries
|
|
```
|
|
|
|
## Worker Configuration
|
|
|
|
Workers are configured via systemd service files in the `systemd/` directory. Each service file specifies:
|
|
|
|
- Working directory
|
|
- PHP executable path
|
|
- User/group to run as
|
|
- Restart behavior
|
|
- Resource limits
|
|
|
|
## Job Processing
|
|
|
|
Workers use the `background_jobs` table to manage jobs:
|
|
|
|
- **Enqueue**: Jobs are created with status 'queued'
|
|
- **Fetch**: Workers fetch jobs using `FOR UPDATE SKIP LOCKED`
|
|
- **Process**: Workers update status to 'running' and process
|
|
- **Complete**: Workers update status to 'completed' with results
|
|
- **Error**: On failure, status set to 'failed' with error message
|
|
|
|
## Monitoring
|
|
|
|
Monitor workers via:
|
|
|
|
- Systemd logs: `journalctl -u {worker_name}.service`
|
|
- Application logs: `logs/worker_{name}.log`
|
|
- Database: Query `background_jobs` table for job status
|
|
|
|
## Related Documentation
|
|
|
|
- [Architecture Overview](../architecture.md)
|
|
- [API Documentation](../api/index.md)
|
|
- [Analysis Tools](../analysis-tools/index.md)
|
|
|