#! /bin/sh

# Файл free03arm.list задает список и очередность выбора свободного АРМ
# для отправки на дорегистрацию карты, полученной из системы 112
# 1. Если такого файла нет, то выполняется последовательный просмотр 300-х АРМ
#    и в случае, если таковых нет или все они заняты регистрацией вызова,
#    то карта отправляется на АРМ 201
# 2. При наличии файла выполняется последовательный просмотр АРМ из списка в файле.
#    Если свободный АРМ не найден, то карта отправляется на первый АРМ из списка
# 3. Номер АРМ, куда отправляется карта при отсутствии свободных,
#    можно переопределить следующим образом (первая и единственная запись в файле):
#    +302 - используем стандартный поиск (по всем 300-м), но при отсутствии 
#           свободных отправляем на АРМ 302 (этот АРМ участвует в поиске)
#    #201 - используем стандартный поиск (по всем 300-м), но при отсутствии 
#           свободных отправляем на АРМ 201 (этот АРМ не участвует в поиске)

SSHOPT="-o GSSAPIAuthentication=no -o ConnectTimeout=3 -o PreferredAuthentications=publickey -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR"

FN=free03arm.list
ARMLIST=$FN
LOGF=/var/log/adis/get-free-03.log
if [ ! -f $ARMLIST ]; then
	ARMLIST=/server/$FN
fi
if [ -f $ARMLIST ]; then
	readarray chk_arm < $ARMLIST
fi

if [ ${chk_arm[0]} ]; then
	arm[0]=`echo -n ${chk_arm[0]/\#}`
	arm[0]=${arm[0]/+}
	s=`echo ${chk_arm[0]} | cut -b1`
	if [ -z ${chk_arm[1]} ] && ([ $s = "+" ] || [ $s = "#" ]); then
		STD_SRCH=1
	fi
else
	arm[0]=201
	STD_SRCH=1
fi

TMPFILE=/home/adis/tmp/ip.tmp
LASTARM=/home/adis/tmp/lastarm03

/server/bin/clntlist /home/adis/exe > $TMPFILE
yymm=`date +%2y%2m`

prn_arm() {
	if [ $1 -le $n ]; then
		echo ${arm[$1]} task=${task[$1]} ip=${ip[$1]}
		if [ -f $LOGF ]; then
			echo `date +%Y-%m-%d_%H:%M:%S` ARM=${arm[$1]} task=${task[$1]} ip=${ip[$1]} >> $LOGF
		fi
		if [ $1 != 0 ]; then
			echo $1 > $LASTARM
		fi
	fi
	rm -f $TMPFILE &> /dev/null
}

n=1
for ip_arm in `awk 'NR>3 && $8 == "Active" {print $3 "-" $4}' $TMPFILE`; do
	an=`echo $ip_arm | cut -d"-" -f2`
	arm_ok=
	if [ $STD_SRCH ]; then
		if ([ $an -ge 301 ] && [ $an -le 350 ]); then arm_ok=$an; fi
	else
		arm_ok=`echo "${chk_arm[*]}" | grep -m1 $an`
		if ([ -z $arm_ok ] || [ `echo $arm_ok | cut -b1` = "#" ]); then continue; fi
	fi
	if [ ! -z $arm_ok ]; then
		arm[$n]=$an
		ip[$n]=`echo $ip_arm | cut -d"-" -f1`
		let n+=1
	fi
done
let n-=1
j=0
if [ -f $LASTARM ]; then
	j=`cat $LASTARM`
	let j+=1
	if [ $j -gt $n ]; then
		j=1
	fi
fi
if [ $j = 0 ]; then
	j=1
fi
if [ $j = 1 ]; then
	nn=$n
else
	let nn=$n+$j-1
fi
jj=$j
while [ $j -le $nn ]; do
	if [ $j -le $n ]; then
		i=$j
	else
		let i=$j-$n
	fi
	lastlog=`ssh -q $SSHOPT adisadmin@${ip[$i]} "tail -n1 /var/log/adis/$yymm*arm*" 2> /dev/null`
	ts=`echo $lastlog | awk '{print int($6)}'`
	if ([ $ts = 30 ] || [ $ts = 61 ] || [ $ts = 69 ] || [ $ts = 11 ] || [ $ts = 16 ] || [ $ts = 53 ] || [ $ts -ge 100 ]); then
		ts=0
	fi
	task[$i]=$ts
	if [ ${task[$i]} = 24 ]; then
		prn_arm $i
		exit 0
	fi
	let j+=1
done
j=$jj
while [ $j -le $nn ]; do
	if [ $j -le $n ]; then
		i=$j
	else
		let i=$j-$n
	fi
	if [ ${task[$i]} -gt 0 ]; then
		prn_arm $i
		exit 0
	fi
	let j+=1
done
prn_arm 0
