You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.8 KiB
Bash
70 lines
1.8 KiB
Bash
#! /bin/bash
|
|
# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
# shellcheck disable=SC2015
|
|
[ -t 2 ] && readonly LOG_TTY=1 || readonly LOG_NO_TTY=1
|
|
|
|
if [ "${LOG_TTY-0}" -eq 1 ] && [ "$(tput colors)" -ge 15 ]; then
|
|
readonly FMT_BOLD=$(tput bold)
|
|
readonly FMT_RED=$(tput setaf 1)
|
|
readonly FMT_YELLOW=$(tput setaf 3)
|
|
readonly FMT_BLUE=$(tput setaf 12)
|
|
readonly FMT_CLEAR=$(tput sgr0)
|
|
fi
|
|
|
|
log() {
|
|
local -r level="$1"; shift
|
|
local -r message="$*"
|
|
|
|
local fmt_on="${FMT_CLEAR-}"
|
|
local -r fmt_off="${FMT_CLEAR-}"
|
|
|
|
case "${level}" in
|
|
INFO) fmt_on="${FMT_BLUE-}" ;;
|
|
WARN) fmt_on="${FMT_YELLOW-}" ;;
|
|
ERROR) fmt_on="${FMT_RED-}" ;;
|
|
esac
|
|
printf "%s[%s]%s %b\n" "${fmt_on}" "${level}" "${fmt_off}" "${message}" >&2
|
|
}
|
|
|
|
with_retry() {
|
|
local -r max_attempts="$1" delay="$2"
|
|
shift 2
|
|
local count=0 rc
|
|
|
|
while true; do
|
|
set +e
|
|
"$@"
|
|
rc="$?"
|
|
set -e
|
|
count="$((count+1))"
|
|
|
|
if [[ "${rc}" -eq 0 ]]; then
|
|
echo "'$*' SUCCEEDED in ${count} attempts !"
|
|
return 0
|
|
fi
|
|
|
|
if [[ "${max_attempts}" -le 0 ]] || [[ "${count}" -lt "${max_attempts}" ]]; then
|
|
echo "'$*' FAILED at attempt ${count}, will retry in ${delay} seconds ..."
|
|
sleep "${delay}"
|
|
else
|
|
break
|
|
fi
|
|
done
|
|
|
|
echo "'$*' FAILED in ${count} attempts !"
|
|
return 1
|
|
}
|