# Kafka and Zookeeper
FROM openjdk:11-jre
ARG DEBIAN_FRONTEND=noninteractive
ENV SCALA_VERSION 2.12
ENV KAFKA_VERSION 2.6.2
ENV KAFKA_HOME /opt/kafka_"$SCALA_VERSION"-"$KAFKA_VERSION"
ENV MONGO_VERSION 4.4.5
ENV SLK_DB_VERSION 3.0.380
RUN printf "Acquire::http::Pipeline-Depth 0;\nAcquire::http::No-Cache true;\nAcquire::BrokenProxy true;" > /etc/apt/apt.conf.d/99fixbadproxy
# Install Kafka, Zookeeper and other needed things
RUN \
    apt-get update && \
    apt-get install -y zookeeper wget supervisor dnsutils procps netcat vim net-tools && \
    rm -rf /var/lib/apt/lists/* && \
    apt-get clean
RUN \
    wget -q http://apache.mirrors.spacedump.net/kafka/"$KAFKA_VERSION"/kafka_"$SCALA_VERSION"-"$KAFKA_VERSION".tgz -O /tmp/kafka_"$SCALA_VERSION"-"$KAFKA_VERSION".tgz && \
    tar xfz /tmp/kafka_"$SCALA_VERSION"-"$KAFKA_VERSION".tgz -C /opt && \
    rm /tmp/kafka_"$SCALA_VERSION"-"$KAFKA_VERSION".tgz
# Mongo
RUN \
    wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | apt-key add - && \
    echo "deb https://repo.mongodb.org/apt/debian buster/mongodb-org/4.4 main" > /etc/apt/sources.list.d/mongodb-org-4.4.list && \
    apt-get update && \
    apt-get --allow-unauthenticated install -y mongodb-org=$MONGO_VERSION \
        mongodb-org-server=$MONGO_VERSION \
        mongodb-org-shell=$MONGO_VERSION \
        mongodb-org-mongos=$MONGO_VERSION \
        mongodb-org-tools=$MONGO_VERSION && \
    echo "replication:" >> /etc/mongod.conf && \
    echo "  replSetName: rs1" >> /etc/mongod.conf && \
    sed -i /etc/mongod.conf -e 's/127.0.0.1/0.0.0.0/' && \
    rm -rf /var/lib/apt/lists/* && \
    apt-get clean
ADD start-kafka.sh /usr/bin/start-kafka.sh
# add job coordination queue
RUN \
    /usr/share/zookeeper/bin/zkServer.sh start && \
    ( /usr/bin/start-kafka.sh & ) && \
    while ! nc -z localhost 9092; do sleep 1; done && \
    $KAFKA_HOME/bin/kafka-topics.sh --zookeeper localhost:2181 --create --partitions 1 --replication-factor 1 --topic job-coordination && \
    $KAFKA_HOME/bin/kafka-topics.sh --zookeeper localhost:2181 --create --partitions 1 --replication-factor 1 --topic vfs-coordination && \
    # add stores topic
    $KAFKA_HOME/bin/kafka-topics.sh --zookeeper localhost:2181 --create --partitions 1 --replication-factor 1 --topic stores && \
    $KAFKA_HOME/bin/kafka-topics.sh --zookeeper localhost:2181 --create --partitions 1 --replication-factor 1 --topic vfs-cache && \
    $KAFKA_HOME/bin/kafka-topics.sh --zookeeper localhost:2181 --create --partitions 1 --replication-factor 1 --topic constellation-config && \
    $KAFKA_HOME/bin/kafka-server-stop.sh && \
    # allow zookeeper node for this kafka broker to expire - takes 3 seconds
    /usr/share/zookeeper/bin/zkServer.sh start && \
    sleep 10  && \
    /usr/share/zookeeper/bin/zkServer.sh stop
# Supervisor config
ADD kafka.conf zookeeper.conf mongod.conf /etc/supervisor/conf.d/
ADD reset_jobs.sh /reset_jobs.sh
ADD reset_jobs.js /reset_jobs.js
RUN \
    chmod a+x /reset_jobs.sh
# 2181 is zookeeper, 9092 is kafka, 27017 is mongo
EXPOSE 2181 9092 27017
CMD ["supervisord", "-n"]
