# 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 Flagon 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.6.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.6.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.6.2
    environment:
      - "ELASTICSEARCH_URL=elasticsearch:9200"
    ports:
      - 8100:8100
    volumes:
      - ./logstash/6.6.2/pipeline/logstash-userale.conf:/usr/share/logstash/pipeline/logstash-userale.conf
      - ./logstash/6.6.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-oss:6.6.2
#    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
