shell diff + kettle = mail 预警

 

 1 #!bin/bash
 2 kettleConfigHome=/home/vmuser/linbo/kettleDemo/job/config
 3 apiInfos=/home/vmuser/linbo/kettleDemo/job/data/apiInfo
 4 api_csv_path_home=/home/vmuser/linbo/test_upload/data_file
 5 sendMailData=/home/vmuser/linbo/kettleDemo/job/sendData
 6 dt=`date +"%Y%m%d"`
 7 lastDay=`date -d "1 day ago" +"%Y%m%d"`
 8 dmt=`date -d "1 day ago" +"%Y-%m-%d"`
 9 declare -A diffResult_eq
10 declare -A diffResult_nt
11 #先将pord 接口生成的文件load test的情况告知相关人 ;
12 sh /home/vmuser/linbo/kettleDemo/job/execSH/fileCpCase.sh
13 apiCnt=(`ls -rt $api_csv_path_home`)
14 #apiCnt=(unilever_three_shop_sales_retrun)
15 for((i=0;i<${#apiCnt[*]} ;i++)); 
16 do 
17     strInfo=""
18     #默认不发送邮件;
19     sendMail=false 
20     apiName=${apiCnt[$i]}        
21     #到prod 目录下查将今天生成的文件筛选出来
22     cd $api_csv_path_home/$apiName/prod
23     cmmd00="ls --full-time ./ | sed -n '/$(date +"%Y-%m-%d")/p' | awk '{print \$9}'"
24 #    cmmd00="ls --full-time ./ | sed -n '/${dmt}/p' | awk '{print \$9}'"
25     prod_currentDateFile=(`eval $cmmd00`)
26     cd $api_csv_path_home/$apiName/test
27     cmmd02="ls --full-time ./ | sed -n '/$(date +"%Y-%m-%d")/p' | awk '{print \$9}'"
28 #    cmmd02="ls --full-time ./ | sed -n '/${dmt}/p' | awk '{print \$9}'"
29     test_currentDateFile=(`eval $cmmd02`)
30     #echo "${i}_$apiName.prod.[${#prod_currentDateFile[*]}] :${prod_currentDateFile[*]} "
31     #echo "${i}_$apiName.test.[${#test_currentDateFile[*]}] :${test_currentDateFile[*]} "
32     if (( ${#prod_currentDateFile[*]} == 0 )); then 
33     echo "**************** $apiName 今天没有生成文件 不需要对比 continue ! ***************"
34         continue 
35     fi         
36     for((j=0;j<${#prod_currentDateFile[*]};j++));
37     do 
38         apiCsvPath=${api_csv_path_home}/${apiName}
39         prod_csvName=${prod_currentDateFile[$j]}
40         #假如prod接口下今天只生成了1个文件 并且test环境也有文件生成 就直接使用test环境的文件进行比较,否则使用生产环境的文件与测试环境的文件进行绝对匹配 ;
41         if [[ ${#prod_currentDateFile[*]} = 1 &&  ${#test_currentDateFile[*]} = 1 ]]; then
42             uat_csvName=${test_currentDateFile[0]}
43         else 
44             uat_csvName="uat_$prod_csvName"
45         fi    
46         #获取prod 和 test 环境当天生成文件的大小和行数 ;注意是文件创建日期为今天并不是文件名称中的日期;
47         prod_fileSize=`ls -l ${apiCsvPath}/prod/${prod_csvName} | awk '{print \$5}'`
48         test_fileSize=`ls -l ${apiCsvPath}/test/${uat_csvName} | awk '{print \$5}'`
49         prod_fileRowCnt=`cat  ${apiCsvPath}/prod/${prod_csvName} | wc -l`
50         test_fileRowCnt=`cat  ${apiCsvPath}/test/${uat_csvName} | wc -l`
51 
52         if (( $prod_fileSize != 0 )); then
53 #            echo "删除上一天的发送容  rm -rf ${sendMailData}/${apiName}/${lastDay} "
54             rm -rf ${sendMailData}/${apiName}/${lastDay}
55             if [[ -d "${sendMailData}/${apiName}/${dt}/${prod_csvName%.*}" ]]; then
56                 #echo "${prod_csvName%.*} 文件存在 则删除,保持每次都是最新需要发送的内容 ! "
57                 rm -rf ${sendMailData}/${apiName}/${dt}/${prod_csvName%.*}/*
58             fi
59             #"创建 ${sendMailData}/${apiName}/${dt}/${prod_csvName%.*} 目录"
60             mkdir -p ${sendMailData}/${apiName}/${dt}/${prod_csvName%.*}
61             #"将 ${prod_csvName} 和 ${uat_csvName} 文件cp 到 $sendMailData/${apiName}/${dt}/${prod_csvName%.*} 目录下 "
62             cp $apiCsvPath/prod/${prod_csvName} $sendMailData/${apiName}/$dt/${prod_csvName%.*}
63             cp $apiCsvPath/test/${uat_csvName} $sendMailData/${apiName}/$dt/${prod_csvName%.*}
64             cd $sendMailData/${apiName}/$dt/${prod_csvName%.*}/
65             sort ${prod_csvName} -o ${prod_csvName}
66             sort ${uat_csvName} -o ${uat_csvName}
67             diff -iHB ${prod_csvName} ${uat_csvName} >./${prod_csvName%.*}_$(date +"%Y%m%d_%H%M%S")_diff.log
68             diffFlag=`cat ./${prod_csvName%.*}_$(date +"%Y%m%d_%H%M%S")_diff.log | wc -l`             
69             if (( $diffFlag != 0 )); then
70                 strInfo="<li>$prod_csvName    【 fileSize=${prod_fileSize}B ,  rowCnt=${prod_fileRowCnt}行 】; </li> <li>$uat_csvName  【 fileSize=${test_fileSize}B , rowCnt=${test_fileRowCnt}行 】;</li>$strInfo"
71                 diffResult_nt["${apiName}_${j}"]="${strInfo}"
72             #    echo "--------修改发送邮件标志--------"
73                 sendMail=true            
74             else                 
75                 rm -rf ${prod_csvName} ${uat_csvName} ${prod_csvName%.*}_$(date +"%Y%m%d_%H%M%S")_diff.log
76                 diffResult_eq["${apiName}_${j}"]="${apiName}.${prod_csvName}和${uat_csvName}[${prod_fileSize}B : ${prod_fileRowCnt}行]\n"
77             fi
78         : '
79         else 
80             echo " $prod_csvName 和 $uat_csvName  文件大小为 0  无需比较 !"
81             '
82         fi
83     done 
84 if [[ $sendMail = true ]]; then 
85     #发送邮件前需要修改的配置 ;
86     sed -i "s#^attachment_filePath=.*#attachment_filePath=//home//vmuser//linbo//kettleDemo//job//sendData//${apiName}//${dt}#g" $kettleConfigHome/sandMailVariate.properties
87     sed -i "s#^var1=.*#var1=<ul>${strInfo}</ul>#g" $kettleConfigHome/sandMailVariate.properties
88     sed -i "s#^var2=.*#var2=$apiName#g" $kettleConfigHome/sandMailVariate.properties
89     echo ">>>>>>>>>>>>>>>>>>>>>>>> 开始发送邮件 >>>>>>>>>>>>>>>>>>>>>"
90     sh /home/vmuser/linbo/kettleDemo/job/kjb/execSendMail.sh
91 fi
92 done
93 echo -e "${diffResult_eq[*]}" >/home/vmuser/linbo/kettleDemo/job/log/${dt}/diffResult_eq_$(date +"%Y%m%d_%H").log
94 echo "${diffResult_nt[*]}" >/home/vmuser/linbo/kettleDemo/job/log/${dt}/diffResult_nt_$(date +"%Y%m%d_%H").log
View Code

相关文章: