Add -n switch to turn off ansi colour
This commit is contained in:
parent
b31893073d
commit
031ecb08b4
|
@ -0,0 +1,246 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
[[ -e ${HOME}/.bashtools/bashtools.sh ]] && . ${HOME}/.bashtools/bashtools.sh
|
||||||
|
if [[ -n $HAVE_BASHTOOLS ]]; then
|
||||||
|
print1="csecho"
|
||||||
|
print2="inform"
|
||||||
|
else
|
||||||
|
print1="echo"
|
||||||
|
print2="echo"
|
||||||
|
fi
|
||||||
|
|
||||||
|
function usage() {
|
||||||
|
echo "usage: $0 [-n] mode v1 [v2] ... [v3]"
|
||||||
|
echo
|
||||||
|
echo " -n: plaintext mode, no ansi colours"
|
||||||
|
echo
|
||||||
|
echo "Valid modes:"
|
||||||
|
echo " s = systems in series"
|
||||||
|
echo " v1 = system1 availability%"
|
||||||
|
echo " v2 = system1 availability%"
|
||||||
|
echo " ..."
|
||||||
|
echo " p = systems in parallel"
|
||||||
|
echo " v1 = one system's availability%"
|
||||||
|
echo " v2 = number of systems"
|
||||||
|
echo " i = individual system"
|
||||||
|
echo " v1 = mtbr (mean time between failures)"
|
||||||
|
echo " v2 = mttr (mean time to repair)"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
function line() {
|
||||||
|
local len fmt out
|
||||||
|
len=$1
|
||||||
|
cmd="printf %0.s- {1..${len}}"
|
||||||
|
out=$(bash -c "$cmd")
|
||||||
|
echo "$out"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if [[ $1 == "-n" ]]; then
|
||||||
|
HAVE_BASHTOOLS=""
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
|
||||||
|
mode=$1
|
||||||
|
shift
|
||||||
|
|
||||||
|
if [[ $mode == "s" ]]; then
|
||||||
|
if [[ $# -lt 1 ]]; then
|
||||||
|
error "usage: $0 s sys1uptime sys2uptime ... sysXuptime"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
diagram="[client]\n"
|
||||||
|
diagram="${diagram} |\n"
|
||||||
|
diagram="${diagram}[^b${1}%^p uptime]\n"
|
||||||
|
eq="(${1}/100)"
|
||||||
|
shift
|
||||||
|
while [[ $# -ge 1 ]]; do
|
||||||
|
diagram="${diagram} |\n"
|
||||||
|
diagram="${diagram}[^b${1}%^p uptime]\n"
|
||||||
|
eq="${eq} * (${1}/100)"
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
diagram="${diagram} |\n"
|
||||||
|
diagram="${diagram}[server]\n"
|
||||||
|
eq="${eq} * 100"
|
||||||
|
answer=$(echo "scale=9; $eq" | bc)
|
||||||
|
answershort=$(echo "$answer" | tr -dc '9.')
|
||||||
|
nines=$(echo $answershort | tr -d -C 9 | wc -c | tr -d ' ')
|
||||||
|
[[ $nines -eq 1 ]] && ess="" || ess="s"
|
||||||
|
ninestext="${nines} nine${ess}"
|
||||||
|
|
||||||
|
|
||||||
|
if [[ -n $HAVE_BASHTOOLS ]]; then
|
||||||
|
csecho -e "$WHITE" "^b${UNDERLINE}Architecture^p\n"
|
||||||
|
csecho "$GREEN" "${diagram}"
|
||||||
|
echo
|
||||||
|
csecho -e "$WHITE" "^b${UNDERLINE}Availability^p\n"
|
||||||
|
inform "^bEquation:^p ${eq}"
|
||||||
|
inform "^bAvailability:^p ${answershort}% (^b\"$ninestext\"^p)"
|
||||||
|
echo
|
||||||
|
else
|
||||||
|
echo "Architecture"
|
||||||
|
echo "------------"
|
||||||
|
diagram=$(echo "$diagram" | sed 's/\^.//g')
|
||||||
|
echo -e "${diagram}"
|
||||||
|
echo
|
||||||
|
echo "Availability"
|
||||||
|
echo "------------"
|
||||||
|
echo "* Equation: ${eq}"
|
||||||
|
echo "* Availability: ${answershort}% (\"$ninestext\")"
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
elif [[ $mode == "p" ]]; then
|
||||||
|
if [[ $# -ne 2 ]]; then
|
||||||
|
error "usage: $0 s sysuptime nsystems"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
sysuptime=${1}
|
||||||
|
shift
|
||||||
|
nsites=${1}
|
||||||
|
shift
|
||||||
|
|
||||||
|
text="[${sysuptime}% uptime]"
|
||||||
|
textansi="[^b${sysuptime}%^p uptime]"
|
||||||
|
len=${#text}
|
||||||
|
biglen=$(( $len * $nsites ))
|
||||||
|
biglen=$(echo "$biglen + ($nsites * 3)" | bc)
|
||||||
|
|
||||||
|
len=$((len + 3))
|
||||||
|
|
||||||
|
if [[ $((len % 2)) -eq 0 ]]; then
|
||||||
|
s1=$(( $len / 2 ))
|
||||||
|
s2=$(( $s1 - 1 ))
|
||||||
|
linktext=$(printf "%${s1}s|%${s2}s" " " " ")
|
||||||
|
else
|
||||||
|
s1=$(( $len / 2 ))
|
||||||
|
linktext=$(printf "%${s1}s|%${s1}s" " " " ")
|
||||||
|
fi
|
||||||
|
|
||||||
|
diagram="$(line $biglen)"
|
||||||
|
diagram="${diagram}\n"
|
||||||
|
if [[ $((biglen % 2)) -eq 0 ]]; then
|
||||||
|
s1=$(( $biglen / 2 ))
|
||||||
|
s2=$(( $s1 - 1 ))
|
||||||
|
upd=$(printf "[%${s1}s%${s2}s]" "client")
|
||||||
|
else
|
||||||
|
s1=$(( $biglen / 2 ))
|
||||||
|
upd=$(printf "[%${s1}s%${s1}s]" "client")
|
||||||
|
fi
|
||||||
|
diagram="${diagram}${upd}"
|
||||||
|
diagram="${diagram}\n"
|
||||||
|
diagram="${diagram}$(line $biglen)"
|
||||||
|
diagram="${diagram}\n"
|
||||||
|
# intentially skip element 0
|
||||||
|
for ((i=0;i<nsites;i++)); do
|
||||||
|
diagram="${diagram}${linktext}"
|
||||||
|
done
|
||||||
|
diagram="${diagram}\n"
|
||||||
|
|
||||||
|
sysline="$(line ${#text})"
|
||||||
|
syslines="${sysline}"
|
||||||
|
for ((i=1;i<nsites;i++)); do
|
||||||
|
syslines="${syslines} ${sysline}"
|
||||||
|
done
|
||||||
|
diagram="${diagram}${syslines}\n"
|
||||||
|
|
||||||
|
|
||||||
|
diagram="${diagram}${textansi}"
|
||||||
|
# intentially skip element 0
|
||||||
|
for ((i=1;i<nsites;i++)); do
|
||||||
|
diagram="${diagram} ${textansi}"
|
||||||
|
done
|
||||||
|
diagram="${diagram}\n"
|
||||||
|
diagram="${diagram}${syslines}\n"
|
||||||
|
|
||||||
|
# intentially skip element 0
|
||||||
|
for ((i=0;i<nsites;i++)); do
|
||||||
|
diagram="${diagram}${linktext}"
|
||||||
|
done
|
||||||
|
diagram="${diagram}\n"
|
||||||
|
|
||||||
|
if [[ $((biglen % 2)) -eq 0 ]]; then
|
||||||
|
s1=$(( $biglen / 2 ))
|
||||||
|
s2=$(( $s1 - 1 ))
|
||||||
|
upd=$(printf "[%${s1}s%${s2}s]" "server")
|
||||||
|
else
|
||||||
|
s1=$(( $biglen / 2 ))
|
||||||
|
upd=$(printf "[%${s1}s%${s1}s]" "server")
|
||||||
|
fi
|
||||||
|
|
||||||
|
diagram="${diagram}$(line $biglen)"
|
||||||
|
diagram="${diagram}\n"
|
||||||
|
diagram="${diagram}${upd}\n"
|
||||||
|
diagram="${diagram}$(line $biglen)"
|
||||||
|
diagram="${diagram}\n"
|
||||||
|
|
||||||
|
|
||||||
|
eq="(1 - (1 - (${sysuptime}/100))^${nsites})*100"
|
||||||
|
answer=$(echo "scale=15; $eq" | bc)
|
||||||
|
answershort=$(echo "$answer" | tr -dc '9.')
|
||||||
|
nines=$(echo $answershort | tr -d -C 9 | wc -c | tr -d ' ')
|
||||||
|
[[ $nines -eq 1 ]] && ess="" || ess="s"
|
||||||
|
ninestext="${nines} nine${ess}"
|
||||||
|
|
||||||
|
|
||||||
|
if [[ -n $HAVE_BASHTOOLS ]]; then
|
||||||
|
csecho -e "$WHITE" "^b${UNDERLINE}Architecture^p\n"
|
||||||
|
csecho "$GREEN" "${diagram}"
|
||||||
|
echo
|
||||||
|
csecho -e "$WHITE" "^b${UNDERLINE}Availability^p\n"
|
||||||
|
inform "^bEquation:^p ${eq}"
|
||||||
|
inform "^bAvailability:^p ${answershort}% (^b\"$ninestext\"^p)"
|
||||||
|
else
|
||||||
|
echo "Architecture"
|
||||||
|
echo "------------"
|
||||||
|
diagram=$(echo "$diagram" | sed 's/\^.//g')
|
||||||
|
echo -e "${diagram}"
|
||||||
|
echo
|
||||||
|
echo "Availability"
|
||||||
|
echo "------------"
|
||||||
|
echo "Equation: ${eq}"
|
||||||
|
echo "Availability: ${answershort}% (\"$ninestext\")"
|
||||||
|
fi
|
||||||
|
echo
|
||||||
|
elif [[ $mode == "i" ]]; then
|
||||||
|
if [[ $# -ne 2 ]]; then
|
||||||
|
error "usage: $0 i mtbf mttr"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
mtbf=${1}
|
||||||
|
shift
|
||||||
|
mttr=${1}
|
||||||
|
shift
|
||||||
|
|
||||||
|
eq="${mtbf} / (${mtbf} + ${mttr}) * 100"
|
||||||
|
answer=$(echo "scale=15; $eq" | bc)
|
||||||
|
answershort=$(echo "$answer" | sed 's/0\+$//')
|
||||||
|
|
||||||
|
if [[ -n $HAVE_BASHTOOLS ]]; then
|
||||||
|
csecho -e "$WHITE" "^b${UNDERLINE}Availability^p\n"
|
||||||
|
inform "^bMean Time Between Failures:^p ${mtbf} hours"
|
||||||
|
inform "^bMean Time to Repair:^p ${mttr} hours"
|
||||||
|
inform "^bEquation:^p ${eq}"
|
||||||
|
inform "^bAvailability:^p $GREEN$BOLD${answershort}%^p"
|
||||||
|
else
|
||||||
|
echo "Availability"
|
||||||
|
echo "------------"
|
||||||
|
echo "Mean Time Between Failures: ${mtbf} hours"
|
||||||
|
echo "Mean Time to Repair: ${mttr} hours"
|
||||||
|
echo "Equation: ${eq}"
|
||||||
|
echo "Availability: ${answershort}%"
|
||||||
|
fi
|
||||||
|
echo
|
||||||
|
else
|
||||||
|
if [[ -n $HAVE_BASHTOOLS ]]; then
|
||||||
|
error "invalid mode."
|
||||||
|
else
|
||||||
|
echo "ERROR: invalid mode."
|
||||||
|
fi
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue