# 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:
      - "elasticsearch"
    command: bash /opt/entrypoint.sh

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

  # Elasticsearch
  elasticsearch:
    build: ./elasticsearch/6.2.2
    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"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    healthcheck:
      test: ["CMD", "curl","-s" ,"-f", "-u", "http://localhost:9200/_cluster/health"]
    # Mount volumes to backup elasticsearch data
#    volumes:
#      - esdata:/usr/share/elasticsaerch/data
    ports:
      - "9200:9200"
    networks:
      - esnet

  # Kibana
  kibana:
    build: ./kibana/6.2.2
    environment:
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "ELASTICSEARCH_URL=http://elasticsearch:9200"
    ports:
      - "5601:5601"
    depends_on:
      - "elasticsearch"
    networks:
      - esnet

  # Logstash
  logstash:
    build: ./logstash/6.2.2
    environment:
      - "ELASTICSEARCH_URL=elasticsearch:9200"
    ports:
      - 8100:8100
    volumes:
      - ./logstash/6.2.2/pipeline/logstash-userale.conf:/usr/share/logstash/pipeline/logstash-userale.conf
      - ./logstash/6.2.2/templates/userale.json:/usr/share/logstash/templates/userale.json
    depends_on:
      - "elasticsearch"
    networks:
      - esnet

  # Distill
  distill:
     build: ./distill
     ports:
       - 8090:8090
     depends_on:
       - "elasticsearch"
     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

  # Specific container and configuration to monitor the HOST (filesystem, memory, processes,...)
  metricbeat:
    image: docker.elastic.co/beats/metricbeat:6.2.4
#    restart: unless-stopped
    user: root
    pid: host
    volumes:
      #The commented sections below enable Metricbeat to monitor the Docker host
      #rather than the Metricbeat container. These are used by the system module.
      - /proc:/hostfs/proc:ro
      - /sys/fs/cgroup:/hostfs/sys/fs/cgroup:ro
      #We mount the host filesystem so we can report on disk usage with the system module
      - /:/hostfs:ro
      #Mount the metricbeat configuration so users can make edits
      - ./beats/metricbeat/metricbeat.yml:/usr/share/metricbeat/metricbeat.yml
      #Mount the modules.d directory into the container. This allows user to 
      #potentially make changes to the modules and they will be dynamically loaded.
      - ./beats/metricbeat/modules.d/:/usr/share/metricbeat/modules.d/
      #Allows us to report on docker from the hosts information
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - elasticsearch
    environment:
      - ELASTICSEARCH_URL=http://elasticsearch:9200
      - KIBANA_URL=http://kibana:5601
      - LOGSTASH_URL=http://logstash:9600
      - POSTGRESQL_URL="postgresql://db:5432/tapdb?sslmode=disable"
      - POSTGRESQL_USERNAME=tapuser
      - POSTGRESQL_PASSWORD="Dr@p3rUs3r"
    extra_hosts:
      - "elasticsearch:172.17.0.1" # The IP of docker0 interface to access host from container
      - "kibana:172.17.0.1" # The IP of docker0 interface to access host from container
      - "logstash:172.17.0.1"
      - "db:172.17.0.1"
    command: metricbeat -e -system.hostfs=/hostfs -strict.perms=false
    network_mode: host # Mandatory to monitor HOST filesystem, memory, processes,...

networks:
  esnet:
    external:
      name: esnet
