#!/bin/bash

# ==========================================================
# Cavisson POST BUILD / POST UPGRADE TUNING SCRIPT
# Environment specific (cavisson@ip-172-31-17-216)
# Run using sudo
# ==========================================================

set -e

echo "========================================="
echo "Starting Post Upgrade Tuning..."
echo "========================================="

# ----------------------------------------------------------
# FIXED PATHS (from your environment)
# ----------------------------------------------------------
HPD_ROOT="/home/cavisson/work/hpd"
NS_WDIR="/home/cavisson/work"
KEYWORD_FILE="/home/cavisson/work/config/keyword.def"

echo "HPD_ROOT    : $HPD_ROOT"
echo "NS_WDIR     : $NS_WDIR"
echo "KEYWORD_FILE: $KEYWORD_FILE"


# ----------------------------------------------------------
# FUNCTION: update or add keyword
# ----------------------------------------------------------
update_or_add() {
    KEY="$1"
    VALUE="$2"

    if grep -q "^$KEY" "$KEYWORD_FILE" 2>/dev/null; then
        sed -i "s|^$KEY.*|$KEY $VALUE|" "$KEYWORD_FILE"
    else
        echo "$KEY $VALUE" >> "$KEYWORD_FILE"
    fi
}


# ----------------------------------------------------------
# 1. KEYWORD DEF TUNING
# ----------------------------------------------------------
echo "Applying keyword definition tuning..."

update_or_add "Progress Interval" "10000"
update_or_add "Disabled Gen health check" "ALL 1 0"
update_or_add "HPD_EXCLUDE_SAMPLE_DIR" "0"
update_or_add "G_NO_VALIDATION" "ALL 1"
update_or_add "NUM_NVM" "1 CPU 10"
update_or_add "ENABLE_NV" "0"

echo "Keyword tuning completed"


# ----------------------------------------------------------
# 2. SYSCTL TCP TUNING
# ----------------------------------------------------------
echo "Applying TCP tuning..."

apply_sysctl() {
    PARAM=$1
    VALUE=$2

    if grep -q "^$PARAM" /etc/sysctl.conf; then
        sed -i "s|^$PARAM.*|$PARAM=$VALUE|" /etc/sysctl.conf
    else
        echo "$PARAM=$VALUE" >> /etc/sysctl.conf
    fi
}

apply_sysctl net.ipv4.tcp_tw_reuse 1
apply_sysctl net.ipv4.tcp_timestamps 1
apply_sysctl net.ipv4.tcp_fin_timeout 10

sysctl -p

echo "TCP tuning applied"


# ----------------------------------------------------------
# 3. HPD PORT 80/443 BIND PERMISSION
# ----------------------------------------------------------
echo "Setting port binding capability..."

setcap 'cap_net_bind_service+ep' $HPD_ROOT/bin/nsu_hpd
setcap 'cap_net_bind_service+ep' $HPD_ROOT/bin/nsu_hpd.debug

echo "Capability applied"


# ----------------------------------------------------------
# 4. COPY DUKTAPE LIBRARY
# ----------------------------------------------------------
echo "Copying duktape libraries..."

cp -aP $NS_WDIR/thirdparty/lib/libduktape* /usr/lib/x86_64-linux-gnu/

echo "Library copy done"


# ----------------------------------------------------------
# 5. IPV6 REMINDER
# ----------------------------------------------------------
echo ""
echo "IMPORTANT MANUAL STEP:"
echo "Comment IPv6 HPD port entries if not already done"
echo "Ensure IPv4 and IPv6 listen on 80/443"
echo ""


# ----------------------------------------------------------
# COMPLETE
# ----------------------------------------------------------
echo "========================================="
echo "Post Upgrade Tuning Completed Successfully"
echo "Restart HPD / Controller / Generator"
echo "========================================="
