• 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}行]
    "
    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
      1 #!/bin/bash
      2 kettleConfigHome=/home/vmuser/linbo/kettleDemo/job/config
      3 api_csv_path_home=/home/vmuser/linbo/test_upload/data_file
      4 prod_tableHead="<table border="1"style="border-collapse:collapse;"><tr><th>No</th><th>evn.prod</th><th>fileName</th><th>fileSize</th><th>fileRowCnt</th></tr>"
      5 test_tableHead="<table border="1"style="border-collapse:collapse;"><tr><th>No</th><th>evn.test</th><th>fileName</th><th>fileSize</th><th>fileRowCnt</th></tr>"
      6 evnArr=(prod test)
      7 declare -A prod_tableRowInfo
      8 declare -A test_tableRowInfo
      9 #dtformat=`date -d "4 day ago" +"%Y-%m-%d"`
     10 #lastday=`date -d "4 day ago" +"%Y-%m-%d"`
     11 dtformat=`date +"%Y-%m-%d"`
     12 index=0
     13 k=0
     14 apiNames=(`ls -rt $api_csv_path_home`)
     15 #t_burberry_sales_daily bz_return_order bz_return_order_line unilever_three_shop_sales_retrun ca_order_return unilever_sales_and_retrun mk_refund nike_gc_dgtl_hk_demand nike_odi_hk nike_odi_tmall nike_gc_dgtl_gp_order nike_hk_china_demand mk_bzsales disney_sales_return
     16 #apiNames=(t_burberry_sales_daily bz_return_order bz_return_order_line unilever_three_shop_sales_retrun ca_order_return unilever_sales_and_retrun mk_refund nike_gc_dgtl_hk_demand nike_odi_hk nike_odi_tmall nike_gc_dgtl_gp_order nike_hk_china_demand mk_bzsales disney_sales_return)
     17 for apiName in ${apiNames[*]}
     18 do 
     19     for ((i=0;i<${#evnArr[*]};i++));
     20     do
     21         cd $api_csv_path_home/$apiName/${evnArr[i]}
     22         cmmd0="ls --full-time ./ | sed -n '/${dtformat}/p' | awk '{print $9}'"
     23         cmmd1="ls --full-time ./ | sed -n '/${dtformat}/p' | awk '{print $5"B"}'"
     24     
     25         if [[ ${evnArr[i]} = prod ]]; then
     26             prod_fileArr=(`eval $cmmd0`)
     27             prod_fileSizeArr=(`eval $cmmd1`)
     28             prod_EvnAndDataArr[k]="${apiName}.${evnArr[i]}.[${#prod_fileArr[*]}]"
     29             #获取每个文件的行数 ;
     30             prod_fizeRowCntArr=()
     31             for (( a=0;a<${#prod_fileArr[*]};a++));
     32             do 
     33                 rowCnt0=`cat ${prod_fileArr[$a]} | wc -l`
     34                 prod_fizeRowCntArr[$a]="${rowCnt0}行"
     35             done 
     36 # 将数据按一定的格式放入prod_tableRowInfo 中            
     37             if [[ ${#prod_fileArr[*]} -le 1 ]]; then 
     38 #                    echo " ${#prod_fileArr[*]} -eq 1 "
     39                     row="<tr><td>${index}</td><td>${prod_EvnAndDataArr[0]}</td><td>${prod_fileArr[0]}</td><td>${prod_fileSizeArr[0]}</td><td>${prod_fizeRowCntArr[0]}</td></tr>"
     40             elif [[ ${#prod_fileArr[*]} -gt 1 ]]; then 
     41 #                echo " ${#prod_fileArr[*]} -gt 1 "
     42                 for ((b=0;b<${#prod_fileArr[*]};b++));
     43                 do 
     44                      if [ $b -eq 0 ]; then 
     45                         row="<tr><td rowspan="${#prod_fileArr[*]}">${index}</td> <td rowspan="${#prod_fileArr[*]}">${prod_EvnAndDataArr[$b]}</td><td>${prod_fileArr[$b]}</td><td>${prod_fileSizeArr[$b]}</td><td>${prod_fizeRowCntArr[$b]}</td></tr>"
     46                         else 
     47                         row="${row}<tr> <td colspan="1">${prod_fileArr[$b]}</td> <td>${prod_fileSizeArr[$b]}</td><td>${prod_fizeRowCntArr[$b]}</td></tr>"
     48                     fi  
     49                 done
     50             fi 
     51             prod_tableRowInfo["$index"]="$row"            
     52             
     53          else 
     54             test_fileArr=(`eval $cmmd0`)
     55             test_fileSizeArr=(`eval $cmmd1`)
     56             test_EvnAndDataArr[k]="${apiName}.${evnArr[i]}.[${#test_fileArr[*]}]"
     57             #获取每个文件的行数 ;
     58             test_fizeRowCntArr=()
     59             for (( a=0 ;a<${#test_fileArr[*]} ;a++ ));
     60             do 
     61             rowCnt1=`cat ${test_fileArr[$a]} | wc -l`
     62             test_fizeRowCntArr[$a]="${rowCnt1}行"
     63             done 
     64 # -------------------------------------------------------------------------------------------------------------------------------------------            
     65             if [[ ${#test_fileArr[*]} -le 1 ]]; then 
     66 #                    echo " ${#test_fileArr[*]} -eq 1 "
     67                     row="<tr><td>${index}</td><td>${test_EvnAndDataArr[0]}</td><td>${test_fileArr[0]}</td><td>${test_fileSizeArr[0]}</td><td>${test_fizeRowCntArr[0]}</td></tr>"
     68             elif [[ ${#test_fileArr[*]} -gt 1 ]]; then 
     69 #                echo " ${#test_fileArr[*]} -gt 1 "
     70                 for ((b=0;b<${#test_fileArr[*]};b++));
     71                 do 
     72                      if [ $b -eq 0 ]; then 
     73                         row="<tr><td rowspan="${#test_fileArr[*]}">${index}</td> <td rowspan="${#test_fileArr[*]}">${test_EvnAndDataArr[$b]}</td><td>${test_fileArr[$b]}</td><td>${test_fileSizeArr[$b]}</td><td>${test_fizeRowCntArr[$b]}</td></tr>"
     74                         else 
     75                         row="${row}<tr> <td colspan="1">${test_fileArr[$b]}</td> <td>${test_fileSizeArr[$b]}</td><td>${test_fizeRowCntArr[$b]}</td></tr>"
     76                     fi  
     77                 done
     78             fi 
     79             test_tableRowInfo["$index"]="$row"                
     80 # -------------------------------------------------------------------------------------------------------------------------------------------            
     81         
     82         fi 
     83     done    
     84 index=`expr $index + 1`
     85 done 
     86 
     87 #保证顺序
     88 for ((x=0;x<${#prod_tableRowInfo[*]};x++));
     89 do 
     90     str1="${str1}${prod_tableRowInfo[$x]}"
     91     str2="${str2}${test_tableRowInfo[$x]}"
     92 done 
     93 
     94 #var3="${prod_tableHead}${prod_tableRowInfo[*]}</table>"
     95 #var4="${test_tableHead}${test_tableRowInfo[*]}</table>"
     96 var3="${prod_tableHead}${str1}</table>"
     97 var4="${test_tableHead}${str2}</table>"
     98 
     99 #echo ${!prod_tableRowInfo[*]}
    100 #echo "${var3}"
    101 #echo "*************************************************************"
    102 #echo "${var4}"
    103 #echo ${!test_tableRowInfo[*]}
    104 sed -i "s#^var3=.*#var3=${var3}#g" $kettleConfigHome/sandMailVariate.properties
    105 sed -i "s#^var4=.*#var4=${var4}#g" $kettleConfigHome/sandMailVariate.properties
    106 # 发送邮件
    107 sh /home/vmuser/linbo/kettleDemo/job/kjb/fileCpEvnEmailSend.sh
    View Code

  • 相关阅读:
    JSON对象和字符串之间的相互转换
    Loadrunner 运行场景时:missing newline in XXX.dat 错误解决
    linux grep详解
    Object 保存到文件中
    'libxml/tree.h' file not found
    具有相同值的不同字符串常量在内存中是分开存储的
    为右键添加快速进入CMD的选项,Win7更简单
    iOS KVO & KVC
    南阳数乌龟——递归超时
    LibSVM笔记系列(3)——初学移植libsvm的C/C++版本
  • 原文地址:https://www.cnblogs.com/linbo3168/p/14331165.html
Copyright © 2020-2023  润新知