# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Apache SensSoft Single-Node Build

version: "3"
services:

  # Startup
  startup:
    build: ./startup
    depends_on:
      - "loadbalancer"
    command: bash /opt/entrypoint.sh

  # Site
  site:
    build: ./site
    ports:
      - 8080:8080
    depends_on:
      - "logstash"
    command: python -m SimpleHTTPServer 8080

  # Elasticsearch
  loadbalancer:
    build: ./elasticsearch/5.6.3
    environment:
      - NODE_MASTER=true
      - NUMBER_OF_MASTERS=1
      - NODE_COORDINATE=true
      - "DISCOVERY_SERVICE=0.0.0.0"
      - NODE_DATA=true
      - NODE_INGEST=true
      - MAX_LOCAL_STORAGE_NODES=1
      - NETWORK_HOST=0.0.0.0
      - HTTP_ENABLE=true
      - HTTP_CORS_ENABLE=true
      - HTTP_CORS_ALLOW_ORIGIN=*
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ports:
      - "9200:9200"
    networks:
      - esnet

  # Kibana
  kibana:
    build: ./kibana/5.6.3
    environment:
      - "ES_JAVA_OPTS=-Xms2g -Xmx2g"
      - "ELASTICSEARCH_URL=http://elasticsearch:9200"
    ports:
      - "5601:5601"
    depends_on:
      - "elasticsearch"
    networks:
      - esnet

  # Logstash
  logstash:
    build: ./logstash/5.6.3
    environment:
      - "ELASTICSEARCH_URL=elasticsearch:9200"
    ports:
      - 8100:8100
    depends_on:
      - "elasticsearch"
    networks:
      - esnet

  # Distill
  distill:
     build: ./distill
     ports:
       - 8090:8090
     depends_on:
       - "loadbalancer"
     networks:
       - esnet

  # TAP's Database
  db:
     build: ./db
     image: senssoft/postgres:latest
     ports:
       - "5432:5432"

  # TAP
  tap:
     build: ./tap
     command: bash -c "/usr/src/app/wait-for-postgres.sh"
     ports:
       - "8010:8010"
     depends_on:
       - db
     links:
       - db:db


networks:
  esnet:
    driver: bridge
