pinglong

Ha valaha is kellett hosszabban pingelned valamit és jó lett volna a végén nem csak a packet loss-t látni, de azt is mikor történt: github / pinglong.

$ pinglong testhost.example.com
PING testhost.example.com (11.22.33.44)
Time x=lost .=OK loss(%) min [ms] avg [ms] max [ms]
17:31: .............................. 0.0% 28.896 28.952 29.138
17:32: .............................x 3.3% 28.905 28.934 29.018
17:33: .............x...............x 6.7% 28.888 28.925 29.014
17:34: .....x........................ 3.3% 28.891 28.936 28.996
17:35: .....xx.....x..........x...... 13.3% 28.878 28.954 29.176
17:36: .....x........................ 3.3% 28.901 28.944 29.044
17:37: .............................. 0.0% 28.911 28.953 29.054
17:38: .............................. 0.0% 28.904 28.962 29.013
17:39: .............................. 0.0% 28.897 28.967 29.208
17:40: .............................. 0.0% 28.878 28.942 29.027
17:41: .............................. 0.0% 28.897 28.946 29.227
17:42: .............................. 0.0% 28.896 28.972 29.33
17:43: .............................. 0.0% 28.91 28.958 29.026
17:44: .............................. 0.0% 28.906 28.962 29.014
17:45: .............................. 0.0% 28.896 28.977 29.315
17:46: .............................. 0.0% 28.89 28.949 29.118
17:47: .............................. 0.0% 28.892 28.946 29.015
17:48: .............................. 0.0% 28.886 28.925 29.016
17:49: .............................. 0.0% 28.895 28.968 29.21
17:50: .............................. 0.0% 28.898 28.944 29.011
17:51: .............................. 0.0% 28.908 28.963 29.447
17:52: .............................. 0.0% 28.898 28.948 29.075
17:53: ............................xx 6.7% 28.902 29.008 29.86
17:54: .............................. 0.0% 28.907 28.957 29.045
17:55: .............................. 0.0% 28.904 28.958 29.051
17:56: .............................. 0.0% 28.898 28.979 29.486
17:57: .............................. 0.0% 28.904 28.984 29.711
17:58: .............................. 0.0% 28.894 28.944 29.002
17:59: .............................. 0.0% 28.905 28.971 29.616
Time x=lost .=OK loss(%) min [ms] avg [ms] max [ms]
18:00: .............................. 0.0% 28.899 28.945 29.095
18:01: .............................. 0.0% 28.905 28.950 29.034
18:02: .............................. 0.0% 28.896 28.931 28.971
18:03: .............................. 0.0% 28.896 28.953 29.038
18:04: .............................. 0.0% 28.908 28.968 29.13
18:05: .............................. 0.0% 28.858 28.973 29.801
18:06: .............................. 0.0% 28.895 28.946 29.029
18:07: .............................. 0.0% 28.9 28.947 29.011
18:08: .............................. 0.0% 28.917 28.977 29.41
18:09: .............................. 0.0% 28.886 28.942 29.054
18:10: .............................. 0.0% 28.897 28.949 29.027
18:11: .............................. 0.0% 28.893 28.950 29.06
18:12: ..xxxxxxxxxxxxxxxxxxxxxxxxxxxx 93.3% 28.91 28.917 28.924
18:13: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 100.0%
18:14: ..xxx......................... 10.0% 28.889 28.946 29.018
18:15: .............................. 0.0% 28.881 28.956 29.057
18:16: ........................^C 0.0% 28.908 28.954 29.012

Total: 1374 packets transmitted, 1302 received, 5% packet loss
RTT: min/avg/max = 28.858/28.955/29.86 ms
Downtime: sum =~ 141.4 sec

 

Hozzászólások

Köszi, ez hasznos!

-----
„Egy jó kapcsolatban a társunkat az ő dolgában kell támogatni, nem a miénkben.”
rand() a lelke mindennek! :)
Szerinted…

sub

ha nagyobb az RTT mint 1s, akkor azt is tudja kezelni? (tudom nem túl reális eset)
--

Kicsit mas, de hasonloan hasznos az mtr.

De jól jött volna, amikor a UPC-t kellett megszenvedni... Azért egy sub, mert tuti jól fog jönni.

--
openSUSE 42.2 x86_64

Cygwin alatt ha nem megy, akkor fel kell rakni a ping csomagot is :-) illetve a ping kimenetében hu_HU locale esetén tizedesvessző van, úgyhogy azt is maszírozni kell valahogy. (én barbár módon egy sima replace-szel oldottam meg, tudom, locale és környéke a szép és helyes módszer)

Feature request:

Jo lenne, ha datumvaltaskor, vagy orankent (amikor a tablazat headert is kiirja) kiirna a datumot is a headerbe (vagy fole). Most van egy csomo, hosszabb pinglong outputom, es fogalmam sincs (*), hogy az adott idoszakasz igazabol mikor is volt..

Hazilag meghackeltem, ez lett a print_header fuggvenybol:

def print_header(pingprobes):
    now=time.localtime()
    print('Date %04d%02d%02d'%(now.tm_year,now.tm_mon,now.tm_mday))
    print('Time         x=lost   .=OK  '+' '.ljust(pingprobes-20)+'loss(%)    min [ms]    avg [ms]    max [ms]')

(*) jo, persze kiszamolhato a datumbol, abbol, hogy ha egy fileba egyszer irtam, mennyit kell visszatekernem, meg hasonlokbol.. de azert jobb lenne, ha benne lenne a file-ban

A strange game. The only winning move is not to play. How about a nice game of chess?

