#!/bin/sh

set -e

[ -f /etc/sysconfig/grafana-server ] && . /etc/sysconfig/grafana-server

startGrafana() {
  systemctl daemon-reload
  systemctl start grafana-server.service || :
}

stopGrafana() {
  systemctl stop grafana-server.service > /dev/null 2>&1 || :
}

case "$1" in
  ''|*[!0-9]*) exit 0 ;;
esac

# Initial installation: $1 == 1
# Upgrade: $1 == 2, and configured to restart on upgrade
if [ "$1" -eq 1 ] ; then
  [ -z "$GRAFANA_USER" ] && GRAFANA_USER="grafana"
  [ -z "$GRAFANA_GROUP" ] && GRAFANA_GROUP="grafana"
  [ -z "$GRAFANA_HOME" ] && GRAFANA_HOME="/usr/share/grafana"
  [ -z "$DATA_DIR" ] && DATA_DIR="/var/lib/grafana"
  [ -z "$CONF_FILE" ] && CONF_FILE="/etc/grafana/grafana.ini"
  [ -z "$PROVISIONING_CFG_DIR" ] && PROVISIONING_CFG_DIR="/etc/grafana/provisioning"
  if ! getent group "$GRAFANA_GROUP" > /dev/null 2>&1 ; then
    groupadd -r "$GRAFANA_GROUP"
  fi
  if ! getent passwd "$GRAFANA_USER" > /dev/null 2>&1 ; then
    useradd -r -g "$GRAFANA_GROUP" -d /usr/share/grafana -s /sbin/nologin \
      -c "grafana user" "$GRAFANA_USER"
  fi

  # Set user permissions on /var/log/grafana, /var/lib/grafana
  mkdir -p /var/log/grafana /var/lib/grafana
  # Move plugins-bundled into place - see https://github.com/grafana/grafana/issues/123110
  if [ -d "$GRAFANA_HOME/data/plugins-bundled" ]; then
    mkdir -p "$DATA_DIR"
    rm -rf "${DATA_DIR:?}/plugins-bundled"
    mv "$GRAFANA_HOME/data/plugins-bundled" "$DATA_DIR"
    chown -R "$GRAFANA_USER":"$GRAFANA_GROUP" "$DATA_DIR/plugins-bundled"
  fi
  chown -R "$GRAFANA_USER":"$GRAFANA_GROUP" /var/log/grafana /var/lib/grafana
  chmod 755 /var/log/grafana /var/lib/grafana

  # copy user config files
  if [ ! -f "$CONF_FILE" ]; then
    cp /usr/share/grafana/conf/sample.ini "$CONF_FILE"
    cp /usr/share/grafana/conf/ldap.toml /etc/grafana/ldap.toml
  fi

  if [ ! -d "$PROVISIONING_CFG_DIR" ]; then
    mkdir -p "$PROVISIONING_CFG_DIR/dashboards" "$PROVISIONING_CFG_DIR/datasources"
    cp /usr/share/grafana/conf/provisioning/dashboards/sample.yaml "$PROVISIONING_CFG_DIR/dashboards/sample.yaml"
    cp /usr/share/grafana/conf/provisioning/datasources/sample.yaml "$PROVISIONING_CFG_DIR/datasources/sample.yaml"
  fi

  if [ ! -d "$PROVISIONING_CFG_DIR/plugins" ]; then
    mkdir -p "$PROVISIONING_CFG_DIR/plugins"
    cp /usr/share/grafana/conf/provisioning/plugins/sample.yaml "$PROVISIONING_CFG_DIR/plugins/sample.yaml"
  fi

  if [ ! -d "$PROVISIONING_CFG_DIR/access-control" ]; then
    mkdir -p "$PROVISIONING_CFG_DIR/access-control"
    cp /usr/share/grafana/conf/provisioning/access-control/sample.yaml "$PROVISIONING_CFG_DIR/access-control/sample.yaml"
  fi

  if [ ! -d "$PROVISIONING_CFG_DIR/alerting" ]; then
    mkdir -p "$PROVISIONING_CFG_DIR/alerting"
    cp /usr/share/grafana/conf/provisioning/alerting/sample.yaml "$PROVISIONING_CFG_DIR/alerting/sample.yaml"
  fi

	# configuration files should not be modifiable by grafana user, as this can be a security issue
	chown -Rh root:"$GRAFANA_GROUP" /etc/grafana
	chmod 755 /etc/grafana
	find /etc/grafana -type f -exec chmod 640 {} ';'
	find /etc/grafana -type d -exec chmod 755 {} ';'

  echo "### NOT starting on installation, please execute the following statements to configure grafana to start automatically using systemd"
  echo " sudo /bin/systemctl daemon-reload"
  echo " sudo /bin/systemctl enable grafana-server.service"
  echo "### You can start grafana-server by executing"
  echo " sudo /bin/systemctl start grafana-server.service"

elif [ "$1" -ge 2 ] ; then
  [ -z "$GRAFANA_HOME" ] && GRAFANA_HOME="/usr/share/grafana"
  [ -z "$DATA_DIR" ] && DATA_DIR="/var/lib/grafana"
  [ -z "$GRAFANA_USER" ] && GRAFANA_USER="grafana"
  [ -z "$GRAFANA_GROUP" ] && GRAFANA_GROUP="grafana"

  if [ "$RESTART_ON_UPGRADE" = "true" ]; then
    stopGrafana
  fi

  # Replace bundled plugins with the new version - see https://github.com/grafana/grafana/issues/123110
  if [ -d "$GRAFANA_HOME/data/plugins-bundled" ]; then
    mkdir -p "$DATA_DIR"
    rm -rf "${DATA_DIR:?}/plugins-bundled"
    mv "$GRAFANA_HOME/data/plugins-bundled" "$DATA_DIR"
    chown -R "$GRAFANA_USER":"$GRAFANA_GROUP" "$DATA_DIR/plugins-bundled"
  fi

  if [ "$RESTART_ON_UPGRADE" = "true" ]; then
    startGrafana
  fi
fi
