混動工程自動化腳本

#!/bin/bash

#************輸出可執行任務選項************************
echo -e "\033[31m\033[1m"
echo ""
echo "ScriptName:ChaosBlade"
echo "ScriptVersion: V1.0"
echo ""
echo -e "\033[31m\033[0m"
# 開啓選項高亮顯示
echo -e "\033[40;32m\033[1m"
echo "                    *** 請輸入要執行任務的代號 ***"
echo "                    ***    0.退出程序     ***"
echo "                ***        1.安裝chaosblade       ***"
echo "            ***            2.模擬CPU負載               ***"
echo "        ***                3.模擬IO負載                    ***"
echo "     ***                   4.模擬端口不通                      ***"
echo " ***                       5.模擬丟包                              ***"
echo "     ***                   6.模擬網絡延時                      ***"
echo "        ***                22.恢復CPU負載                  ***"
echo "            ***            33.恢復IO負載               ***"
echo "                ***        44.恢復端口            ***"
echo "                    ***    55.恢復丟包        ***"
echo "                       *** 66.恢復網絡延時 ***"
echo "                       *** 99.查看任務代號 ***"
echo -e "\033[40;32m\033[0m"
out=99
while ((out != 0))
do
#*************Model層***************************
#開啓高亮顯示
echo -e "\033[40;35m\033[1m"
read -p "Please select the task execution code:" id
function action()
{
  isNumber $id
  number=$?
  if [ $number -eq 1 ];then
    task_id $id
    echo "Successful submission code is $id"
  else
    echo -e "\033[31m\033[1m"
    echo "ERROR:請輸入正確的任務代號!!"
    echo -e "\033[31m\033[0m"
  fi

}

#關閉高亮顯示
echo -e "\033[40;35m\033[0m"

SOURCE=$(cd $(dirname $0); pwd)
TARADDRESS=/usr/local/src/
SRCADDRESS=/usr/local/chaosblade
EXECUTEADDRESS=/usr/local/chaosblade/chaosblade-0.2.0
# 校驗用戶輸入的ID是否正確
function task_id()
{
case $1 in
   0)  echo '您選擇了退出程序-->程序已正常退出-->期待您的下次使用☺'
        out=$id
        exitcb $id
    ;;
   1)  echo '您選擇了安裝chaosblade'
       install
    ;;  
   2)  echo '您選擇了模擬CPU負載'
       cpu
    ;;  
   3)  echo '您選擇了模擬IO負載'
       read -p "請輸入模擬IO的size、count、timeout數值[多參數用空格隔開]:" size count timeout
       io $size $count $timeout
    ;;  
   4)  echo '您選擇了模擬端口不通'
       read -p "請輸入需要模擬的端口號:" ports
       port $ports
    ;;  
   5)  echo '您選擇了模擬模擬丟包'
       read -p "請輸入模擬的網卡名稱interface、丟包percent數值[多參數用空格隔開]:" network lostpk
       lostpackage $network $lostpk
    ;;  
   6)  echo '您選擇了模擬網絡延時'
       read -p "請輸入網卡名稱interface、網絡延時時間time(ms)[多參數用空格隔開]:" network delay 
       netWorkDelay $network $delay
    ;;
   22)  echo '您選擇了恢復CPU負載'
       cpuRecovery
    ;;
   33)  echo '您選擇了恢復IO負載'
       ioRecovery
    ;;
   44)  echo '您選擇了恢復端口不通'
       portRecovery
    ;;
   55)  echo '您選擇了恢復模擬丟包'
       lostpackageRecovery
    ;;
   66)  echo '您選擇了恢復網絡延時'
       netWorkDelayRecovery
    ;;
   99)  echo '您選擇了查看任務代號'
        taskOption
    ;;  
   *)  echo 'erro:請輸入任務代號1~7'
    ;;
esac
}

#*************Control層***************************
# 安裝chaosblade 函數
function install()
{
  chaosPath
  existTarFile
  existTarfilecode=$?
  executionFile
  executefilecode=$?

  if [ $existTarfilecode -eq 1 ]; then
     echoGreen
     echo "successful:服務已存在無需構建,可以直接使用哦"
     echoDess
  else
  #TODO 將這個下載文件改成本地移動文件到目標位置,與下載文件相比速度更快更穩定。

     cp $SOURCE/source/chaosblade-0.2.0.linux-amd64.tar.gz $TARADDRESS
     echoGreen
     echo "-------------------------------------------"
     echo "服務構建中時間可能較長您可以稍作休息啦^_^"
     state
     echo ""
     echo "-------------------------------------------"
     echo "服務構建成功,正在啓動中>--<"
     echoDess
  fi

  if [ $executefilecode -eq 1 ]; then
     echoGreen
     echo "-------------------------------------------"
     echo "File Ready Go of Chaosblade 服務啓動成功!!"
     echoDess
  else
     cd $TARADDRESS
     cp chaosblade-0.2.0.linux-amd64.tar.gz ../chaosblade/
     cd $SRCADDRESS
     tar zxvf chaosblade-0.2.0.linux-amd64.tar.gz
     rm -rf chaosblade-0.2.0.linux-amd64.tar.gz
     echoGreen
     echo ""
     echo "------------------------------------------"
     echo "File Ready Go of Chaosblade 服務啓動成功!!" 
     echoGreen
  fi
}

