#!/bin/bash

set -e

. ./STANDALONE-SERVER/_mongodb_standalone_common.bash

PID_FILE="$GS_MONGODB_STANDALONE_RUN_DIR/mongod.pid"
LOG_FILE="$GS_MONGODB_STANDALONE_LOG_DIR/mongod.log"

gs_mongodb_start_guard "MongoDB standalone server" "$PID_FILE"

echo "Starting MongoDB standalone server:"
echo "  port: $GS_MONGODB_PORT"
echo "  data: $GS_MONGODB_STANDALONE_DATA_DIR"
echo "  log:  $LOG_FILE"

mongod \
    --port "$GS_MONGODB_PORT" \
    --bind_ip "$GS_MONGODB_STANDALONE_BIND_IP" \
    --dbpath "$GS_MONGODB_STANDALONE_DATA_DIR" \
    --logpath "$LOG_FILE" \
    --logappend \
    --pidfilepath "$PID_FILE" \
    --fork

elapsed=0
while [ "$elapsed" -lt "$GS_MONGODB_STANDALONE_START_TIMEOUT" ]; do
    if "$GS_MONGODB_SHELL" \
        --quiet \
        --host "$GS_MONGODB_STANDALONE_CONNECT_HOST" \
        --port "$GS_MONGODB_PORT" \
        --eval 'quit(db.getSiblingDB("admin").runCommand({ping:1}).ok === 1 ? 0 : 1)' \
        >/dev/null 2>&1
    then
        echo "MongoDB standalone server is accepting connections."
        exit 0
    fi
    sleep 1
    elapsed=$((elapsed + 1))
done

echo "MongoDB started, but did not answer within ${GS_MONGODB_STANDALONE_START_TIMEOUT}s." >&2
echo "Check: $LOG_FILE" >&2
exit 1
