#!/bin/bash

# ukázka skriptu pro zozbrazení aktivity systému pomocí vmstat
# použití: gvmstat.sh [prodleva] [počet měření]

# zaznamenáme statistiky pomocí vmstat(1)
DELAY=${1:-5};NUM_RECORDS=${2:-50};

vmstat -n $DELAY $[$NUM_RECORDS+1] | sed -e 1,3d -e 's/^ //' -e 's/ \+/ /g' \
> /tmp/vmstatlog.$$

# zjistíme rozsahy grafů
MAX_CS=$(cut -f 13 -d ' ' < /tmp/vmstatlog.$$ | sort -n -r | head -n 1);
MIN_CS=$(cut -f 13 -d ' ' < /tmp/vmstatlog.$$ | sort -n | head -n 1);
MAX_IO_IN=$(cut -f 11 -d ' ' < /tmp/vmstatlog.$$ | sort -n -r | head -n 1);
MIN_IO_IN=$(cut -f 11 -d ' ' < /tmp/vmstatlog.$$ | sort -n | head -n 1);
MAX_IO_OUT=$(cut -f 12 -d ' ' < /tmp/vmstatlog.$$ | sort -n -r | head -n 1);
MIN_IO_OUT=$(cut -f 12 -d ' ' < /tmp/vmstatlog.$$ | sort -n | head -n 1);
MAX_IO=$[$MAX_IO_IN+$MAX_IO_OUT];MIN_IO=$[$MIN_IO_IN+$MIN_IO_OUT];

# skript pro gnuplot
cat <<EOF | gnuplot       

# nejprve obecné nastavení
set terminal gif size 640,480              # nastavíme výstup do GIFu, rozměry
set output "/tmp/vmstatlog.$$.gif"         # kam uložit výsledný GIF
set size 1,1                               # nastavíme kreslicí plochu
set origin 0,0                             # nastavíme levý dolní roh plochy
set multiplot                              # více grafů v jednom obrázku
set grid                                   # zobrazit mřížku
set xrange [0:$NUM_RECORDS]                # set x axis range
set nokey                                  # vypneme legendu

# 1. graf - vytížení procesoru (součet sloupců 14 a 15)
set size 1,0.25                            # nastavení rozměrů grafu
set origin 0,0                             
set yrange [0:100]                         # rozsah osy y
set label "CPU load [%]" at screen 0.5,0.2 center       # popis grafu
plot "/tmp/vmstatlog.$$" using (\$14+\$15) with lines   # vykreslení

# 2. graf - běžící procesy (sloupec 1)
set size 1,0.25
set origin 0,0.25
set autoscale y
set label "Runnable processes" at screen 0.5,0.45 center
plot "/tmp/vmstatlog.$$" using 1 with lines

# 3. graf - přepnutí kontextu (sloupec 13)
ycs=($MAX_CS-$MIN_CS)/5
set size 1,0.25
set origin 0,0.5
set autoscale y
set ytics ycs
set label 1 "Context switches [cws/s]" at screen 0.5,0.7 center
set nokey
plot "/tmp/vmstatlog.$$" using 13 with lines

# 4. graf - i/o statistiky (soucet sloupců 11 a 12)
ycs=($MAX_IO-$MIN_IO)/5
set size 1,0.25
set origin 0,0.75
set autoscale y
set ytics ycs
set label "I/O activity [block/s]" at screen 0.5,0.95 center
plot "/tmp/vmstatlog.$$" using (\$11+\$12) with lines

EOF

# prohlédnutí obrázku pomocí xv
xv /tmp/vmstatlog.$$.gif

