#!/bin/sh
version=0.2.2-pre7
is_name=$HOSTNAME
rec_t=60
menat_dir=/var/menat/localhost/menat
mk_log=/tmp/mkts.log
dev_ex=${dev_ex:-2}
l2p() {
if [ $cap_exe = recpt1 ];then
bs_p=$(($1/$((2*$dev_ex))))
bs_r=$(($1%$((2*$dev_ex))))
echo $(($((4*$(($bs_r/2))))+$(($bs_r%2))+$(($((1-$bs_p))*2))))
else
echo $1:$1
fi
return 0
}
check_dev() {
n_list=""
if [ $dev_ex = 0 ];then
. /etc/menat/menat.conf
if [ $1 = bs ];then
dev_max=$(($max_dev+1))
i=$st_dev
else
dev_max=$st_dev
i=0
fi
else
if [ $1 = bs ];then
dev_max=$((4*$dev_ex))
i=$((2*$dev_ex))
else
dev_max=$((2*$dev_ex))
i=0
fi
fi
while [ $i -lt $dev_max ] ;do
if [ "$n_list" ];then
n_list="$n_list $i"
else
n_list=$i
fi
i=$(($i+1))
done
m_check=0
mtq_list=`ls $menat_dir/*.mtq 2>/dev/null`
if [ "$mtq_list" ];then
for t in $n_list ;do
t_ok=0
for m in $mtq_list ;do
m=${m##*/}
r_time=`date -d 1hour '+%Y%m%d%H%M'`
m_time=${m:0:12}
m_dev=${m:21:1}
if [ ${m_dev} = $t ];then
if [ $m_time -gt $r_time ];then
t_ok=1
dev_num=$t
else
m_check=1
fi
break
fi
done
if [ $t_ok = 1 ];then
break
fi
done
if [ $m_check = 0 ];then
echo ${n_list%% *}
elif [ $t_ok = 1 ];then
echo $dev_num
m_check=0
fi
else
echo ${n_list%% *}
fi
if [ $m_check = 1 ];then
echo "device is busy" >&2
rv=1
else
rv=0
fi
return $rv
}
rm_xml() {
echo "*** rm_xml start ***" >>$mk_log
rm_done=""
exp_num=${exp_num:-30}
exp_date=`date -d -${exp_num}day '+%Y%m%d%H%M'`
rm_list=`ls ${epg_dir}epg.*.$1.xml* 2>/dev/null`
for s in $rm_list ;do
s_date=`echo $s |cut -d'.' -f2`
if [ "${s_date//[0-9]/}" ]||[ ${#s_date} != 12 ];then
continue
fi
if [ $s_date -lt $exp_date ];then
rm -f $s
if [ "$rm_done" ];then
rm_done="$rm_done,${s##*/}"
else
rm_done=${s##*/}
fi
else
break
fi
done
if [ "$rm_done" ];then
echo "rm list, $rm_done" >>$mk_log
else
echo "rm none" >>$mk_log
fi
echo "*** rm_xml end ***" >>$mk_log
return 0
}
err_mail() {
err_date=`LANG=C date '+%Y-%m-%d %a %H:%M'`
err_subj="EPG get error occured on $HOSTNAME in $1 at $err_date"
err_mesg="$err_subj
rep_max=$rep_max
$2
$3
"
m_server=${m_server:-localhost}
m_user=${m_user:-$LOGNAME}
m_password=${m_password:-.clpasswd}
m_from=${m_from:-$LOGNAME@$HOSTNAME}
m_to=${m_to:-root@$HOSTNAME}
m_option=${m_option:-"-Z smtps"}
clsmtpc -S $m_option -M $m_server \
-A auto -U $m_user -p $m_password \
-F $m_from -T $m_to \
-s "$err_subj" "$err_mesg" ;mv=$?
if [ $mv = 0 ];then
echo "error mail send, OK" >>$mk_log
else
echo "error mail send, FAILED by $mv" >>$mk_log
fi
return $mv
}
get_epg_ts() {
if [ ! -f $ch_list ];then
return 8
fi
if [ ! -d $xml_dir ];then
return 9
fi
gev=0
cp_err=0
bs_ok=0
while read t ;do
ph_ch=`echo $t |cut -d':' -f5`
if [ ! "$ph_ch" ];then
continue
fi
iepg_num=`echo $t |cut -d':' -f3`
if [ ${ph_ch:0:2} = BS ];then
if [ $bs_ok = 1 ];then
continue
fi
ph_ch=BS01_0
dev_type=bs
bc_type=bs
epgdump_type="/BS"
rec_t=${bs_rec_t:-240}
rec_opt="--lnb 15"
pref_dir=${xml_dir%%,*}
pref_dir=${pref_dir%/}
else
dev_type=$ph_ch
bc_type=$iepg_num
epgdump_type=$iepg_num
rec_t=${rec_t:-60}
rec_opt=""
pref_dir=${xml_dir%/}
fi
while [ loop ];do
rec_dev_num=`check_dev $dev_type` ;rv=$?
if [ $rv = 0 ];then
if [ -f /etc/menat/cap.$rec_dev_num.conf ];then
. /etc/menat/cap.$rec_dev_num.conf
cap_exe_r="$exe $sid_opt"
rec_dev=$videodev
else
rec_dev_num=`l2p $rec_dev_num`
if [ $cap_exe = recpt1 ];then
rec_dev=/dev/pt3video$rec_dev_num
rec_dev_opt="--device $rec_dev --lnb 15"
else
rec_adp_num=${rec_dev_num%:*}
rec_fe_num=${rec_dev_num#*:}
rec_dev=/dev/dvb/adapter$rec_adp_num/frontend$rec_fe_num
rec_dev_opt="--dev $rec_fe_num"
fi
cap_exe_r="$cap_exe $rec_dev_opt --b25 $sid_opt --strip"
fi
break
else
sleep 5m
fi
done
epg_f=${epg_dir}epg.$xml_YmdHM.$bc_type
re=0
re_m=0
epg_err=0
rec_v_error_c=0
ev_error_c=0
xv=64
unk_err_0=""
unk_err_1=""
check_merge_0=""
check_merge_1=""
rec_ss=`date +%s`
while [ $re -lt $rep_max ];do
re=$(($re+1))
rx_dateS=`date '+%Y-%m-%d %H:%M:%S'`
echo "$cap_exe start $rec_t $ph_ch:$iepg_num :$rx_dateS: re=$re" >&2
echo "$cap_exe start $rec_t $ph_ch:$iepg_num :$rx_dateS: re=$re" >>$mk_log
$cap_exe_r $ph_ch $rec_t $epg_f.ts ;rec_v=$?
echo "$cap_exe_r $ph_ch $rec_t $epg_f.ts ;rec_v=$rec_v :re=$re" >>$mk_log
if [ $rec_v = 0 ];then
epgdump $epgdump_type $epg_f.ts $epg_f.xml.e ;ev=$?
grep -v "^--" $epg_f.xml.e >$epg_f.xml
echo "epgdump $epgdump_type $epg_f.ts $epg_f.xml ;ev=$ev" >>$mk_log
if [ $ev = 0 ];then
re_m=$(($re_m+1))
$check_xml $epg_f.xml >>$mk_log 2>&1 ;xv=$?
echo "check_xml.sh $epg_f.xml ;xv=$xv :re=$re" >>$mk_log
if [ $xv = 0 ];then
break
else
cp $epg_f.xml /tmp/${epg_f##*/}.$re.xml
unk_err=`$check_xml -x $epg_f.xml 2>&1`
if [ "$unk_err" = "$unk_err_0" ];then
if [ "$unk_err" = "$unk_err_1" ];then
echo "check_xml.sh $epg_f.xml ;xv=00 :ep_max=3 :re=$re" >>$mk_log
xv=0
break
else
unk_err_1=$unk_err
fi
else
unk_err_0=$unk_err
fi
if [ $re_m -gt 1 ];then
merge_f=`$merge_xml /tmp/${epg_f##*/}.*.xml` ;mer_v=$?
if [ $mer_v = 0 ];then
echo "merge success: cp $merge_f $epg_f.xml; mer_v=0" >>$mk_log
cp $merge_f $epg_f.xml
xv=0
break
else
check_merge=`$check_xml -x $merge_f 2>&1`
if [ "$check_merge" = "$check_merge_0" ];then
if [ "$check_merge" = "$check_merge_1" ];then
echo "merge rep_max filled :$merge_f mer_v=$mer_v ;xv=00 :re=$re" >>$mk_log
cp $merge_f $epg_f.xml
xv=0
break
else
check_merge_1=$check_merge
fi
else
check_merge_0=$check_merge
fi
echo "merge failed :$merge_f mer_v=$mer_v :re=$re" >>$mk_log
fi
fi
fi
else
ev_error_c=$(($ev_error_c+1))
epg_err=$(($epg_err|2))
fi
else
rec_v_error_c=$(($rec_v_error_c+1))
epg_err=$(($epg_err|1))
fi
done
if [ $dev_type = "bs" ];then
bs_ok=1
fi
if [ $xv = 0 ];then
pre_xml=`ls $pref_dir/epg.*.$bc_type.xml 2>/dev/null |tail -1`
if [ "$pre_xml" ]&&[ $pre_xml != $epg_f.xml ];then
pre_xml_YmdHM=`echo ${pre_xml##*/} |cut -d'.' -f2`
ood_YmdHM=`date -d -7day '+%Y%m%d%H%M'`
if [ $pre_xml_YmdHM -gt $ood_YmdHM ];then
cp $pre_xml /tmp/
pre_xml=/tmp/${pre_xml##*/}
merge_f=`$merge_xml $epg_f.xml $pre_xml`
merge_f=`$trim_xml $merge_f`
if [ $merge_f != $epg_f.xml ];then
cp $merge_f $epg_f.xml
fi
fi
fi
else
epg_err=$(($epg_err|4))
gev=$(($gev|$epg_err))
if [ $re_m != 0 ];then
pre_xml=`ls $pref_dir/epg.*.$bc_type.xml 2>/dev/null |tail -1`
merge_f=`$merge_xml /tmp/${epg_f##*/}.*.xml $pre_xml` ;mer_v=$?
if [ $mer_v = 0 ];then
echo "merge success with $pre_xml: cp $merge_f $epg_f.xml :re=$re ;mer_v=0" >>$mk_log
echo "ERROR xv=$xv revised and error mail was stopped." >>$mk_log
else
echo "merge failed with $pre_xml: $merge_f re=$re ;mer_v=$mer_v" >>$mk_log
err_mail $epg_f.xml "ev=$ev: xv=$xv" "rec_dev=$rec_dev:$bs_t"
fi
merge_f=`$trim_xml $merge_f`
cp $merge_f $epg_f.xml
else
n=0
while [ $n -lt 8 ];do
n=$(($n+1))
pre_xml_list=`ls $pref_dir/epg.*.$bc_type.xml 2>/dev/null |tail -$n`
pre_xml=`echo "$pre_xml_list" |head -1`
if [ "$pre_xml" ];then
if [ -s $pre_xml ]&&[ $pre_xml != $epg_f.xml ];then
echo "${0##*/} :cp $pre_xml $epg_f.xml :n=$n" >>$mk_log
cp $pre_xml $epg_f.xml
break
fi
else
echo "no xml file found, $epg_f.xml" >>$mk_log
fi
done
err_mail $epg_f.xml "ev=$ev: xv=$xv" "rec_dev=$rec_dev:$bs_t"
fi
fi
if [ "$xml_dir" ];then
for c in ${xml_dir//,/ } ;do
if [ ! -f ${c%/}/$epg_f.xml ];then
i=0
cp_err=8
while [ $i -lt 3 ];do
cp $epg_f.xml $c ;cv=$?
if [ $cv = 0 ];then
cp_err=0
break
else
cp_err=8
if [ -d $xml_dir ];then
cp_err_mesg="$xml_dir=1"
else
cp_err_mesg="$xml_dir=0"
fi
cp_err_mesg="cp_err :$cp_err_mesg :cv=$cv"
ex_date=`LANG=C date '+%Y-%m-%d %a %H:%M'`
echo "$cp_err_mesg :$ex_date" >>$mk_log
xml_dir_stat=`timeout 3 df $xml_dir |tail -n 1`
if [ "$xml_dir_stat" ];then
echo "$xml_dir_stat" >>$mk_log
else
timeout 3 df >>$mk_log
fi
sleep 60
i=$(($i+1))
fi
done
else
cp_err=0
fi
gev=$(($gev|$cp_err))
done
else
gev=$(($gev|16))
fi
if [ $rm_ok = 1 ];then
rm $epg_f.ts
fi
if [ $rm_xml_ok = 1 ];then
rm_xml $bc_type
fi
rec_es=`date '+%s'`
rec_ts=$(($rec_es-$rec_ss))
rec_tm=$(($rec_ts/60))
rec_rs=$(($rec_ts%60))
echo "*** end $iepg_num re=$re xv=$xv, rec_v_ec=$rec_v_error_c, ev_ec=$ev_error_c, ${rec_tm}m${rec_rs}s ***" >>$mk_log
echo >&2
done <>$mk_log
xml_YmdHM=`date '+%Y%m%d%H%M'`
ex_ss=`date +%s`
ex_date=`LANG=C date '+%Y-%m-%d %a %H:%M'`
echo "mkts2xml.sh-$version, start at $ex_date" >>$mk_log
echo ch_list=$ch_list: xml_dir=$xml_dir >>$mk_log
if [ "$mopt_exe" ];then
$mopt_exe
fi
get_epg_ts ;gv=$?
ex_es=`date +%s`
ex_ts=$(($ex_es-$ex_ss))
ex_tm=$(($ex_ts/60))
ex_rs=$(($ex_ts%60))
ex_date=`LANG=C date '+%Y-%m-%d %a %H:%M'`
echo "mkts2xml-$version, ${ch_list##*/}, end by $gv at $ex_date, ${ex_tm}m${ex_rs}s" >>$mk_log
exit $gv
---
txt.cgi-0.1.5