Skip to content

RTFM · Medical healthchecks

lb.saphira.dicom.qido: query the archive over HTTP (QIDO-RS)

DICOMweb is DICOM's modern REST dialect, and QIDO-RS is its search verb. The check queries a real endpoint with a synthetic key and demands the one thing a healthy QIDO service must return: HTTP 200 with application/dicom+json.

Saphira Linux dragon mascot

What it proves

The QIDO-RS read path end to end: the endpoint answers 200 and the content type is genuinely application/dicom+json; not a generic HTML error page in disguise. Continuous-safe and read-only. Kept separate from WADO and STOW by the package rule: query, retrieve and store are different capabilities and get different checks.

How it works

curl issues a GET with Accept: application/dicom+json to the configured full URL; including the AE-title path and query parameters, because that is what a real DICOMweb client sends. Both the status line and the Content-Type header are verified.

Configuration

Knobs
Variable / positionalDefaultMeaning
$6 or LB_SAPHIRA_DICOM_QIDO_URL(required)Full QIDO URL incl. aets and query; per-VIP in dicom.qido/<service>.conf
LB_SAPHIRA_DICOMWEB_TLS_VERIFY01 = enforce certificate verification
LB_SAPHIRA_TIMEOUT3Transaction deadline

Wiring it up

ldirectord
# ldirectord.cf - DICOMweb pool
virtual = 203.0.113.10:8081
    protocol = tcp
    scheduler = wlc
    real = 192.168.20.23:8081 gate 1
    checktype = external
    checkcommand = "/var/lib/lb/saphira/lb.saphira.dicom.qido"
The per-service URL
# /etc/saphira/lb-healthchecks.d/dicom.qido/pacs.conf
LB_SAPHIRA_DICOM_QIDO_URL=https://pacs.internal/dicomweb/aets/ACPACS/studies?PatientID=SAPHIRA-SYNTHETIC-HEALTHCHECK

Run it by hand

Manual run
LB_SAPHIRA_DICOM_QIDO_URL='https://pacs/dicomweb/aets/ACPACS/studies?PatientID=X' \
  /var/lib/lb/saphira/lb.saphira.dicom.qido pacs 8081 192.168.20.23 8081
echo $?
# 0 = 200 + application/dicom+json
# 1 = non-200, wrong content type, or connection failure
# 2 = no URL configured

Failure modes

  • 200 with the wrong content type; a proxy or gateway answered instead of the DICOMweb service: the subtle failure this check exists for
  • 401/403 under load: auth tiers degrading: visible here, not at the modality

Did we miss something?

If this page left something unanswered, found an error, or there is another subject you would like documented, tell us. Saphira’s documentation grows from real problems people need to solve.

Send feedback or request a new section →

Prefer not to do it yourself?

Everything needed to do the work yourself is documented here and remains free; we charge for human time, not for withholding knowledge. Sometimes the missing resource is simply time. The same people who build Saphira can provide paid professional help with implementation, migration, troubleshooting and administration.

Ask about professional support →