First sketch of an HTTP API below. I don't think I've forgotten anything...
Excerpts from Dan Callaghan's message of 2012-12-19 16:46:19 +1000:
There are four areas the API needs to cover (that I can think of). The harness needs to be able to:
- find out what to run
Get recipe XML:
GET /recipes/{recipeid} Accept: application/xml
- report results and upload logs
Record a task result:
POST /recipes/{recipeid}/tasks/{taskid}/results/ Content-type: application/x-www-form-urlencoded
path=/the/task/result&result=Pass&score=1234&message=It+worked
-> 302 See Other Location: /recipes/{recipeid}/tasks/{taskid}/results/{resultid}
Upload recipe log:
PUT /recipes/{recipeid}/logs/{path...}
Upload task log:
PUT /recipes/{recipeid}/tasks/{taskid}/logs/{path...}
Upload task-result log:
PUT /recipes/{recipeid}/tasks/{taskid}/results/{resultid}/logs/{path...}
These could accept Content-Range (for partial uploads) and Content-Type (which we could store and return later).
- extend the watchdog time
Set watchdog to now + X seconds:
POST /recipes/{recipeid}/watchdog Content-type: application/x-www-form-urlencoded
seconds=X
- synchronize with other recipes in the recipe set
Block until all other recipes in the recipe set (except guest recipes?) have called this, or until X seconds have elapsed:
POST /recipes/{recipeid}/sync-start?timeout=X