PAGI
view release on metacpan or search on metacpan
examples/11-job-runner/README.md view on Meta::CPAN
# Async Job Runner - PAGI Demo
A real-time job queue dashboard demonstrating PAGI's async capabilities with HTTP, SSE, and WebSocket protocols working together.
## Running
From the PAGI root directory:
```bash
perl -Ilib -Iexamples/11-job-runner/lib bin/pagi-server \
--app examples/11-job-runner/app.pl --port 5001
```
Then open http://localhost:5001 in your browser.
## Features
- **Real-time job queue** - Create countdown jobs and watch them execute
- **Live progress streaming** - SSE updates show second-by-second progress
- **WebSocket dashboard** - Queue-wide updates pushed to all connected clients
- **Concurrent execution** - Worker processes up to 3 jobs simultaneously
## Architecture
```
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Browser (app.js) â
â ââââââââââââââââ ââââââââââââââââ ââââââââââââââââââââ â
â â WebSocket â â SSE â â HTTP (REST) â â
â â Queue Events â â Job Progress â â Static Files â â
â ââââââââ¬ââââââââ ââââââââ¬ââââââââ ââââââââââ¬ââââââââââ â
âââââââââââ¼ââââââââââââââââââ¼ââââââââââââââââââââ¼âââââââââââââ
â â â
â¼ â¼ â¼
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â PAGI Server â
â ââââââââââââââââ ââââââââââââââââ ââââââââââââââââââââ â
â â WebSocket.pm â â SSE.pm â â HTTP.pm â â
â ââââââââ¬ââââââââ ââââââââ¬ââââââââ ââââââââââ¬ââââââââââ â
â â â â â
â ââââââââââââââ¬âââââ´ââââââââââââââââââââ â
â â¼ â
â âââââââââââââââââ â
â â Queue.pm â âââ Job State Management â
â âââââââââ¬ââââââââ â
â â â
â âââââââââ¼ââââââââ â
â â Worker.pm â âââ Async Job Execution â
â âââââââââ¬ââââââââ â
â â â
â âââââââââ¼ââââââââ â
â â Jobs.pm â âââ Job Type Definitions â
â âââââââââââââââââ â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
```
## API Endpoints
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | `/api/stats` | Queue and worker statistics |
| GET | `/api/job-types` | Available job types |
| GET | `/api/jobs` | List all jobs |
| POST | `/api/jobs` | Create a new job |
| GET | `/api/jobs/:id` | Get job details |
| DELETE | `/api/jobs/:id` | Cancel a job |
| GET | `/api/jobs/:id/progress` | SSE progress stream |
## WebSocket Protocol
Connect to `/ws/queue` for real-time updates.
**Server -> Client:**
- `queue_state` - Full state on connect
- `job_created` - New job added
- `job_started` - Job began executing
- `job_progress` - Progress update
- `job_completed` - Job finished successfully
- `job_failed` - Job failed with error
( run in 1.944 second using v1.01-cache-2.11-cpan-140bd7fdf52 )