No nazdar,
jak tak na vás koukám, tak se ulejváte, netvoříte, jen konzumujete. No dobrá. Protože mě poslední dobou můj ISP séře, chtěl jsem si udělat něco terminálovýho, co měří jak odezvu, tak pro lepší přehlednost vykresluje i graf. To proto, abych to nasměroval do souboru a pak mu to jako důkazní materiál obouchal o hlavu.
Chtěl jsem se vyhnout matematice, nepovedlo se, matematiky je v tak malý bashovitosti poměrně dost, ale skriptík funguje, tak vám ho předkládám.
Jo, graf (co řádek, to horizontální teploměr) se dá různě nastavit, v defaultu platí, že 1 znak = 1ms. Dá se nastavit ofset (když to někomu na vzdálenej server pinguje 200-300ms, tak nastavím ofset -200ms, aby se mi to tam vešlo), dá se nastavit "zesílení"- jak jsem psal, 1 znak = 1ms, ale může to bejt 0.5ms i 5ms (pro silně nestabilní latence). A rychlost pingování se dá taky nastavit, s přesností na ms (dolní hranice je ale rovna nejvyšší latenci), dokonce jsem kvůli tomu musel udělat stabilizační automatiku (nepříliš přesná, ale mnohem přesnější, než to bylo bez ní).
Zatím jsem ještě nevyřešil pár věcí, hlavně maximální dýlku sloupce (ležatýho), aby se nevykresloval na 2 řádky.
Tady je ta prasečina:
#!/bin/bash
######## Nastavení ########
## IP počítače pro ping
I="81.95.101.8"
## Násobení grafu (lze použít i desetinný místa)
N=1
## Posun hodnoty grafu
O=0
## Rychlost aktualizace [s]; povoleny jsou desetinný čísla (např. 0.2, nebo bez nuly .2)
A=1
## Znak grafu
G="▬"
## Znak ozdobných konců sloupců grafu, co se PŘIDAJÍ na začátek a konec sloupců (lze vynechat)
K="⬤"
######## Motor ########
echo -e "\n IP: $I (`whois $I | grep "[C|c]ountry:" | awk '{print $2}'`)\n\n Rychlost aktualizace:\
\t$A \bms\n Násob. hodnoty grafu:\tx$N\n Posun hodnoty grafu:\t-$O \bs\n\n Čas\t Odezva\tGraf"
## Hodíme do smyčky, aby se pingování neustále opakovalo. Bez řádků 29 a 50 by to pinglo jen jednou
while [ : ]; do
## Získání a zobrazení času odezvy (pouze číslo v ms)
Z=`ping -c 1 -w 0.2 $I | grep "64 bytes" | awk '{print $7}' | sed -e 's/time=//g'`
## Sloupce čas, odezva, pokud se paket ztratí, hodnota odezvy bude --- ms
echo -ne " `date '+%T'` `echo " $Z"`ms" | sed -e 's/ ms/ --- ms/g'
## Přepočet na graf (+posun, +násobení, +zaokrouhlení)
V=`echo -e "scale=3; (($Z-$O)*$N+0.5)/1" | bc -l`
## Motor grafu
printf -v f "%"$V"s"
printf "\t$K%s" "${f// /$G}"
## Zobrazí na vrcholku sloupce grafu znak $K
echo -e "$K"
## Korekce zpoždění časovače rychlosti aktualizace
R=`echo "scale=5; $A-($Z/1024)" | bc -l 2> /dev/null`
sleep $R 2> /dev/null
done
... a tady je v akci:
