mirror of https://github.com/tiyn/dotfiles
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1054 lines
28 KiB
1054 lines
28 KiB
#!/usr/bin/env bash
|
|
|
|
################################################################################
|
|
#
|
|
# CUSTOM PLUGIN SECTION
|
|
#
|
|
################################################################################
|
|
|
|
############################################################
|
|
# Variables
|
|
############################################################
|
|
|
|
###
|
|
### Custom Defines
|
|
###
|
|
appname="battery"
|
|
battery="${BLOCK_INSTANCE:-Battery 0}"
|
|
format=" {percent}% ({time})"
|
|
|
|
|
|
###
|
|
### Thresholds
|
|
###
|
|
|
|
# Enable
|
|
has_threshold=1
|
|
|
|
# Depending on the conditions in your custom_action()
|
|
# you can force the output to be critical or warning
|
|
# Set these vars to 1 (in custom_action)
|
|
force_crit=0
|
|
force_warn=0
|
|
force_good=0
|
|
|
|
|
|
###
|
|
### Additional arguments
|
|
###
|
|
arg_params=(
|
|
"-b"
|
|
)
|
|
arg_vars=(
|
|
"battery"
|
|
)
|
|
arg_desc_val=(
|
|
"<battery name>"
|
|
)
|
|
arg_desc_long=(
|
|
"Specify the battery name to grep for in 'acpi' command"
|
|
)
|
|
|
|
|
|
###
|
|
### Format placeholders
|
|
###
|
|
|
|
# bash variable names
|
|
format_vars=(
|
|
time
|
|
percent
|
|
status
|
|
capacity
|
|
ucapacity
|
|
)
|
|
|
|
# Format placeholders
|
|
format_nodes=(
|
|
"{time}"
|
|
"{percent}"
|
|
"{status}"
|
|
"{capacity}"
|
|
"{ucapacity}"
|
|
)
|
|
|
|
# Format description (for help display)
|
|
format_descs=(
|
|
"BatteryTime remainng until empty or full"
|
|
"Battery percent"
|
|
"Battery status: charging, discharing, full, absent"
|
|
"Battery capacity"
|
|
"Battery capacity unit"
|
|
)
|
|
|
|
# Format examples (for help display)
|
|
format_examples=(
|
|
"-f \" {time}\" \"{percent}\""
|
|
"-f \" {status}\""
|
|
)
|
|
|
|
|
|
############################################################
|
|
# custom_actio function
|
|
############################################################
|
|
|
|
###
|
|
### Evaluate disk space
|
|
###
|
|
custom_action() {
|
|
if ! command -v acpi >/dev/null 2>&1; then
|
|
echo "Error, binary acpi not found, but required."
|
|
exit 1
|
|
fi
|
|
|
|
local _output
|
|
if ! _output="$( acpi -i | grep "${battery}" )"; then
|
|
time=
|
|
percent=
|
|
status="absent"
|
|
capacity=
|
|
ucapacity=
|
|
force_crit=1
|
|
return
|
|
fi
|
|
|
|
_output="$( echo "${_output}" | sed 's/^.*:\s//g' )"
|
|
|
|
time="$( echo "${_output}" | head -1 | awk '{print $3}' | grep -oE '[0-9]+:[0-9]+' )"
|
|
percent="$( echo "${_output}" | head -1 | awk '{print $2}' | grep -oE '[0-9]+' )"
|
|
status="$( echo "${_output}" | head -1 | awk '{print $1}' | grep -oE '[a-zA-Z]+' | tr '[:upper:]' '[:lower:]' )"
|
|
capacity="$( echo "${_output}" | tail -1 | grep -oE 'capacity\s*[0-9]+' | head -1 | grep -oE '[0-9]+' )"
|
|
ucapacity="$(echo "${_output}" | tail -1 | grep -oE 'capacity\s*[0-9]+.*,' | sed 's/capacity\s*[0-9]*\s*//g' | sed 's/,//g' )"
|
|
}
|
|
|
|
|
|
|
|
|
|
###
|
|
###
|
|
###
|
|
### D O N O T E D I T A F T E R H E R E
|
|
###
|
|
###
|
|
###
|
|
|
|
|
|
|
|
################################################################################
|
|
#
|
|
# BUILT-IN VARIABLES
|
|
#
|
|
################################################################################
|
|
|
|
###
|
|
### General default values
|
|
###
|
|
color_def="#ffffff" # white
|
|
color_good="#88b090" # green
|
|
color_warn="#ccdc90" # yellow
|
|
color_crit="#e89393" # red
|
|
color_info="#fce94f" # bright yellow
|
|
|
|
###
|
|
### Extended format arrays
|
|
###
|
|
fe_placeholder=()
|
|
fe_sign=()
|
|
fe_value=()
|
|
fe_format=()
|
|
|
|
|
|
###
|
|
### Threshold arrays
|
|
###
|
|
tg_placeholder=()
|
|
tg_sign=()
|
|
tg_value=()
|
|
|
|
ti_placeholder=()
|
|
ti_sign=()
|
|
ti_value=()
|
|
|
|
tw_placeholder=()
|
|
tw_sign=()
|
|
tw_value=()
|
|
|
|
tc_placeholder=()
|
|
tc_sign=()
|
|
tc_value=()
|
|
|
|
|
|
###
|
|
### Use of pango markup?
|
|
###
|
|
pango=1
|
|
|
|
|
|
###
|
|
### source configuration file if it exists
|
|
###
|
|
if [ -f "${HOME}/.config/i3blocks/contrib.conf" ]; then
|
|
. "${HOME}/.config/i3blocks/contrib.conf"
|
|
fi
|
|
|
|
|
|
###
|
|
### i3blocks vars info
|
|
### https://vivien.github.io/i3blocks/
|
|
###
|
|
# name= ${BLOCK_NAME}
|
|
# instace= ${BLOCK_INSTANCE}
|
|
# button= ${BLOCK_BUTTON}
|
|
# x-coor ${BLOCK_X}
|
|
# y-coor ${BLOCK_Y}
|
|
|
|
|
|
################################################################################
|
|
#
|
|
# BUILT-IN FUNCTIONS
|
|
#
|
|
################################################################################
|
|
|
|
###
|
|
### System functions
|
|
###
|
|
print_usage() {
|
|
custom_args=""
|
|
|
|
# program specific arguments
|
|
for (( i=0; i<${#arg_params[@]}; i++ )); do
|
|
custom_args="${custom_args}[${arg_params[$i]} ${arg_desc_val[$i]}] "
|
|
done
|
|
|
|
# Show/Hide threshold
|
|
if [ "${has_threshold}" = "1" ]; then
|
|
custom_args="${custom_args}[-tg|-ti|-tw|-tc <p> <s> <int|str>] "
|
|
fi
|
|
|
|
echo "Usage: ${appname} [-f <format>] [-fe <p> <s> <int|str> <f>] ${custom_args}[-np] [-cd|-cg|-cw|-cc|-ci <code>]"
|
|
echo " ${appname} -h"
|
|
echo " ${appname} -v"
|
|
echo
|
|
|
|
if [ "${#custom_args}" -gt "0" ]; then
|
|
echo "Optional variables:"
|
|
echo "--------------------------------------------------------------------------------"
|
|
|
|
for (( i=0; i<${#arg_params[@]}; i++ )); do
|
|
printf " %-13s%s\n" "${arg_params[$i]} ${arg_desc_val[$i]}" "${arg_desc_long[$i]}"
|
|
done
|
|
echo
|
|
fi
|
|
|
|
if [ "${has_threshold}" = "1" ]; then
|
|
echo "Optional threshold arguments:"
|
|
echo "--------------------------------------------------------------------------------"
|
|
echo "You can optionally enable threshold checking against any placeholder value."
|
|
echo "This enables the colorizing of the final output depending on any met"
|
|
echo "conditions specified."
|
|
echo "Default is not to use any threshold"
|
|
echo "You can use unlimited number of threshold for each type."
|
|
echo
|
|
|
|
echo " -tg <p> <s> <int|str> Enable threshold for 'good status'"
|
|
echo " -ti <p> <s> <int|str> Enable threshold for 'info status'"
|
|
echo " -tw <p> <s> <int|str> Enable threshold for 'warn status'"
|
|
echo " -tc <p> <s> <int|str> Enable threshold for 'crit status'"
|
|
echo
|
|
echo " Explanation:"
|
|
echo " <p> is the placeholder value you want to check against."
|
|
printf " valid placeholders: "
|
|
for (( i=0; i<${#format_nodes[@]}; i++ )); do
|
|
printf "%s" "${format_nodes[$i]} "
|
|
done
|
|
printf "\n"
|
|
echo " Note 1: placeholder values will be converted to integers"
|
|
echo " Any decimal places will simply be cut off."
|
|
echo " Note 2: In equal mode (<s> '=') is a string regex comparison and"
|
|
echo " no placeholder will be converted."
|
|
echo " Note 3: In unequal mode (<s> '!=') is a string comparison and"
|
|
echo " no placeholder will be converted."
|
|
echo " Note 3: In equal mode (<s> '=') regex is allowed :-)"
|
|
echo " <s> must either be '<', '>', '=' or '!=' depending on what direction"
|
|
echo " you want to check the threshold placeholder against."
|
|
echo " <int> The integer number you want to check against the placeholder."
|
|
echo " <str> The string you want to check against the placeholder."
|
|
echo " You can only use a string when in equal mode '='."
|
|
echo " You can also use regex here."
|
|
echo
|
|
echo " Examples:"
|
|
echo " 1. Check if value of ${format_nodes[0]} < 50, then format using the good color"
|
|
echo " -tg '${format_nodes[0]}' '<' 50"
|
|
echo
|
|
echo " 2. Check if value of ${format_nodes[0]} > 90, then format using the warn color"
|
|
echo " -tw '${format_nodes[0]}' '>' 90"
|
|
echo
|
|
echo " 3. Check if value of ${format_nodes[0]} equals the string 'foo', then format using the info color"
|
|
echo " -ti '${format_nodes[0]}' '=' 'foo'"
|
|
echo
|
|
echo " 4. Check if value of ${format_nodes[0]} equals the regex '^[0-9]+\$', then format using the info color"
|
|
echo " -ti '${format_nodes[0]}' '=' '^[0-9]+\$'"
|
|
echo
|
|
fi
|
|
|
|
echo "Optional markup (pango):"
|
|
echo "--------------------------------------------------------------------------------"
|
|
echo " -np Disable pango markup"
|
|
echo
|
|
|
|
echo "Optional color arguments:"
|
|
echo "--------------------------------------------------------------------------------"
|
|
echo "If not specified, script default colors are used"
|
|
echo "If config file with color codes is present in:"
|
|
echo "'${HOME}/.config/i3blocks/contrib.conf', these colors will be used."
|
|
echo
|
|
echo " -cd <code> Default color (hexadecimal color code)"
|
|
echo " Default value is: ${color_def}"
|
|
echo " -cg <code> Good color (hexadecimal color code)"
|
|
echo " Default value is: ${color_good}"
|
|
echo " -cw <code> Warning color (hexadecimal color code)"
|
|
echo " Default value is: ${color_warn}"
|
|
echo " -cc <code> Critical color (hexadecimal color code)"
|
|
echo " Default value is: ${color_crit}"
|
|
echo " -ci <code> Info color (hexadecimal color code)"
|
|
echo " Default value is: ${color_info}"
|
|
echo
|
|
|
|
echo "Optional Format placeholders:"
|
|
echo "--------------------------------------------------------------------------------"
|
|
echo " Available color placeholders:"
|
|
echo " (Use with pango disabled for custom markup) building"
|
|
echo " {color} Current active color depending on thresholds"
|
|
echo " {color_def} Default color"
|
|
echo " {color_good} Good color"
|
|
echo " {color_warn} Warning color"
|
|
echo " {color_crit} Critical color"
|
|
echo " {color_info} Info color"
|
|
echo " Format example:"
|
|
echo " -np -f \"<span color='{color}'>Colored text</span>\""
|
|
echo
|
|
|
|
echo " Available specific placeholders:"
|
|
for (( i=0; i<${#format_nodes[@]}; i++ )); do
|
|
printf " %-15s%s\n" "${format_nodes[$i]}" "${format_descs[$i]}"
|
|
done
|
|
|
|
echo " Format example:"
|
|
for (( i=0; i<${#format_examples[@]}; i++ )); do
|
|
printf " %s\n" "${format_examples[$i]}"
|
|
done
|
|
echo " Default:"
|
|
echo " -f \"${format}\""
|
|
echo
|
|
|
|
echo "Optional extended Format output:"
|
|
echo "--------------------------------------------------------------------------------"
|
|
echo "You can conditionally set your output text depending on the value of any placeholder."
|
|
echo "For example, If you have a placeholder {status} that either is 'up' or 'down', you"
|
|
echo "can specify different outputs for 'up' and for 'down'."
|
|
echo "Usage"
|
|
echo " -fe <p> <s> <v> <f>"
|
|
echo
|
|
echo " Format example:"
|
|
echo " -fe '{status}' '=' 'up' 'It works ;-)' -fe '{status}' '!=' 'up' 'status is: {status}'"
|
|
echo " Explanation:"
|
|
echo " <p> is the placeholder value you want to check against."
|
|
printf " valid placeholders: "
|
|
for (( i=0; i<${#format_nodes[@]}; i++ )); do
|
|
printf "%s" "${format_nodes[$i]} "
|
|
done
|
|
printf "\n"
|
|
echo " Note 1: placeholder values will be converted to integers"
|
|
echo " Any decimal places will simply be cut off."
|
|
echo " Note 2: In equal mode (<s> '=') is a string regex comparison and"
|
|
echo " no placeholder will be converted."
|
|
echo " Note 3: In unequal mode (<s> '!=') is a string comparison and"
|
|
echo " no placeholder will be converted."
|
|
echo " Note 3: In equal mode (<s> '=') regex is allowed :-)"
|
|
echo " <s> must either be '<', '>', '=' or '!=' depending on what direction"
|
|
echo " you want to check the threshold placeholder against."
|
|
echo " <int> The integer number you want to check against the placeholder."
|
|
echo " <str> The string you want to check against the placeholder."
|
|
echo " You can only use a string when in equal mode '='."
|
|
echo " You can also use regex here."
|
|
echo " <f> Is the format string that should be displayed under the above condition."
|
|
echo " Of course you can also use placeholders here ;-)."
|
|
}
|
|
|
|
print_version() {
|
|
echo "${appname} v1.8 by cytopia"
|
|
echo "https://github.com/cytopia/i3blocks-modules"
|
|
}
|
|
|
|
###
|
|
### Decide about final output color color
|
|
###
|
|
get_status_color() {
|
|
local _color_def="${1}"
|
|
local _color_good="${2}"
|
|
local _color_warn="${3}"
|
|
local _color_crit="${4}"
|
|
local _color_info="${5}"
|
|
|
|
# final color
|
|
local _color="${_color_def}"
|
|
|
|
local pval
|
|
|
|
# has custom critical color?
|
|
if [ "${force_crit}" = "1" ]; then
|
|
_color="${_color_crit}"
|
|
echo "${_color}"
|
|
return
|
|
fi
|
|
# has custom warning color?
|
|
if [ "${force_warn}" = "1" ]; then
|
|
_color="${_color_warn}"
|
|
echo "${_color}"
|
|
return
|
|
fi
|
|
|
|
|
|
# has custom good color?
|
|
if [ "${force_good}" = "1" ]; then
|
|
_color="${_color_good}"
|
|
fi
|
|
|
|
# has good color?
|
|
for (( i=0; i < ${#tg_placeholder[@]}; i++ )); do
|
|
|
|
if [ "${tg_sign[$i]}" = "=" ] || [ "${tg_sign[$i]}" = "!=" ]; then
|
|
pval="${!tg_placeholder[$i]}"
|
|
else
|
|
pval="$( echo "${!tg_placeholder[$i]}" | grep -oE '[0-9]*' | head -1 )"
|
|
fi
|
|
|
|
if [ "${tg_sign[$i]}" = "<" ]; then
|
|
if [ "${pval}" -lt "${tg_value[$i]}" ]; then
|
|
_color="${_color_good}"
|
|
fi
|
|
elif [ "${tg_sign[$i]}" = "=" ]; then
|
|
if [[ "${pval}" =~ ${tg_value[$i]} ]]; then
|
|
_color="${_color_good}"
|
|
fi
|
|
elif [ "${tg_sign[$i]}" = "!=" ]; then
|
|
if [[ "${pval}" != ${tg_value[$i]} ]]; then
|
|
_color="${_color_good}"
|
|
fi
|
|
elif [ "${tg_sign[$i]}" = ">" ]; then
|
|
if [ "${pval}" -gt "${tg_value[$i]}" ]; then
|
|
_color="${_color_good}"
|
|
fi
|
|
fi
|
|
done
|
|
# has info color?
|
|
for (( i=0; i < ${#ti_placeholder[@]}; i++ )); do
|
|
|
|
if [ "${ti_sign[$i]}" = "=" ] || [ "${ti_sign[$i]}" = "!=" ]; then
|
|
pval="${!ti_placeholder[$i]}"
|
|
else
|
|
pval="$( echo "${!ti_placeholder[$i]}" | grep -oE '[0-9]*' | head -1 )"
|
|
fi
|
|
|
|
if [ "${ti_sign[$i]}" = "<" ]; then
|
|
if [ "${pval}" -lt "${ti_value[$i]}" ]; then
|
|
_color="${_color_info}"
|
|
fi
|
|
elif [ "${ti_sign[$i]}" = "=" ]; then
|
|
if [[ "${pval}" =~ ${ti_value[$i]} ]]; then
|
|
_color="${_color_info}"
|
|
fi
|
|
elif [ "${ti_sign[$i]}" = "!=" ]; then
|
|
if [[ "${pval}" != ${ti_value[$i]} ]]; then
|
|
_color="${_color_info}"
|
|
fi
|
|
elif [ "${ti_sign[$i]}" = ">" ]; then
|
|
if [ "${pval}" -gt "${ti_value[$i]}" ]; then
|
|
_color="${_color_info}"
|
|
fi
|
|
fi
|
|
done
|
|
# has warning color?
|
|
for (( i=0; i < ${#tw_placeholder[@]}; i++ )); do
|
|
|
|
if [ "${tw_sign[$i]}" = "=" ] || [ "${tw_sign[$i]}" = "!=" ]; then
|
|
pval="${!tw_placeholder[$i]}"
|
|
else
|
|
pval="$( echo "${!tw_placeholder[$i]}" | grep -oE '[0-9]*' | head -1 )"
|
|
fi
|
|
|
|
if [ "${tw_sign[$i]}" = "<" ]; then
|
|
if [ "${pval}" -lt "${tw_value[$i]}" ]; then
|
|
_color="${color_warn}"
|
|
fi
|
|
elif [ "${tw_sign[$i]}" = "=" ]; then
|
|
if [[ "${pval}" =~ ${tw_value[$i]} ]]; then
|
|
_color="${_color_warn}"
|
|
fi
|
|
elif [ "${tw_sign[$i]}" = "!=" ]; then
|
|
if [[ "${pval}" != ${tw_value[$i]} ]]; then
|
|
_color="${_color_warn}"
|
|
fi
|
|
elif [ "${tw_sign[$i]}" = ">" ]; then
|
|
if [ "${pval}" -gt "${tw_value[$i]}" ]; then
|
|
_color="${_color_warn}"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
|
|
# has critical color?
|
|
for (( i=0; i < ${#tc_placeholder[@]}; i++ )); do
|
|
|
|
if [ "${tc_sign[$i]}" = "=" ] || [ "${tc_sign[$i]}" = "!=" ]; then
|
|
pval="${!tc_placeholder[$i]}"
|
|
else
|
|
pval="$( echo "${!tc_placeholder[$i]}" | grep -oE '[0-9]*' | head -1 )"
|
|
fi
|
|
|
|
if [ "${tc_sign[$i]}" = "<" ]; then
|
|
if [ "${pval}" -lt "${tc_value[$i]}" ]; then
|
|
_color="${_color_crit}"
|
|
fi
|
|
elif [ "${tc_sign[$i]}" = "=" ]; then
|
|
if [[ "${pval}" =~ ${tc_value[$i]} ]]; then
|
|
_color="${_color_crit}"
|
|
fi
|
|
elif [ "${tc_sign[$i]}" = "!=" ]; then
|
|
if [[ "${pval}" != ${tc_value[$i]} ]]; then
|
|
_color="${_color_crit}"
|
|
fi
|
|
elif [ "${tc_sign[$i]}" = ">" ]; then
|
|
if [ "${pval}" -gt "${tc_value[$i]}" ]; then
|
|
_color="${_color_crit}"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
|
|
echo "${_color}"
|
|
}
|
|
|
|
|
|
###
|
|
### Replace custom stuff in format string
|
|
###
|
|
replace_placeholders() {
|
|
local _format="${1}"
|
|
local _search
|
|
local _replace
|
|
|
|
# Select format based on extended placeholders
|
|
for (( i=0; i < ${#fe_placeholder[@]}; i++ )); do
|
|
|
|
if [ "${fe_sign[$i]}" = "=" ] || [ "${fe_sign[$i]}" = "!=" ]; then
|
|
pval="${!fe_placeholder[$i]}"
|
|
else
|
|
pval="$( echo "${!fe_placeholder[$i]}" | grep -oE '[0-9]*' | head -1 )"
|
|
fi
|
|
|
|
if [ "${fe_sign[$i]}" = "<" ]; then
|
|
if [ "${pval}" -lt "${fe_value[$i]}" ]; then
|
|
_format="${fe_format[$i]}"
|
|
fi
|
|
elif [ "${fe_sign[$i]}" = "=" ]; then
|
|
if [[ "${pval}" =~ ${fe_value[$i]} ]]; then
|
|
_format="${fe_format[$i]}"
|
|
fi
|
|
elif [ "${fe_sign[$i]}" = "!=" ]; then
|
|
if [[ "${pval}" != ${fe_value[$i]} ]]; then
|
|
_format="${fe_format[$i]}"
|
|
fi
|
|
elif [ "${fe_sign[$i]}" = ">" ]; then
|
|
if [ "${pval}" -gt "${fe_value[$i]}" ]; then
|
|
_format="${fe_format[$i]}"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
|
|
|
|
# Replace placeholders in $format
|
|
for (( i=0; i < ${#format_nodes[@]}; i++ )); do
|
|
_search="${format_nodes[$i]}"
|
|
_replace="${!format_vars[$i]}"
|
|
_format="${_format/${_search}/${_replace}}"
|
|
done
|
|
echo "${_format}"
|
|
}
|
|
|
|
|
|
###
|
|
### Replace colors in format string
|
|
###
|
|
replace_colors() {
|
|
local _format="${1}"
|
|
local _color="${2}"
|
|
local _color_def="${3}"
|
|
local _color_good="${4}"
|
|
local _color_warn="${5}"
|
|
local _color_crit="${6}"
|
|
local _color_info="${7}"
|
|
|
|
_format="${_format/'{color}'/${_color}}"
|
|
_format="${_format/'{color_def}'/${_color_def}}"
|
|
_format="${_format/'{color_good}'/${_color_good}}"
|
|
_format="${_format/'{color_warn}'/${_color_warn}}"
|
|
_format="${_format/'{color_crit}'/${_color_crit}}"
|
|
_format="${_format/'{color_info}'/${_color_info}}"
|
|
|
|
echo "${_format}"
|
|
}
|
|
|
|
|
|
|
|
################################################################################
|
|
#
|
|
# MAIN ENTRY POINT
|
|
#
|
|
################################################################################
|
|
|
|
# Enable/Disable threshold argument
|
|
if [ "${has_threshold}" = "1" ]; then
|
|
th_chk=""
|
|
else
|
|
th_chk="__THRESHOLD_DISABLED__"
|
|
fi
|
|
|
|
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
###
|
|
### Extended formats
|
|
###
|
|
-fe)
|
|
# 1/4 Check placeholder
|
|
shift
|
|
if [ "${1}" = "" ]; then
|
|
echo "Error, -fe <p> - no placeholder specified."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
f=0
|
|
for (( i=0; i < ${#format_nodes[@]}; i++ )); do
|
|
if [ "${format_nodes[$i]}" = "${1}" ]; then
|
|
f=1
|
|
break
|
|
fi
|
|
done
|
|
if [ "${f}" = "0" ]; then
|
|
echo "Error, -fe '${1}' no such placeholder."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
fe_placeholder+=("${format_vars[$i]}")
|
|
|
|
# 2/4 Check sign
|
|
shift
|
|
if [ "${1}" = "" ]; then
|
|
echo "Error, -fe '{${fe_placeholder[${#fe_placeholder[@]}-1]}}' '${1}' - sign argyment is empty."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
if [ "${1}" != "<" ] && [ "${1}" != ">" ] && [ "${1}" != "=" ] && [ "${1}" != "!=" ]; then
|
|
echo "Error, -fe '{${fe_placeholder[${#fe_placeholder[@]}-1]}}' '${1}' - invalid sign: '${1}'."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
fe_sign+=("${1}")
|
|
|
|
# 3/4 Check value
|
|
shift
|
|
if [ "${1}" = "" ]; then
|
|
echo "Error, -fe '{${fe_placeholder[${#fe_placeholder[@]}-1]}}' '${fe_sign[${#fe_sign[@]}-1]}' '${1}' - value argument is empty."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
if [ "${fe_sign[${#fe_sign[@]}-1]}" = ">" ] || [ "${fe_sign[${#fe_sign[@]}-1]}" = "<" ]; then
|
|
if ! printf "%d" "${1}" >/dev/null 2>&1; then
|
|
echo "Error, -fe '{${fe_placeholder[${#fe_placeholder[@]}-1]}}' '${fe_sign[${#fe_sign[@]}-1]}' '${1}' - value argument is not a number."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
fi
|
|
fe_value+=("${1}")
|
|
|
|
# 4/4 Check placeholder string
|
|
shift
|
|
fe_format+=("${1}")
|
|
;;
|
|
###
|
|
### Threshold good
|
|
###
|
|
-tg${th_chk})
|
|
# 1/3 Check placeholder
|
|
shift
|
|
if [ "${1}" = "" ]; then
|
|
echo "Error, -tg <p> - no placeholder specified."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
f=0
|
|
for (( i=0; i < ${#format_nodes[@]}; i++ )); do
|
|
if [ "${format_nodes[$i]}" = "${1}" ]; then
|
|
f=1
|
|
break
|
|
fi
|
|
done
|
|
if [ "${f}" = "0" ]; then
|
|
echo "Error, -tg '${1}' no such placeholder."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
tg_placeholder+=("${format_vars[$i]}")
|
|
|
|
# 2/3 Check sign
|
|
shift
|
|
if [ "${1}" = "" ]; then
|
|
echo "Error, -tg '{${tg_placeholder[${#tg_placeholder[@]}-1]}}' '${1}' - sign argument is empty."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
if [ "${1}" != "<" ] && [ "${1}" != ">" ] && [ "${1}" != "=" ] && [ "${1}" != "!=" ]; then
|
|
echo "Error, -tg '{${tg_placeholder[${#tg_placeholder[@]}-1]}}' '${1}' - invalid sign: '${1}'."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
tg_sign+=("${1}")
|
|
|
|
# 3/3 Check value
|
|
shift
|
|
if [ "${1}" = "" ]; then
|
|
echo "Error, -tg '{${tg_placeholder[${#tg_placeholder[@]}-1]}}' '${tg_sign[${#tg_sign[@]}-1]}' '${1}' - value argyment is empty."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
if [ "${tg_sign[${#tg_sign[@]}-1]}" = ">" ] || [ "${tg_sign[${#tg_sign[@]}-1]}" = "<" ]; then
|
|
if ! printf "%d" "${1}" >/dev/null 2>&1; then
|
|
echo "Error, -tg '{${tg_placeholder[${#tg_placeholder[@]}-1]}}' '${tg_sign[${#tg_sign[@]}-1]}' '${1}' - value argument is not a number."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
fi
|
|
tg_value+=("${1}")
|
|
;;
|
|
###
|
|
### Threshold info
|
|
###
|
|
-ti${th_chk})
|
|
# 1/3 Check placeholder
|
|
shift
|
|
if [ "${1}" = "" ]; then
|
|
echo "Error, -ti <p> - no placeholder specified."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
f=0
|
|
for (( i=0; i < ${#format_nodes[@]}; i++ )); do
|
|
if [ "${format_nodes[$i]}" = "${1}" ]; then
|
|
f=1
|
|
break
|
|
fi
|
|
done
|
|
if [ "${f}" = "0" ]; then
|
|
echo "Error, -ti '${1}' no such placeholder."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
ti_placeholder+=("${format_vars[$i]}")
|
|
|
|
# 2/3 Check sign
|
|
shift
|
|
if [ "${1}" = "" ]; then
|
|
echo "Error, -ti '{${ti_placeholder[${#ti_placeholder[@]}-1]}}' '${1}' - sign argument is empty."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
if [ "${1}" != "<" ] && [ "${1}" != ">" ] && [ "${1}" != "=" ] && [ "${1}" != "!=" ]; then
|
|
echo "Error, -ti '{${ti_placeholder[${#ti_placeholder[@]}-1]}}' '${1}' - invalid sign: '${1}'."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
ti_sign+=("${1}")
|
|
|
|
# 3/3 Check value
|
|
shift
|
|
if [ "${1}" = "" ]; then
|
|
echo "Error, -ti '{${ti_placeholder[${#ti_placeholder[@]}-1]}}' '${ti_sign[${#ti_sign[@]}-1]}' '${1}' - value argyment is empty."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
if [ "${ti_sign[${#ti_sign[@]}-1]}" = ">" ] || [ "${ti_sign[${#ti_sign[@]}-1]}" = "<" ]; then
|
|
if ! printf "%d" "${1}" >/dev/null 2>&1; then
|
|
echo "Error, -ti '{${ti_placeholder[${#ti_placeholder[@]}-1]}}' '${ti_sign[${#ti_sign[@]}-1]}' '${1}' - value argument is not a number."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
fi
|
|
ti_value+=("${1}")
|
|
;;
|
|
###
|
|
### Threshold warning
|
|
###
|
|
-tw${th_chk})
|
|
# 1/3 Check placeholder
|
|
shift
|
|
if [ "${1}" = "" ]; then
|
|
echo "Error, -tw <p> - no placeholder specified."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
f=0
|
|
for (( i=0; i < ${#format_nodes[@]}; i++ )); do
|
|
if [ "${format_nodes[$i]}" = "${1}" ]; then
|
|
f=1
|
|
break
|
|
fi
|
|
done
|
|
if [ "${f}" = "0" ]; then
|
|
echo "Error, -tw '${1}' no such placeholder."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
tw_placeholder+=("${format_vars[$i]}")
|
|
|
|
# 2/3 Check sign
|
|
shift
|
|
if [ "${1}" = "" ]; then
|
|
echo "Error, -tw '{${tw_placeholder[${#tw_placeholder[@]}-1]}}' '${1}' - sign argument is empty."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
if [ "${1}" != "<" ] && [ "${1}" != ">" ] && [ "${1}" != "=" ] && [ "${1}" != "!=" ]; then
|
|
echo "Error, -tw '{${tw_placeholder[${#tw_placeholder[@]}-1]}}' '${1}' - invalid sign: '${1}'."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
tw_sign+=("${1}")
|
|
|
|
# 3/3 Check value
|
|
shift
|
|
if [ "${1}" = "" ]; then
|
|
echo "Error, -tw '{${tw_placeholder[${#tw_placeholder[@]}-1]}}' '${tw_sign[${#tw_sign[@]}-1]}' '${1}' - value argyment is empty."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
if [ "${tw_sign[${#tw_sign[@]}-1]}" = ">" ] || [ "${tw_sign[${#tw_sign[@]}-1]}" = "<" ]; then
|
|
if ! printf "%d" "${1}" >/dev/null 2>&1; then
|
|
echo "Error, -tw '{${tw_placeholder[${#tw_placeholder[@]}-1]}}' '${tw_sign[${#tw_sign[@]}-1]}' '${1}' - value argument is not a number."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
fi
|
|
tw_value+=("${1}")
|
|
;;
|
|
###
|
|
### Threshold critical
|
|
###
|
|
-tc${th_chk})
|
|
# 1/3 Check placeholder
|
|
shift
|
|
if [ "${1}" = "" ]; then
|
|
echo "Error, -tc <p> - no placeholder specified."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
f=0
|
|
for (( i=0; i < ${#format_nodes[@]}; i++ )); do
|
|
if [ "${format_nodes[$i]}" = "${1}" ]; then
|
|
f=1
|
|
break
|
|
fi
|
|
done
|
|
if [ "${f}" = "0" ]; then
|
|
echo "Error, -tc '${1}' no such placeholder."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
tc_placeholder+=("${format_vars[$i]}")
|
|
|
|
# 2/3 Check sign
|
|
shift
|
|
if [ "${1}" = "" ]; then
|
|
echo "Error, -tc '{${tc_placeholder[${#tc_placeholder[@]}-1]}}' '${1}' - sign argument is empty."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
if [ "${1}" != "<" ] && [ "${1}" != ">" ] && [ "${1}" != "=" ] && [ "${1}" != "!=" ]; then
|
|
echo "Error, -tc '{${tc_placeholder[${#tc_placeholder[@]}-1]}}' '${1}' - invalid sign: '${1}'."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
tc_sign+=("${1}")
|
|
|
|
# 3/3 Check value
|
|
shift
|
|
if [ "${1}" = "" ]; then
|
|
echo "Error, -tc '{${tc_placeholder[${#tc_placeholder[@]}-1]}}' '${tc_sign[${#tc_sign[@]}-1]}' '${1}' - value argyment is empty."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
if [ "${tc_sign[${#tc_sign[@]}-1]}" = ">" ] || [ "${tc_sign[${#tc_sign[@]}-1]}" = "<" ]; then
|
|
if ! printf "%d" "${1}" >/dev/null 2>&1; then
|
|
echo "Error, -tc '{${tc_placeholder[${#tc_placeholder[@]}-1]}}' '${tc_sign[${#tc_sign[@]}-1]}' '${1}' - value argument is not a number."
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
fi
|
|
tc_value+=("${1}")
|
|
;;
|
|
###
|
|
### Format overwrite
|
|
###
|
|
-f)
|
|
shift
|
|
if [ "${1}" = "" ]; then
|
|
echo "Error, -f requires a string"
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
format="${1}"
|
|
;;
|
|
###
|
|
### Disable pango markup output
|
|
###
|
|
-np)
|
|
pango=0
|
|
;;
|
|
###
|
|
### Color overwrites
|
|
###
|
|
-cd)
|
|
# default color
|
|
shift
|
|
if ! echo "${1}" | grep -qE '#[0-9a-fA-F]{6}' >/dev/null 2>&1; then
|
|
echo "Error, invalid color string: ${1}"
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
color_def="${1}"
|
|
;;
|
|
-cg)
|
|
# good color
|
|
shift
|
|
if ! echo "${1}" | grep -qE '#[0-9a-fA-F]{6}' >/dev/null 2>&1; then
|
|
echo "Error, invalid color string: ${1}"
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
color_good="${1}"
|
|
;;
|
|
-cw)
|
|
# warning color
|
|
shift
|
|
if ! echo "${1}" | grep -qE '#[0-9a-fA-F]{6}' >/dev/null 2>&1; then
|
|
echo "Error, invalid color string: ${1}"
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
color_warn="${1}"
|
|
;;
|
|
-cc)
|
|
# critical color
|
|
shift
|
|
if ! echo "${1}" | grep -qE '#[0-9a-fA-F]{6}' >/dev/null 2>&1; then
|
|
echo "Error, invalid color string: ${1}"
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
color_crit="${1}"
|
|
;;
|
|
-ci)
|
|
# info color
|
|
shift
|
|
if ! echo "${1}" | grep -qE '#[0-9a-fA-F]{6}' >/dev/null 2>&1; then
|
|
echo "Error, invalid color string: ${1}"
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
color_info="${1}"
|
|
;;
|
|
###
|
|
### System options
|
|
###
|
|
-h)
|
|
print_usage
|
|
exit 0
|
|
;;
|
|
-v)
|
|
print_version
|
|
exit 0
|
|
;;
|
|
###
|
|
### Unknown/Custom option
|
|
###
|
|
*)
|
|
|
|
###
|
|
### Evaluate user-specified arguments
|
|
###
|
|
found=0
|
|
if [ "${#arg_params}" -gt "0" ]; then
|
|
for (( i=0; i<${#arg_params[@]}; i++ )); do
|
|
if [ "${arg_params[$i]}" = "${1}" ]; then
|
|
shift
|
|
var_name="${arg_vars[$i]}"
|
|
eval "${var_name}=\"${1}\""
|
|
found=1
|
|
break;
|
|
fi
|
|
done
|
|
fi
|
|
|
|
###
|
|
### Unknown option
|
|
###
|
|
if [ "${found}" = "0" ]; then
|
|
echo "Invalid argument: '${1}'"
|
|
echo "Type ${appname} -h for help"
|
|
exit 1
|
|
fi
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
|
|
|
|
|
|
###
|
|
### Call custom function
|
|
###
|
|
custom_action
|
|
|
|
###
|
|
### Get final output color (based on custom specs)
|
|
###
|
|
color="$( get_status_color "${color_def}" "${color_good}" "${color_warn}" "${color_crit}" "${color_info}" )"
|
|
|
|
###
|
|
### Format (colors)
|
|
###
|
|
format="$( replace_colors "${format}" "${color}" "${color_def}" "${color_good}" "${color_warn}" "${color_crit}" "${color_info}" )"
|
|
|
|
###
|
|
### Format (custom)
|
|
###
|
|
format="$( replace_placeholders "${format}" )"
|
|
|
|
|
|
###
|
|
### Output pango or plain style?
|
|
###
|
|
if [ "${pango}" = "1" ]; then
|
|
if [ "${format}" != "" ]; then
|
|
echo "<span color=\"${color}\">${format}</span>"
|
|
fi
|
|
else
|
|
echo "${format}" # Long output
|
|
echo "${format}" # short output
|
|
echo "\\${color}" # color code '\#RRGGBB'
|
|
fi
|
|
|
|
exit 0
|