132 lines
4.4 KiB
Bash
Executable file
132 lines
4.4 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
cd "$(dirname "$0")"
|
|
. ./common.sh
|
|
|
|
SAR_OPERATION=${SAR_OPERATION:-stop}
|
|
|
|
SAR_FOLDER="$PROJECT_BUILD_DIRECTORY/sar"
|
|
PID_FILE="$SAR_FOLDER/sar.pid"
|
|
TIMESTAMP_FILE="$SAR_FOLDER/sar.timestamp"
|
|
if [[ -f "$TIMESTAMP_FILE" ]]; then
|
|
TIMESTAMP=`cat $TIMESTAMP_FILE`
|
|
else
|
|
TIMESTAMP=`date +%s`
|
|
fi
|
|
SAR_RESULTS_FOLDER="$SAR_FOLDER/$TIMESTAMP"
|
|
SAR_OUTPUT_FILE="$SAR_RESULTS_FOLDER/sar-output.bin"
|
|
BZIP=${BZIP:-false}
|
|
CPU_COUNT=${CPU_COUNT:-`grep -c ^processor /proc/cpuinfo`}
|
|
|
|
GNUPLOT=${GNUPLOT:-false}
|
|
GNUPLOT_SCRIPTS_DIR="$PROJECT_BASEDIR/src/main/gnuplot/sar"
|
|
GNUPLOT_COMMON="$GNUPLOT_SCRIPTS_DIR/common.gplot"
|
|
|
|
function process_cpu_results() {
|
|
RESULTS_FOLDER="$SAR_RESULTS_FOLDER/cpu"; mkdir -p "$RESULTS_FOLDER"
|
|
CPU=${1:-ALL}
|
|
if [ "$CPU" == "ALL" ]; then SAR_PARAMS="-u"; else SAR_PARAMS="-u -P $CPU"; fi
|
|
TXT_FILE="$RESULTS_FOLDER/cpu-$CPU.txt"
|
|
CSV_FILE="${TXT_FILE%.txt}.csv"
|
|
PNG_FILE="${TXT_FILE%.txt}.png"
|
|
sar $SAR_PARAMS -f $SAR_OUTPUT_FILE > "$TXT_FILE"
|
|
sadf -d -- $SAR_PARAMS $SAR_OUTPUT_FILE > "$CSV_FILE"
|
|
if $GNUPLOT; then
|
|
gnuplot -e "datafile='$CSV_FILE'" "$GNUPLOT_COMMON" "$GNUPLOT_SCRIPTS_DIR/cpu.gplot" > "$PNG_FILE"
|
|
fi
|
|
}
|
|
|
|
#function process_net_results() {
|
|
# IFACE=${IFACE:-docker0}
|
|
# RESULTS_FOLDER="$SAR_RESULTS_FOLDER/net"; mkdir -p "$RESULTS_FOLDER"
|
|
# TXT_FILE="$RESULTS_FOLDER/net-$IFACE.txt"
|
|
# CSV_FILE="${TXT_FILE%.txt}.csv"
|
|
# PNG_FILE="${TXT_FILE%.txt}.png"
|
|
# sar -n DEV -f $SAR_OUTPUT_FILE > "${TXT_FILE}.tmp"
|
|
# sadf -d -- -n DEV $SAR_OUTPUT_FILE > "${CSV_FILE}.tmp"
|
|
# head -n 3 "${TXT_FILE}.tmp" > "$TXT_FILE"; grep "$IFACE" "${TXT_FILE}.tmp" >> "$TXT_FILE"; rm "${TXT_FILE}.tmp"
|
|
# head -n 1 "${CSV_FILE}.tmp" > "$CSV_FILE"; grep "$IFACE" "${CSV_FILE}.tmp" >> "$CSV_FILE"; rm "${CSV_FILE}.tmp"
|
|
# if $GNUPLOT; then
|
|
# gnuplot -e "datafile='$CSV_FILE'" "$GNUPLOT_COMMON" "$GNUPLOT_SCRIPTS_DIR/net.gplot" > "$PNG_FILE"
|
|
# fi
|
|
#}
|
|
|
|
function process_io_results() {
|
|
RESULTS_FOLDER="$SAR_RESULTS_FOLDER"
|
|
TXT_FILE="$RESULTS_FOLDER/io.txt"
|
|
CSV_FILE="${TXT_FILE%.txt}.csv"
|
|
sar -b -f $SAR_OUTPUT_FILE > "${TXT_FILE}"
|
|
sadf -d -- -b $SAR_OUTPUT_FILE > "${CSV_FILE}"
|
|
if $GNUPLOT; then
|
|
gnuplot -e "datafile='$CSV_FILE'" "$GNUPLOT_COMMON" "$GNUPLOT_SCRIPTS_DIR/io-requests.gplot" > "${TXT_FILE%.txt}-requests.png"
|
|
gnuplot -e "datafile='$CSV_FILE'" "$GNUPLOT_COMMON" "$GNUPLOT_SCRIPTS_DIR/io-data.gplot" > "${TXT_FILE%.txt}-data.png"
|
|
fi
|
|
}
|
|
|
|
function process_mem_results() {
|
|
RESULTS_FOLDER="$SAR_RESULTS_FOLDER"
|
|
TXT_FILE="$RESULTS_FOLDER/mem.txt"
|
|
CSV_FILE="${TXT_FILE%.txt}.csv"
|
|
PNG_FILE="${TXT_FILE%.txt}.png"
|
|
sar -r -f $SAR_OUTPUT_FILE > "${TXT_FILE}"
|
|
sadf -d -- -r $SAR_OUTPUT_FILE > "${CSV_FILE}"
|
|
if $GNUPLOT; then
|
|
gnuplot -e "datafile='$CSV_FILE'" "$GNUPLOT_COMMON" "$GNUPLOT_SCRIPTS_DIR/mem.gplot" > "$PNG_FILE"
|
|
fi
|
|
}
|
|
|
|
function process_cswch_results() {
|
|
RESULTS_FOLDER="$SAR_RESULTS_FOLDER"
|
|
TXT_FILE="$RESULTS_FOLDER/cswch.txt"
|
|
CSV_FILE="${TXT_FILE%.txt}.csv"
|
|
PNG_FILE="${TXT_FILE%.txt}.png"
|
|
sar -w -f $SAR_OUTPUT_FILE > "${TXT_FILE}"
|
|
sadf -d -- -w $SAR_OUTPUT_FILE > "${CSV_FILE}"
|
|
if $GNUPLOT; then
|
|
gnuplot -e "datafile='$CSV_FILE'" "$GNUPLOT_COMMON" "$GNUPLOT_SCRIPTS_DIR/cswch.gplot" > "$PNG_FILE"
|
|
fi
|
|
}
|
|
|
|
|
|
case "$SAR_OPERATION" in
|
|
|
|
start)
|
|
if [[ ! -f "$PID_FILE" ]]; then
|
|
echo "Starting sar command."
|
|
mkdir -p $SAR_RESULTS_FOLDER
|
|
echo $TIMESTAMP > $TIMESTAMP_FILE
|
|
sar -A -o "$SAR_OUTPUT_FILE" 2 &>/dev/null & SAR_PID=$! && echo $SAR_PID > $PID_FILE
|
|
fi
|
|
;;
|
|
|
|
stop)
|
|
if [[ -f "$PID_FILE" ]]; then
|
|
echo "Stopping sar command."
|
|
SAR_PID=`cat $PID_FILE`
|
|
kill $SAR_PID && rm $PID_FILE && rm $TIMESTAMP_FILE
|
|
|
|
echo "Processing sar output. GNUPLOT: $GNUPLOT"
|
|
|
|
# CPU
|
|
mkdir $SAR_RESULTS_FOLDER/cpu
|
|
|
|
process_cpu_results
|
|
for CPU in $(seq -f "%02g" 0 $(( CPU_COUNT-1 )) ); do
|
|
process_cpu_results $CPU
|
|
done
|
|
|
|
# for IFACE in $(ls /sys/class/net); do
|
|
# process_net_results $IFACE
|
|
# done
|
|
|
|
process_io_results
|
|
process_mem_results
|
|
process_cswch_results
|
|
|
|
if $BZIP; then bzip2 "$SAR_OUTPUT_FILE"; fi
|
|
|
|
echo "Done."
|
|
fi
|
|
;;
|
|
|
|
esac
|