#!/usr/bin/env bash
DESCRIPTION="SPM for Nginx"
PLATFORM=$(uname)
SERVICE_NAME="sematext-agent-nginx"
UPSTART_SERVICE_FILE=/etc/init/${SERVICE_NAME}.conf
LAUNCHCTL_SERVICE_FILE="/Library/LaunchDaemons/com.sematext.sematext-agent-nginx.plist"
SYSTEMD_SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service"
SPM_AGENT_CONFIG_FILE=/etc/sematext/${SERVICE_NAME}.config
e=$'\e'
COLORblue="$e[0;36m"
COLORred="$e[0;31m"
COLORreset="$e[0m"
PHP_FPM_URL="undefined"
export SPM_TOKEN=$1
export NGINX_URL=$2

function generate_eu_config()
{
echo -e "SPM_RECEIVER_URL=https://spm-receiver.eu.sematext.com/receiver/v1
EVENTS_RECEIVER_URL=https://event-receiver.eu.sematext.com
LOGSENE_RECEIVER_URL=https://logsene-receiver.eu.sematext.com" > /etc/sematext/receivers.config
}

function generate_us_config()
{
echo -e "SPM_RECEIVER_URL=https://spm-receiver.sematext.com/receiver/v1
EVENTS_RECEIVER_URL=https://event-receiver.sematext.com
LOGSENE_RECEIVER_URL=https://logsene-receiver.sematext.com" > /etc/sematext/receivers.config
}

while getopts ":t:n:p:r:" opt; do
  case $opt in
    t)
      export SPM_TOKEN=$OPTARG
      ;;
    r)
      export REGION=$OPTARG
      mkdir /etc/sematext 2> /dev/null
      if [ "$REGION" == "EU" ]; then 
      		generate_eu_config
      		echo "Set region $OPTARG in /etc/sematext/receivers.config:"
      		cat /etc/sematext/receivers.config
      		exit 0
      fi;
      if [ "$REGION" == "US" ]; then 
      		generate_us_config
      		echo "Set region $OPTARG in /etc/sematext/receivers.config:"
      		cat /etc/sematext/receivers.config
      		exit 0
      fi;
      echo "Invalid region $OPTARG"
      exit 1
      ;;
    p)
      export PHP_FPM_URL=$OPTARG
      ;;
    n)
      export NGINX_URL=$OPTARG
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      ;;
  esac
done

function generate_upstart()
{
echo -e "description \"${DESCRIPTION}\"
start on runlevel [2345]
stop on runlevel [06]
respawn
chdir  /tmp
exec $1 $2 $3" > $UPSTART_SERVICE_FILE
runCommand "initctl reload-configuration"
stop $SERVICE_NAME 2> /dev/null
runCommand "start ${SERVICE_NAME}"
}

function generate_systemd() 
{
echo -e \
"
[Unit]
Description=${DESCRIPTION}
After=network.target

[Service]
Restart=always\nRestartSec=10
ExecStart=$1 $2 $3

[Install]
WantedBy=multi-user.target" > $SYSTEMD_SERVICE_FILE

echo -e \
"
spmagent_logger__console=true

" > /etc/sysconfig/$SERVICE_NAME

echo "Service file $SERVICE_FILE:"
cat $SYSTEMD_SERVICE_FILE
runCommand "systemctl enable $SERVICE_NAME" 1
runCommand "systemctl stop $SERVICE_NAME " 2
runCommand "systemctl start $SERVICE_NAME" 3
sleep 1
runCommand "systemctl status $SERVICE_NAME" 4
runCommand "journalctl -n 10 -u $SERVICE_NAME" 5
}

function runCommand ()
{
	echo $2 $1
	$1
}

function generate_launchctl() 
{
echo -e \
"
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">
<plist version=\"1.0\">
<dict>
    <key>EnvironmentVariables</key>
    <dict>
    <key>PATH</key>
     <string>/usr/local/bin/:$PATH</string>
    </dict>
    <key>Label</key>
    <string>com.sematext.sematext-agent-nginx</string>
    <key>ProgramArguments</key>
    <array>
        <string>$1</string>
        <string>$2</string>
        <string>$3</string>
    </array>
    <key>StandardErrorPath</key>
          <string>/Library/Logs/sematext-agent-nginx.log</string>
    <key>StandardOutPath</key>
        <string>/Library/Logs/sematext-agent-nginx.log</string>
    <key>RunAtLoad</key>
          <true/>
</dict>
</plist>" > $LAUNCHCTL_SERVICE_FILE


echo "Service file $LAUNCHCTL_SERVICE_FILE:"
# cat $LAUNCHCTL_SERVICE_FILE
runCommand "launchctl unload -w -F $LAUNCHCTL_SERVICE_FILE" 1
runCommand "launchctl load -w -F $LAUNCHCTL_SERVICE_FILE" 2
runCommand "launchctl start com.sematext.sematext-agent-nginx" 3
runCommand "tail -n 10 /Library/Logs/sematext-agent-nginx.log" 4
}


function install_script ()
{
	
    mkdir -p $(dirname $SPM_AGENT_CONFIG_FILE)
	echo $2 $3 $4
printf '
tokens:
  spm: %s
nginx: 
  url: %s
phpFpm:
  url: %s
' $2 $3 $PHP_FPM_URL > $SPM_AGENT_CONFIG_FILE
runCommand "chown root $SPM_AGENT_CONFIG_FILE"
runCommand "chmod 0600 $SPM_AGENT_CONFIG_FILE"

echo "Create config file: $SPM_AGENT_CONFIG_FILE"
# cat $SPM_AGENT_CONFIG_FILE

	if [[ $PLATFORM = "Darwin" ]]; then
		echo "Generate launchd script ${LAUNCHCTL_SERVICE_FILE}"
		generate_launchctl $1 $2 $3 
		return
	fi

	if [[ `/sbin/init --version` =~ upstart ]]>/dev/null; then 
		echo "Generate upstart script ${UPSTART_SERVICE_FILE}"
		generate_upstart $1 $2 $3
		return
	fi
	if [[ `systemctl` =~ -\.mount ]]; then 
		echo "Generate systemd script "
		generate_systemd $1 $2 $3
		return 
	fi
}

command="$(which $SERVICE_NAME) --config ${SPM_AGENT_CONFIG_FILE}"
echo $command
if [[ -n "$SPM_TOKEN" && -n "$NGINX_URL" ]] ; then 
  install_script "$command" $SPM_TOKEN $NGINX_URL;
else 
	echo "${COLORred}Missing paramaters. Usage:"
	echo `basename $0` "SPM_TOKEN NGINX_URL (http://user:password@localhost:80/nginx_status)"
	echo "Please obtain your application token from https://apps.sematext.com/$COLORreset"
	read -p "${COLORblue}SPM Token: $COLORreset" token
	SPM_TOKEN=${token:-none}
	echo "Token" $token
	read -p "${COLORblue}Nginx URL (http://localhost:80/nginx_status):$COLORreset" nginx_url
	NGINX_URL=${NGINX_URL:-http://localhost:80/nginx_status}
    install_script $command $SPM_TOKEN $NGINX_URL;
fi 
