Java code for processing medical device files
To compile you'll need JDK version 1.8 or higher and Apache Maven
https://maven.apache.org/install.html
Run command in root of the project
mvn package
This is either done from docker secrets or environment variables
Docker secrets are being read from run/secrets/
List of needed parameters:
DATABASE_HOST
DATABASE_PORT
DATABASE_NAME
Which are used in such matter:
"jdbc:mysql://" + host + ":" + port + "/" + databaseName;
This is done with envronment variables and api is used to look for a patient with a call to openeyes where it handles hospital number regexs and calls PAS
List of needed environment variables:
API_HOST
- DNS hostname/IP address of the openeyes server that the payload API is running onAPI_PORT
- Port number that the openeyes payload API is running on (default = 80)API_USER
- The openeyes user account name for use in API calls. This user must have the 'API Access' RBAC role, and should not be able to login interactively. (Default = admin)API_PASSWORD
- The password for the openeyes user account for API calls (default = admin)- NOTE: in production envirnments this should be provided as a docker secret
DATABASE_HOST
- Host name of the database serverDATABASE_USER
- user account for connecting to the database serverDATABASE_PASS
- Password for connecting to the database server- NOTE: - in production envirnments this should be provided as a docker secret
List of Optional environment variables:
API_DO_HTTPS
- require HTTPS (Default = false)HOSPITAL_NUMBER_CONSTRUCT_REGEX
- Define the regular expression for matching a hospital number in incoming device files. Only needed if default matching fails. (e.g., "((?=^[0-9]{8}$$)^0{2}([0-9]$$)|(?!^[0-9]{8}$$)([0-9]))" )DEFAULT_SUBSPECIALTY
: If no subspecialty is defined in the payload, then this will be used as the default (default = 'Eye Casualty')DEFAULT_SERVICE
- If no 'service' context is defined in the payload, then this will be used as the default (default = 'Eye Casualty Service')DEFAULT_FIRM_NAME
- If no context is defined in the payload, then this will be used as the default (default = 'Eye Casualty Service')
-sa
It's an optional value and when not provided will run as service without stopping. An option that will be used to determine how long the engine should run and will shutdown after the specified amount of minutes
Example value : 60
-rq
The request queue of the table request_queue in the database that should be processed
Example value : "dicom_queue"
-sf
The location of the directory of the javascript scripts that the engine will use to process the medical device files
Example value : "src/main/resources/routineLibrary/"
-sy
minutes delay when the engine should synchronize the specified scriptFileLocation with the routine_library table
Example value : 1
-rd
To help with the containers starting out of order this option will retry a database connection for X minutes before failing if a connection has been failed to establish
Example value : 1
After the project is built the file that has to be run is under target/appassembler/bin/
For Windows the file is called
dicomEngine.bat
For Linux the file is called
dicomEngine
Example of execution in windows:
.\target\appassembler\bin\dicomEngine.bat -sf src/main/resources/routineLibrary/ -rq dicom_queue -sa 1 -sy 1
Logs are saved in root directory logs folder with name applog.txt
This project can be packaged as a docker container. Using the provided Dockerfile.
A pre-packaged version is provided on dockerhub as appertaopeneyes/dicomprocessor
Builds are created using the Dockerhub Maven base image. All options for that image are available to be used in dicomprocessor.
Additionally, the following build arguments are available:
MAVEN_TAG
- The maven base image tag to be used for the build.- This is useful for building with different JDK versions, etc
example build command, using latest maven v3.x.x and JDK 11:
docker build --build-arg MAVEN_TAG=3-jdk-11 -t dicomprocessor .
Use standard docker methods for running. A number of ENV options are provided for tuning the behaviour.
Example: docker run -e DATABASE_HOST=db appertaopeneyes/dicomprocessor
-
API_HOST
- Hostname (or IP address) of the openeyes web server hosting the API (defaults to docker host) -
API_PORT
- Port number to connect to on the API_HOST (default 80) -
API_USER
- The username for the API access (this should be created as a user account in openeyes) -
API_PASSWORD
- The password for the API access user (this should be created as a user account in openeyes) -
API_DO_HTTPS
- defaults to 'FALSE', if the API call has to be with HTTPS protocol value needs to be "TRUE" -
DATABASE_HOST
- Hostname (or IP address) of the main openeyes database server -
DATABASE_PORT
- Port number that the main openeyes database server is accessed on (default=3306) -
DATABASE_NAME
- Name of the openeyes database (default='openeyes') -
DATABASE_USER
- Username for accessing the main openeyes database -
DATABASE_PASS
- Password for accessing the main openeyes database -
PROCESSOR_QUEUE_NAME
- The queue name for this processor to use (default='dicom_queue' -
PROCESSOR_SHUTDOWN_AFTER
- If set, the processor will run for the specified number of seconds and then terminate. There is very little reason you'd want to use this! Default is to run indefinitely. -
SYNCHRONIZE_ROUTINE_DELAY
- minutes delay when the engine should synchronize the scriptFiles with the routine_library table
Note that the following variables support docker secrets, which should be considered the recommended method of suplying credentials:
API_USER
API_PASSWORD
DATABASE_USER
DATABASE_PASSWORD
A sample docker-compose.yml file is provided in the project root.
The container is built with the latest set of device scripts (routines). These are stored in /routineLibrary
. Overeriding this folder with a bind volume will allow you to use custom scripts.
If you wish to change scripts on the fly, then either restart the container after each script change, or override the SYNCHRONIZE_ROUTINE_DELAY
Env variable to a low number. e.g, 1