From b074b865cd1c3e4d01d63a8dba37f4f3446a3bc2 Mon Sep 17 00:00:00 2001 From: "p.delpy@dkfz-heidelberg.de" Date: Mon, 10 Mar 2025 08:36:47 +0100 Subject: [PATCH] feature: add exporter to cce --- cce/modules/export-and-qb.curl-templates | 6 ++ cce/modules/exporter-compose.yml | 72 ++++++++++++++++++++++++ cce/modules/exporter-setup.sh | 8 +++ 3 files changed, 86 insertions(+) create mode 100644 cce/modules/export-and-qb.curl-templates create mode 100644 cce/modules/exporter-compose.yml create mode 100644 cce/modules/exporter-setup.sh diff --git a/cce/modules/export-and-qb.curl-templates b/cce/modules/export-and-qb.curl-templates new file mode 100644 index 0000000..204eef4 --- /dev/null +++ b/cce/modules/export-and-qb.curl-templates @@ -0,0 +1,6 @@ +# Full Excel Export +curl --location --request POST 'https://${HOST}/cce-exporter/request?query=Patient&query-format=FHIR_PATH&template-id=ccp&output-format=EXCEL' \ +--header 'x-api-key: ${EXPORT_API_KEY}' + +# QB +curl --location --request POST 'https://${HOST}/cce-reporter/generate?template-id=ccp' diff --git a/cce/modules/exporter-compose.yml b/cce/modules/exporter-compose.yml new file mode 100644 index 0000000..4ed8c41 --- /dev/null +++ b/cce/modules/exporter-compose.yml @@ -0,0 +1,72 @@ +version: "3.7" + +services: + exporter: + image: docker.verbis.dkfz.de/ccp/dktk-exporter:latest + container_name: bridgehead-cce-exporter + environment: + JAVA_OPTS: "-Xms1G -Xmx8G -XX:+UseG1GC" + LOG_LEVEL: "INFO" + EXPORTER_API_KEY: "${EXPORTER_API_KEY}" # Set in exporter-setup.sh + CROSS_ORIGINS: "https://${HOST}" + EXPORTER_DB_USER: "exporter" + EXPORTER_DB_PASSWORD: "${EXPORTER_DB_PASSWORD}" # Set in exporter-setup.sh + EXPORTER_DB_URL: "jdbc:postgresql://exporter-db:5432/exporter" + HTTP_RELATIVE_PATH: "/cce-exporter" + SITE: "${SITE_ID}" + HTTP_SERVLET_REQUEST_SCHEME: "https" + OPAL_PASSWORD: "${EXPORTER_OPAL_PASSWORD}" + labels: + - "traefik.enable=true" + - "traefik.http.routers.exporter_cce.rule=PathPrefix(`/cce-exporter`)" + - "traefik.http.services.exporter_cce.loadbalancer.server.port=8092" + - "traefik.http.routers.exporter_cce.tls=true" + - "traefik.http.middlewares.exporter_cce_strip.stripprefix.prefixes=/cce-exporter" + - "traefik.http.routers.exporter_cce.middlewares=exporter_cce_strip" + volumes: + - "/var/cache/bridgehead/cce/exporter-files:/app/exporter-files/output" + + exporter-db: + image: docker.verbis.dkfz.de/cache/postgres:${POSTGRES_TAG} + container_name: bridgehead-cce-exporter-db + environment: + POSTGRES_USER: "exporter" + POSTGRES_PASSWORD: "${EXPORTER_DB_PASSWORD}" # Set in exporter-setup.sh + POSTGRES_DB: "exporter" + volumes: + # Consider removing this volume once we find a solution to save Lens-queries to be executed in the explorer. + - "/var/cache/bridgehead/cce/exporter-db:/var/lib/postgresql/data" + + reporter: + image: docker.verbis.dkfz.de/ccp/dktk-reporter:latest + container_name: bridgehead-cce-reporter + environment: + JAVA_OPTS: "-Xms1G -Xmx8G -XX:+UseG1GC" + LOG_LEVEL: "INFO" + CROSS_ORIGINS: "https://${HOST}" + HTTP_RELATIVE_PATH: "/cce-reporter" + SITE: "${SITE_ID}" + EXPORTER_API_KEY: "${EXPORTER_API_KEY}" # Set in exporter-setup.sh + EXPORTER_URL: "http://exporter:8092" + LOG_FHIR_VALIDATION: "false" + HTTP_SERVLET_REQUEST_SCHEME: "https" + + # In this initial development state of the bridgehead, we are trying to have so many volumes as possible. + # However, in the first executions in the CCE sites, this volume seems to be very important. A report is + # a process that can take several hours, because it depends on the exporter. + # There is a risk that the bridgehead restarts, losing the already created export. + + volumes: + - "/var/cache/bridgehead/cce/reporter-files:/app/reports" + labels: + - "traefik.enable=true" + - "traefik.http.routers.reporter_cce.rule=PathPrefix(`/cce-reporter`)" + - "traefik.http.services.reporter_cce.loadbalancer.server.port=8095" + - "traefik.http.routers.reporter_cce.tls=true" + - "traefik.http.middlewares.reporter_cce_strip.stripprefix.prefixes=/cce-reporter" + - "traefik.http.routers.reporter_cce.middlewares=reporter_cce_strip" + + focus: + environment: + EXPORTER_URL: "http://exporter:8092" + EXPORTER_API_KEY: "${EXPORTER_API_KEY}" diff --git a/cce/modules/exporter-setup.sh b/cce/modules/exporter-setup.sh new file mode 100644 index 0000000..9b947a6 --- /dev/null +++ b/cce/modules/exporter-setup.sh @@ -0,0 +1,8 @@ +#!/bin/bash -e + +if [ "$ENABLE_EXPORTER" == true ]; then + log INFO "Exporter setup detected -- will start Exporter service." + OVERRIDE+=" -f ./$PROJECT/modules/exporter-compose.yml" + EXPORTER_DB_PASSWORD="$(echo \"This is a salt string to generate one consistent password for the exporter. It is not required to be secret.\" | sha1sum | openssl pkeyutl -sign -inkey /etc/bridgehead/pki/${SITE_ID}.priv.pem | base64 | head -c 30)" + EXPORTER_API_KEY="$(echo \"This is a salt string to generate one consistent API KEY for the exporter. It is not required to be secret.\" | sha1sum | openssl pkeyutl -sign -inkey /etc/bridgehead/pki/${SITE_ID}.priv.pem | base64 | head -c 64)" +fi