mirror of
https://github.com/samply/bridgehead.git
synced 2025-06-16 20:40:15 +02:00
Compare commits
17 Commits
ovis
...
metadata_f
Author | SHA1 | Date | |
---|---|---|---|
364cf5f1c9 | |||
e571681fce | |||
4f5f6b17e7 | |||
146235236b | |||
0169435074 | |||
6c71a83e70 | |||
ed95dff63e | |||
3841a98a3b | |||
710092c020 | |||
9977578aa5 | |||
634d4e2a4b | |||
bc24599c54 | |||
502eef0cc8 | |||
c4b7620fd6 | |||
6a21a5b641 | |||
c04ffc5f33 | |||
b1bdf48e55 |
24
README.md
24
README.md
@ -23,6 +23,7 @@ This repository is the starting point for any information and tools you will nee
|
|||||||
- [File structure](#file-structure)
|
- [File structure](#file-structure)
|
||||||
- [BBMRI-ERIC Directory entry needed](#bbmri-eric-directory-entry-needed)
|
- [BBMRI-ERIC Directory entry needed](#bbmri-eric-directory-entry-needed)
|
||||||
- [Loading data](#loading-data)
|
- [Loading data](#loading-data)
|
||||||
|
- [Metadata feedback](#metadata-feedback)
|
||||||
4. [Things you should know](#things-you-should-know)
|
4. [Things you should know](#things-you-should-know)
|
||||||
- [Auto-Updates](#auto-updates)
|
- [Auto-Updates](#auto-updates)
|
||||||
- [Auto-Backups](#auto-backups)
|
- [Auto-Backups](#auto-backups)
|
||||||
@ -154,7 +155,8 @@ Pay special attention to:
|
|||||||
Clone the bridgehead repository:
|
Clone the bridgehead repository:
|
||||||
```shell
|
```shell
|
||||||
sudo mkdir -p /srv/docker/
|
sudo mkdir -p /srv/docker/
|
||||||
sudo git clone -b main https://github.com/samply/bridgehead.git /srv/docker/bridgehead
|
sudo git clone https://github.com/samply/bridgehead.git /srv/docker/bridgehead
|
||||||
|
sudo git checkout metadata_fb # Only needed if you want to use metadata feedback
|
||||||
```
|
```
|
||||||
|
|
||||||
Then, run the installation script:
|
Then, run the installation script:
|
||||||
@ -347,6 +349,26 @@ Normally, you will need to build your own ETL to feed the Bridgehead. However, t
|
|||||||
|
|
||||||
You can find the profiles for generating FHIR in [Simplifier](https://simplifier.net/bbmri.de/~resources?category=Profile).
|
You can find the profiles for generating FHIR in [Simplifier](https://simplifier.net/bbmri.de/~resources?category=Profile).
|
||||||
|
|
||||||
|
### Metadata feedback
|
||||||
|
|
||||||
|
The Bridgehead comes with a tool that allows you to associate metadata with samples. Multiple arbitrary text strings are allowed. A typical use case would be publications based on research using a sample. Here, one could lay down the DOI of the publication in the sample.
|
||||||
|
|
||||||
|
Full details of the system can be found [here](https://github.com/samply/feedback-deployment). To avail yourself of this feature, you need to
|
||||||
|
|
||||||
|
- Use the bbmri project.
|
||||||
|
- work with the ```metadata_fb``` branch of the Bridgehead repository.
|
||||||
|
- Build the feedback-agent Docker container (more details [here](https://github.com/samply/feedback-agent/)).
|
||||||
|
- Build the feedback-agent-ui Docker container (more details [here](https://github.com/samply/feedback-agent-ui/)).
|
||||||
|
|
||||||
|
The following extra environment variables need to be added to your ```/etc/bridgehead/bbmri.conf``` file:
|
||||||
|
|
||||||
|
``` code
|
||||||
|
ENABLE_EXPORTER=true
|
||||||
|
ENABLE_FEEDBACK_AGENT=true
|
||||||
|
FEEDBACK_HUB_URL=<URL for central feedback hub backend API>
|
||||||
|
FOCUS_RETRY_COUNT=256
|
||||||
|
```
|
||||||
|
|
||||||
## Things you should know
|
## Things you should know
|
||||||
|
|
||||||
### Auto-Updates
|
### Auto-Updates
|
||||||
|
@ -22,6 +22,7 @@ services:
|
|||||||
BROKER_URL: ${ERIC_BROKER_URL}
|
BROKER_URL: ${ERIC_BROKER_URL}
|
||||||
PROXY_ID: ${ERIC_PROXY_ID}
|
PROXY_ID: ${ERIC_PROXY_ID}
|
||||||
APP_focus_KEY: ${ERIC_FOCUS_BEAM_SECRET_SHORT}
|
APP_focus_KEY: ${ERIC_FOCUS_BEAM_SECRET_SHORT}
|
||||||
|
APP_feedback-agent_KEY: ${FEEDBACK_AGENT_BEAM_SECRET}
|
||||||
PRIVKEY_FILE: /run/secrets/proxy.pem
|
PRIVKEY_FILE: /run/secrets/proxy.pem
|
||||||
ALL_PROXY: http://forward_proxy:3128
|
ALL_PROXY: http://forward_proxy:3128
|
||||||
TLS_CA_CERTIFICATES_DIR: /conf/trusted-ca-certs
|
TLS_CA_CERTIFICATES_DIR: /conf/trusted-ca-certs
|
||||||
|
67
bbmri/modules/exporter-compose.yml
Normal file
67
bbmri/modules/exporter-compose.yml
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
version: "3.7"
|
||||||
|
|
||||||
|
services:
|
||||||
|
exporter:
|
||||||
|
image: docker.verbis.dkfz.de/ccp/dktk-exporter:latest
|
||||||
|
container_name: bridgehead-ccp-exporter
|
||||||
|
environment:
|
||||||
|
JAVA_OPTS: "-Xms1G -Xmx8G -XX:+UseG1GC"
|
||||||
|
LOG_LEVEL: "INFO"
|
||||||
|
EXPORTER_API_KEY: "${EXPORTER_API_KEY}"
|
||||||
|
CROSS_ORIGINS: "https://${HOST}"
|
||||||
|
EXPORTER_DB_USER: "exporter"
|
||||||
|
EXPORTER_DB_PASSWORD: "${EXPORTER_DB_PASSWORD}"
|
||||||
|
EXPORTER_DB_URL: "jdbc:postgresql://exporter-db:5432/exporter"
|
||||||
|
HTTP_RELATIVE_PATH: "/ccp-exporter"
|
||||||
|
SITE: "${SITE_ID}"
|
||||||
|
HTTP_SERVLET_REQUEST_SCHEME: "https"
|
||||||
|
OPAL_PASSWORD: "${EXPORTER_OPAL_PASSWORD}"
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.exporter_ccp.rule=PathPrefix(`/ccp-exporter`)"
|
||||||
|
- "traefik.http.services.exporter_ccp.loadbalancer.server.port=8092"
|
||||||
|
- "traefik.http.routers.exporter_ccp.tls=true"
|
||||||
|
- "traefik.http.middlewares.exporter_ccp_strip.stripprefix.prefixes=/ccp-exporter"
|
||||||
|
- "traefik.http.routers.exporter_ccp.middlewares=exporter_ccp_strip"
|
||||||
|
volumes:
|
||||||
|
- "/var/cache/bridgehead/ccp/exporter-files:/app/exporter-files/output"
|
||||||
|
|
||||||
|
exporter-db:
|
||||||
|
image: docker.verbis.dkfz.de/cache/postgres:${POSTGRES_TAG}
|
||||||
|
container_name: bridgehead-ccp-exporter-db
|
||||||
|
environment:
|
||||||
|
POSTGRES_USER: "exporter"
|
||||||
|
POSTGRES_PASSWORD: "${EXPORTER_DB_PASSWORD}"
|
||||||
|
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/ccp/exporter-db:/var/lib/postgresql/data"
|
||||||
|
|
||||||
|
reporter:
|
||||||
|
image: docker.verbis.dkfz.de/ccp/dktk-reporter:latest
|
||||||
|
container_name: bridgehead-ccp-reporter
|
||||||
|
environment:
|
||||||
|
JAVA_OPTS: "-Xms1G -Xmx8G -XX:+UseG1GC"
|
||||||
|
LOG_LEVEL: "INFO"
|
||||||
|
CROSS_ORIGINS: "https://${HOST}"
|
||||||
|
HTTP_RELATIVE_PATH: "/ccp-reporter"
|
||||||
|
SITE: "${SITE_ID}"
|
||||||
|
EXPORTER_API_KEY: "${EXPORTER_API_KEY}"
|
||||||
|
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 CCP 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/ccp/reporter-files:/app/reports"
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.reporter_ccp.rule=PathPrefix(`/ccp-reporter`)"
|
||||||
|
- "traefik.http.services.reporter_ccp.loadbalancer.server.port=8095"
|
||||||
|
- "traefik.http.routers.reporter_ccp.tls=true"
|
||||||
|
- "traefik.http.middlewares.reporter_ccp_strip.stripprefix.prefixes=/ccp-reporter"
|
||||||
|
- "traefik.http.routers.reporter_ccp.middlewares=reporter_ccp_strip"
|
9
bbmri/modules/exporter-setup.sh
Normal file
9
bbmri/modules/exporter-setup.sh
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#!/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)"
|
||||||
|
POSTGRES_TAG=15.6-alpine
|
||||||
|
fi
|
15
bbmri/modules/exporter.md
Normal file
15
bbmri/modules/exporter.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# Exporter and Reporter
|
||||||
|
|
||||||
|
|
||||||
|
## Exporter
|
||||||
|
The exporter is a REST API that exports the data of the different databases of the bridgehead in a set of tables.
|
||||||
|
It can accept different output formats as CSV, Excel, JSON or XML. It can also export data into Opal.
|
||||||
|
|
||||||
|
## Exporter-DB
|
||||||
|
It is a database to save queries for its execution in the exporter.
|
||||||
|
The exporter manages also the different executions of the same query in through the database.
|
||||||
|
|
||||||
|
## Reporter
|
||||||
|
This component is a plugin of the exporter that allows to create more complex Excel reports described in templates.
|
||||||
|
It is compatible with different template engines as Groovy, Thymeleaf,...
|
||||||
|
It is perfect to generate a document as our traditional CCP quality report.
|
59
bbmri/modules/feedback-agent-compose.yml
Normal file
59
bbmri/modules/feedback-agent-compose.yml
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
version: "3.7"
|
||||||
|
|
||||||
|
services:
|
||||||
|
feedback-agent-ui:
|
||||||
|
image: "samply/feedback-agent-ui"
|
||||||
|
environment:
|
||||||
|
- VUE_APP_EXPORTER_URL=https://localhost/ccp-exporter
|
||||||
|
- VUE_APP_FB_BACKEND_URL=http://localhost:8072
|
||||||
|
labels:
|
||||||
|
- traefik.enable=true
|
||||||
|
# HTTPS
|
||||||
|
- traefik.http.routers.feedback_agent_ui_ccp_https.rule=PathPrefix(`/ccp-feedback-agent-ui`)
|
||||||
|
- traefik.http.services.feedback_agent_ui_ccp_https.loadbalancer.server.port=8096
|
||||||
|
- traefik.http.routers.feedback_agent_ui_ccp_https.entrypoints=websecure
|
||||||
|
- traefik.http.routers.feedback_agent_ui_ccp_https.tls=true
|
||||||
|
feedback-agent:
|
||||||
|
image: "samply/feedback-agent"
|
||||||
|
environment:
|
||||||
|
- SPRING_DATASOURCE_URL=jdbc:postgresql://feedback-agent-db:5432/compose-postgres
|
||||||
|
- SPRING_DATASOURCE_USERNAME=compose-postgres
|
||||||
|
- SPRING_DATASOURCE_PASSWORD=${FEEDBACK_AGENT_DB_PASSWORD}
|
||||||
|
- SPRING_JPA_HIBERNATE_DDL_AUTO=update
|
||||||
|
- BEAM_PROXY_URI=http://beam-proxy-eric:8081
|
||||||
|
- FEEDBACK_HUB_URL=${FEEDBACK_HUB_URL}
|
||||||
|
- BLAZE_BASE_URL=http://blaze:8080/fhir
|
||||||
|
- FEEDBACK_AGENT_SECRET=${FEEDBACK_AGENT_BEAM_SECRET}
|
||||||
|
- FEEDBACK_AGENT_BEAM_ID=feedback-agent.${ERIC_PROXY_ID}
|
||||||
|
- FEEDBACK_HUB_BEAM_ID=feedback-hub.feedback-central.${ERIC_BROKER_ID}
|
||||||
|
- EXPORTER_API_KEY=${EXPORTER_API_KEY}
|
||||||
|
- CORS_ALLOWED_ORIGINS="https://${HOST}
|
||||||
|
networks:
|
||||||
|
# Only needed for local testing.
|
||||||
|
- feedback
|
||||||
|
- default
|
||||||
|
labels:
|
||||||
|
- traefik.enable=true
|
||||||
|
# HTTPS
|
||||||
|
- traefik.http.routers.feedback_agent_ccp_https.rule=PathPrefix(`/ccp-feedback-agent`)
|
||||||
|
- traefik.http.services.feedback_agent_ccp_https.loadbalancer.server.port=8072
|
||||||
|
- traefik.http.routers.feedback_agent_ccp_https.entrypoints=websecure
|
||||||
|
- traefik.http.middlewares.feedback_agent_ccp_https_strip.stripprefix.prefixes=/ccp-feedback-agent
|
||||||
|
- traefik.http.routers.feedback_agent_ccp_https.middlewares=feedback_agent_ccp_https_strip
|
||||||
|
- traefik.http.routers.feedback_agent_ccp_https.tls=true
|
||||||
|
feedback-agent-db:
|
||||||
|
image: 'postgres:13.1-alpine'
|
||||||
|
container_name: feedback-agent-db
|
||||||
|
environment:
|
||||||
|
- POSTGRES_USER=compose-postgres
|
||||||
|
- POSTGRES_PASSWORD=${FEEDBACK_AGENT_DB_PASSWORD}
|
||||||
|
|
||||||
|
# This is needed when you run both agent and hub locally in a test
|
||||||
|
# environment. Not necessary in production, though it probably won't
|
||||||
|
# cause any problems.
|
||||||
|
networks:
|
||||||
|
# Network to connect agent and hub.
|
||||||
|
feedback:
|
||||||
|
name: feedback
|
||||||
|
driver: bridge
|
||||||
|
|
8
bbmri/modules/feedback-agent-setup.sh
Normal file
8
bbmri/modules/feedback-agent-setup.sh
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [ "$ENABLE_FEEDBACK_AGENT" == true ]; then
|
||||||
|
OVERRIDE+=" -f ./$PROJECT/modules/feedback-agent-compose.yml"
|
||||||
|
FEEDBACK_AGENT_BEAM_SECRET="$(cat /proc/sys/kernel/random/uuid | sed 's/[-]//g' | head -c 20)"
|
||||||
|
FEEDBACK_AGENT_DB_PASSWORD="$(cat /proc/sys/kernel/random/uuid | sed 's/[-]//g' | head -c 20)"
|
||||||
|
fi
|
||||||
|
|
6
bbmri/modules/feedback-agent.md
Normal file
6
bbmri/modules/feedback-agent.md
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# Metadata feedback agent
|
||||||
|
|
||||||
|
This component can be used to choose the sample to be associated
|
||||||
|
with a given piece of metadata (generally the ID of a publication
|
||||||
|
relating to research done with the sample).
|
||||||
|
|
@ -1,112 +0,0 @@
|
|||||||
version: '3.7'
|
|
||||||
|
|
||||||
services:
|
|
||||||
|
|
||||||
ovis-traefik-forward-auth:
|
|
||||||
image: quay.io/oauth2-proxy/oauth2-proxy:latest
|
|
||||||
environment:
|
|
||||||
- http_proxy=${http_proxy:-http://forward_proxy:3128}
|
|
||||||
- https_proxy=${https_proxy:-http://forward_proxy:3128}
|
|
||||||
- OAUTH2_PROXY_PROVIDER=oidc
|
|
||||||
- OAUTH2_PROXY_SKIP_PROVIDER_BUTTON=true
|
|
||||||
- OAUTH2_PROXY_OIDC_ISSUER_URL=${OAUTH_ISSUER_URL}
|
|
||||||
- OAUTH2_PROXY_CLIENT_ID=${OAUTH_CLIENT_ID}
|
|
||||||
- OAUTH2_PROXY_CLIENT_SECRET=${OAUTH_CLIENT_SECRET}
|
|
||||||
- OAUTH2_PROXY_COOKIE_SECRET=${AUTHENTICATION_SECRET}
|
|
||||||
- OAUTH2_PROXY_COOKIE_DOMAINS=.${HOST:-localhost}
|
|
||||||
- OAUTH2_PROXY_COOKIE_REFRESH=4m
|
|
||||||
- OAUTH2_PROXY_COOKIE_EXPIRE=24h
|
|
||||||
- OAUTH2_PROXY_HTTP_ADDRESS=:4180
|
|
||||||
- OAUTH2_PROXY_REVERSE_PROXY=true
|
|
||||||
- OAUTH2_PROXY_WHITELIST_DOMAINS=.${HOST:-localhost}
|
|
||||||
- OAUTH2_PROXY_UPSTREAMS=static://202
|
|
||||||
- OAUTH2_PROXY_EMAIL_DOMAINS=*
|
|
||||||
#- OAUTH2_PROXY_ALLOWED_GROUPS=app-ovis
|
|
||||||
#- OAUTH2_PROXY_ERRORS_TO_INFO_LOG=true
|
|
||||||
- OAUTH2_PROXY_CODE_CHALLENGE_METHOD=S256
|
|
||||||
# For some reason, login.verbis.dkfz.de does not have a "groups" scope but this comes automatically through a
|
|
||||||
# scope called microprofile-jwt. Remove the following line once we have a "groups" scope.
|
|
||||||
- OAUTH2_PROXY_SCOPE=openid profile email
|
|
||||||
# Pass Authorization Header and some user information to spot
|
|
||||||
- OAUTH2_PROXY_SET_AUTHORIZATION_HEADER=true
|
|
||||||
- OAUTH2_PROXY_SET_XAUTHREQUEST=true
|
|
||||||
labels:
|
|
||||||
- "traefik.enable=true"
|
|
||||||
- "traefik.http.middlewares.ovis-traefik-forward-auth.forwardauth.address=http://ovis-traefik-forward-auth:4180"
|
|
||||||
- "traefik.http.middlewares.ovis-traefik-forward-auth.forwardauth.authResponseHeaders=Authorization, X-Forwarded-User, X-Auth-Request-User, X-Auth-Request-Email"
|
|
||||||
- "traefik.http.services.ovis-traefik-forward-auth.loadbalancer.server.port=4180"
|
|
||||||
- "traefik.http.routers.oauth2.rule=Host(`${HOST:-localhost}`) && PathPrefix(`/oauth2-ovis/`)"
|
|
||||||
- "traefik.http.routers.oauth2.tls=true"
|
|
||||||
|
|
||||||
fhir-transformer:
|
|
||||||
image: docker.verbis.dkfz.de/ovis/adt-mon-gql-fhir-transformer:latest
|
|
||||||
restart: on-failure
|
|
||||||
environment:
|
|
||||||
- FHIR_SERVER_URL=${FHIR_SERVER_URL:-http://bridgehead-ccp-blaze:8080/fhir}
|
|
||||||
- FHIR_USERNAME=${FHIR_USERNAME}
|
|
||||||
- FHIR_PASSWORD=${FHIR_PASSWORD}
|
|
||||||
volumes:
|
|
||||||
- /var/cache/bridgehead/ccp/ovis/shared_data:/app/output
|
|
||||||
|
|
||||||
mongo:
|
|
||||||
image: mongo:${MONGO_VER:-latest}
|
|
||||||
restart: always
|
|
||||||
command: mongod
|
|
||||||
- /var/cache/bridgehead/ccp/ovis/mongo/init/init.js:/docker-entrypoint-initdb.d/init.js
|
|
||||||
|
|
||||||
backend:
|
|
||||||
image: docker.verbis.dkfz.de/ovis/adt-mon-gql-backend:latest
|
|
||||||
restart: always
|
|
||||||
user: root
|
|
||||||
working_dir: /app
|
|
||||||
environment:
|
|
||||||
- APOLLO_PORT=${APOLLO_PORT:-4001}
|
|
||||||
- CREDOS_PORT=${CREDOS_PORT:-4000}
|
|
||||||
- MONGO_VER=latest
|
|
||||||
- CORS_ORIGIN=*
|
|
||||||
- DB=${DB:-onc_test}
|
|
||||||
- ADRESS=${ADRESS:-mongodb://mongo:27017}
|
|
||||||
depends_on:
|
|
||||||
- mongo
|
|
||||||
- fhir-transformer
|
|
||||||
healthcheck:
|
|
||||||
test: ["CMD", "curl", "-f", "http://localhost:${APOLLO_PORT:-4001}/health"]
|
|
||||||
interval: 5s
|
|
||||||
timeout: 3s
|
|
||||||
retries: 5
|
|
||||||
start_period: 10s
|
|
||||||
entrypoint: >
|
|
||||||
sh -c "
|
|
||||||
# First run the initialization process
|
|
||||||
while [ ! -f /shared/omock.json ]; do
|
|
||||||
echo 'Waiting for omock.json...'
|
|
||||||
sleep 5
|
|
||||||
done;
|
|
||||||
mkdir -p ./prep &&
|
|
||||||
cp /shared/omock.json ./prep/omock.json &&
|
|
||||||
node ./mgDB/prep/preprocessor.mjs &&
|
|
||||||
echo 'Processing complete' &&
|
|
||||||
exec node --watch index.js"
|
|
||||||
labels:
|
|
||||||
- "traefik.enable=true"
|
|
||||||
- "traefik.http.routers.ovis-backend.rule=Host(`${HOST:-localhost}`) && PathPrefix(`/graphql`)"
|
|
||||||
- "traefik.http.routers.ovis-backend.tls=true"
|
|
||||||
- "traefik.http.services.ovis-backend.loadbalancer.server.port=${APOLLO_PORT:-4001}"
|
|
||||||
volumes:
|
|
||||||
- /var/cache/bridgehead/ccp/ovis/shared_data:/shared
|
|
||||||
|
|
||||||
frontend:
|
|
||||||
image: docker.verbis.dkfz.de/ovis/adt-mon-gql-frontend:latest
|
|
||||||
restart: always
|
|
||||||
environment:
|
|
||||||
- PUBLIC_GRAPHQL_URL=https://${HOST:-localhost}/graphql
|
|
||||||
depends_on:
|
|
||||||
backend:
|
|
||||||
condition: service_healthy
|
|
||||||
working_dir: /app
|
|
||||||
labels:
|
|
||||||
- "traefik.enable=true"
|
|
||||||
- "traefik.http.routers.ovis-frontend.tls=true"
|
|
||||||
- "traefik.http.routers.ovis-frontend.rule=Host(`${HOST:-localhost}`)"
|
|
||||||
- "traefik.http.routers.ovis-frontend.middlewares=traefik-forward-auth"
|
|
||||||
- "traefik.http.services.ovis-frontend.loadbalancer.server.port=5173"
|
|
@ -1,108 +0,0 @@
|
|||||||
#!/bin/bash -e
|
|
||||||
|
|
||||||
if [ -n "$ENABLE_OVIS" ];then
|
|
||||||
# Setup MongoDB initialization directory if it doesn't exist
|
|
||||||
mkdir -p "/var/cache/bridgehead/ccp/ovis/mongo/init"
|
|
||||||
|
|
||||||
# Generate MongoDB initialization script directly
|
|
||||||
cat > "/var/cache/bridgehead/ccp/ovis/mongo/init/init.js" << 'EOF'
|
|
||||||
db = db.getSiblingDB("test_credos");
|
|
||||||
db.createCollection("user");
|
|
||||||
db.user.insertMany([{
|
|
||||||
"_id": "OVIS-Root",
|
|
||||||
"createdAt": new Date(),
|
|
||||||
"createdBy": "system",
|
|
||||||
"role": "super-admin",
|
|
||||||
"status": "active",
|
|
||||||
"pseudonymization": false,
|
|
||||||
"darkMode": false,
|
|
||||||
"colorTheme": "CCCMunich",
|
|
||||||
"language": "de",
|
|
||||||
}]);
|
|
||||||
|
|
||||||
db = db.getSiblingDB("onc_test");
|
|
||||||
db.createCollection("user");
|
|
||||||
db.user.insertMany([{
|
|
||||||
"_id": "OVIS-Root",
|
|
||||||
"createdAt": new Date(),
|
|
||||||
"createdBy": "system",
|
|
||||||
"role": "super-admin",
|
|
||||||
"status": "active",
|
|
||||||
"pseudonymization": false,
|
|
||||||
"darkMode": false,
|
|
||||||
"colorTheme": "CCCMunich",
|
|
||||||
"language": "de",
|
|
||||||
}]);
|
|
||||||
|
|
||||||
db.ops.insertMany([
|
|
||||||
{"OPSC_4":"1-40","OPS_Gruppen_Text":"Biopsie ohne Inzision an Nervensystem und endokrinen Organen "},
|
|
||||||
{"OPSC_4":"1-44","OPS_Gruppen_Text":"Biopsie ohne Inzision an den Verdauungsorganen"},
|
|
||||||
{"OPSC_4":"1-40","OPS_Gruppen_Text":"Biopsie ohne Inzision an anderen Organen und Geweben"},
|
|
||||||
{"OPSC_4":"1-50","OPS_Gruppen_Text":"Biopsie an Haut, Mamma, Knochen und Muskeln durch Inzision"},
|
|
||||||
{"OPSC_4":"1-51","OPS_Gruppen_Text":"Biopsie an Nervengewebe, Hypophyse, Corpus pineale durch Inzision und Trepanation von Schädelknochen "},
|
|
||||||
{"OPSC_4":"1-55","OPS_Gruppen_Text":"Biopsie an anderen Verdauungsorganen, Zwerchfell und (Retro-)Peritoneum durch Inzision "},
|
|
||||||
{"OPSC_4":"1-56","OPS_Gruppen_Text":"Biopsie an Harnwegen und männlichen Geschlechtsorgannen durch Inzision"},
|
|
||||||
{"OPSC_4":"1-58","OPS_Gruppen_Text":"Biopsie an anderen Organen durch Inzision "},
|
|
||||||
{"OPSC_4":"1-63","OPS_Gruppen_Text":"Diagnostische Endoskopie des oberen Verdauungstraktes"},
|
|
||||||
{"OPSC_4":"1-65","OPS_Gruppen_Text":"Diagnostische Endoskopie des unteren Verdauungstraktes"},
|
|
||||||
{"OPSC_4":"1-69","OPS_Gruppen_Text":"Diagnostische Endoskopie durch Inzision und intraoperativ "},
|
|
||||||
{"OPSC_4":"5-01","OPS_Gruppen_Text":"Inzision (Trepanation) und Exzision an Schädel, Gehirn und Hirnhäuten"},
|
|
||||||
{"OPSC_4":"5-02","OPS_Gruppen_Text":"Andere Operationen an Schädel, Gehirn und Hirnhäuten"},
|
|
||||||
{"OPSC_4":"5-03","OPS_Gruppen_Text":"Operationen an Rückenmark, Rückenmarkhäuten und Spinalkanal"},
|
|
||||||
{"OPSC_4":"5-05","OPS_Gruppen_Text":"Andere Operationen an Nerven und Nervenganglien "},
|
|
||||||
{"OPSC_4":"5-06","OPS_Gruppen_Text":"Operationen an Schilddrüse und Nebenschilddrüse "},
|
|
||||||
{"OPSC_4":"5-07","OPS_Gruppen_Text":"Operationen an anderen endokrinen Drüsen "},
|
|
||||||
{"OPSC_4":"5-20","OPS_Gruppen_Text":"Andere Operationen an Mittel- und Innenohr "},
|
|
||||||
{"OPSC_4":"5-25","OPS_Gruppen_Text":"Operationen an der Zunge "},
|
|
||||||
{"OPSC_4":"5-31","OPS_Gruppen_Text":"Andere Larynxoperationen und Operationen an der Trachea "},
|
|
||||||
{"OPSC_4":"5-32","OPS_Gruppen_Text":"Exzision und Resektion an Lunge und Bronchus "},
|
|
||||||
{"OPSC_4":"5-33","OPS_Gruppen_Text":"Andere Operationen an Lunge und Bronchus"},
|
|
||||||
{"OPSC_4":"5-34","OPS_Gruppen_Text":"Operationen an Brustwand, Pleura, Mediastinum und Zwerchfell "},
|
|
||||||
{"OPSC_4":"5-37","OPS_Gruppen_Text":"Rhythmuschirurgie und andere Operationen an Herz und Perikard"},
|
|
||||||
{"OPSC_4":"5-38","OPS_Gruppen_Text":"Inzision, Exzision und Verschluß von Blutgefäßen "},
|
|
||||||
{"OPSC_4":"5-39","OPS_Gruppen_Text":"Andere Operationen an Blutgefäßen "},
|
|
||||||
{"OPSC_4":"5-40","OPS_Gruppen_Text":"Operationen am Lymphgewebe "},
|
|
||||||
{"OPSC_4":"5-41","OPS_Gruppen_Text":"Operationen an Milz und Knochenmark "},
|
|
||||||
{"OPSC_4":"5-42","OPS_Gruppen_Text":"Operationen am Ösophagus "},
|
|
||||||
{"OPSC_4":"5-43","OPS_Gruppen_Text":"Inzision, Exzision und Resektion am Magen "},
|
|
||||||
{"OPSC_4":"5-44","OPS_Gruppen_Text":"Erweiterte Magenresektion und andere Operationen am Magen "},
|
|
||||||
{"OPSC_4":"5-45","OPS_Gruppen_Text":"Inzision, Exzision, Resektion und Anastomose an Dünn- und Dickdarm "},
|
|
||||||
{"OPSC_4":"5-46","OPS_Gruppen_Text":"Andere Operationen an Dünn- und Dickdarm "},
|
|
||||||
{"OPSC_4":"5-47","OPS_Gruppen_Text":"Operationen an der Appendix "},
|
|
||||||
{"OPSC_4":"5-48","OPS_Gruppen_Text":"Operationen am Rektum "},
|
|
||||||
{"OPSC_4":"5-49","OPS_Gruppen_Text":"Operationen am Anus "},
|
|
||||||
{"OPSC_4":"5-50","OPS_Gruppen_Text":"Operationen an der Leber "},
|
|
||||||
{"OPSC_4":"5-51","OPS_Gruppen_Text":"Operationen an Gallenblase und Gallenwegen "},
|
|
||||||
{"OPSC_4":"5-52","OPS_Gruppen_Text":"Operationen am Pankreas "},
|
|
||||||
{"OPSC_4":"5-53","OPS_Gruppen_Text":"Verschluß abdominaler Hernien "},
|
|
||||||
{"OPSC_4":"5-54","OPS_Gruppen_Text":"Andere Operationen in der Bauchregion "},
|
|
||||||
{"OPSC_4":"5-55","OPS_Gruppen_Text":"Operationen an der Niere "},
|
|
||||||
{"OPSC_4":"5-56","OPS_Gruppen_Text":"Operationen am Ureter "},
|
|
||||||
{"OPSC_4":"5-57","OPS_Gruppen_Text":"Operationen an der Harnblase "},
|
|
||||||
{"OPSC_4":"5-59","OPS_Gruppen_Text":"Andere Operationen an den Harnorganen "},
|
|
||||||
{"OPSC_4":"5-60","OPS_Gruppen_Text":"Operationen an Prostata und Vesiculae seminales "},
|
|
||||||
{"OPSC_4":"5-61","OPS_Gruppen_Text":"Operationen an Skrotum und Tunica vaginalis testis"},
|
|
||||||
{"OPSC_4":"5-62","OPS_Gruppen_Text":"Operationen am Hoden "},
|
|
||||||
{"OPSC_4":"5-65","OPS_Gruppen_Text":"Operationen am Ovar "},
|
|
||||||
{"OPSC_4":"5-68","OPS_Gruppen_Text":"Inzision, Exzision und Exstirpation des Uterus "},
|
|
||||||
{"OPSC_4":"5-70","OPS_Gruppen_Text":"Operationen an Vagina und Douglasraum "},
|
|
||||||
{"OPSC_4":"5-71","OPS_Gruppen_Text":"Operationen an der Vulva "},
|
|
||||||
{"OPSC_4":"5-85","OPS_Gruppen_Text":"Operationen an Muskeln, Sehnen, Faszien und Schleimbeuteln"},
|
|
||||||
{"OPSC_4":"5-87","OPS_Gruppen_Text":"Exzision und Resektion der Mamma "},
|
|
||||||
{"OPSC_4":"5-89","OPS_Gruppen_Text":"Operationen an Haut und Unterhaut "},
|
|
||||||
{"OPSC_4":"5-90","OPS_Gruppen_Text":"Operative Wiederherstellung und Rekonstruktion von Haut und Unterhaut"},
|
|
||||||
{"OPSC_4":"5-91","OPS_Gruppen_Text":"Andere Operationen an Haut und Unterhaut "},
|
|
||||||
{"OPSC_4":"5-93","OPS_Gruppen_Text":"Angaben zum Transplantat und zu verwendeten Materialien"},
|
|
||||||
{"OPSC_4":"5-98","OPS_Gruppen_Text":"Spezielle Operationstechniken und Operationen bei speziellen Versorgungssituationen "},
|
|
||||||
{"OPSC_4":"8-13","OPS_Gruppen_Text":"Manipulation am Harntrakt"},
|
|
||||||
{"OPSC_4":"8-14","OPS_Gruppen_Text":"Therapeutische Kathedirisierung, Aspiration, Punktion und Spülung "},
|
|
||||||
{"OPSC_4":"8-15","OPS_Gruppen_Text":"Therapeutische Aspiration und Entleerung durch Punktion "},
|
|
||||||
{"OPSC_4":"8-17","OPS_Gruppen_Text":"Spülung (Lavage) "},
|
|
||||||
{"OPSC_4":"8-19","OPS_Gruppen_Text":"Verbände "},
|
|
||||||
{"OPSC_4":"8-77","OPS_Gruppen_Text":"Maßnahmen im Rahmen der Reanimation "},
|
|
||||||
{"OPSC_4":"8-92","OPS_Gruppen_Text":"Neurologisches Monitoring "},
|
|
||||||
])
|
|
||||||
EOF
|
|
||||||
|
|
||||||
OVERRIDE+=" -f ./$PROJECT/modules/ovis-compose.yml"
|
|
||||||
fi
|
|
10
dhki/vars
10
dhki/vars
@ -17,12 +17,4 @@ do
|
|||||||
done
|
done
|
||||||
|
|
||||||
idManagementSetup
|
idManagementSetup
|
||||||
obds2fhirRestSetup
|
obds2fhirRestSetup
|
||||||
|
|
||||||
for module in modules/*.sh
|
|
||||||
do
|
|
||||||
log DEBUG "sourcing $module"
|
|
||||||
source $module
|
|
||||||
done
|
|
||||||
|
|
||||||
transfairSetup
|
|
@ -1,51 +0,0 @@
|
|||||||
|
|
||||||
services:
|
|
||||||
transfair:
|
|
||||||
image: docker.verbis.dkfz.de/cache/samply/transfair:latest
|
|
||||||
container_name: bridgehead-transfair
|
|
||||||
environment:
|
|
||||||
# NOTE: Those 3 variables need only to be passed if their set, otherwise transfair will complain about empty url values
|
|
||||||
- INSTITUTE_TTP_URL
|
|
||||||
- INSTITUTE_TTP_API_KEY
|
|
||||||
- PROJECT_ID_SYSTEM
|
|
||||||
- FHIR_REQUEST_URL=${FHIR_REQUEST_URL}
|
|
||||||
- FHIR_INPUT_URL=${FHIR_INPUT_URL}
|
|
||||||
- FHIR_OUTPUT_URL=${FHIR_OUTPUT_URL:-http://blaze:8080}
|
|
||||||
- FHIR_REQUEST_CREDENTIALS=${FHIR_REQUEST_CREDENTIALS}
|
|
||||||
- FHIR_INPUT_CREDENTIALS=${FHIR_INPUT_CREDENTIALS}
|
|
||||||
- FHIR_OUTPUT_CREDENTIALS=${FHIR_OUTPUT_CREDENTIALS}
|
|
||||||
- EXCHANGE_ID_SYSTEM=${EXCHANGE_ID_SYSTEM:-SESSION_ID}
|
|
||||||
- DATABASE_URL=sqlite://transfair/data_requests.sql?mode=rwc
|
|
||||||
- RUST_LOG=${RUST_LOG:-info}
|
|
||||||
volumes:
|
|
||||||
- /var/cache/bridgehead/${PROJECT}/transfair:/transfair
|
|
||||||
|
|
||||||
transfair-input-blaze:
|
|
||||||
image: docker.verbis.dkfz.de/cache/samply/blaze:0.28
|
|
||||||
container_name: bridgehead-transfair-input-blaze
|
|
||||||
environment:
|
|
||||||
BASE_URL: "http://bridgehead-transfair-input-blaze:8080"
|
|
||||||
JAVA_TOOL_OPTIONS: "-Xmx1024m"
|
|
||||||
DB_BLOCK_CACHE_SIZE: 1024
|
|
||||||
CQL_EXPR_CACHE_SIZE: 8
|
|
||||||
ENFORCE_REFERENTIAL_INTEGRITY: "false"
|
|
||||||
volumes:
|
|
||||||
- "transfair-input-blaze-data:/app/data"
|
|
||||||
profiles: ["transfair-input-blaze"]
|
|
||||||
|
|
||||||
transfair-request-blaze:
|
|
||||||
image: docker.verbis.dkfz.de/cache/samply/blaze:0.28
|
|
||||||
container_name: bridgehead-transfair-requests-blaze
|
|
||||||
environment:
|
|
||||||
BASE_URL: "http://bridgehead-transfair-requests-blaze:8080"
|
|
||||||
JAVA_TOOL_OPTIONS: "-Xmx1024m"
|
|
||||||
DB_BLOCK_CACHE_SIZE: 1024
|
|
||||||
CQL_EXPR_CACHE_SIZE: 8
|
|
||||||
ENFORCE_REFERENTIAL_INTEGRITY: "false"
|
|
||||||
volumes:
|
|
||||||
- "transfair-request-blaze-data:/app/data"
|
|
||||||
profiles: ["transfair-request-blaze"]
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
transfair-input-blaze-data:
|
|
||||||
transfair-request-blaze-data:
|
|
@ -1,22 +0,0 @@
|
|||||||
#!/bin/bash -e
|
|
||||||
|
|
||||||
function transfairSetup() {
|
|
||||||
if [[ -n "$INSTITUTE_TTP_URL" || -n "$EXCHANGE_ID_SYSTEM" ]]; then
|
|
||||||
echo "Starting transfair."
|
|
||||||
OVERRIDE+=" -f ./modules/transfair-compose.yml"
|
|
||||||
if [ -n "$FHIR_INPUT_URL" ]; then
|
|
||||||
log INFO "TransFAIR input fhir store set to external $FHIR_INPUT_URL"
|
|
||||||
else
|
|
||||||
log INFO "TransFAIR input fhir store not set writing to internal blaze"
|
|
||||||
FHIR_INPUT_URL="http://transfair-input-blaze:8080"
|
|
||||||
OVERRIDE+=" --profile transfair-input-blaze"
|
|
||||||
fi
|
|
||||||
if [ -n "$FHIR_REQUEST_URL" ]; then
|
|
||||||
log INFO "TransFAIR request fhir store set to external $FHIR_REQUEST_URL"
|
|
||||||
else
|
|
||||||
log INFO "TransFAIR request fhir store not set writing to internal blaze"
|
|
||||||
FHIR_REQUEST_URL="http://transfair-requests-blaze:8080"
|
|
||||||
OVERRIDE+=" --profile transfair-request-blaze"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
Reference in New Issue
Block a user