The CodeBench main API.
- NodeJS v16+
- PostgreSQL (cf
docker-compose.yml
)
Dev with hot-reloading:
npm run dev
Prod:
npm start
Component | Action |
---|---|
Worker |
Launch and maintain pool of X prebooted microVMs in the background |
Worker |
Bind to RabbitMQ queue jobs_q on jobs_ex exchange and jobs_rk routing key |
API |
Bind to RabbitMQ queue jobs_status_q on jobs_status_ex exchange and jobs_status_rk routing key |
Front |
POST /submissions |
Front |
Poll GET /submissions/:id every 500 ms |
API |
Send job to RabbitMQ on jobs_ex direct exchange with jobs_rk routing key. |
Worker |
Receive job, get ready microVM from pool, send job to agent in microVM |
Agent |
Compile/Run code, return result |
Worker |
During two previous steps, send status of jobs on jobs_status_ex exchange with jobs_status_rk routing key |
API |
Receive each new status on jobs_status_q , and insert them into DB and in-memory cache, so that the polling can get the latest status. |
Front |
Get the final result, stop polling and display it. |
Delete schema:
npm run db:drop
Run all migrations:
npm run db:migrate
Reset db (combination of drop and migrate)
npm run db:reset
npm run typeorm migration:generate -- -n xxx
Create migration:
# After editing or adding an Entity
npm run typeorm migration:generate -- -n AddNewEntity
Available commands for eslint/prettier:
npm run lint:check
npm run lint:fix
npm run format:check
npm run format:fix