Proyecto

General

Perfil

Descargar (3,51 KB) Estadísticas
| Rama: | Revisión:
#!/bin/bash
# p3.bash
#
# v0.0.1 - 2020-07-14 - nelbren@nelbren.com
#

use() {
echo "Usage: "
echo " $myself [OPTION]"
echo ""
echo "Extract the three processes that use the highest percentage of cpu,"
echo "according to the thresholds it assigns the color, and shows everything"
echo " in a single line in less than 80 characters. More info at nelbren.com"
echo ""
echo -e "Where: "
echo -e " -i|--invert\tShow info in invert colors."
echo -e " -n|--nagios\tShow info in plain text and stats for nagios"
echo -e " -h|--help\tShow this information."
exit 0
}

params() {
for i in "$@"; do
case $i in
--invert|-i) INVERT=1; shift;;
--nagios|-n) NAGIOS=1; shift;;
--help|-h) HELP=1; shift;;
*) # unknown option
;;
esac
done

[ -z "$INVERT" ] && INVERT=0
[ -z "$NAGIOS" ] && NAGIOS=0
[ -z "$HELP" ] && HELP=0
}


color_msg() {
pstate=$1
msg1=$2
msg2=$3
msg3=$4
before=$5
hight=$6
if [ "$INVERT" == "0" ]; then
case $pstate in
$STATE_OK) color="$cOK";;
$STATE_WARNING) color="$cWA";;
$STATE_CRITICAL) color="$cCR";;
$STATE_UNKNOWN) color="$cUN";;
$STATE_INFO) color="$cIN";;
esac
else
case $pstate in
$STATE_OK) color="$COK";;
$STATE_WARNING) color="$CWA";;
$STATE_CRITICAL) color="$CCR";;
$STATE_UNKNOWN) color="$CUN";;
$STATE_INFO) color="$CIN2";;
esac
fi
if [ "$hight" == "1" ]; then
if [ "$INVERT" == "0" ]; then
color2=$nB
color3=$nW
else
color2=$Ib
color3=$Iw
fi
else
color2=""
color3=""
fi
line2=$(echo -en $S)$(echo -en $color)${msg3}$(echo -en $color2)${msg1}@$(echo -en $color3)${msg2}$(echo -en $S)
if [ "$before" == "1" ]; then
line=${line2}${line}
else
line=${line}${line2}
fi
if [ "$pstate" -gt "$bstate" -a "$bstate" != "$STATE_CRITICAL" -a "$pstate" != "$STATE_INFO" ]; then
bstate=$pstate
fi
}


bstate_to_status_type() {
case $bstate in
$STATE_OK) status_type="OK";;
$STATE_WARNING) status_type="WARNING";;
$STATE_CRITICAL) status_type="CRITICAL";;
esac
}

time_usage() {
datehour_now=$(date +'%Y-%m-%d %H:%M:%S')
diff=$(diff_seconds "$datehour_when" "$datehour_now")
diff_human=$(convert_from_seconds_to $diff)
color_msg $STATE_INFO T "$diff_human"
}

nagios_line() {
[ "$NAGIOS" == "0" ] && return
if [ "$state" != "$STATE_OK" ]; then
sep2='*'
else
sep2=''
fi
nagios="$nagios$sep1$sep2$cpu%$USER@$cmd$sep2"
[ -z "$sep1" ] && sep1=" "
}

stc=/usr/local/npres/lib/super-tiny-colors.bash
[ -x $stc ] || exit 1
. $stc

set +m
shopt -s lastpipe

myself=$(basename $0)

STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
STATE_DEPENDENT=4
STATE_INFO=5

bstate=$STATE_OK
#INVERT=1

params $@

[ "$HELP" == "1" ] && use

line=""
nagios=""
sep1=""
n=0
declare -a procs

ps aux | sort -nrk 3,3 | head -n 3 | \
while read USER PID CPU MEM VSZ RSS TTY STAT START TIME COMMAND; do
#echo $CPU $COMMAND $USER
cpu=$(echo $CPU | cut -d"." -f1)
cpu=$(printf "%03d" "$cpu")
cmd=$(echo $COMMAND | cut -d" " -f1)
cmd=$(basename $cmd)
[ -n "$line" ] && line="$line "

state=$STATE_OK

[ $cpu -gt 30 ] && state=$STATE_WARNING
[ $cpu -gt 60 ] && state=$STATE_CRITICAL
nagios_line
color_msg $state "$USER" "$cmd" "$cpu%" 0 1
procs[$n]=$cpu
n=$((n+1))
done

bstate_to_status_type

if [ "$NAGIOS" == "1" ]; then
echo "$status_type - $nagios | proc1=${procs[0]} proc2=${procs[1]} proc3=${procs[2]}"
else
echo -e "$line"
fi

exit $bstate
(1-1/2)