0.0 Cheat Sheet - FNNDSC/pfdcm GitHub Wiki

pfdcm cheat sheet -- BCH

Abstract

  • pfdcm is a critical component of the ChRIS / PACS experience within BCH. This cheat sheet describes how to (re)start pfdcm within the BCH network

Preconditions

Clone the repo

A containerized buid of the current/latest version of the pfdcm source repo. First clone the repo:

export UID=$(id -u)
gh repo clone FNNDSC/pfdcm

Build the container

Now, build the container. Since the BCH PACS has been preconfigured to push DICOM traffic to the host titan.tch.harvard.edu on port 10402, it is best to build the container on host titan.

cd pfdcm
# BCH is a proxied env, so
export PROXY="http://10.41.13.4:3128"
docker build --build-arg http_proxy=${PROXY} --build-arg UID=$UID -t local/pfdcm .

Fire up the container

Internally, the pfdcm service listens for DICOM traffic sent to port 11113. In the FNNDSC, radiology PACS sends traffic to titan.tch.harvard.edu:10402, thus we should port map the host port 10402 to the internal container port 11113.

docker run --rm -it -d                                                         \
        -p 4005:4005 -p 10402:11113 -p 5555:5555 -p 10502:11113 -p 11113:11113 \
        -v /home/dicom:/home/dicom                                             \
        local/pfdcm /start-reload.sh

The most important port mappings above are

  • 4005:4005: REST API traffic from host on port 4005 to the pfdcm service itself, listening on port 4005 within the container.
  • 10402:11113: DICOM traffic channel. The BCH PACS will transmit DICOM image data to port 10402 on host titan. This is mapped to port 11113 inside the pfdcm container where the listening/packing service is active.
  • 11113:11113: A secondary DICOM traffic channel. Useful for direct transmission of DICOM data.
  • 5555:5555: Reserved for future use.
  • 10502:10502: A secondary BCH DICOM PACS channel, previously mapped to AETitle CHRIS-dev. Retained for future expansion.

Start the listening service inside pfdcm

Firing up the pfdcm container does not start the internal listening service. To start the listener a signal needs to be sent to the pfdcm API:

export PFDCMURL=http://10.72.8.90:4005
curl -s -X 'POST'                                                             \
  "$PFDCMURL/api/v1/listener/initialize/"                                     \
  -H 'accept: application/json'                                               \
  -H 'Content-Type: application/json'                                         \
  -d '{
        "value": "default"
      }' | jq

This curl request will block for a second or two before returning the prompt. In fact, the slight delay is an indication that the service is working.

Set the PACS details within the pfdcm serivce:

Finally, information pertinent to the BCH PACS needs to be set within pfdcm:

export AEC=CHRIS
export AET=CHRISV3
export PACSIP=134.174.12.21
export PACSPORT=104
export PACSNAME=PACSDCM

curl -s -X 'PUT'                                                              \
  "$PFDCMURL/api/v1/PACSservice/$PACSNAME/"                                   \
  -H 'accept: application/json'                                               \
  -H 'Content-Type: application/json'                                         \
  -d '{
        "info": {
          "aet":            "'$AET'",
          "aet_listener":   "'$AEC'",
          "aec":            "'$AEC'",
          "serverIP":       "'$PACSIP'",
          "serverPort":     "'$PACSPORT'"
        }
}' | jq

-30-