mirror of https://gitee.com/bigwinds/arangodb
147 lines
3.0 KiB
Bash
147 lines
3.0 KiB
Bash
#!/bin/sh
|
|
|
|
# os detection
|
|
ar_detect_os(){
|
|
local file="/etc/centos-release"
|
|
local os="unknown release"
|
|
if [ -f "$file" ]; then
|
|
os="centos"
|
|
if grep -q -s " 6" "$file" &>/dev/null ; then
|
|
os+="6"
|
|
elif grep -q -s " 7" "$file" &>/dev/null ; then
|
|
os+="7"
|
|
fi
|
|
fi
|
|
echo "$os"
|
|
|
|
#debian
|
|
#opensuse
|
|
#mac
|
|
}
|
|
#export detected os
|
|
export ARANGO_OS="$(ar_detect_os)"
|
|
|
|
|
|
#print error message
|
|
ar_err(){
|
|
local msg="$1"
|
|
local code="${2-1}"
|
|
if ! [ $code -eq 0 ]; then
|
|
echo "ERROR: $msg" 1>&2
|
|
fi
|
|
}
|
|
|
|
#print fatal error message and exit
|
|
ar_ferr(){
|
|
local code="${2-1}"
|
|
if ! [ $code -eq 0 ]; then
|
|
local msg="$1"
|
|
echo "FATAL ERROR: $msg" 1>&2
|
|
exit "$code"
|
|
fi
|
|
}
|
|
|
|
## exit codes and other data
|
|
|
|
#function for searching .dat files
|
|
ar_find_dat_file(){
|
|
local name="$1"
|
|
local found=false
|
|
for p in "/usr/share/arangodb3" "some other path"; do
|
|
local full_path="$p/$name"
|
|
if [ -f "$full_path" ]; then
|
|
found=true
|
|
echo "$full_path"
|
|
break
|
|
fi
|
|
done
|
|
|
|
if ! $found; then
|
|
echo "$could not find datafile $name"
|
|
fi
|
|
}
|
|
|
|
export ARANGO_ERROR_CODES_DAT="$(ar_find_dat_file exitcodes.dat)"
|
|
|
|
ar_exitcode_num_to_string(){
|
|
in="$1"
|
|
local file="$ARANGO_ERROR_CODES_DAT"
|
|
local found=false
|
|
if [ -f "$file" ]; then
|
|
while IFS=',' read code num _ ; do
|
|
if [ "$in" = "$num" ]; then
|
|
echo $code
|
|
found=true
|
|
break
|
|
fi
|
|
done < "$file"
|
|
else
|
|
echo "EXIT_CODE_RESOLVING_FAILED for code $in"
|
|
fi
|
|
|
|
if ! $found; then
|
|
echo "EXIT_CODE_RESOLVING_FAILED for code $in"
|
|
fi
|
|
}
|
|
|
|
ar_exitcode_num_to_message(){
|
|
local in="$1"
|
|
if [ $in = "0" ]; then
|
|
return
|
|
fi
|
|
local file="$ARANGO_ERROR_CODES_DAT"
|
|
local found=false
|
|
if [ -f $file ]; then
|
|
while IFS=',' read code num message long_message; do
|
|
if [ "$in" = "$num" ]; then
|
|
echo "$message"
|
|
found=true
|
|
break
|
|
fi
|
|
done < "$file"
|
|
else
|
|
echo "could not resolve exit code $in"
|
|
fi
|
|
|
|
if ! $found; then
|
|
echo "could not resolve exit code $in"
|
|
fi
|
|
}
|
|
|
|
ar_exitcode_string_to_num(){
|
|
local file="$ARANGO_ERROR_CODES_DAT"
|
|
local found=false
|
|
if [ -f $file ]; then
|
|
in="$1"
|
|
while IFS=',' read code num _ ; do
|
|
if [ "$in" = "$code" ]; then
|
|
echo $num
|
|
found=true
|
|
break
|
|
fi
|
|
done < "$file"
|
|
else
|
|
echo 2
|
|
fi
|
|
|
|
if ! $found; then
|
|
echo 2
|
|
fi
|
|
}
|
|
|
|
ar_exit_by_num(){
|
|
local code="$1"
|
|
if [ $code -ne 0 ]; then
|
|
local str="$(ar_exitcode_num_to_string $code)"
|
|
local msg="$(ar_exitcode_num_to_message $code)"
|
|
echo "FATAL ERROR: $str - $msg" 1>&2
|
|
exit "$code"
|
|
fi
|
|
}
|
|
|
|
ar_exit_by_string(){
|
|
local code=$(ar_exitcode_string_to_num "$1")
|
|
ar_exit_by_num $code
|
|
}
|
|
|