bin bash Written by razum2um Last modified Sun 19 Jul 2009 12 43 29 07

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#!/bin/bash
#
# Written by razum2um
# Last modified Sun, 19 Jul 2009 12:43:29 +0700
#
###################################################################################
################################# USER-DENINED ####################################
###################################################################################
TIMEZONE=7 # Your timezone ( GMT+ )
DELAY=1 # pause between logging (sec)
DELTA_END_M=60 # monitoring time ( min, default 1h )
OUTPUT_FILE_PREFIX=watched_for
OUTPUT_FILE_DIR=~
TMP_FILE=~/.watcher # log-file
###################################################################################
############################## PARAMETERS CHECK ###################################
###################################################################################
USAGE_STRING="Usage: $0 <process name> [monitoring time (min) [pause between logging (sec)]]"
if [ $# -eq 3 ]
then
DELAY=$3
DELTA_END_M=$2
elif [ $# -eq 2 ]
then
DELTA_END_M=$2
elif [ $# -eq 1 ]
then
PID_PROC=`pidof $1 | head -n1`
if [ `top -b -n 1 -p $PID_PROC | grep $1 | wc -l` -eq 0 ]
then
echo "Process $1 doesn't exist!"
exit 1
fi
else
echo $USAGE_STRING
exit 1
fi
PROC=$1
PID_PROC=`pidof $1 | head -n1`
START_TIME=`date +%s`
DELTA_END_SEC=`expr $DELTA_END_M \* 60`
END_TIME=`expr $START_TIME + $DELTA_END_SEC`
TIME_SHIFT=`expr $TIMEZONE \* 3600` # to be added to time written into log
OUTPUT_FILE_PATH=${OUTPUT_FILE_DIR}/${OUTPUT_FILE_PREFIX}_${PROC}.png
###################################################################################
##################################### INFO #######################################
###################################################################################
FONT_BOLD='\e[1m'
FONT_GREEN_BOLD='\e[32m'$FONT_BOLD
FONT_RED_BOLD='\e[31m'$FONT_BOLD
FONT_NORM='\e[0m'
echo -e "Now\t\t\t $FONT_GREEN_BOLD`date +%c`$FONT_NORM"
echo -e "Stops at\t\t $FONT_RED_BOLD`date -d @$END_TIME +%c`$FONT_NORM"
echo
echo -e "${FONT_BOLD}Output into$FONT_NORM\t\t $OUTPUT_FILE_PATH"
echo -e "${FONT_BOLD}Log into$FONT_NORM\t\t $TMP_FILE"
###################################################################################
################################### LOGGING #######################################
###################################################################################
echo -n > $TMP_FILE
while [ `date +%s` -lt $END_TIME ]
do
NOW=`date +%s`
echo -n "`expr $NOW + $TIME_SHIFT` " >> $TMP_FILE
top -b -n 1 -p $PID_PROC | grep $PROC >> $TMP_FILE
sleep $DELAY
done
###################################################################################
################################### PLOTTING ######################################
###################################################################################
#X_COORD=`exrp $DELTA_END_SEC / 60`
X_COORD=30
PERFORMED_AT=`date +%d/%m/%y`
U_MAX_LOAD_TIME=`cat .watcher | awk '{print $10 " " $1}' | sort | tail -n1 | awk '{print $2}'`
U_MIN_LOAD_TIME=`cat .watcher | awk '{print $10 " " $1}' | sort -r | tail -n1 | awk '{print $2}'`
REAL_U_MAX_LOAD_TIME=`expr $U_MAX_LOAD_TIME - $TIME_SHIFT`
REAL_U_MIN_LOAD_TIME=`expr $U_MIN_LOAD_TIME - $TIME_SHIFT`
REAL_MAX_LOAD_TIME=`date -d @$REAL_U_MAX_LOAD_TIME +%H:%M:%S`
REAL_MIN_LOAD_TIME=`date -d @$REAL_U_MIN_LOAD_TIME +%H:%M:%S`
echo "set terminal png enhanced
set output \"$OUTPUT_FILE_PATH\"
set xdata time
set timefmt \"%s\"
set format x \"%H:%M:%S\"
set xtics $X_COORD
set xlabel \"Time\"
set ylabel \"CPU load, %\"
set yrange [0:100]
set title \"$PROC at $PERFORMED_AT \n Maximum at: $REAL_MAX_LOAD_TIME \n Minimum at: $REAL_MIN_LOAD_TIME\"
plot \"~/.watcher\" using 1:10 notitle with lines" | gnuplot
###################################################################################
#rm $TMP_FILE
echo "$OUTPUT_FILE_PATH created successfully"
exit 0