version: "2.2"

x-superset-image: &superset-image apache/superset:${TAG:-latest-dev}
x-superset-depends-on: &superset-depends-on
  - db
  - redis_superset
x-superset-volumes: &superset-volumes
  # /app/pythonpath_docker will be appended to the PYTHONPATH in the final container
  - ${PORTAINER_GIT_DIR}/docker/superset:/app/docker
  - superset_home:/app/superset_home

services:
  app:
    image: pathogen/monolith:latest
    container_name: monolith
    build: ./docker
    volumes:
      - ${PORTAINER_GIT_DIR}:/code
    env_file:
      - .env
    volumes_from:
      - tmp
    depends_on:
      druid:
        condition: service_started
      kafka:
        condition: service_healthy
      tmp:
        condition: service_started
      redis:
        condition: service_healthy
    #   - db

  threshold:
    image: pathogen/threshold:latest
    container_name: threshold
    build: ./legacy/docker
    volumes:
      - ${PORTAINER_GIT_DIR}:/code
      - ${THRESHOLD_CONFIG_DIR}:/code/legacy/conf/live
      #- ${THRESHOLD_TEMPLATE_DIR}:/code/conf/templates
      - ${THRESHOLD_CERT_DIR}:/code/legacy/conf/cert
    ports:
      - "${THRESHOLD_LISTENER_PORT}:${THRESHOLD_LISTENER_PORT}"
      - "${THRESHOLD_RELAY_PORT}:${THRESHOLD_RELAY_PORT}"
      - "${THRESHOLD_API_PORT}:${THRESHOLD_API_PORT}"
    env_file:
      - .env
    # for development
    extra_hosts:
      - "host.docker.internal:host-gateway"
    volumes_from:
        - tmp
    depends_on:
      tmp:
        condition: service_started
      redis:
        condition: service_healthy

  # db:
    #image: pathogen/manticore:kibana
    # image: manticoresearch/manticore:latest
    #build: 
    #  context: ./docker/manticore
    #  args:
    #    DEV: 1
    # restart: always

  # turnilo:
  #   container_name: turnilo
  #   image: uchhatre/turnilo:latest
  #   ports:
  #     - 9093:9090
  #   environment:
  #     - DRUID_BROKER_URL=http://broker:8082
  #     - CONFIG_FILE=/config.yaml
  #   volumes:
  #     - ${PORTAINER_GIT_DIR}/docker/turnilo.yaml:/config.yaml
  #   depends_on:
  #     - broker

  # metabase:
  #   container_name: metabase
  #   image: metabase/metabase:latest
  #   ports:
  #     - 3096:3000
  #   environment:
  #     JAVA_OPTS: -Xmx1g
  #     MB_DB_TYPE: postgres
  #     MB_DB_DBNAME: metabase
  #     MB_DB_PORT: 5432
  #     MB_DB_USER: druid
  #     MB_DB_PASS: FoolishPassword
  #     MB_DB_HOST: postgres
  #   depends_on:
  #     - broker

  redis_superset:
    image: redis:latest
    container_name: superset_cache
    restart: unless-stopped
    volumes:
      - redis_superset:/data
  db:
    env_file: docker/.env-non-dev
    image: postgres:10
    container_name: superset_db
    restart: unless-stopped
    volumes:
      - db_home:/var/lib/postgresql/data

  superset:
    env_file: docker/.env-non-dev
    image: *superset-image
    container_name: superset_app
    command: ["/app/docker/docker-bootstrap.sh", "app-gunicorn"]
    user: "root"
    restart: unless-stopped
    ports:
      - 8088:8088
    depends_on: *superset-depends-on
    volumes: *superset-volumes

  superset-init:
    image: *superset-image
    container_name: superset_init
    command: ["/app/docker/docker-init.sh"]
    env_file: docker/.env-non-dev
    depends_on: *superset-depends-on
    user: "root"
    volumes: *superset-volumes

  superset-worker:
    image: *superset-image
    container_name: superset_worker
    command: ["/app/docker/docker-bootstrap.sh", "worker"]
    env_file: docker/.env-non-dev
    restart: unless-stopped
    depends_on: *superset-depends-on
    user: "root"
    volumes: *superset-volumes

  superset-worker-beat:
    image: *superset-image
    container_name: superset_worker_beat
    command: ["/app/docker/docker-bootstrap.sh", "beat"]
    env_file: docker/.env-non-dev
    restart: unless-stopped
    depends_on: *superset-depends-on
    user: "root"
    volumes: *superset-volumes

  postgres:
    container_name: postgres
    image: postgres:latest
    volumes:
      - metadata_data:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: FoolishPassword
      POSTGRES_USER: druid
      POSTGRES_DB: druid

  # Need 3.5 or later for container nodes
  zookeeper:
    container_name: zookeeper
    image: zookeeper:3.5
    ports:
      - "2181:2181"
    environment:
      - ZOO_MY_ID=1

  kafka:
    image: wurstmeister/kafka:latest
    container_name: kafka
    depends_on:
      - zookeeper
    ports:
      - 9092:9092
      - 29092:29092
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
      KAFKA_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true'
      KAFKA_MESSAGE_MAX_BYTES: 2000000
      #KAFKA_HEAP_OPTS: -Xmx2g
    healthcheck:
      test: ["CMD", "kafka-topics.sh", "--list", "--bootstrap-server", "kafka:9092"]
      start_period: 15s
      interval: 30s
      timeout: 30s
      retries: 45

  druid:
    image: pathogen/druid:0.23.0
    build: ./docker/druid/
    container_name: druid
    volumes:
      - druid_shared:/opt/shared
      - druid_var:/opt/druid/var
    depends_on: 
      - zookeeper
      - postgres
    ports:
      - "8081:8081"
      - "8082:8082"
      - "8083:8083"
      - "8888:8888"
    env_file:
      - environment

  # coordinator:
  #   #image: apache/druid:0.23.0
  #   image: pathogen/druid:0.23.0
  #   build: ./docker/druid/
  #   container_name: coordinator
  #   volumes:
  #     - druid_shared:/opt/shared
  #     - coordinator_var:/opt/druid/var
  #   depends_on: 
  #     - zookeeper
  #     - postgres
  #   ports:
  #     - "8081:8081"
  #   command:
  #     - coordinator
  #   env_file:
  #     - environment

  # broker:
  #   #image: apache/druid:0.23.0
  #   image: pathogen/druid:0.23.0
  #   build: ./docker/druid/
  #   container_name: broker
  #   volumes:
  #     - broker_var:/opt/druid/var
  #   depends_on: 
  #     - zookeeper
  #     - postgres
  #     - coordinator
  #   ports:
  #     - "8082:8082"
  #   command:
  #     - broker
  #   env_file:
  #     - environment

  # historical:
  #   #image: apache/druid:0.23.0
  #   image: pathogen/druid:0.23.0
  #   build: ./docker/druid/
  #   container_name: historical
  #   volumes:
  #     - druid_shared:/opt/shared
  #     - historical_var:/opt/druid/var
  #   depends_on: 
  #     - zookeeper
  #     - postgres
  #     - coordinator
  #   ports:
  #     - "8083:8083"
  #   command:
  #     - historical
  #   env_file:
  #     - environment

  # middlemanager:
  #   #image: apache/druid:0.23.0
  #   image: pathogen/druid:0.23.0
  #   build: ./docker/druid/
  #   container_name: middlemanager
  #   volumes:
  #     - druid_shared:/opt/shared
  #     - middle_var:/opt/druid/var
  #   depends_on: 
  #     - zookeeper
  #     - postgres
  #     - coordinator
  #   ports:
  #     - "8091:8091"
  #     - "8100-8105:8100-8105"
  #   command:
  #     - middleManager
  #   env_file:
  #     - environment

  # router:
  #   #image: apache/druid:0.23.0
  #   image: pathogen/druid:0.23.0
  #   build: ./docker/druid/
  #   container_name: router
  #   volumes:
  #     - router_var:/opt/druid/var
  #   depends_on:
  #     - zookeeper
  #     - postgres
  #     - coordinator
  #   ports:
  #     - "8888:8888"
  #   command:
  #     - router
  #   env_file:
  #     - environment

  # db:
  #   #image: pathogen/manticore:kibana
  #   image: manticoresearch/manticore:dev
  #   #build: 
  #   #  context: ./docker/manticore
  #   #  args:
  #   #    DEV: 1
  #   restart: always
  #   ports:
  #     - 9308
  #     - 9312
  #     - 9306
  #   ulimits:
  #     nproc: 65535
  #     nofile:
  #        soft: 65535
  #        hard: 65535
  #     memlock:
  #       soft: -1
  #       hard: -1
  #   environment:
  #     - MCL=1
  #   volumes:
  #     - ./docker/data:/var/lib/manticore
  #     - ./docker/manticore.conf:/etc/manticoresearch/manticore.conf

  tmp:
    image: busybox
    command: chmod -R 777 /var/run/redis
    volumes:
        - /var/run/redis

  redis:
    image: redis
    command: redis-server /etc/redis.conf
    ulimits:
      nproc: 65535
      nofile:
         soft: 65535
         hard: 65535
    volumes:
      - ${PORTAINER_GIT_DIR}/docker/redis.conf:/etc/redis.conf
      - redis_data:/data
    volumes_from:
      - tmp
    healthcheck:
      test: "redis-cli -s /var/run/redis/redis.sock ping"
      interval: 2s
      timeout: 2s
      retries: 15

networks:
   default:
      external:
         name: pathogen

volumes:
  superset_home:
    external: false
  db_home:
    external: false
  redis_superset:
    external: false
  redis_data: {}
  metadata_data: {}
  # middle_var: {}
  # historical_var: {}
  # broker_var: {}
  # coordinator_var: {}
  druid_var: {}
  druid_shared: {}