#------------------------------
# 模擬CPU負載函數
function cpu()
{
  cd $EXECUTEADDRESS
  json=`./blade  create cpu fullload`
  awkjson $json
}

# 恢復CPU負載函數
function cpuRecovery()
{
  cd $EXECUTEADDRESS
  ./blade destroy $recoverycode
}
#------------------------------
# 模擬IO負載函數
function io()
{
  cd $EXECUTEADDRESS
#TODO 執行命令的參數改爲接收用戶輸入的參數
  json=`./blade create disk burn --write --read  --size $1 --count $2  --timeout $3`
  awkjson $json
}

# 恢復IO負載函數
function ioRecovery()
{
  cd $EXECUTEADDRESS
  ./blade destroy $recoverycode
  
}

#------------------------------
#模擬端口不通
function port()
{
  cd $EXECUTEADDRESS
  json=`./blade create network drop --local-port $1`
  awkjson $json
}

#恢復端口不通
function portRecovery()
{
  cd $EXECUTEADDRESS
  ./blade destroy $recoverycode
}
#------------------------------
#模擬丟包
function lostpackage()
{
  cd $EXECUTEADDRESS
  json=`./blade create network loss --interface $1 --percent $2`
  awkjson $json
}

#恢復丟包
function lostpackageRecovery()
{
  cd $EXECUTEADDRESS
  ./blade destroy $recoverycode
}
#------------------------------
#模擬網絡延遲
function netWorkDelay()
{
  cd $EXECUTEADDRESS
  json=`./blade create network delay --interface $1 --time $2`
  awkjson $json
}

#恢復網絡延時
function netWorkDelayRecovery()
{
  cd $EXECUTEADDRESS
  ./blade destroy $recoverycode
}

#*************工具類util***********************************
#判斷本地src目錄是否存在ChaoBlade的tar包
function existTarFile()
{
  file="chaosblade-0.2.0.linux-amd64.tar.gz"
  cd $TARADDRESS
  # -f 參數判斷 $file 是否存在
  if [ -f "$file" ]; then
    return 1
  else
    return 0
  fi
}

#判斷本地chaosblade目錄下是否存在ChaoBlade可執行文件
function executionFile()
{
  file="chaosblade-0.2.0"
  cd $SRCADDRESS
  if [ -d "$file" ]; then
     return 1
  else
     return 0
  fi
}

#判斷本篤local目錄下chaosblade文件夾是否存在
function chaosPath()
{
  cd  /usr/local
  chaofolder="chaosblade"
  if [ ! -d "$chaofolder" ]; then
  mkdir "$chaofolder"
fi
}

#echo輸出添加效果
function echoGreen()
{
  echo -e "\033[40;32m\033[1m"
}

#echo去掉效果
function echoDess()
{
  echo -e "\033[40;32m\033[0m"
}

#時間計時器工具實現等待安裝程序進度效果
function state()
{
#TODO  這個循環沒有起作用
  for i in {1..100}
do
    sleep 0.1s
    echo -ne "當前安裝進度######################——> $i \r"    
done
}

#awk處理json數據獲取指定的數據
function awkjson()
{
  #需要處理的數據
  jsoncode=$1
  echo $jsoncode
  recoverycode=`echo $jsoncode | awk -F'"' '{print $(NF-1)}'|awk -F "}" '{print $1}'`
}

#退出程序
function exitcb()
{
 if [ $1 -eq 0 ]; then
  break
 fi
}

#任務列表項顯示
function taskOption()
{
     # 開啓選項高亮顯示
echo -e "\033[40;32m\033[1m"
echo "                    *** 請輸入要執行任務的代號 ***"
echo "                    ***    0.退出程序     ***"
echo "                ***        1.安裝chaosblade       ***"
echo "            ***            2.模擬CPU負載               ***"
echo "        ***                3.模擬IO負載                    ***"
echo "     ***                   4.模擬端口不通                      ***"
echo " ***                       5.模擬丟包                              ***"
echo "     ***                   6.模擬網絡延時                      ***"
echo "        ***                22.恢復CPU負載                  ***"
echo "            ***            33.恢復IO負載               ***"
echo "                ***        44.恢復端口            ***"
echo "                    ***    55.恢復丟包        ***"
echo "                       *** 66.恢復網絡延時 ***"
echo "                       *** 99.查看任務代號 ***"
}

#判斷輸入的是否爲純數字
function isNumber()
{
  if [ -n "$(echo $1| sed -n "/^[0-9]\+$/p")" ];then
  return 1
else
  return 0
fi

}
#*************init層*********************************
action

done             

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章