#!/bin/bash

# =========================================
# info - print messages with timestamp
# =========================================
info() {
    echo -e "$(date +"%Y-%m-%d %H:%M:%S") $*"
}

# =========================================
# info_no_newline - print messages with
# timestamp without newline
# =========================================
info_no_newline() {
    echo -e -n "$(date +"%Y-%m-%d %H:%M:%S") $*"
}

# =========================================
# get_random_range - return a random number
#     between the lower & upper bounds
# usage:
#     get_random_range $lower $upper
#     random_no=$?
# =========================================
get_random_range() {
    lo=$1
    up=$2
    range=$(($up - $lo + 1))

    return $(($(($RANDOM % range)) + $lo))
}

# =========================================
# kill_child_processes - terminate a
# process and its child processes
# =========================================
kill_child_processes() {
    isTopmost=$1
    curPid=$2
    childPids=$(ps a -o pid= -o ppid= | grep "${curPid}$" | awk '{print $1;}')

    for childPid in $childPids
    do
        kill_child_processes 0 $childPid
    done
    if [ $isTopmost -eq 0 ]; then
        kill -15 $curPid 2> /dev/null
    fi
}

# =========================================================================
# generate_kafka_properties_files -
# 1. it takes the following arguments and generate server_{1..n}.properties
#    for the total no. of kafka broker as specified in "num_server"; the
#    resulting properties files will be located at: 
#      <kafka home>/system_test/<test suite>/config
# 2. the default values in the generated properties files will be copied
#    from the settings in config/server.properties while the brokerid and
#    server port will be incremented accordingly
# 3. to generate properties files with non-default values such as 
#    "socket.send.buffer=2097152", simply add the property with new value
#    to the array variable kafka_properties_to_replace as shown below
# =========================================================================
generate_kafka_properties_files() {

    test_suite_full_path=$1      # eg. <kafka home>/system_test/single_host_multi_brokers
    num_server=$2                # total no. of brokers in the cluster
    brokerid_to_start=$3         # this should be '0' in most cases
    kafka_port_to_start=$4       # if 9091 is used, the rest would be 9092, 9093, ...

    this_config_dir=${test_suite_full_path}/config

    # info "test suite full path : $test_suite_full_path"
    # info "broker id to start   : $brokerid_to_start"
    # info "kafka port to start  : $kafka_port_to_start"
    # info "num of server        : $num_server"
    # info "config dir           : $this_config_dir"

    # =============================================
    # array to keep kafka properties statements
    # from the file 'server.properties' need
    # to be changed from their default values
    # =============================================
    # kafka_properties_to_replace     # DO NOT uncomment this line !!

    # =============================================
    # Uncomment the following kafka properties
    # array element as needed to change the default
    # values. Other kafka properties can be added
    # in a similar fashion.
    # =============================================
    # kafka_properties_to_replace[1]="socket.send.buffer=2097152"
    # kafka_properties_to_replace[2]="socket.receive.buffer=2097152"
    # kafka_properties_to_replace[3]="num.partitions=3"
    # kafka_properties_to_replace[4]="max.socket.request.bytes=10485760"

    server_properties=`cat ${this_config_dir}/server.properties`

    for ((i=1; i<=$num_server; i++))
    do
        # ======================
        # update misc properties
        # ======================
        for ((j=1; j<=${#kafka_properties_to_replace[@]}; j++))
        do
            keyword_to_replace=`echo ${kafka_properties_to_replace[${j}]} | awk -F '=' '{print $1}'`
            string_to_be_replaced=`echo "$server_properties" | grep $keyword_to_replace` 
            # info "string to be replaced : [$string_to_be_replaced]"
            # info "string to replace     : [${kafka_properties_to_replace[${j}]}]"

            echo "${server_properties}" | \
              sed -e "s/${string_to_be_replaced}/${kafka_properties_to_replace[${j}]}/g" \
              >${this_config_dir}/server_${i}.properties

            server_properties=`cat ${this_config_dir}/server_${i}.properties`
        done

        # ======================
        # update brokerid
        # ======================
        keyword_to_replace="brokerid="
        string_to_be_replaced=`echo "$server_properties" | grep $keyword_to_replace`
        brokerid_idx=$(( $brokerid_to_start + $i - 1 ))
        string_to_replace="${keyword_to_replace}${brokerid_idx}"
        # info "string to be replaced : [${string_to_be_replaced}]"
        # info "string to replace     : [${string_to_replace}]"

        echo "${server_properties}" | \
          sed -e "s/${string_to_be_replaced}/${string_to_replace}/g" \
          >${this_config_dir}/server_${i}.properties

        server_properties=`cat ${this_config_dir}/server_${i}.properties`

        # ======================
        # update kafak_port
        # ======================
        keyword_to_replace="port="
        string_to_be_replaced=`echo "$server_properties" | grep $keyword_to_replace`
        port_idx=$(( $kafka_port_to_start + $i - 1 ))
        string_to_replace="${keyword_to_replace}${port_idx}"
        # info "string to be replaced : [${string_to_be_replaced}]"
        # info "string to replace     : [${string_to_replace}]"

        echo "${server_properties}" | \
          sed -e "s/${string_to_be_replaced}/${string_to_replace}/g" \
          >${this_config_dir}/server_${i}.properties

        server_properties=`cat ${this_config_dir}/server_${i}.properties`

        # ======================
        # update kafka_log dir
        # ======================
        keyword_to_replace="log.dir="
        string_to_be_replaced=`echo "$server_properties" | grep $keyword_to_replace`
        string_to_be_replaced=${string_to_be_replaced//\//\\\/}
        string_to_replace="${keyword_to_replace}\/tmp\/kafka_server_${i}_logs"
        # info "string to be replaced : [${string_to_be_replaced}]"
        # info "string to replace     : [${string_to_replace}]"

        echo "${server_properties}" | \
          sed -e "s/${string_to_be_replaced}/${string_to_replace}/g" \
          >${this_config_dir}/server_${i}.properties

        server_properties=`cat ${this_config_dir}/server_${i}.properties`

     done
}

