Skip to main content

An API for small fast data analysis jobs at Diamond Light Source

Project description

CI Coverage PyPI License

heliotrapi

An API for small fast data analysis jobs at Diamond Light Source.

[HEE-LEE-OH-TRAY-PEE-EYE]

Helio - Like the sun, a very brilliannt light source Heliotrope - An pink-purple indigo-like colour HeliotrAPI - The API that comes after blue

heliotrapi exposes an HTTP API to submit analysis jobs, return queued results, and optionally consume messages from RabbitMQ.

Source https://github.com/DiamondLightSource/heliotrapi
PyPI pip install heliotrapi
Docker docker run ghcr.io/diamondlightsource/heliotrapi:latest
Releases https://github.com/DiamondLightSource/heliotrapi/releases

Example Python usage:

from heliotrapi import __version__

print(f"Hello heliotrapi {__version__}")

To start the api server in dev mode on local host:

uvicorn heliotrapi.main:start_api --reload --factory --host 127.0.0.1 --port 8000

or

heliotrapi serve

Overview

The app accepts analysis jobs via HTTP or the client and stores results in memory for a configurable time-to-live. Jobs can also be ingested from RabbitMQ if rabbitmq.enabled is set.

Sending/Recieving results using the python client

    from heliotrapi.client import AnalysisClient

    client = AnalysisClient("ixx-analysis.diamond.ac.uk")

    print(client.available_analyses()) #see available analyses

    client.submit("name_of_analysis", examplekwarg1=1, examplekwarg2=2) # <- if kawrgs are invalid it will raise

    result = client.get_result() #returns an AnalysisResult basemodel

    print(result)

Using the WebUI

You can also navigate to the url or the ip address to be met with:

Web UI

Request flow

  • AnalysisClient submits jobs to /analyse

  • Jobs are queued in QueueManager

  • Workers process jobs in FIFO order

  • Results are returned via /result/id/{request_id} or /result/latest

  • Optional RabbitMQ listener can enqueue jobs automatically

                   AnalysisClient ─────--────────────────
                      │ ▲                │              │
                      ▼ │                ▼              ▼
      Analysis <-── heliotrapi ──---►  RabbitMQ ──---► Results
         Job   ─---►    ▲                │
                        │                │
                        │                │   
                  RabbitListener <───────
    

Kubernetes deployment

This repository includes a Helm chart under ./helm/heliotrapi.

Config support

The service supports configuration from one of these sources:

  • CONFIG_PATH environment variable
  • mounted config file at /etc/config/config.yaml
  • local config.yaml file in the current working directory

In Kubernetes, the Helm chart mounts config.yaml from a ConfigMap and sets:

env:
  - name: CONFIG_PATH
    value: "/etc/config/config.yaml"

RabbitMQ config

The Helm values now expose RabbitMQ settings in the same shape as the app expects:

config:
  rabbitmq:
    enabled: true
    host: ixx-analysis.diamond.ac.uk
    username: guest
    password: guest
    port: 61613
    destinations:
      - "/topic/public.worker.event"
      - "/topic/gda.messages.scan"
      - "/topic/gda.messages.processing"
      - "/topic/public.analysis.trigger"

Helm usage

  1. Build and push your Docker image
podman build -t ghcr.io/diamondlightsource/heliotrapi:latest .
podman push ghcr.io/diamondlightsource/heliotrapi:latest
  1. Render the chart
helm template heliotrapi ./helm/helm/heliotrapi
  1. Dry-run validation
helm template heliotrapi ./helm/heliotrapi | kubectl apply --dry-run=client -f -
  1. Install the chart
helm install heliotrapi ./helm/heliotrapi
  1. Verify the deployment
kubectl get pods
kubectl get svc
  1. Test the API
kubectl port-forward svc/heliotrapi 8000:8000

Then open:

http://localhost:8000/docs

Notes

  • The chart name has been updated to heliotrapi.
  • The config file is mounted via a ConfigMap and loaded from /etc/config/config.yaml.
  • The Helm chart currently creates a Deployment, Service, and ConfigMap.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

heliotrapi-0.1.9.tar.gz (839.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

heliotrapi-0.1.9-py3-none-any.whl (38.5 kB view details)

Uploaded Python 3

File details

Details for the file heliotrapi-0.1.9.tar.gz.

File metadata

  • Download URL: heliotrapi-0.1.9.tar.gz
  • Upload date:
  • Size: 839.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for heliotrapi-0.1.9.tar.gz
Algorithm Hash digest
SHA256 8700a6926e3cfda39b3d9dea75cc28ebba7cd4873392d1b8a72eb10ae44b2e2d
MD5 c2dc150366ef30dc8465469650fcdd0d
BLAKE2b-256 bc5bd315434e964d46f66d4237f6f35982498c32ad4709c9f131d035a6d690e1

See more details on using hashes here.

File details

Details for the file heliotrapi-0.1.9-py3-none-any.whl.

File metadata

  • Download URL: heliotrapi-0.1.9-py3-none-any.whl
  • Upload date:
  • Size: 38.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for heliotrapi-0.1.9-py3-none-any.whl
Algorithm Hash digest
SHA256 21b3a54fad50bb16082f5d8acd19c082c5c724a04cccd149cd494db4d957a4d6
MD5 7ded401c2d7941238ed1b7aa7e3e26a8
BLAKE2b-256 8d327a8aefe7cdce31bd28f5ee75c1e4bf4eb715b205a5117a0831966f5c3421

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page