################################################################################
#  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.
################################################################################

version: '3'
services:
  postgresql:
    image: postgres
    ports:
      - "5432:5432"
    container_name: beampostgresql
    volumes:
      - beam-postgresql-data:/var/lib/postgresql/data
      - ./postgres:/docker-entrypoint-initdb.d
    environment:
      - POSTGRES_USER=admin
      - POSTGRES_PASSWORD=<PGPasswordHere>
      - POSTGRES_DB=beam_metrics
  influxdb:
    image: influxdb:1.8.0
    ports:
      - "8086:8086"
      - "8088:8088"
    expose:
      - 8086
    container_name: influxdb
    volumes:
      - beam-influxdb-storage:/var/lib/influxdb
    environment:
      - INFLUXDB_BIND_ADDRESS=:8088
  influxdb-restore:
    build: ./influxdb
    depends_on:
      - influxdb
    container_name: restore-backup
    entrypoint: "sh"
    command: ["-c", "./wait-for-it.sh influxdb:8086 -t 60 && \
              influxd restore -portable -host influxdb:8088 /backup"]
  grafana:
    image: beamgrafana
    build: ./grafana
    ports:
      - "3000:3000"
    container_name: beamgrafana
    volumes:
      - beam-grafana-libdata:/var/lib/grafana
      - beam-grafana-etcdata:/etc/grafana
      - beam-grafana-logdata:/var/log/grafana
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=<GrafanaPasswordHere>
      - GF_AUTH_ANONYMOUS_ENABLED=true
      - GF_AUTH_ANONYMOUS_ORG_NAME=Beam
      - GF_INSTALL_PLUGINS=marcusolsson-json-datasource
      - PSQL_DB_HOST=beampostgresql
      - PSQL_DB_PORT=5432
      - PSQL_DB_DBNAME=beam_metrics
      - PSQL_DB_DBUSERNAME=admin
      - PSQL_DB_DBPWD=<PGPasswordHere>
      - INFLUX_DB_HOST=influxdb
      - INFLUX_DB_PORT=8086
      - INFLUX_DB_DBNAME=beam_test_metrics
  syncgithub:
    image: syncgithub
    container_name: beamsyncgithub
    build:
      context: ./sync/github
      dockerfile: Dockerfile
    environment:
      - DB_HOST=beampostgresql
      - DB_PORT=5432
      - DB_DBNAME=beam_metrics
      - DB_DBUSERNAME=admin
      - DB_DBPWD=<PGPasswordHere>
      - GH_ACCESS_TOKEN=<GithubAccessToken>
  syncjenkins:
    image: syncjenkins
    container_name: beamsyncjenkins
    build:
      context: ./sync/jenkins
      dockerfile: Dockerfile
    environment:
      - DB_HOST=beampostgresql
      - DB_PORT=5432
      - DB_DBNAME=beam_metrics
      - DB_DBUSERNAME=admin
      - DB_DBPWD=<PGPasswordHere>
  syncjira:
    image: syncjira
    container_name: beamsyncjira
    build:
      context: ./sync/jira
      dockerfile: Dockerfile
    environment:
      - DB_HOST=beampostgresql
      - DB_PORT=5432
      - DB_DBNAME=beam_metrics
      - DB_DBUSERNAME=admin
      - DB_DBPWD=<PGPasswordHere>
volumes:
  beam-postgresql-data:
  beam-grafana-libdata:
  beam-grafana-etcdata:
  beam-grafana-logdata:
  beam-influxdb-storage:
