version: "3.7"

services:

  exporter:
    image: docker.verbis.dkfz.de/ccp/dktk-exporter:latest
    container_name: bridgehead-kr-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: "/kr-exporter"
      SITE: "${SITE_ID}"
      HTTP_SERVLET_REQUEST_SCHEME: "https"
      OPAL_PASSWORD: "${EXPORTER_OPAL_PASSWORD}"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.exporter_kr.rule=PathPrefix(`/kr-exporter`)"
      - "traefik.http.services.exporter_kr.loadbalancer.server.port=8092"
      - "traefik.http.routers.exporter_kr.tls=true"
      - "traefik.http.middlewares.exporter_kr_strip.stripprefix.prefixes=/kr-exporter"
      - "traefik.http.routers.exporter_kr.middlewares=exporter_kr_strip"
      # Main router
      - "traefik.http.routers.exporter_kr.priority=20"

      # API router
      - "traefik.http.routers.exporter_kr_api.middlewares=exporter_kr_strip,exporter_auth"
      - "traefik.http.routers.exporter_kr_api.rule=PathRegexp(`/kr-exporter/.+`)"
      - "traefik.http.routers.exporter_kr_api.tls=true"
      - "traefik.http.routers.exporter_kr_api.priority=25"

      # Shared middlewares
      - "traefik.http.middlewares.exporter_auth.basicauth.users=${EXPORTER_USER}"

    volumes:
      - "/var/cache/bridgehead/kr/exporter-files:/app/exporter-files/output"

  exporter-db:
    image: docker.verbis.dkfz.de/cache/postgres:${POSTGRES_TAG}
    container_name: bridgehead-kr-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/kr/exporter-db:/var/lib/postgresql/data"

  reporter:
    image: docker.verbis.dkfz.de/ccp/dktk-reporter:latest
    container_name: bridgehead-kr-reporter
    environment:
      JAVA_OPTS: "-Xms1G -Xmx8G -XX:+UseG1GC"
      LOG_LEVEL: "INFO"
      CROSS_ORIGINS: "https://${HOST}"
      HTTP_RELATIVE_PATH: "/kr-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 kr 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/kr/reporter-files:/app/reports"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.reporter_kr.rule=PathPrefix(`/kr-reporter`)"
      - "traefik.http.services.reporter_kr.loadbalancer.server.port=8095"
      - "traefik.http.routers.reporter_kr.tls=true"
      - "traefik.http.middlewares.reporter_kr_strip.stripprefix.prefixes=/kr-reporter"
      - "traefik.http.routers.reporter_kr.middlewares=reporter_kr_strip"
      - "traefik.http.routers.reporter_kr.priority=20"

      - "traefik.http.routers.reporter_kr_api.middlewares=reporter_kr_strip,exporter_auth"
      - "traefik.http.routers.reporter_kr_api.rule=PathRegexp(`/kr-reporter/.+`)"
      - "traefik.http.routers.reporter_kr_api.tls=true"
      - "traefik.http.routers.reporter_kr_api.priority=25"

