Autor Téma: Ping s grafem v terminálu  (Přečteno 3025 krát)

Offline Roman Horník

  • Hlavní moderátor
  • Aktivní­ uživatel
  • *****
  • Příspěvků: 1.248
    • Zobrazit profil
  • Jabber: roman.hornik@jabber.cz
Ping s grafem v terminálu
« kdy: 05. 03. 2013, 14:36:02 »
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:
Kód: [Vybrat]
#!/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:
« Poslední změna: 06. 03. 2013, 20:26:22 od Roman Horník »
Debian Sid 64bit + Mate Desktop Environment
* CPU: Intel Core2 Quad Q9400
* GPU: NVIDIA GTX650 1GD5
* MB: Aušus P5B
* RAM: 6GiB Deutsche Demokratische Republik 2

Offline Bum

  • Začátečník
  • **
  • Příspěvků: 66
    • Zobrazit profil
Re: Ping s grafem v terminálu
« Odpověď #1 kdy: 26. 05. 2013, 11:01:39 »
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

 

Offline Roman Horník

  • Hlavní moderátor
  • Aktivní­ uživatel
  • *****
  • Příspěvků: 1.248
    • Zobrazit profil
  • Jabber: roman.hornik@jabber.cz
Re: Ping s grafem v terminálu
« Odpověď #2 kdy: 28. 05. 2013, 17:52:26 »
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
« Poslední změna: 28. 05. 2013, 17:58:39 od Roman Horník »
Debian Sid 64bit + Mate Desktop Environment
* CPU: Intel Core2 Quad Q9400
* GPU: NVIDIA GTX650 1GD5
* MB: Aušus P5B
* RAM: 6GiB Deutsche Demokratische Republik 2

Offline Bum

  • Začátečník
  • **
  • Příspěvků: 66
    • Zobrazit profil
Re: Ping s grafem v terminálu
« Odpověď #3 kdy: 03. 06. 2013, 23:17:42 »
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 :)

Offline eagle

  • Nováček
  • *
  • Příspěvků: 3
    • Zobrazit profil
Re:Ping s grafem v terminálu
« Odpověď #4 kdy: 02. 03. 2014, 10:29:56 »
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.

Offline Roman Horník

  • Hlavní moderátor
  • Aktivní­ uživatel
  • *****
  • Příspěvků: 1.248
    • Zobrazit profil
  • Jabber: roman.hornik@jabber.cz
Re:Ping s grafem v terminálu
« Odpověď #5 kdy: 19. 03. 2014, 14:50:16 »
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 64bit + Mate Desktop Environment
* CPU: Intel Core2 Quad Q9400
* GPU: NVIDIA GTX650 1GD5
* MB: Aušus P5B
* RAM: 6GiB Deutsche Demokratische Republik 2