#!/bin/bash

set -e

source /opt/datadog/apm/inject/common_functions.sh

function usage ()
{
    cat << EOF
Datadog Host Injection Installer
Usage :  $0 [options]

    Options:
    -h|--help             OPTIONAL Display this message
    --uninstall           OPTIONAL Remove installation
    --no-config-change    OPTIONAL Do not alter datadog.yaml
    --no-agent-restart    OPTIONAL Do not restart the datadog agent
EOF

}

if [ -z "$uninstall_flag" ]; then
  if id dd-agent &>/dev/null; then
    $sudo_cmd sh -c "mkdir -p /opt/datadog/apm/inject/run"
    $sudo_cmd sh -c "chown -R dd-agent:dd-agent /opt/datadog/apm/inject/run"
  else
    echo "Datadog agent installation not found. LD Preload injection only works with an installed agent. Aborting!"
    exit
  fi

  if [ ! -f /etc/ld.so.preload ] || ! grep -q $BINARY_INSTALL_PATH/launcher.preload.so /etc/ld.so.preload; then
    # Add new line to end of /etc/ld.so.preload if it doesn't have one
    if [ -f /etc/ld.so.preload ] ; then
      $sudo_cmd sh -c "[ -n \"$(tail -c1 /etc/ld.so.preload )\" ] && printf '\n' >> /etc/ld.so.preload"
    fi

    # Add preload launcher
    $sudo_cmd sh -c "echo \"$BINARY_INSTALL_PATH/launcher.preload.so\" >> /etc/ld.so.preload"
    echo "Added preload config to /etc/ld.so.preload"
  fi

  # Add UDS config
  if [ -z "$no_config_change" ] && [ -f /etc/datadog-agent/datadog.yaml ] && ! $sudo_cmd sh -c 'grep -q "# BEGIN LD PRELOAD CONFIG" /etc/datadog-agent/datadog.yaml' ; then
    $sudo_cmd sh -c "exec cat >> /etc/datadog-agent/datadog.yaml"<<EOF
# BEGIN LD PRELOAD CONFIG
apm_config:
  receiver_socket: /opt/datadog/apm/inject/run/apm.socket
use_dogstatsd: true
dogstatsd_socket: /opt/datadog/apm/inject/run/dsd.socket
# END LD PRELOAD CONFIG
EOF
    echo "Added UDS config to /etc/datadog-agent/datadog.yaml"
  fi
else
  # NOTE: sed -i does not work on macos

  # Remove launcher line from preload config
  if [ -f /etc/ld.so.preload ] ; then
    $sudo_cmd sh -c "sed -i '\#$BINARY_INSTALL_PATH/launcher.preload.so#d' /etc/ld.so.preload"

    echo "Removed preload config from /etc/ld.so.preload"

    # Remove file if empty
    $sudo_cmd sh -c "[ -s /etc/ld.so.preload ] || rm /etc/ld.so.preload"
  fi

  if [ -z "$no_config_change" ] && [ -f /etc/datadog-agent/datadog.yaml ]; then
    # Remove config block from datadog.yaml
    $sudo_cmd sh -c "sed -i '/# BEGIN LD PRELOAD CONFIG/,/# END LD PRELOAD CONFIG/d' /etc/datadog-agent/datadog.yaml"
    echo "Removed UDS config from /etc/datadog-agent/datadog.yaml"
  fi
fi

# Restart happens in both the install and uninstall case
if [ -z "$no_agent_restart" ]; then
  service_control restart datadog-agent
fi
