#!/bin/bash set -e yell() { printf "\033[1;6;37;41m$0: $*\033[0m\n" >&2; } die() { yell "$*"; exit 111; } try() { "$@" || die "FAIL: $*"; } cmd() { local info="${2:-$1}" echo "=========================================================" echo -e "\n💡 $info" echo "=========================================================" eval "$1" } config=$(cat /opt/mdw/bars/queuemanager.log | tr ' ' '\n' | grep -v 'TYPE\;QM\;PORT\;QNAME\;USAGE\;RNAME\;RQMNAME\;XMITQ\;CHANNEL\;CHLTYPE') target=$VAR2 serv_path=$VAR3 BROKER=$VAR4 AWAKE=$VAR5 echo $config while read -r line; do trimmed_line=$(echo "$line" | xargs) echo $line if [[ "$line" == "TYPE;QM;PORT;QNAME;USAGE;RNAME;RQMNAME;XMITQ;CHANNEL"* || "$trimmed_line" == "" ]]; then echo "No need to execute because is line 1 or blank" else type=$(echo "$line" | cut -d';' -f 1) qm=$(echo "$line" | cut -d';' -f 2) port=$(echo "$line" | cut -d';' -f 3) qname=$(echo "$line" | cut -d';' -f 4) usage=$(echo "$line" | cut -d';' -f 5) rname=$(echo "$line" | cut -d';' -f 6) rqname=$(echo "$line" | cut -d';' -f 7) xmitq=$(echo "$line" | cut -d';' -f 8) channel=$(echo "$line" | cut -d';' -f 9) chltype=$(echo "$line" | cut -d';' -f 10) if [[ $(dspmq | grep "$qm" | grep "Ended") ]]; then try cmd "strmqm $qm" "Start QM $qm" fi; echo "checking queue $serv_path/$(echo "$qm" | tr -d '.')" if [[ "$type" == "QM" ]]; then # cek jika belum ada directory qm_path=$serv_path/$(echo "$qm" | tr -d '.') if [[ ! -d "$qm_path" ]]; then echo -e "\n\033[1;34m💡 Create Directory $qm_path\033[0m" try cmd "mkdir -m 775 -p $qm_path/data" "Create Directory $qm_path/data" try cmd "mkdir -m 775 -p $qm_path/log" "Create Directory $qm_path/log" fi # cek queue manager sudah ada atau belum if [[ ! $(dspmq | grep "$qm") ]]; then try cmd "crtmqm -md $qm_path/data -ld $qm_path/log $qm 2>/dev/null" "Create QM $qm" if [[ "$target" == "DC" && ! $(ps -ef | grep "amqzxma0 -m $qm" | grep -v grep) ]]; then try cmd "strmqm $qm 2>/dev/null" "Start QM $qm" fi if [[ "$target" == "DRC" && $(dspmq | grep -E "$qm|Ended") ]]; then try cmd "strmqm $qm 2>/dev/null" "Start QM $qm" fi; echo "DEFINE LISTENER($qm) TRPTYPE(TCP) port ($port) CONTROL(STARTONLY) REPLACE" | runmqsc $qm echo "DEFINE CHANNEL(SYSTEM.ADMIN.SVRCONN) CHLTYPE(SVRCONN)" | runmqsc $qm echo "START CHANNEL(SYSTEM.ADMIN.SVRCONN)" | runmqsc $qm echo "ALTER QMGR CHLAUTH(DISABLED)" | runmqsc $qm echo "START LISTENER($qm)" | runmqsc $qm fi; fi; if [[ "$type" == "QLOCAL" ]]; then if echo "DISPLAY QLOCAL($qname)" | runmqsc $qm 2>&1 | grep -q "QUEUE($qname)"; then echo "Queue Local $qname exists in Queue Manager $qm." else echo "Queue Local $qname does not exist in Queue Manager $qm." if [[ -z "$usage" ]]; then try cmd "echo \"DEFINE QLOCAL($qname) REPLACE\" | runmqsc $qm | grep 'AMQ'" \ "Create QLOCAL $qname" else try cmd "echo \"DEFINE QLOCAL($qname) USAGE ($usage) REPLACE\" | runmqsc $qm | grep 'AMQ'" \ "Create XMITQ $qname" fi fi fi if [[ "$type" == "CHANNEL" ]]; then if echo "DISPLAY QCHANNEL($qname)" | runmqsc $qm 2>&1 | grep -q "QUEUE($qname)"; then echo "Queue Channel $qname exists in Queue Manager $qm." else echo "Queue Channel $qname does not exist in Queue Manager $qm." if [[ "$chltype" == "SDR" ]]; then echo "DEFINE CHANNEL($channel) CHLTYPE($chltype) CONNAME('localhost($port)') XMITQ($xmitq) TRPTYPE(TCP) REPLACE" | runmqsc $qm echo "ALTER CHANNEL($channel) CHLTYPE($chltype) HBINT(0)" | runmqsc $qm echo "ALTER CHANNEL($channel) CHLTYPE($chltype) DISCINT(0)" | runmqsc $qm echo "START CHANNEL($channel)" | runmqsc $qm else echo "DEFINE CHANNEL($channel) CHLTYPE ($chltype) TRPTYPE (TCP) REPLACE" | runmqsc $qm echo "ALTER CHANNEL($channel) CHLTYPE ($chltype) HBINT (0)" | runmqsc $qm fi; fi fi; if [[ "$type" == "QREMOTE" ]]; then if echo "DISPLAY QREMOTE($qname)" | runmqsc $qm 2>&1 | grep -q "QUEUE($qname)"; then echo "Queue Remote $qname exists in Queue Manager $qm." else echo "Queue Remote $qname does not exist in Queue Manager $qm." echo "DEFINE QREMOTE($qname) RNAME($rname) RQMNAME($rqname) XMITQ($xmitq)" | runmqsc $qm fi fi; fi done <<< "$config" if [[ $target == "DRC" && $AWAKE == false ]]; then try cmd "endmqm -i $qm" \ "Stop QM $qm" sleep $((2 * 60)) fi