Metascheduler for TPV as Service
-
Create a venv
python -m venv .venv source .venv/bin/activate pip install -r requirements.txt
-
Run the API locally:
Set correct values for the environment variables to access InfluxDB in
set_env.sh
:source set_env.sh uvicorn main:app --reload
-
Testing the API with input data:
-
SwaggerUI: http://127.0.0.1:8000/docs
Try out > Fill out the request body:
Request body:
{ "destinations": [ { "id": "pulsar_italy", "abstract": false, "runner": "general_pulsar_1", "destination_name_override": "pulsar_italy", "cores": null, "mem": null, "gpus": null, "min_cores": null, "min_mem": null, "min_gpus": null, "max_cores": null, "max_mem": null, "max_gpus": null, "min_accepted_cores": null, "min_accepted_mem": null, "min_accepted_gpus": null, "max_accepted_cores": 8, "max_accepted_mem": 32, "max_accepted_gpus": null, "env": null, "params": null, "resubmit": null, "scheduling": { "require": ["pulsar"], "prefer": [], "accept": ["general"], "reject": [] }, "inherits": null, "context": { "latitude": 50.0689816, "longitude": 19.9070188 }, "rules": {}, "tags": null, "queued_job_count": 10, "tool_id": "api_test", "job_count_in_time_window": 30, "galaxy_db_query_time": "2024-04-18T14:20:00Z", "median_queue_time": 1, "median_run_time": 8, "completed_count": 0, "suspended_count": 0, "held_count": 4, "removed_count": 0, "running_count": 0, "idle_count": 0, "cpu_usage_perc": 0, "mem_usage_perc": 0, }, { "id": "slurm_poland", "abstract": false, "runner": "slurm", "destination_name_override": "slurm_poland", "cores": null, "mem": null, "gpus": null, "min_cores": null, "min_mem": null, "min_gpus": null, "max_cores": null, "max_mem": null, "max_gpus": null, "min_accepted_cores": null, "min_accepted_mem": null, "min_accepted_gpus": null, "max_accepted_cores": 16, "max_accepted_mem": 64, "max_accepted_gpus": null, "env": null, "params": null, "resubmit": null, "scheduling": { "require": [], "prefer": [], "accept": ["slurm"], "reject": [] }, "inherits": null, "context": { "latitude": 51.9189046, "longitude": 19.1343786 }, "rules": {}, "tags": null, "queued_job_count": 8, "tool_id": "api_test", "job_count_in_time_window": 30, "galaxy_db_query_time": "2024-04-18T14:20:00Z", "median_queue_time": 1, "median_run_time": 8, "completed_count": 0, "suspended_count": 0, "held_count": 4, "removed_count": 0, "running_count": 0, "idle_count": 0, "cpu_usage_perc": 0, "mem_usage_perc": 0, } ], "objectstores": { "object_store_italy_S3_01": { "latitude": 50.0689816, "longitude": 19.9070188, "other_stuff_that_we_find_useful": "foobar" }, "object_store_poland": { "latitude": 51.9189046, "longitude": 19.1343786, "other_stuff_that_we_find_useful": "foobar" } }, "dataset_attributes": { "dataset_italy": { "object_store_id": "object_store_italy_S3_01", "size": 12345678 }, "dataset_poland": { "object_store_id": "object_store_poland", "size": 123456789 } } }
-
curl
The Swagger UI can give you a curl version of your request after executing
-
Using a python script with the requests or httpx library
There is an example of how to do this with TPV: example_tpv_config_locations_api.yml.
This config can be set up with a galaxy instance or by cloning the TPV repo (the example currently depends on an open PR):
# Clone the remote repository git clone https://github.com/pauldg/total-perspective-vortex.git # Change into the cloned repository directory cd total-perspective-vortex # Checkout the desired remote branch git checkout -b location_test origin/location_test # Create a venv for testing python -m venv .venv source .venv/bin/activate pip install -r requirements_test.txt # Run pytest for the api pytest -rPv tests/test_scenarios_locations.py::TestScenarios::test_scenario_esg_group_user_api
-