A. Brief reminder of UWS
1. An asynchronous service
The Universal Worker Service (UWS) pattern defines how to manage asynchronous execution of jobs on a service.
In a synchronous service the client must wait a response for each sent request. Thus he can make only one request at a time and if he disconnects from the service the request is abandoned.
UWS is an asynchronous service. That means the client has not to wait the response of one request before making another one. So it is possible that a request is executing for hours or days even if the client disconnects from the service. Indeed UWS is also (as most of asynchronous services) a state-full service that is to say it stores the state of each received request and so for the client addresses.
2. A job-oriented service
UWS consists logically of a set of objects that may be read and written to in order to control jobs. The objects are represented by elements within XML schema [...].
A UWS is organized in one or more JobList objects. A JobList is a collection of Job. A job is described by:
- an ID: a unique identifier of the job in its JobList
- a RunID: a kind of label or name of the job given by its owner (it is not used to identify the job)
- an Execution Phase: the state of the job
- an Execution Duration: the maximum authorized duration of the job
- a Deletion Time: the time at which the job must be aborted and removed from its JobList
- a Quote: the estimated duration of the job
- one or more results: all the results of the job execution
- one or zero error: the error which has occurred during the job execution
- zero or more additional parameters: parameters useful for the job execution
3. Resources and URIs
In a REST binding of UWS, each of the objects defined above is available as a web resource with its own URI. These URIs must form a hierarchy [...]
Considering {jobs} as a name or an identifier of a JobList and (job-id) a JobID:
URI | Description | Value | Writable |
---|---|---|---|
/{jobs} | List of all jobs contained in the JobList {jobs} | NO | |
/{jobs}/(job-id) | Description/Summary of the Job (job-id) | NO | |
/{jobs}/(job-id)/runid | RunID of the Job (job-id) | A String value | YES |
/{jobs}/(job-id)/phase | Execution Phase of the Job (job-id) | PENDING, QUEUED, EXECUTING, COMPLETED, ERROR, ABORTED, UNKNOWN, HELD or SUSPENDED | YES |
/{jobs}/(job-id)/owner | Owner of the Job (job-id) | ? (by default a String value) | NO |
/{jobs}/(job-id)/quote | Quote of the Job (job-id) | Integer number of seconds ≥ 0 ; a negative value means there is no quote information | NO |
/{jobs}/(job-id)/executionduration | Execution Duration (in seconds) of the Job (job-id) | Integer number of seconds ≥ 0 ; 0 means unlimited execution duration | YES |
/{jobs}/(job-id)/destruction | Destruction Time of the Job (job-id) | A date with the format "yyyy-MM-dd'T'HH:mm:ss.SSSZ" (ISO:8601) | YES |
/{jobs}/(job-id)/error | Description/Summary of the error of the Job (job-id) | NO | |
/{jobs}/(job-id)/results | Results list of the Job (job-id) | NO | |
/{jobs}/(job-id)/parameters | List of the additional parameters of the Job (job-id) | YES |
All these web resources are formatted in XML according to the UWS Schema available in the Appendix B of the IVOA Recommendation. Now almost all browsers are able to transform on the client side a XML document into a HTML document by using a XSLT resource (Click here for a XSLT tutorial).