eping 4.51__tar.gz → 4.76__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: eping
3
- Version: 4.51
3
+ Version: 4.76
4
4
  Summary: Continuous ICMP reachability monitor built on fping, with a CSV logfile analyser (epinga)
5
5
  Author-email: Ewald Jeitler <ewald@jeitler.cc>
6
6
  License: GPL-3.0-or-later
@@ -17,13 +17,25 @@ Description-Content-Type: text/markdown
17
17
  License-File: LICENSE
18
18
  Dynamic: license-file
19
19
 
20
- # eping.py 4.51
20
+ # eping.py 4.76
21
21
 
22
22
  Continuous ICMP reachability monitor built on `fping`. Scans a host list in a loop,
23
23
  reports each host UP/DOWN/NO-DNS, counts state changes. CLI (curses) or web GUI.
24
24
 
25
25
  Written by Ewald Jeitler — <https://www.jeitler.cc>
26
26
 
27
+ ## Screenshots
28
+
29
+ Web GUI (`-web`) - 61 demo hosts, mouse-over shows the host details and its state history:
30
+
31
+ ![eping web GUI](https://raw.githubusercontent.com/ewaldj/eping/main/docs/img/web-gui.png)
32
+
33
+ ![eping web GUI, host details](https://raw.githubusercontent.com/ewaldj/eping/main/docs/img/web-gui-host-details.png)
34
+
35
+ Terminal (curses) mode:
36
+
37
+ ![eping CLI](https://raw.githubusercontent.com/ewaldj/eping/main/docs/img/cli.png)
38
+
27
39
  ## Requirements
28
40
 
29
41
  - Python 3.6+ (eping.py and epinga.py)
@@ -246,13 +258,13 @@ Single self-contained page, no external resources.
246
258
  - Toolbar, two rows (wraps if narrow):
247
259
  - Row 1: view select (9 views), sort order select, SET REFERENCE, ZERO CHANGES,
248
260
  CLEAR ALL, address mode select, GET NAMES, ADV OPTIONS, LOGGING, FILE OPERATIONS
249
- select, EXIT, font size.
261
+ select, STOP, font size.
250
262
  - Row 2: match filter (SET/CLEAR), ADV FILTER, host field (ADD/DELETE), ADD/DEL LIST, comment
251
- field (COMMENT), GENERATE REPORT select, STOP/START button.
252
- - **STOP / START** (last button of row 2): `STOP` pauses the check - no pings are sent, the table, the
253
- counters and the log stay as they are (header shows `PAUSED`, the button turns red and reads `START`).
263
+ field (COMMENT), GENERATE REPORT select, PAUSE/RESUME button.
264
+ - **PAUSE / RESUME** (last button of row 2): `PAUSE` pauses the check - no pings are sent, the table, the
265
+ counters and the log stay as they are (header shows `PAUSED`, the button turns red and reads `RESUME`).
254
266
  Commands (view, sort, filter, ADD/DELETE ...) keep working while paused; added hosts are pinged after
255
- `START`. A round that is running when `STOP` is pressed is cut short. The log gets the comment rows
267
+ `RESUME`. A round that is running when `PAUSE` is pressed is cut short. The log gets the comment rows
256
268
  `CHECK PAUSED` / `CHECK RESUMED`; epinga.py shows the pause as a gap in the timeline
257
269
  (grey, like missing data) and does not count it as time in any state. Works in `-web` and `-wvc` (no CLI key); not in the read-only view (`-wv`).
258
270
  - View select, sort order select, address mode select and ADV OPTIONS all match the
@@ -342,13 +354,14 @@ directly, `D` resets the selected option to its default, `R` resets all, ESC/`X`
342
354
 
343
355
  | Option | Range | 0/-1 means |
344
356
  |---|---|---|
345
- | BACKOFF | 1 – 2 | — |
346
357
  | TIMEOUT | 10 – 5000 ms | — |
347
358
  | RETRIES | 0 – 5 | — |
348
359
  | INTERVAL | -1 – 250 ms | `-1` = auto (use RATE), `0` = no pacing |
349
360
  | THREADS | 0 – 32 | `0` = auto |
350
361
  | WAIT TIME | 0 – 600 s | — |
351
362
  | CONFIRM | 1 – 10 | — |
363
+ | NEW HOST GRACE | 0 – 60 s | — |
364
+ | SILENT LIMIT | 2 – 10 periods | — |
352
365
  | RATE | 10 – 25000 pps | — |
353
366
  | FLAP WINDOW | 1 – 72000 min | — |
354
367
  | DNS TTL | 0 – 3600 s | — |
@@ -379,12 +392,11 @@ Same bounds as the matching CLI flags (`-lms`/`-lmf` for the last two - see *Out
379
392
  | POST | `/api/command` | `{"cmd":"...","value":"..."}` | control (see cmd list below) |
380
393
  | POST | `/api/advvalues` | `{"filter":{...}}` | ADV FILTER: values still selectable for a draft selection (same format as `adv_filter`) |
381
394
  | POST | `/api/upload` | host list, text | add hosts |
382
- | POST | `/api/log_sources` | `{"names":[...],"upload":false}` | SOURCE values of the named logfiles (empty = active logfile; `upload:true` = files stored by `/api/reportupload`), for the jump host dialog of GENERATE REPORT |
383
395
  | POST | `/api/jumphost` | `{"action":"info|test|trust|connect|local","host":...,"port":...,"user":...,"secret":...,"hostkey":"ask|accept-new|off","key":...}` | JUMPHOST window (see *SSH source (JUMPHOST)*) |
384
396
 
385
397
  `cmd` values: `up_only`, `set_filter`, `addr_mode`, `get_names`, `match_filter`,
386
398
  `adv_filter`, `sort`, `add`, `del`, `set_ref`, `zero`, `add_comment`, `reset_log`, `clear`,
387
- `set_option`, `reset_options`, `run_report`, `pause` (value `1` = STOP, `0` = START), `save_hosts_file`, `exit`. `adv_filter` value: JSON object `{"<field>":{"mode":"in|out","values":[...]}}` with the fields `model`,
399
+ `set_option`, `reset_options`, `run_report`, `pause` (value `1` = PAUSE, `0` = RESUME), `save_hosts_file`, `exit`. `adv_filter` value: JSON object `{"<field>":{"mode":"in|out","values":[...]}}` with the fields `model`,
388
400
  `location`, `sysloc`, `type`, `comment`; `\u0001none` as value = hosts without a value; `{}` = off
389
401
  `set_option`
390
402
  value: `key=value`. `reset_log` value: logging off - optional custom file name (blank =
@@ -406,11 +418,11 @@ on a router) and a jump host sees one command instead of one per round.
406
418
  - **Period:** fping pings every host once per period = `-w` (at least 200 ms), raised to
407
419
  `hosts x interval + timeout` so one pass fits. A round ends when every host delivered a new
408
420
  result (at most one period + timeout). RUNS counts only rounds in which hosts were checked.
409
- - **UP / DOWN:** a reply = UP at once. DOWN after `-re` + 1 timeouts in a row, or when fping
410
- delivered nothing for a host for 3 periods. fping drops replies later than its timeout, so the
411
- loop timeout is `-t` x `-B`^`-re`, at most 2000 ms. With `-cf` > 1 a host leaves UP only after that
412
- many consecutive non-UP results (suppressed count in the log's TBD column).
413
- - **New hosts:** only an answer is reported during a grace period of (`-re` + 2) periods + 5 s - a slow first
421
+ - **UP / DOWN:** a reply = UP at once. DOWN after `-re` + 1 timeouts in a row (fewer when the ping period is
422
+ long: the number is cut to what fits in 2 x `-t`, at least 2), or when fping delivered nothing for a host for
423
+ `-sp` periods. fping drops replies later than `-t`, so `-t` is the longest a reply may take. With `-cf` > 1 a
424
+ host leaves UP only after that many consecutive non-UP results (suppressed count in the log's TBD column).
425
+ - **New hosts:** only an answer is reported during a grace period of (miss limit + 1) periods + `-ng` s (1 s) - a slow first
414
426
  contact (new NAT / firewall state) must not show up as DOWN.
415
427
  - **Names:** resolved by background threads (32 parallel, cached `-dns` seconds, randomized; an expired
416
428
  entry stays in use until its refresh is done). A name without an address yet joins as soon as it
@@ -425,7 +437,7 @@ on a router) and a jump host sees one command instead of one per round.
425
437
  - **Rate:** one process sends one packet per `-i` ms, `-ra` sets the packets/s. A pass over N hosts takes at
426
438
  least N / `-ra` s: 32 000 hosts at `-ra 1000` = about 34 s per round. Raise `-ra` for big lists (mind the
427
439
  router / NAT / jump host). `-i` floor is 1 ms; `-i 0` removes pacing.
428
- - STOP stops the processes, START starts them again.
440
+ - PAUSE stops the processes, RESUME starts them again.
429
441
 
430
442
  ## Options
431
443
 
@@ -441,13 +453,14 @@ separated) · `-r` IP range (comma separated, shortened end)
441
453
  ### Probing
442
454
  | Option | Range | Default | Meaning |
443
455
  |---|---|---|---|
444
- | `-B` | 1 – 2 | 1.5 | backoff factor per retry |
445
- | `-t` | 10 – 5000 | 250 | timeout (ms); with `-B` and `-re` it gives the loop timeout |
446
- | `-re` | 0 – 5 | 3 | DOWN after `-re` + 1 timeouts in a row |
456
+ | `-t` | 10 – 5000 | 1000 | ping timeout (ms): a reply later than this is lost |
457
+ | `-re` | 0 – 5 | 3 | DOWN after up to `-re` + 1 timeouts in a row (see *How checking works*) |
447
458
  | `-i` | -1 – 250 | auto | send interval (ms), overrides `-ra`; `-1` auto, `0` unpaced |
448
459
  | `-p` | 0 – 32 | auto | fping processes per address family |
449
460
  | `-w` | 0 – 600 | 0.5 | ping period per host (s, at least 0.2) |
450
461
  | `-cf` | 1 – 10 | 2 | consecutive DOWN before leaving UP (`1` = off) |
462
+ | `-ng` | 0 – 60 | 1 | seconds added to the grace period of new hosts |
463
+ | `-sp` | 2 – 10 | 3 | silent ping periods (no fping output) until DOWN |
451
464
  | `-ra` | 10 – 25000 | 1000 | ICMP packets/s |
452
465
  | `-fw` | 1 – 72000 | 72000 | minutes to count as flapping |
453
466
  | `-dns` | 0 – 3600 | 300 | hostname cache TTL (s, `0` off) |
@@ -581,7 +594,7 @@ exit, a full notice prints once:
581
594
  https://github.com/ewaldj/eping
582
595
  ```
583
596
 
584
- Shown on any terminal-driven exit (CLI `[E]`/Ctrl-C, `-web`'s EXIT/Ctrl-C in its
597
+ Shown on any terminal-driven exit (CLI `[E]`/Ctrl-C, `-web`'s STOP/Ctrl-C in its
585
598
  terminal). The web GUI's in-browser banner is separate and shorter.
586
599
 
587
600
  ## Run analysis on exit
@@ -594,7 +607,7 @@ Run an analysis of this logfile with epinga.py now? [y/N]:
594
607
 
595
608
  `y` (case-insensitive) runs `epinga.py -f <logfile>` before exit; anything else skips
596
609
  it. Only asked on a terminal-driven exit (CLI `[E]`/Ctrl-C, or `-wv`/`-wvc`'s own
597
- keyboard `[E]`/Ctrl-C); exiting via a browser's EXIT button never asks. No prompt if
610
+ keyboard `[E]`/Ctrl-C); exiting via a browser's STOP button never asks. No prompt if
598
611
  logging is off or the logfile is empty/missing.
599
612
 
600
613
  ## GENERATE REPORT (web gui) / ANALYSE NOW (CLI `N`)
@@ -604,22 +617,16 @@ running - not just at exit. Web: GENERATE REPORT dropdown, four entries - `ACTIV
604
617
  LOGFILE` analyses the active CSV log (needs logging on, non-empty logfile, else the tab
605
618
  closes and a footer error is shown), `CHOOSE LOGFILE` picks one or more `.csv` files in
606
619
  the working dir - table (name/size/date), "select all" checkbox, nothing preselected;
607
- up to 25 files per report, checking a 26th is refused. If a log holds more than one source (`local` and jump hosts, log column `SOURCE`), a
608
- selection dialog follows automatically - all checked, ENTER = GENERATE; only the periods of the checked sources are calculated (see *Source filter* in the
609
- epinga.py section).
610
-
611
- All report entries (`ACTIVE LOGFILE`, `CHOOSE LOGFILE`, `UPLOAD FROM CLIENT`) check the selected log(s) first: if they hold more than one
612
- source (measuring host changed between local and jump hosts, or between jump hosts), a dialog offers to analyse all,
613
- one or several sources (all checked = default; CANCEL aborts the report). With one source the report starts directly.
614
- The report tab opens only after this choice; if the browser blocks it (e.g. after a long upload), a REPORT READY dialog with an OPEN REPORT button appears.
620
+ up to 25 files per report, checking a 26th is refused. If a log holds more than one source (`local` and jump hosts, log column `SOURCE`), the report contains all of them and a
621
+ source switch (see *Source switch in the HTML report*); no dialog.
622
+
623
+ The report tab opens right away; if the browser blocks it (e.g. after a long upload), a REPORT READY dialog with an OPEN REPORT button appears.
615
624
  While the report is generated the waiting tab shows a progress bar with the step (merging files / analysing / analysing source N of M / writing report), the percentage and an estimated remaining time (extrapolated from the elapsed time, shown after a few seconds); without a tab the same text is shown in the footer. The percentage covers all passes (the main analysis plus one per source, see *Source switch*).
616
625
 
617
626
  `UPLOAD FROM CLIENT` picks one or more `.csv` logfiles on the computer running the browser (max 25, 1 GB each);
618
627
  they are uploaded to a server temp dir, merged like `CHOOSE LOGFILE` and analysed as one report. Temp files and
619
628
  report are removed when eping.py exits or on the next upload.
620
629
 
621
- ![SELECT JUMPHOST](https://raw.githubusercontent.com/ewaldj/eping/main/docs/img/select-jumphost.png)
622
-
623
630
  More than one selected file is merged chronologically (by the row timestamps, streamed) into one temporary
624
631
  CSV, analysed as a single logfile, then the temp file is removed. Result opens in a new
625
632
  tab; if a selected file was invalid or has meanwhile been removed (e.g. by log rotation
@@ -733,7 +740,7 @@ With `-debug` a round longer than 10 s is also logged as a `SLOW ROUND` comment
733
740
  - `-p` > 1 and `-i 0` reduce accuracy (false DOWN) — defaults avoid both.
734
741
  - Needs an fping with `-l` and per-target sequence numbers (fping 4.3 or newer; the Windows / macOS packages have it).
735
742
 
736
- # epinga.py 2.45
743
+ # epinga.py 2.47
737
744
 
738
745
  Analyses an eping.py CSV log: terminal summary + self-contained HTML report (no
739
746
  server, no external assets) with per-host detail, state-change timelines, and
@@ -1,10 +1,22 @@
1
- # eping.py 4.51
1
+ # eping.py 4.76
2
2
 
3
3
  Continuous ICMP reachability monitor built on `fping`. Scans a host list in a loop,
4
4
  reports each host UP/DOWN/NO-DNS, counts state changes. CLI (curses) or web GUI.
5
5
 
6
6
  Written by Ewald Jeitler — <https://www.jeitler.cc>
7
7
 
8
+ ## Screenshots
9
+
10
+ Web GUI (`-web`) - 61 demo hosts, mouse-over shows the host details and its state history:
11
+
12
+ ![eping web GUI](https://raw.githubusercontent.com/ewaldj/eping/main/docs/img/web-gui.png)
13
+
14
+ ![eping web GUI, host details](https://raw.githubusercontent.com/ewaldj/eping/main/docs/img/web-gui-host-details.png)
15
+
16
+ Terminal (curses) mode:
17
+
18
+ ![eping CLI](https://raw.githubusercontent.com/ewaldj/eping/main/docs/img/cli.png)
19
+
8
20
  ## Requirements
9
21
 
10
22
  - Python 3.6+ (eping.py and epinga.py)
@@ -227,13 +239,13 @@ Single self-contained page, no external resources.
227
239
  - Toolbar, two rows (wraps if narrow):
228
240
  - Row 1: view select (9 views), sort order select, SET REFERENCE, ZERO CHANGES,
229
241
  CLEAR ALL, address mode select, GET NAMES, ADV OPTIONS, LOGGING, FILE OPERATIONS
230
- select, EXIT, font size.
242
+ select, STOP, font size.
231
243
  - Row 2: match filter (SET/CLEAR), ADV FILTER, host field (ADD/DELETE), ADD/DEL LIST, comment
232
- field (COMMENT), GENERATE REPORT select, STOP/START button.
233
- - **STOP / START** (last button of row 2): `STOP` pauses the check - no pings are sent, the table, the
234
- counters and the log stay as they are (header shows `PAUSED`, the button turns red and reads `START`).
244
+ field (COMMENT), GENERATE REPORT select, PAUSE/RESUME button.
245
+ - **PAUSE / RESUME** (last button of row 2): `PAUSE` pauses the check - no pings are sent, the table, the
246
+ counters and the log stay as they are (header shows `PAUSED`, the button turns red and reads `RESUME`).
235
247
  Commands (view, sort, filter, ADD/DELETE ...) keep working while paused; added hosts are pinged after
236
- `START`. A round that is running when `STOP` is pressed is cut short. The log gets the comment rows
248
+ `RESUME`. A round that is running when `PAUSE` is pressed is cut short. The log gets the comment rows
237
249
  `CHECK PAUSED` / `CHECK RESUMED`; epinga.py shows the pause as a gap in the timeline
238
250
  (grey, like missing data) and does not count it as time in any state. Works in `-web` and `-wvc` (no CLI key); not in the read-only view (`-wv`).
239
251
  - View select, sort order select, address mode select and ADV OPTIONS all match the
@@ -323,13 +335,14 @@ directly, `D` resets the selected option to its default, `R` resets all, ESC/`X`
323
335
 
324
336
  | Option | Range | 0/-1 means |
325
337
  |---|---|---|
326
- | BACKOFF | 1 – 2 | — |
327
338
  | TIMEOUT | 10 – 5000 ms | — |
328
339
  | RETRIES | 0 – 5 | — |
329
340
  | INTERVAL | -1 – 250 ms | `-1` = auto (use RATE), `0` = no pacing |
330
341
  | THREADS | 0 – 32 | `0` = auto |
331
342
  | WAIT TIME | 0 – 600 s | — |
332
343
  | CONFIRM | 1 – 10 | — |
344
+ | NEW HOST GRACE | 0 – 60 s | — |
345
+ | SILENT LIMIT | 2 – 10 periods | — |
333
346
  | RATE | 10 – 25000 pps | — |
334
347
  | FLAP WINDOW | 1 – 72000 min | — |
335
348
  | DNS TTL | 0 – 3600 s | — |
@@ -360,12 +373,11 @@ Same bounds as the matching CLI flags (`-lms`/`-lmf` for the last two - see *Out
360
373
  | POST | `/api/command` | `{"cmd":"...","value":"..."}` | control (see cmd list below) |
361
374
  | POST | `/api/advvalues` | `{"filter":{...}}` | ADV FILTER: values still selectable for a draft selection (same format as `adv_filter`) |
362
375
  | POST | `/api/upload` | host list, text | add hosts |
363
- | POST | `/api/log_sources` | `{"names":[...],"upload":false}` | SOURCE values of the named logfiles (empty = active logfile; `upload:true` = files stored by `/api/reportupload`), for the jump host dialog of GENERATE REPORT |
364
376
  | POST | `/api/jumphost` | `{"action":"info|test|trust|connect|local","host":...,"port":...,"user":...,"secret":...,"hostkey":"ask|accept-new|off","key":...}` | JUMPHOST window (see *SSH source (JUMPHOST)*) |
365
377
 
366
378
  `cmd` values: `up_only`, `set_filter`, `addr_mode`, `get_names`, `match_filter`,
367
379
  `adv_filter`, `sort`, `add`, `del`, `set_ref`, `zero`, `add_comment`, `reset_log`, `clear`,
368
- `set_option`, `reset_options`, `run_report`, `pause` (value `1` = STOP, `0` = START), `save_hosts_file`, `exit`. `adv_filter` value: JSON object `{"<field>":{"mode":"in|out","values":[...]}}` with the fields `model`,
380
+ `set_option`, `reset_options`, `run_report`, `pause` (value `1` = PAUSE, `0` = RESUME), `save_hosts_file`, `exit`. `adv_filter` value: JSON object `{"<field>":{"mode":"in|out","values":[...]}}` with the fields `model`,
369
381
  `location`, `sysloc`, `type`, `comment`; `\u0001none` as value = hosts without a value; `{}` = off
370
382
  `set_option`
371
383
  value: `key=value`. `reset_log` value: logging off - optional custom file name (blank =
@@ -387,11 +399,11 @@ on a router) and a jump host sees one command instead of one per round.
387
399
  - **Period:** fping pings every host once per period = `-w` (at least 200 ms), raised to
388
400
  `hosts x interval + timeout` so one pass fits. A round ends when every host delivered a new
389
401
  result (at most one period + timeout). RUNS counts only rounds in which hosts were checked.
390
- - **UP / DOWN:** a reply = UP at once. DOWN after `-re` + 1 timeouts in a row, or when fping
391
- delivered nothing for a host for 3 periods. fping drops replies later than its timeout, so the
392
- loop timeout is `-t` x `-B`^`-re`, at most 2000 ms. With `-cf` > 1 a host leaves UP only after that
393
- many consecutive non-UP results (suppressed count in the log's TBD column).
394
- - **New hosts:** only an answer is reported during a grace period of (`-re` + 2) periods + 5 s - a slow first
402
+ - **UP / DOWN:** a reply = UP at once. DOWN after `-re` + 1 timeouts in a row (fewer when the ping period is
403
+ long: the number is cut to what fits in 2 x `-t`, at least 2), or when fping delivered nothing for a host for
404
+ `-sp` periods. fping drops replies later than `-t`, so `-t` is the longest a reply may take. With `-cf` > 1 a
405
+ host leaves UP only after that many consecutive non-UP results (suppressed count in the log's TBD column).
406
+ - **New hosts:** only an answer is reported during a grace period of (miss limit + 1) periods + `-ng` s (1 s) - a slow first
395
407
  contact (new NAT / firewall state) must not show up as DOWN.
396
408
  - **Names:** resolved by background threads (32 parallel, cached `-dns` seconds, randomized; an expired
397
409
  entry stays in use until its refresh is done). A name without an address yet joins as soon as it
@@ -406,7 +418,7 @@ on a router) and a jump host sees one command instead of one per round.
406
418
  - **Rate:** one process sends one packet per `-i` ms, `-ra` sets the packets/s. A pass over N hosts takes at
407
419
  least N / `-ra` s: 32 000 hosts at `-ra 1000` = about 34 s per round. Raise `-ra` for big lists (mind the
408
420
  router / NAT / jump host). `-i` floor is 1 ms; `-i 0` removes pacing.
409
- - STOP stops the processes, START starts them again.
421
+ - PAUSE stops the processes, RESUME starts them again.
410
422
 
411
423
  ## Options
412
424
 
@@ -422,13 +434,14 @@ separated) · `-r` IP range (comma separated, shortened end)
422
434
  ### Probing
423
435
  | Option | Range | Default | Meaning |
424
436
  |---|---|---|---|
425
- | `-B` | 1 – 2 | 1.5 | backoff factor per retry |
426
- | `-t` | 10 – 5000 | 250 | timeout (ms); with `-B` and `-re` it gives the loop timeout |
427
- | `-re` | 0 – 5 | 3 | DOWN after `-re` + 1 timeouts in a row |
437
+ | `-t` | 10 – 5000 | 1000 | ping timeout (ms): a reply later than this is lost |
438
+ | `-re` | 0 – 5 | 3 | DOWN after up to `-re` + 1 timeouts in a row (see *How checking works*) |
428
439
  | `-i` | -1 – 250 | auto | send interval (ms), overrides `-ra`; `-1` auto, `0` unpaced |
429
440
  | `-p` | 0 – 32 | auto | fping processes per address family |
430
441
  | `-w` | 0 – 600 | 0.5 | ping period per host (s, at least 0.2) |
431
442
  | `-cf` | 1 – 10 | 2 | consecutive DOWN before leaving UP (`1` = off) |
443
+ | `-ng` | 0 – 60 | 1 | seconds added to the grace period of new hosts |
444
+ | `-sp` | 2 – 10 | 3 | silent ping periods (no fping output) until DOWN |
432
445
  | `-ra` | 10 – 25000 | 1000 | ICMP packets/s |
433
446
  | `-fw` | 1 – 72000 | 72000 | minutes to count as flapping |
434
447
  | `-dns` | 0 – 3600 | 300 | hostname cache TTL (s, `0` off) |
@@ -562,7 +575,7 @@ exit, a full notice prints once:
562
575
  https://github.com/ewaldj/eping
563
576
  ```
564
577
 
565
- Shown on any terminal-driven exit (CLI `[E]`/Ctrl-C, `-web`'s EXIT/Ctrl-C in its
578
+ Shown on any terminal-driven exit (CLI `[E]`/Ctrl-C, `-web`'s STOP/Ctrl-C in its
566
579
  terminal). The web GUI's in-browser banner is separate and shorter.
567
580
 
568
581
  ## Run analysis on exit
@@ -575,7 +588,7 @@ Run an analysis of this logfile with epinga.py now? [y/N]:
575
588
 
576
589
  `y` (case-insensitive) runs `epinga.py -f <logfile>` before exit; anything else skips
577
590
  it. Only asked on a terminal-driven exit (CLI `[E]`/Ctrl-C, or `-wv`/`-wvc`'s own
578
- keyboard `[E]`/Ctrl-C); exiting via a browser's EXIT button never asks. No prompt if
591
+ keyboard `[E]`/Ctrl-C); exiting via a browser's STOP button never asks. No prompt if
579
592
  logging is off or the logfile is empty/missing.
580
593
 
581
594
  ## GENERATE REPORT (web gui) / ANALYSE NOW (CLI `N`)
@@ -585,22 +598,16 @@ running - not just at exit. Web: GENERATE REPORT dropdown, four entries - `ACTIV
585
598
  LOGFILE` analyses the active CSV log (needs logging on, non-empty logfile, else the tab
586
599
  closes and a footer error is shown), `CHOOSE LOGFILE` picks one or more `.csv` files in
587
600
  the working dir - table (name/size/date), "select all" checkbox, nothing preselected;
588
- up to 25 files per report, checking a 26th is refused. If a log holds more than one source (`local` and jump hosts, log column `SOURCE`), a
589
- selection dialog follows automatically - all checked, ENTER = GENERATE; only the periods of the checked sources are calculated (see *Source filter* in the
590
- epinga.py section).
591
-
592
- All report entries (`ACTIVE LOGFILE`, `CHOOSE LOGFILE`, `UPLOAD FROM CLIENT`) check the selected log(s) first: if they hold more than one
593
- source (measuring host changed between local and jump hosts, or between jump hosts), a dialog offers to analyse all,
594
- one or several sources (all checked = default; CANCEL aborts the report). With one source the report starts directly.
595
- The report tab opens only after this choice; if the browser blocks it (e.g. after a long upload), a REPORT READY dialog with an OPEN REPORT button appears.
601
+ up to 25 files per report, checking a 26th is refused. If a log holds more than one source (`local` and jump hosts, log column `SOURCE`), the report contains all of them and a
602
+ source switch (see *Source switch in the HTML report*); no dialog.
603
+
604
+ The report tab opens right away; if the browser blocks it (e.g. after a long upload), a REPORT READY dialog with an OPEN REPORT button appears.
596
605
  While the report is generated the waiting tab shows a progress bar with the step (merging files / analysing / analysing source N of M / writing report), the percentage and an estimated remaining time (extrapolated from the elapsed time, shown after a few seconds); without a tab the same text is shown in the footer. The percentage covers all passes (the main analysis plus one per source, see *Source switch*).
597
606
 
598
607
  `UPLOAD FROM CLIENT` picks one or more `.csv` logfiles on the computer running the browser (max 25, 1 GB each);
599
608
  they are uploaded to a server temp dir, merged like `CHOOSE LOGFILE` and analysed as one report. Temp files and
600
609
  report are removed when eping.py exits or on the next upload.
601
610
 
602
- ![SELECT JUMPHOST](https://raw.githubusercontent.com/ewaldj/eping/main/docs/img/select-jumphost.png)
603
-
604
611
  More than one selected file is merged chronologically (by the row timestamps, streamed) into one temporary
605
612
  CSV, analysed as a single logfile, then the temp file is removed. Result opens in a new
606
613
  tab; if a selected file was invalid or has meanwhile been removed (e.g. by log rotation
@@ -714,7 +721,7 @@ With `-debug` a round longer than 10 s is also logged as a `SLOW ROUND` comment
714
721
  - `-p` > 1 and `-i 0` reduce accuracy (false DOWN) — defaults avoid both.
715
722
  - Needs an fping with `-l` and per-target sequence numbers (fping 4.3 or newer; the Windows / macOS packages have it).
716
723
 
717
- # epinga.py 2.45
724
+ # epinga.py 2.47
718
725
 
719
726
  Analyses an eping.py CSV log: terminal summary + self-contained HTML report (no
720
727
  server, no external assets) with per-host detail, state-change timelines, and
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "eping"
7
- version = "4.51"
7
+ version = "4.76"
8
8
  description = "Continuous ICMP reachability monitor built on fping, with a CSV logfile analyser (epinga)"
9
9
  readme = "README.md"
10
10
  license = { text = "GPL-3.0-or-later" }