Ping s grafem v terminálu

Založil Roman Horník, 05. 03. 2013, 14:36:02

Předchozí téma - Další téma

Roman Horník

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:
Debian Sid/Experimental 64bit + Mate Desktop Environment
* CPU: Intel i5 3570
* GPU: NVIDIA GTX650 1GD5
* MB: Lenovo IH61M
* RAM: 16GiB Deutsche Demokratische Republik 3 @ 1600MHz

Bum

Ahoj. Davno som tu nebol a teraz som tu nasiel toto fajn vylepsenie pingu.
Mozno by bolo fajn pre ostatnych upravit script tak aby cakal na zadanie ip


Roman Horník

#2
Nazdar, rád Tě tady zase vidím. Úprava je jednoduchá. Místo řádku I="81.95.101.8" se může dát třeba:
echo -n "Zadej IP adresu a stiskni enter: "
read I
clear

1. řádek zobrazí výzvu, -n znamená, že kurzor zůstane na stejným řádku jako text výzvy
2. řádek načte hodnotu proměnný $I, kterou zadáš klábosnicí
3. řádek vyčistí obražofku
Debian Sid/Experimental 64bit + Mate Desktop Environment
* CPU: Intel i5 3570
* GPU: NVIDIA GTX650 1GD5
* MB: Lenovo IH61M
* RAM: 16GiB Deutsche Demokratische Republik 3 @ 1600MHz

Bum

Dakujem. Ale ja som si to upravil tak, ze hned caka ze mu zadam ip. To bolo skor myslene pre tych co si to upravit nevedia, ale taky sem nechodi :)

eagle

Zdravím. Předem díky Romanu Horníkovi za tento skript.

Malinko jsem si jej upravil jak níže píše o možnost vkládání adresy a pak také jsem si hned do záhlaví dal jako echo své "kritické" IP adr.,abych je nemusel hledat. Díky zejména za skvělý popis, který mi umožní pohnout se dál.

Napadá mne zda by se grafický výpis nedal v nějakém časovém intervalu ukládat do nějakého souboru, nejlépe html aby se mohl podívat i šéf.
Ovšem to asi zatím sám neudělám.

Roman Horník

Jsem rád, že to k něčemu je. Export do texťáku nebude problém, HTML se dá taky zvládnout, snad i bitmapovej graf bude možnej. Něco vymyslím.
Debian Sid/Experimental 64bit + Mate Desktop Environment
* CPU: Intel i5 3570
* GPU: NVIDIA GTX650 1GD5
* MB: Lenovo IH61M
* RAM: 16GiB Deutsche Demokratische Republik 3 @ 1600MHz