# 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: "2"

services:
  redis:
    image: redis:7.0.4-alpine
    ports:
      - "6379:6379"

  datastore:
    build: "./backend/containers/router/datastore"
    environment:
      DATASTORE_PROJECT_ID: test
      DATASTORE_LISTEN_ADDRESS: 0.0.0.0:8081
    ports:
      - "8081:8081"

  cleanup_snippets:
    build:
      context: ./backend
      dockerfile: ./playground_functions/Dockerfile
    environment:
      GOOGLE_CLOUD_PROJECT: test
      DATASTORE_EMULATOR_HOST: datastore:8081
      FUNCTION_TARGET: cleanupSnippets
    expose:
      - "8080"
    depends_on:
      - datastore

  put_snippet:
    build:
      context: ./backend
      dockerfile: ./playground_functions/Dockerfile
    environment:
      GOOGLE_CLOUD_PROJECT: test
      DATASTORE_EMULATOR_HOST: datastore:8081
      FUNCTION_TARGET: putSnippet
    expose:
      - "8080"
    depends_on:
      - datastore

  increment_snippet_views:
    build:
      context: ./backend
      dockerfile: ./playground_functions/Dockerfile
    environment:
      GOOGLE_CLOUD_PROJECT: test
      DATASTORE_EMULATOR_HOST: datastore:8081
      FUNCTION_TARGET: incrementSnippetViews
    expose:
      - "8080"
    depends_on:
      - datastore

  router:
    image: apache/beam_playground-backend-router
    environment:
      GOOGLE_CLOUD_PROJECT: test
      DATASTORE_EMULATOR_HOST: datastore:8081
      CACHE_TYPE: remote
      CACHE_ADDRESS: redis:6379
      SDK_CONFIG: /opt/playground/backend/sdks-emulator.yaml
      SERVER_PORT: 8082
      APPLY_MIGRATIONS: "True"
    ports:
      - "8082:8082"
    depends_on:
      - redis
      - datastore
      - increment_snippet_views
      - put_snippet
      - cleanup_snippets

  go_runner:
    image: apache/beam_playground-backend-go
    environment:
      GOOGLE_CLOUD_PROJECT: test
      CACHE_TYPE: remote
      CACHE_ADDRESS: redis:6379
      SERVER_PORT: 8084
    ports:
      - "8084:8084"
    depends_on:
      - redis

  java_runner:
    image: apache/beam_playground-backend-java
    environment:
      GOOGLE_CLOUD_PROJECT: test
      CACHE_TYPE: remote
      CACHE_ADDRESS: redis:6379
      SERVER_PORT: 8086
    ports:
      - "8086:8086"
    depends_on:
      - redis

  python_runner:
    image: apache/beam_playground-backend-python
    environment:
      GOOGLE_CLOUD_PROJECT: test
      CACHE_TYPE: remote
      CACHE_ADDRESS: redis:6379
      SERVER_PORT: 8088
    ports:
      - "8088:8088"
    depends_on:
      - redis

  scio_runner:
    image: apache/beam_playground-backend-scio
    environment:
      GOOGLE_CLOUD_PROJECT: test
      CACHE_TYPE: remote
      CACHE_ADDRESS: redis:6379
      SERVER_PORT: 8090
    ports:
      - "8090:8090"
    depends_on:
      - redis
    # Impose limits on container to better mimic real deployment environment
    mem_limit: 2048M
    ulimits:
      rss: 1073741824

  frontend:
    image: apache/beam_playground-frontend
    ports:
      - "1234:8080"
    depends_on:
      - router
