#!/bin/bash -e

distro=$1
dist=$2
apacheuser=$3
apachegroup=$4
nagiosuser=$5
nagiosgroup=$6
pkgname="logstash"
pkgver="9.1.1"
platform="linux-x86_64"
tarball="$pkgname-oss-$pkgver-$platform"
pkgdir="$pkgname-$pkgver"

echo "Installing Logstash..."

# Delete the old archive
rm -rf "$pkgdir"

# Extract archive
tar -xzf "$tarball.tar.gz"

# Apply our patches
./apply-patches "$pkgdir"

# Make and install 
(
    mkdir -p /usr/local/nagioslogserver/logstash/etc/conf.d /usr/local/nagioslogserver/logstash/etc/templates /var/run/logstash /var/log/logstash
    cp -r $pkgdir/* /usr/local/nagioslogserver/logstash

    if [ "$distro" == "Debian" ] || [ "$distro" == "Ubuntu" ]; then
        cp mods/etc/init.d/logstash.deb.init /etc/init.d/logstash
    else
        cp mods/etc/init.d/logstash.init /etc/init.d/logstash
    fi

    cp mods/logstash.yml /usr/local/nagioslogserver/logstash/config/logstash.yml
    chmod 664 /usr/local/nagioslogserver/logstash/config/logstash.yml


    # In Ubuntu/Debian there is no sysconfig folder, instead they are put in defaults 
    if [ -d "/etc/sysconfig" ]; then
        cp -r mods/etc/sysconfig/* /etc/sysconfig
        chmod +x /etc/sysconfig/logstash
    else
        cp -r mods/etc/sysconfig/* /etc/default
        chmod +x /etc/default/logstash
    fi

    if [ -d "/usr/lib/systemd" ] ; then
        cp -pr mods/etc/systemd/* /usr/lib/systemd
    fi

    cp mods/templates/* /usr/local/nagioslogserver/logstash/etc/templates

    # Install the opensearch plugin
    echo "Installing Logstash Plugins"
    PLUGINS="logstash-filter-json-3.2.1.gem logstash-filter-ruby-3.1.8.gem logstash-input-eventlog-4.1.3.gem logstash-input-file-4.4.6.gem logstash-input-syslog-3.7.1.gem logstash-output-exec-3.1.4.gem logstash-output-opensearch-2.0.2-java.gem logstash-filter-geoip-6.0.3-java.gem"
    for plugin in $PLUGINS; do
        /usr/local/nagioslogserver/logstash/bin/logstash-plugin install mods/plugins/$plugin
    done

    sed -i "s/NAGIOSUSER/$nagiosuser/g" mods/etc/systemd/logstash.service
    sed -i "s/APACHEGROUP/$apachegroup/g" mods/etc/systemd/logstash.service

    cp -r mods/etc/systemd/logstash.service  /usr/lib/systemd/system
    systemctl daemon-reload
    chown -R "$nagiosuser":"$nagiosgroup" /usr/local/nagioslogserver/logstash /var/run/logstash /var/log/logstash
    chown "$nagiosuser":"$apachegroup" /usr/local/nagioslogserver/logstash/etc/conf.d
    chmod -R g+w /usr/local/nagioslogserver/logstash/etc
    mkdir -p /usr/local/nagioslogserver/logstash/data /usr/local/nagioslogserver/logstash/logs
    chmod -R g+w /usr/local/nagioslogserver/logstash/data /usr/local/nagioslogserver/logstash/logs
    chgrp "$apachegroup" /usr/local/nagioslogserver/logstash/data /usr/local/nagioslogserver/logstash/logs
    chmod +x /etc/init.d/logstash
    
    # Set Java to run as root to allow listening for syslog sending on port 514
    cd /usr/local/nagioslogserver/logstash/jdk/bin/
    chmod o-x java
    setcap 'cap_net_bind_service=+ep' /usr/local/nagioslogserver/logstash/jdk/bin/java
    ln -s /usr/local/nagioslogserver/logstash/jdk/lib/libjli.so /usr/lib 
    mkdir -p /usr/local/nagioslogserver/logstash/data
    chown "$nagiosuser":"$apachegroup" /usr/local/nagioslogserver/logstash/data
    chmod g+w /usr/local/nagioslogserver/logstash/data
    mkdir -p /usr/local/nagioslogserver/logstash/data/dead_letter_queue
    chown "$nagiosuser":"$apachegroup" /usr/local/nagioslogserver/logstash/data/dead_letter_queue
    chmod g+w /usr/local/nagioslogserver/logstash/data/dead_letter_queue
    mkdir -p /usr/local/nagioslogserver/logstash/data/queue
    chown "$nagiosuser":"$apachegroup" /usr/local/nagioslogserver/logstash/data/queue
    chmod g+w /usr/local/nagioslogserver/logstash/data/queue
    systemctl enable logstash
)


# Post-install modifications
./post-install

# Do a simple sanity check to make sure some key files exist...
for f in /usr/local/nagioslogserver/logstash/bin/logstash ; do
    if [ ! -f "$f" ]; then
        echo "ERROR: Logstash install appears to have failed - exiting.  Missing file = $f"
        exit 1
    fi
done

# Things are okay
echo "Logstash installed OK"

