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