##### 接口访问统计 两个变量 日期 接口名称(all 单个/多个)
##### 统计时间内、外部用户: 生成各个接口用户访问统计汇总信息
##### 递归函数 使用了两次递归 第一个为递归为了处理多个日期 , 第二个递归为了处理多个接口名称 ,两处递归互不冲突
##### 递归的目的是为了处理多个,让函数能够自循环. 避免从外部调用函数循环,减少对外部的依赖,
##### 处理前要先判断是否为多个
##### ./oma-operation.sh "2016-08-17" "/u/media/add"
##### ./oma-operation.sh "2016-08-17 2016-08-19" "/u/media/add /media/search"
function interface_stat () {
local DATE all_num interface_name fail_num succ_num succ_rate IF_NAME all_IF_NAME
DATE="$1"
interface_name="$2"
if [[ $DateType == "multi" ]] ;then ## 如果日期为多个,则递归
DateType="single" ## DateType为全局变量,把多个按单个处理时要修改
for date in ${DATE}
do
interface_stat "${date}" "${interface_name}" ## 递归 将多日期拆成单日期处理
done
else ##处理DateTyep不等于multi的类型
################################## 以下到函数结束前全部为处理单个日期 ############################
###------------------------------------------- 计数器 -----------------------------------------
##根据记数器判断标题打印次数
counter_ifs=$[$counter_ifs+1]
if [[ $counter_ifs == 1 ]] ;then
printf "%-30s %-35s %-15s %-20s %-20s %-20s\n" \
日期 接口名称 访问总数 成功访问总数 失败访问总数 访问成功率
fi
###--------------------------------------------------------------------------------------------
##处理所有接口
if [[ $interface_name == all ]] ;then
basic_info_stat "${DATE}" ##基础信息统计
all_IF_NAME="`echo "${all_user_behavior}" | awk '{print $2}'| sort | uniq -c | sort -rn | awk '{print $2}'`"
interface_stat "${DATE}" "${all_IF_NAME}" #递归
else ## 处理单个或多个接口
basic_info_stat "${DATE}" ##基础信息统计
user_behavior_lines=`echo "${all_user_behavior}" | wc -l` ##用户行为文件行数
if [[ $user_behavior_lines == 0 ]] ;then
printf "%-28s %-31s %-11s %-14s %-14s %-20s\n" "${DATE}" 0 0 0 0 0
else
for IF_NAME in ${interface_name}
do
all_num="`echo "${all_user_behavior}" | grep "$IF_NAME" | wc -l`" ## 接口访问总次数
fail_num="`echo "${all_user_behavior}" | grep "$IF_NAME" | grep -c 'failed'`" ## 接口访问错误次数
succ_num=$[$all_num-$fail_num] ## 接口访问成功次数
succ_rate=`awk 'BEGIN{printf "%.2f%\n",'$succ_num'/'$all_num'*100}'` ## 接口访问成功率
printf "%-28s %-31s %-11s %-14s %-14s %-20s\n" \
"${DATE}" "${IF_NAME}" "${all_num}" "${succ_num}" "${fail_num}" "${succ_rate}"
done
fi
fi
fi
}