Welcome to LabTS!

LabTS System Architecture

LabTS is the Department of Computing's Laboratory Testing System. It provides continuous automated testing support for the department's programming exercises. The diagram below shows how the main LabTS server, its satellite testing-client fleet, students' git repositories and the surrounding departmental services fit together:

LABTS INFRASTRUCTURE GitLab Git hosting for student and exercise repositories TeachDB Departmental student, class and enrolment records Scientia Timetabling and coursework deadline / submission portal Student Local git repo on own machine, plus browser access to the LabTS UI LabTS Server Ruby on Rails · Puma app server Repository and exercise management, webhook intake and results store PostgreSQL ActiveRecord SQL database Resque Dispatch Queue Redis-backed jobs: AssignClient, CheckClient re-queued every 5–30s until a client VM is free Satellite testing-client VMs (small fleet) Client VM 1 Docker runner Client VM 2 Docker runner Client VM 3 Docker runner git push/pull SSH browse repo, request tests & submit HTTPS · browser UI post-commit webhook HTTP POST · JSON create repos & register hooks REST API · JSON student & class lookup REST API · JSON exercise & submission data REST API · JSON AssignClient, CheckClient (enqueued) Redis (Resque) AssignClient, CheckClient (dequeued) HTTP POST · JSON test score, log & PDFs HTTP POST · JSON

LabTS Workflow:

Students commit from their own local git repositories to GitLab; every push fires a webhook that reports the commit to the LabTS server, while students separately use the LabTS web UI to browse their repository, request a test run and submit work. The Rails server holds exercise, repository and result state in PostgreSQL, looks up class rosters and submission deadlines from TeachDB and Scientia over REST, and hands test-run jobs to whichever machine in its small fleet of Docker-based testing-client VMs is free, which then post results back.
External service / actor
LabTS Rails server (hub)
LabTS Infrastructure boundary