#!/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 [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 ###################################### ################################################################################### 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` if [ $DELTA_END_M -lt 60 ] then FORMAT_X='%Mm%Ss' else FORMAT_X='%Hh%Mm' fi echo "set terminal png enhanced set output \"$OUTPUT_FILE_PATH\" set xdata time set timefmt \"%s\" set format x \"$FORMAT_X\" 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