#!/bin/bash

MGRDIR="/usr/local/mgr5"
. ${MGRDIR}/etc/docker/funcs.sh

exec_clickhouse_command () {
  docker exec billmgr_analytics clickhouse-client -q "$1"
}

prepare_storage () {
  # Включаем SQL-упрвление пользователями
  docker cp billmgr_analytics:/etc/clickhouse-server/users.xml ./ch_users.xml
  sed 's|<!-- <access_management>1</access_management> -->|<access_management>1</access_management>|g' ./ch_users.xml > ./fix_ch_users.xml
  docker cp ./fix_ch_users.xml billmgr_analytics:/etc/clickhouse-server/users.xml 

  # Ждем пока сервер поднимется
  # ToDo (i.gubanov) сделать ожидание более умным
  sleep 5

  # Создаем пользователя и БД
  exec_clickhouse_command "CREATE USER OR REPLACE billmgr IDENTIFIED WITH PLAINTEXT_PASSWORD BY '$1';"
  exec_clickhouse_command "CREATE DATABASE IF NOT EXISTS billmgr"
  exec_clickhouse_command "GRANT ALL PRIVILEGES ON billmgr.* TO billmgr"

  # Отключаем SQL-упрвление пользователями и чистим за собой
  docker cp ./ch_users.xml billmgr_analytics:/etc/clickhouse-server/users.xml
  rm -rf ./ch_users.xml ./fix_ch_users.xml
}

CONF=${MGRDIR}/etc/analytics/conf.json
if [ ! -f $CONF ]; then
	docker_image_pull docker-registry.ispsystem.com/team/common/clickhouse:0.0.2

  # Создаем раздел для монтирования контейнера
  MOUNT_DIR=${MGRDIR}/var/billmgr_analytics
  mkdir -p $MOUNT_DIR
  docker run -d --name billmgr_analytics\
  --restart unless-stopped\
  --ulimit nofile=262144:262144\
  --volume $MOUNT_DIR:/var/lib/clickhouse\
  --publish 127.0.0.1:8123:8123\
  --publish 127.0.0.1:9000:9000\
  --publish 127.0.0.1:9004:9004 docker-registry.ispsystem.com/team/common/clickhouse:0.0.2

  PASSWORD=$(cat /dev/urandom | tr -dc '[:alpha:]' | fold -w ${1:-10} | head -n 1)
  echo "Generated pass $PASSWORD"
  prepare_storage "$PASSWORD"

  # Генерируем конфиг
  mkdir -p "$(dirname $CONF)"
  echo "{
  \"host\" : \"127.0.0.1\",
  \"port\" : \"9000\",
  \"mysql_port\" : \"9004\",
  \"http_port\" : \"8123\",
  \"database\" : \"billmgr\",
  \"username\": \"billmgr\",
  \"password\": \"$PASSWORD\"
}" > $CONF

fi
