You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

execStepOut.sh 4.3 kB

3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. #!/bin/bash
  2. evaLog="/data/workspace/eva.log"
  3. stepMsg=$evaLog
  4. evaTmpLog="/data/workspace/evaTmp.log"
  5. evaStepMsg="{\"step\":"
  6. export evaTmpLog
  7. export evaStepMsg
  8. sendMsg() {
  9. if [ "$2" ];
  10. then
  11. echo "{\"step\":\"$1\",\"ratio\":$2}"
  12. else
  13. echo "{\"step\":\"$1\"}"
  14. fi
  15. }
  16. sendCaseMsg() {
  17. caseTotal=${#ins[@]}
  18. let caseNum=$1+1
  19. if [[ $caseTotal -eq $caseNum ]];
  20. then
  21. return
  22. fi
  23. caseInfo="共$caseTotal个测试集,第$caseNum个测试集执行完成"
  24. if [ "$2" ];
  25. then
  26. let caseRatio=(100-$2)+$caseNum*$2/$caseTotal
  27. echo "{\"step\":\"$caseInfo\",\"ratio\":$caseRatio}"
  28. else
  29. echo "{\"step\":\"$caseInfo\"}"
  30. fi
  31. }
  32. # 更新业务程序执行信息
  33. getEvaPidInfo() {
  34. evaPid=$(ps -p $eva_pid | grep $eva_pid)
  35. }
  36. #按行读取文件
  37. readLine(){
  38. linenumThisTime=0
  39. readedLine=-1
  40. while read LINE
  41. do
  42. let linenumThisTime=linenumThisTime+1
  43. if [[ $linenumThisTime -lt $linenum ]];
  44. then
  45. continue
  46. else
  47. curline="$LINE"
  48. readedLine=0
  49. break
  50. fi
  51. done <$evaLog
  52. }
  53. #处理每行信息
  54. processLine() {
  55. if [ $readedLine -eq 0 ];then
  56. match=$(echo $curline |grep -e "{\"step\":.*}")
  57. if [[ ! ${#match} -eq 0 ]]
  58. then
  59. echo $curline
  60. fi
  61. let linenum=linenum+1
  62. fi
  63. }
  64. #按行读取临时文件
  65. readLineTmp(){
  66. linenumThisTimeTmp=0
  67. readedLineTmp=-1
  68. while read LINE
  69. do
  70. let linenumThisTimeTmp=linenumThisTimeTmp+1
  71. if [[ $linenumThisTimeTmp -lt $linenumTmp ]];
  72. then
  73. continue
  74. else
  75. curlineTmp="$LINE"
  76. readedLineTmp=0
  77. break
  78. fi
  79. done <$evaTmpLog
  80. }
  81. #处理每行信息
  82. processLineTmp() {
  83. if [ $readedLineTmp -eq 0 ];then
  84. match=$(echo $curlineTmp |grep -e "{\"step\":.*}")
  85. if [[ ! ${#match} -eq 0 ]];
  86. then
  87. echo $curlineTmp
  88. fi
  89. let linenumTmp=linenumTmp+1
  90. fi
  91. }
  92. handEvaTmpLog() {
  93. if [ -s $evaTmpLog ];
  94. then
  95. readLineTmp
  96. processLineTmp
  97. fi
  98. }
  99. #获取结果
  100. getResult() {
  101. linenum=1
  102. linenumTmp=1
  103. readedLineTmp=-1
  104. getEvaPidInfo
  105. while :
  106. do
  107. if [ "$evaPid" ]
  108. then
  109. if [ -s $evaLog ]
  110. then
  111. #进程存在,并且日志文件已经写入内容,结束循环,后面去读取文件
  112. break
  113. else
  114. #进程存在,但日志文件不存在,等待进程创建文件,并写入内容
  115. sleep 1s
  116. getEvaPidInfo
  117. fi
  118. else
  119. if [ -s $evaLog ]
  120. then
  121. #进程不存在,但日志文件已经写入内容,结束循环,后面去读取文件。
  122. #这种情况是进程很快执行完成,正常情况下不会发生,可能是发生了错误。
  123. break
  124. else
  125. #进程不存在,日志文件也不存在,可能是进程还没有开始执行。
  126. #这种情况应该不存在,也可能进程发生了错误,不再执行,这样会一直持续到超时。
  127. sleep 1s
  128. getEvaPidInfo
  129. fi
  130. fi
  131. done
  132. #程序执行中,读取日志
  133. getEvaPidInfo
  134. while [ "$evaPid" ]
  135. do
  136. readLine
  137. processLine
  138. handEvaTmpLog
  139. if [[ ! $readedLine -eq 0 ]] && [[ ! $readedLineTmp -eq 0 ]];then
  140. sleep 1s
  141. fi
  142. getEvaPidInfo
  143. done
  144. #程序执行完成,读取evaTmpLog剩余分步消息
  145. handEvaTmpLog
  146. while [[ $readedLineTmp -eq 0 ]]
  147. do
  148. handEvaTmpLog
  149. done
  150. #程序执行完成,读取evaLog剩余分步消息
  151. readLine
  152. while [[ $readedLine -eq 0 ]]
  153. do
  154. processLine
  155. readLine
  156. done
  157. #最后结果
  158. if [ "$1" ];
  159. then
  160. result=$(cat $evaLog | grep -v $evaStepMsg)
  161. else
  162. result=$(cat $evaLog | grep -v $evaStepMsg | base64)
  163. fi
  164. }
  165. #清空evaLog文件,不能删除该文件,因为当evaTmpLog文件先输入信息时,会造成未能及时读取evaTmpLog文件的信息
  166. echo '' > $evaLog
  167. rm -rf $evaTmpLog
  168. #清空用户日志输出文件
  169. rm -f /data/workspace/user.out
  170. source /data/protectspace/evaluate.sh $1 $2 $3 $4 $5

No Description