Beleraktam, de valahogy nem tetszik. (Ugyhogy nem commit-oltam egyelore) Nem nez ki ez ott jol, viszont nem is vilagit belole ki igazan. Ha minden orahoz odateszem az eleg csunya (nekem), ha meg csak az ejfelhez akkor valami nagyobbat kell, hogy eszre lehessen venni. De hat meg akkor is... ha jol szamolom ~1500 sort kell lapozni egy-egy naphoz, szoval nem is annyira hasznos.

Meg gondolkodom, hogy esetelg minden sorban ki lehetne irni a napot, ahol az ido van jelenleg, kb "19:15" -> "Tue 19:16". A nap eleg kell legyen, vegulis azert ez nem egy monitoring tool... vagy legalabbis nem ugy...

Megirtam a koddal, h nalam hogy nez ki, de nekem sem tetszik igazan, azert sem kuldtem be (meg mert nem akartam emiatt regisztralni githubra).

A funkcionalitast viszont szeretnem. Es monitoring tool, raspberryn elindul 1-1 pinglong par nagyobb webes szolgaltatas, meg a gepem, laptopom, telefonom fele, es utolag tudom, hogy mikor volt netkieses, mikor volt rossz a szolgaltatas (ISP-hez hibajelentes miatt jo), ill. tudom, hogy mikor voltam otthon, ha valami miatt kene.

Akar egy vagy tobb honapig is futhat, nem kell hozza semmi, es neha jol jon. Erre nem tennek fel nagyobb monitoring eszkozt. A heten beluli nap nevevel ugyanugy nem erek semmit.

A strange game. The only winning move is not to play. How about a nice game of chess?

Na, kozben kitalaltam valamit. Egyelore csak fejben, nincs kod. Irja az idopontokat ugyanugy mint eddig, aztan ha jon az ejfel, akkor onnantol az idoponthoz odairja a napot is (de addig nem!), csak roviden 3 betuvel, valami ilyesmi:

Wed 14:12: ..............................   0.0%      0.256       0.3116      0.376
Wed 14:13: ..............................   0.0%      0.236       0.3037      0.513
Wed 14:14: ..............................   0.0%      0.224       0.2937      0.486
Wed 14:15: ..............................   0.0%      0.233       0.2859      0.484
Wed 14:16: ..............................   0.0%      0.24        0.2796      0.365
Wed 14:17: ..............................   0.0%      0.23        0.2888      0.332
Wed 14:18: ..............................   0.0%      0.228       0.2951      0.36

aztan ennyi, nem valo ez arra, hogy hetekig fusson. (... vagy arra csinalhatnek egy csv outputot....)

Velemeny?

Ha scripttel akarja valaki feldolgozni, akkor célszerű valami értelmesebb formátumot találni ilyen célra :-P Persze *nix körökben az a "természetes", sőt az a feladatok egy jelentős része, hogy az egyik program kimenetét kell átalakítani egy másik program bemeneti formátumára - aztán vagy sikerül, vagy nem...

Sot, lehet irni is olyan programot, ami pl. a pinget hivogatja megfelelo idokozonkent, parse-olja annak a kimenetet, es az eredmenyt egy olyan formatumba irja, amit konnyu feldolgozni. A pinglong is pont ezt csinalja (csak emberi feldolgozasra).

A strange game. The only winning move is not to play. How about a nice game of chess?

"lehet irni is olyan programot, ami pl. a pinget hivogatja megfelelo idokozonkent, parse-olja annak a kimenetet" - ami egészen addig lesz jó, amíg a ping kimenetéhez nem nyúlnak hozzá, nem fog más nyelvi környezet miatt másképp viselkedni, etc. Anno belefutottam ilyenbe: valami RHEL5-ös, 32 bites "ls" binárist kellett hurcolni tovább, és az adott user(ek) eseténem a PATH-t úgy beállítani, hogy az azt tartalmazó könyvtár előrébb legyen, mint ahol az OS-sel szállított ls volt, mert az alkalmazás egy alaposan felparaméterezett ls kimenetét olvasta be, mint adattábla - és az újban néhány kapcsoló más értelmet nyert, úgyhogy nem működött az egész kóceráj.
utána meg az volt a baj, hogy az "ls -l" kimenetében nem user és csoport, hanem csak uid és gid látszik... Ja. mert a régi nem tudta a pam-on keresztüli külső usereket/csportokat kezelni...

Tisztaban vagyok a buktatoival. Ugyanez van webscrapingnel is, ha valtozik a formatum, utana kell huzni a kodot.

Akkor egy kerdes: beleneztel-e a pinglong (amirol a topic szol) forrasaba? En igen. :)

A strange game. The only winning move is not to play. How about a nice game of chess?

Akkor egy kerdes: beleneztel-e a pinglong (amirol a topic szol) forrasaba? En igen. :)

Bele se kell nezni a kodba, ott van a lapon:

"It's written in python3 and uses the standard ping or ping6 command..."

Azert jobb igy, mert normal user nem tudna kuldeni ping csomagot (raw socket kell hozza), vagyis setuid kellene, vagy cap_net_raw (ahogy a ping-en is), azzal meg nem akartam bonyolitani az installt.

Amugy a ping kimenete vajon mikor valtozott utoljara?

Nem a leirasat olvastam, hanem a kodjat, amikor beletettem az en peldanyomba a datumot. A ping csomag hasznalata egyertelmu, ezzel sem mondtal sokat, tudom, hogy spec. jog kell hozza. Raadasul scriptnyelvnel nem szeretik a setuidot versenyhelyzet miatt (bar lehet, hogy ez csak bash eseten van igy). Nem zellernek akartad cimezni?

A strange game. The only winning move is not to play. How about a nice game of chess?