Ping test - отображать время, необходимое для проверки связи - PullRequest
0 голосов
/ 21 января 2019

Более новая версия GitLab, с помощью простого теста ping с использованием файла сценария bash Я пытаюсь получить значение теста, успеха или неудачи и длительности ping.

файл pingtest.sh

#!/bin/bash
count=$1
target=$2
testname=$3

ping -c $count $target >/dev/null 2>&1

if [ $? -eq 0 ]

then

echo $testname,Success,$(ping -c $count $target | sed '$!d;s|.*/\([0-9.]*\)/.*|\1|')

else

echo $testname,Failure,$(ping -c $count $target | sed '$!d;s|.*/\([0-9.]*\)/.*|\1|')

fi

.gitlab-ci.yml file

image: centos

stages:
  - zero

job run_test_zero:
  stage: zero
  artifacts:
    when: always
    paths:
      - "report/*"
  script:
    - echo "TEST NAME|RESULT|DURATION" >> ./report/report.txt
    - chmod +x ./scripts/pingtest.sh
    - ./scripts/pingtest.sh 3 google.com pinggoolepass >> ./report/report.txt
    - ./scripts/pingtest.sh 3 google1.com pinggoolefail >> ./report/report.txt

файл report.txt

TEST NAME|RESULT|DURATION
pinggoolepass,Success,6.066
pinggoolefail,Failure,

Я не могу выбрать продолжительность теста ping для сбоя.

Пожалуйста, кто-нибудь предложит и направит меня

1 Ответ

0 голосов
/ 22 января 2019

Использование ping Только один раз

Прежде всего, вам не нужно выполнять ping дважды.Существует несколько способов извлечения статуса выхода и максимального времени за один раз.Вот альтернативная версия вашего скрипта:

#!/bin/bash
count="$1"
target="$2"
testname="$3"

if time=$(set -o pipefail;
          ping -c "$count" "$target" 2>&- | awk -F/ 'END {print $6}')
then
    result=Success
else
    result=Failure
fi
echo "$testname,$result,$time"

или вы можете заменить часть if ... fi на

output="$(ping -c "$count" "$target" 2>&-)"
[ $? = 0 ] && result=Success || result=Failure
time="$(awk -F/ 'END {print $6}' <<< "$output")"

Оба эти скрипта эквивалентны вашему скрипту и не печатаютвремя в случае сбоя ping.

Измерение времени в случае сбоя

Чтобы »получить длительность« , сначала нужно указать, что »Длительность« равна.

Если вы хотите, чтобы время выхода из ping заняло достаточно времени, используйте команду time или измерьте время самостоятельно с помощью двух вызовов date или с помощью$EPOCHESECONDS in bash ≥ 5.0.Однако это значение не имеет смысла, и я не понимаю, почему вы хотите его напечатать.

Если вы говорите о тайм-ауте (не в случае google1.com), вы также можете указать тайм-аутсебя и используйте это значение.

...