1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
| #!/bin/bash
# check ping result
# by colin
# on 2016-06-08
########################################
# 功能说明:该脚本用于分析汇总某项目在线ping日志文件
#
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
LOGNAME='data/store/logs/record/ping.log'
GREPKEY='ping statistics'
WORKDIR='/tmp/checkPingResult'
TEMPPINGFILE="${WORKDIR}/temppingfile.txt"
CHECKRESULT="${WORKDIR}/temp_check_result.txt"
EMAIL=(
colin@邮件地址.cn
)
TRAIN_CTZX=(
k1364_k817:cdyd:ctzx_42
k1364_k817:cdyd:ctzx_58
k1364_k817:cdyd:ctzx_49
k1364_k817:cdyd:ctzx_56
k1364_k817:cdyd:ctzx_55
k1364_k817:cdyd:ctzx_59
k1364_k817:cdyd:ctzx_39
k1364_k817:cdyd:ctzx_22
k1364_k817:cdyd:ctzx_46
k1364_k817:cdyd:ctzx_36
k1364_k817:cdyd:ctzx_27
k1364_k817:hrbdx:ctzx_26
k1364_k817:hrbdx:ctzx_1
k1364_k817:cddx:ctzx_51
k1364_k817:cddx:ctzx_40
k351_k352:cdyd:ctzx_2
k351_k352:cdyd:ctzx_4
k351_k352:cdyd:ctzx_5
k351_k352:cdyd:ctzx_8
k351_k352:cdyd:ctzx_9
k351_k352:cdyd:ctzx_10
k351_k352:cdyd:ctzx_12
k351_k352:cdyd:ctzx_13
k351_k352:cdyd:ctzx_14
k351_k352:cdyd:ctzx_15
k351_k352:cdyd:ctzx_16
k351_k352:cdyd:ctzx_17
k351_k352:cdyd:ctzx_19
k1223_k1224:hrbdx:ctzx_33
k1223_k1224:hrbdx:ctzx_34
k1223_k1224:cddx:ctzx_41
k1223_k1224:cddx:ctzx_47
k1223_k1224:cddx:ctzx_54
k1223_k1224:cdyd:ctzx_23
k1223_k1224:cdyd:ctzx_38
k1223_k1224:cdyd:ctzx_45
k1223_k1224:cdyd:ctzx_48
k1223_k1224:cdyd:ctzx_50
k1223_k1224:cdyd:ctzx_60
)
sendEmail(){
TEMP_EMAIL_FILES=$1
[ $(wc -l ${TEMP_EMAIL_FILES}|awk '{print $1}') -eq 0 ] || {
for i in ${EMAIL[@]}
do
dos2unix -k ${TEMP_EMAIL_FILES}
mail -s "${HOSTNAME}: CTZX CHECK PING RESULT" ${i} < ${TEMP_EMAIL_FILES}
done
}
[ -e ${TEMP_EMAIL_FILES} ] && rm ${TEMP_EMAIL_FILES}
}
[ -d ${WORKDIR} ] && rm ${WORKDIR} -rf
[ -f ${CHECKRESULT} ] && rm ${CHECKRESULT}
mkdir -p ${WORKDIR}/temp/ && cd ${WORKDIR} && {
for TARFILE in $(find /home/upload/ctzx/ct_tongji/ -name 'pinglog.tar.gz')
do
DEVNAME=$(echo "${TARFILE}"|awk -F/ '{print $(NF-1)}')
for T_DEV_ID in ${TRAIN_CTZX[@]}
do
TRAIN_ID=$(echo ${T_DEV_ID}|awk -F: '{print $1}')
CARD_ID=$(echo ${T_DEV_ID}|awk -F: '{print $2}')
DEV_ID=$(echo ${T_DEV_ID}|awk -F: '{print $3}')
[ ${DEVNAME} = ${DEV_ID} ] && break
done
TARFILENAME=$(echo "${TARFILE}"|awk -F/ '{print $NF}')
cp ${TARFILE} .
tar -zxf ${TARFILENAME} && rm -f ${TARFILENAME}
##
# 加-n参数添加行号,-A 2取出的数据,有遇到第三行为空的情况
#
grep -n -A 2 "${GREPKEY}" ${LOGNAME}|grep -v "${GREPKEY}"|sed -r 's/[^0-9\.]+/ /g'|sed 's/^ //g'|grep -v "^$" |awk '{$1="";print $0}' > ${TEMPPINGFILE}
PACKETS_TRANSMITTED=$(sed -n 'p;n' ${TEMPPINGFILE}|awk '{sum+=$1} END {print sum}')
PACKETS_RECEIVED=$(sed -n 'p;n' ${TEMPPINGFILE}|awk '{sum+=$2} END {print sum}')
PACKET_LOSS=$(sed -n 'p;n' ${TEMPPINGFILE}|awk '{sum+=$3} END {print sum/NR}')
PING_MIN=$(sed -n 'n;p' ${TEMPPINGFILE}|grep -vE "([0-9]{1,3}\.){3}" |awk '{print $1}' |sort -n|uniq|sed -n '1p')
PING_AVG=$(sed -n 'n;p' ${TEMPPINGFILE}|grep -vE "([0-9]{1,3}\.){3}"|awk '{sum+=$2} END {print sum/NR}')
PING_MAX=$(sed -n 'n;p' ${TEMPPINGFILE}|grep -vE "([0-9]{1,3}\.){3}" |awk '{print $3}' |sort -n|uniq|sed -n '$p')
echo "${PACKETS_TRANSMITTED},${PACKETS_RECEIVED},${PACKET_LOSS},${PING_MIN},${PING_AVG},${PING_MAX}" >> ${WORKDIR}/temp/${TRAIN_ID}_a_${CARD_ID}
[ -f ${TEMPPINGFILE} ] && rm ${TEMPPINGFILE}
done
}
groupPingResult(){
CHECKFILENAME=$1
PACK_SENT_ALL=$(awk -F, '{sum+=$1} END {print sum}' ${CHECKFILENAME})
PACK_RECEIVE_ALL=$(awk -F, '{sum+=$2} END {print sum}' ${CHECKFILENAME})
PACK_LOSS_AVG=$(printf %0.2f $(awk -F, '{sum+=$3} END {print sum/NR}' ${CHECKFILENAME}))
PING_MIN_AVG=$(printf %0.2f $(awk -F, '{sum+=$4} END {print sum/NR}' ${CHECKFILENAME}))
PING_AVG_AVG=$(printf %0.2f $(awk -F, '{sum+=$5} END {print sum/NR}' ${CHECKFILENAME}))
PING_MAX_AVG=$(printf %0.2f $(awk -F, '{sum+=$6} END {print sum/NR}' ${CHECKFILENAME}))
ALL_RESULT="${PACK_SENT_ALL},${PACK_RECEIVE_ALL},${PACK_LOSS_AVG},${PING_MIN_AVG},${PING_AVG_AVG},${PING_MAX_AVG}"
}
cd ${WORKDIR}/temp/ && {
for i in $(find . -name "*_a_*")
do
TRAINCARD=$(echo $i | awk -F/ '{print $NF}')
groupPingResult ${TRAINCARD}
TRAINCARD_NAME=$(echo ${TRAINCARD} | sed 's/_a_/,/g')
echo "${TRAINCARD_NAME},${ALL_RESULT}" >> ${CHECKRESULT}
[ -f ${TRAINCARD} ] && rm ${TRAINCARD} -f
done
cat ${CHECKRESULT}|sort -n -t, -k5 > ${WORKDIR}/check_result.txt
sed -i '1i车次,卡类型,总发送包,总接收包,丢失率,PING_MIN,PING_AVG,PING_MAX' ${WORKDIR}/check_result.txt
#cat ${CHECKRESULT}|sort -n -t, -k5 > ${WORKDIR}/t_check_result.txt
#sed -i '1i车次,卡类型,总发送包,总接收包,丢失率,PING_MIN,PING_AVG,PING_MAX' ${WORKDIR}/t_check_result.txt
#column -s, -t ${WORKDIR}/t_check_result.txt > ${WORKDIR}/check_result.txt
#[ -f ${WORKDIR}/t_check_result.txt ] && rm ${WORKDIR}/t_check_result.txt
[ -f ${CHECKRESULT} ] && rm ${CHECKRESULT}
sendEmail ${WORKDIR}/check_result.txt
}
|