Run-on-Demand

The ExPRES code is available on https://voparis-uws-maser.obspm.fr/client for run-on-demand requests. This server is implementing the UWS (Universal Worker Service Pattern), using the OPUS (Observatoire de Paris UWS System) framework. The service can thus be used from the web interface, or through UWS command line clients, such as the uws-client (python 2) or one of its forks available at uws-client implementing Python 3 support.

Guest Access

This type of access doesn’t require to log in the server (no account). This allows guest users to run the code openly. There are some limitation to the usage:

  • Run data and results are visible to all

  • Run duration is limited to 10 minutes

  • Job can only use the master branch

Authenticated Access

The authenticated access has be to requested to the MASER team. This type of access has the following features:

  • Run data and results are only accessible to the user

  • The maximum run duration is 3 hours.

  • Any of the ExPRES git repository branches can be selected

Command Line Interface

Guest Access

The code can also be launch from a Command Line Interface, using the uws client (more info and examples here).

You first need to download the uws client:

git clone https://github.com/aicardi-obspm/uws-client
cd uws-client
git checkout python3-support
python setup.py install

The following script gives a python example of how to run a simulation via the uws client, with a guest access:

Example

#−∗− coding : utf−8 −∗−
from uws import UWS
import time

def uws_call_expres(FILE="example.json", FILE_EPHEM=None, Job_List=None, runID=None,
        LOOP=False, branch=None, LOGIN=None, executionDuration=None):
    FILE = "@"+FILE
    SERVER = "voparis-uws-maser.obspm.fr"
    if runID == None:
        runID = "test_job"
    if LOGIN == None:
        LOGIN = ""
        TOKEN = ""
        Job_List = "ExPRES"
        branch = "master"
    if branch == None:
        branch = "master"
        Job_List = "ExPRES"
    if branch == "develop"
       Job_List = "ExPRES-dev"

    parameters = {'config':FILE, 'runId':runID, 'branch':branch}
    if FILE_EPHEM != None:
        FILE_EPHEM = "@"+FILE_EPHEM
        parameters['ephemeride'] = FILE_EPHEM
    if executionDuration != None:
        parameters['executionDuration'] = executionDuration

    print(parameters)

    uws_client = UWS.client.Client(url=f"https://{SERVER}/rest/{Job_List}", user=LOGIN,
        password=TOKEN)

    job = uws_client.new_job(parameters)
    job = uws_client.run_job(job.job_id)

    print(uws_client.get_phase(job.job_id))
    print(f"Job : {job.job_id}")

    if LOOP:
        while True:
            time.sleep(2)
            phase = uws_client.get_phase(job.job_id)
            if phase == UWS.models.JobPhases.COMPLETED:
                print("Job completed")
                break
            elif phase == UWS.models.JobPhases.ERROR or phase == UWS.models.JobPhases.ABORTED:
                print("Job failed")
                break

        job = uws_client.get_job(job.job_id)
        for result in job.results:
            filename = "./" + result.id
            print(f"Downloading {result.id}")
            uws_client.connection.download_file(str(result.reference), LOGIN, TOKEN, filename)

Then to run the simulation and retrieve the results:

from uws_call_expres import uws_call_expres
uws_call_expres(FILE="example.json",LOOP=True)

Authenticated Access

The above script is also valid for people with authenticated access. At this point, you must replace LOGIN=None and TOKEN=None with your login credentials (in text format). You will be able to access any of the ExPRES git repository branches by replacing branch=None by the desired branch (e.g. branch="master" or branch="develop").