Skip to content

Endpoint to expose registered engines and their configurations #231

@JaeAeich

Description

@JaeAeich

Summary

Currently, one can discover all engines configured in a WES server via the /service-info endpoint. However, this information is not sufficient for real-world production use.
To safely and dynamically use WES in a production setting, additional visibility into engine configuration and defaults is required.

Problem

In the current WES specification, while /service-info provides generic details, it does not expose engine-level configuration or metadata.

For example:

  • Different WES deployments may register multiple workflow engines (e.g., Cromwell, Nextflow, Snakemake, Toil).
  • Each engine may support custom configurations like maximum CPU, memory, or runtime limits.
  • Currently, these configurations are opaque to the WES user or UI.

This lack of visibility makes it difficult to:

  • Build UIs or services that adapt dynamically to backend capabilities.
  • Enforce safe guardrails on user-submitted resource requests.
  • Communicate which engine is the default and what parameters are allowed or overridden.

Proposed Solution

Introduce a new endpoint, for example:

GET /ga4gh/wes/v1/engines

and

GET /ga4gh/wes/v1/engines/{id}

This endpoint should return all registered engines in the WES implementation, along with key metadata such as:

  • Engine name and version
  • Whether it’s the default engine
  • Supported workflow languages
  • Default or maximum CPU/memory configurations
  • Any additional parameters exposed by the engine

Example Response

{
  "engines": [
    {
      "name": "cromwell",
      "version": "85",
      "default": true,
      "languages": ["WDL", "CWL"],
      "config": {
        "max_cpu": {
          "value": 16,
          "cli_flag": "--max-concurrent-jobs",
          "is_default": true,
          "user_overridable": false,
          "description": "Maximum number of concurrent jobs Cromwell can execute."
        },
        "max_memory_gb": {
          "value": 64,
          "cli_flag": "--max-memory",
          "is_default": true,
          "user_overridable": false,
          "description": "Maximum total memory allocation allowed for Cromwell jobs."
        },
        "default_cpu": {
          "value": 4,
          "cli_flag": "--default-cpu",
          "is_default": true,
          "user_overridable": true,
          "description": "Default CPU cores assigned per task if not specified in the workflow."
        },
        "default_memory_gb": {
          "value": 8,
          "cli_flag": "--default-memory",
          "is_default": true,
          "user_overridable": true,
          "description": "Default memory per task if not explicitly defined in workflow inputs."
        },
        "queue": {
          "value": "production",
          "is_default": true,
          "user_overridable": false,
          "description": "Execution queue used for submitted workflows."
        }
      }
    },
    {
      "name": "nextflow",
      "version": "24.04.1",
      "default": false,
      "languages": ["Nextflow"],
      "config": {
        "max_cpu": {
          "value": 8,
          "cli_flag": "-process.maxForks",
          "is_default": true,
          "user_overridable": false,
          "description": "Maximum parallel processes allowed in the executor."
        },
        "max_memory_gb": {
          "value": 32,
          "cli_flag": "-process.maxMemory",
          "is_default": true,
          "user_overridable": false,
          "description": "Upper limit for memory requested per process."
        },
        "default_cpu": {
          "value": 2,
          "cli_flag": "-process.cpus",
          "is_default": true,
          "user_overridable": true,
          "description": "Default number of CPU cores assigned per process."
        },
        "runtime": {
          "value": {
            "container_engine": "docker",
            "default_image": "nextflow/nextflow:24.04.1"
          },
          "is_default": true,
          "user_overridable": false,
          "description": "Runtime environment for workflow execution."
        }
      }
    }
  ]
}

**The above is just an example

Benefits

  • Enables frontends and clients to display engine information dynamically.
  • Helps enforce and communicate backend resource limits to users.
  • Improves transparency for multi-engine WES deployments.
  • Makes it easier to integrate WES with custom orchestration or authentication systems that set user-specific quotas.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions