eping 3.91__tar.gz → 4.0__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: 3.91
3
+ Version: 4.0
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,7 +17,7 @@ Description-Content-Type: text/markdown
17
17
  License-File: LICENSE
18
18
  Dynamic: license-file
19
19
 
20
- # eping.py 3.91
20
+ # eping.py 4.00
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.
@@ -52,7 +52,7 @@ Portable Windows version (web GUI only, no installation): download and unpack
52
52
  [`eping-windows.zip`](https://github.com/ewaldj/eping/blob/main/Windows_Version/eping-windows.zip)
53
53
  ([folder](https://github.com/ewaldj/eping/tree/main/Windows_Version/)), then start `eping.exe`.
54
54
 
55
- - Contains `eping.exe` (small launcher window: web port, Start / Stop / Restart, open web GUI),
55
+ - Contains `eping.exe` (small launcher window: web port, Start / Stop / Restart, open web GUI, Disable autostart / logging / file, CLI options, Check updates),
56
56
  `eping.py`, `epinga.py`, `fping.exe` + `cygwin1.dll` (fping for Windows) and an embedded Python.
57
57
  - The web GUI opens in the browser (default `http://127.0.0.1:8080`). The port is read from the hosts file
58
58
  (`opt: -port 9000`); a port already in use is reported and can be changed in the launcher window.
@@ -197,6 +197,7 @@ DOWN. Columns: hostname/IP, state, RTT (ms), last-change timestamp, change count
197
197
  | `C` | clear all hosts and state |
198
198
  | `P` | address mode picker — 4 modes (see *Address modes*) |
199
199
  | `X` | ADV OPTIONS — live option editing (see *ADV OPTIONS*) |
200
+ | `J` | JUMPHOST — run fping on a jump host via ssh (see *SSH source (JUMPHOST)*) |
200
201
  | `N` | ANALYSE NOW — run epinga.py against the active logfile in the background (see *GENERATE REPORT*) |
201
202
  | `G` | GET NAMES — reverse-DNS raw IPs, one-shot, background |
202
203
  | `R` | redraw screen |
@@ -376,6 +377,8 @@ Same bounds as the matching CLI flags (`-lms`/`-lmf` for the last two - see *Out
376
377
  | POST | `/api/command` | `{"cmd":"...","value":"..."}` | control (see cmd list below) |
377
378
  | POST | `/api/advvalues` | `{"filter":{...}}` | ADV FILTER: values still selectable for a draft selection (same format as `adv_filter`) |
378
379
  | POST | `/api/upload` | host list, text | add hosts |
380
+ | POST | `/api/log_sources` | `{"names":[...]}` | SOURCE values of the named logfiles (empty = active logfile), for SELECT JUMPHOST |
381
+ | 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)*) |
379
382
 
380
383
  `cmd` values: `up_only`, `set_filter`, `addr_mode`, `get_names`, `match_filter`,
381
384
  `adv_filter`, `sort`, `add`, `del`, `set_ref`, `zero`, `add_comment`, `reset_log`, `clear`,
@@ -386,7 +389,7 @@ value: `key=value`. `reset_log` value: logging off - optional custom file name (
386
389
  auto-generated); logging on - `y` (clear) or `new`/`new=<name>` (new file, optional
387
390
  custom name). `run_report`: `value` = empty (active logfile) or one `.csv` filename; or
388
391
  JSON body field `values`: `[...]` to merge and analyse multiple `.csv` files as one
389
- (max 25). `save_hosts_file` value: optional target file name (blank
392
+ (max 25); optional body field `sources`: `[...]` restricts the analysis to these SOURCE values. `save_hosts_file` value: optional target file name (blank
390
393
  = active `-f` hostfile, or `eping-hosts.txt` if none).
391
394
 
392
395
  `-wv` answers `403` to `POST /api/command`/`/api/upload`; `-wvc`/`-web` allow both. No
@@ -441,6 +444,9 @@ separated) · `-r` IP range (comma separated, shortened end)
441
444
  | `-ipo` | — | off | start with IP ONLY |
442
445
  | `-gn` | — | off | GET NAMES once at startup |
443
446
  | `-ncs` | — | off | skip `--check-source` |
447
+ | `-ssh` | `[USER@]HOST[:PORT]` | off | run fping on a jump host via ssh (see *SSH source (JUMPHOST)*) |
448
+ | `-sshkey` | file | agent | private key file for `-ssh` |
449
+ | `-sshhk` | accept-new/ask/off | accept-new | host key check for `-ssh` |
444
450
  | `-ncf` | — | off | CSV: do not ping the CSV IP of a name without DNS record |
445
451
  | `-up` | — | 0 | learning phase: after N rounds keep only hosts seen UP |
446
452
  | `-setref` | — | off | with `-up`: hosts seen UP become new reference list |
@@ -468,11 +474,11 @@ Hard-enforced at startup and live via ADV OPTIONS (`-web` only), same bounds.
468
474
  Unless `-dl`, every round appends to `eping-log_YYYY-MM-DD_HH:MM:SS.csv` (or `-o FILE`):
469
475
 
470
476
  ```
471
- TIMESTAMP,HOSTNAME,PREVIOUS_STATE,CURRENT_STATE,RTT,NO_OF_CHANGES,CHANGE_TIMESTAMP,TBD,IP,INV_HOSTNAME,SERIAL_NUMBER,MODEL,LOCATION,SYSLOCATION,TYPE,INV_COMMENT
477
+ TIMESTAMP,HOSTNAME,PREVIOUS_STATE,CURRENT_STATE,RTT,NO_OF_CHANGES,CHANGE_TIMESTAMP,TBD,IP,INV_HOSTNAME,SERIAL_NUMBER,MODEL,LOCATION,SYSLOCATION,TYPE,INV_COMMENT,SOURCE
472
478
  ```
473
479
 
474
480
  `INV_HOSTNAME` … `INV_COMMENT`: the inventory values of a host added from an inventory CSV (see
475
- *Inventory CSV import*), empty for all other hosts. Logs without these columns (older
481
+ *Inventory CSV import*), empty for all other hosts. `SOURCE`: `local` or the ssh jump host that produced the row. Logs without these columns (older
476
482
  versions) stay readable by epinga.py.
477
483
 
478
484
  `TBD`: suppressed DOWN observations (`-cf`). `IP`: address actually pinged (empty for
@@ -498,6 +504,29 @@ these rows automatically.
498
504
  - Logging off: same dialog, no clear option - `START LOGGING` starts a fresh file
499
505
  right away, same optional custom name.
500
506
 
507
+ ## SSH source (JUMPHOST)
508
+
509
+ Run fping on a jump host instead of locally (system `ssh` only). Any Linux host with a working `fping`
510
+ (e.g. a caretaker) will do; it resolves the names itself. Start: `-ssh [USER@]HOST[:PORT]` (+ `-sshkey FILE`, `-sshhk MODE`);
511
+ the password or key passphrase is asked on the terminal at startup. At runtime: `J` in the CLI,
512
+ JUMPHOST button in the web GUI (after ADV OPTIONS).
513
+
514
+ ![JUMPHOST window](https://raw.githubusercontent.com/ewaldj/eping/main/docs/img/jumphost.png)
515
+
516
+ - Window: HOST, PORT, USER, PASSWORD (key passphrase), HOST KEY, KEY FILE. TEST checks ssh, login and
517
+ fping on the jump host, CONNECT switches the scan source, USE LOCAL switches back. A missing local
518
+ `ssh` is shown in the window.
519
+ - HOST KEY: `accept-new` (default) - hosts seen for the first time are trusted automatically, a changed
520
+ key is still refused; `ask` - an unknown key is shown with its fingerprint and must be accepted with
521
+ TRUST KEY; `off` - no check at all (insecure).
522
+ - The switch is applied at the start of the next round; hosts, states and counters are kept.
523
+ - Connection loss: results of the round are discarded, hosts keep their state, a banner is shown and
524
+ eping reconnects. Logged as `#COMMENT#` rows (`JUMPHOST ... OFFLINE: <reason>`, `JUMPHOST ... ONLINE
525
+ again`, `SOURCE SWITCH <old> -> <new>`), shown in the report's comment timeline.
526
+ - Log column `SOURCE`: `local` or the jump host of each row.
527
+ - Limits: GET NAMES and the CSV-IP fallback are not available over ssh; at most 4 ssh processes
528
+ (2 on Windows); the web password transfer is plain HTTP - use `-bind 127.0.0.1` or a trusted network.
529
+
501
530
  ## Web GUI header
502
531
 
503
532
  Header: `eping.py vX.XX · © Ewald Jeitler · supervised by Nelly · tools.jeitler.cc ·
@@ -539,11 +568,17 @@ logging is off or the logfile is empty/missing.
539
568
  ## GENERATE REPORT (web gui) / ANALYSE NOW (CLI `N`)
540
569
 
541
570
  Runs epinga.py against one or more logfiles in the background while eping.py keeps
542
- running - not just at exit. Web: GENERATE REPORT dropdown, two entries - `ACTIVE
571
+ running - not just at exit. Web: GENERATE REPORT dropdown, three entries - `ACTIVE
543
572
  LOGFILE` analyses the active CSV log (needs logging on, non-empty logfile, else the tab
544
573
  closes and a footer error is shown), `CHOOSE LOGFILE` picks one or more `.csv` files in
545
574
  the working dir - table (name/size/date), "select all" checkbox, nothing preselected;
546
- up to 25 files per report, checking a 26th is refused.
575
+ up to 25 files per report, checking a 26th is refused. `SELECT JUMPHOST` lists the
576
+ sources (`local` and jump hosts, log column `SOURCE`) found in the active logfile - all checked,
577
+ ENTER = GENERATE; only the periods of the checked sources are calculated (see *Source filter* in the
578
+ epinga.py section). Shown only if the log holds more than one source.
579
+
580
+ ![SELECT JUMPHOST](https://raw.githubusercontent.com/ewaldj/eping/main/docs/img/select-jumphost.png)
581
+
547
582
  More than one selected file is merged chronologically (by mtime) into one temporary
548
583
  CSV, analysed as a single logfile, then the temp file is removed. Result opens in a new
549
584
  tab; if a selected file was invalid or has meanwhile been removed (e.g. by log rotation
@@ -654,7 +689,7 @@ phases: eping's own work (~0.12s on 4109 hosts).
654
689
  - `-p` > 1 and `-i 0` reduce accuracy (false DOWN) — defaults avoid both.
655
690
  - `-dr 0` produces flapping hosts in practice — keep the default of 1.
656
691
 
657
- # epinga.py 2.35
692
+ # epinga.py 2.37
658
693
 
659
694
  Analyses an eping.py CSV log: terminal summary + self-contained HTML report (no
660
695
  server, no external assets) with per-host detail, state-change timelines, and
@@ -679,6 +714,7 @@ Output: `<base>_report.txt` and `<base>_report.html` (`--html FILE` overrides).
679
714
  | `-s`, `--start YYYY-MM-DD HH:MM:SS` | rows from this timestamp on |
680
715
  | `-e`, `--end YYYY-MM-DD HH:MM:SS` | rows up to this timestamp |
681
716
  | `-S`, `--sort {name,flapping,uptime,rtt}` | summary sort order (default `name`) |
717
+ | `--source SOURCE` | only rows of this source - `local` or the jump host label from the log column `SOURCE` (repeatable; see *Source filter*) |
682
718
  | `--no-detail` | summary only |
683
719
  | `--no-changes` | omit state-change list |
684
720
  | `--html FILE` | custom HTML filename |
@@ -686,6 +722,17 @@ Output: `<base>_report.txt` and `<base>_report.html` (`--html FILE` overrides).
686
722
  | `-q`, `--quiet` | suppress progress bar |
687
723
  | `--no-version-check` | skip online update check |
688
724
 
725
+ ## Source filter
726
+
727
+ Logs written while eping.py ran on a jump host carry a `SOURCE` column. With `--source` (or the
728
+ selection shown on a terminal when the log holds several sources; numbers like `1,3`, ENTER = all)
729
+ only the periods of the selected sources are calculated: uptime, up/down time, RTT, changes and the
730
+ timeline. Periods of other sources are excluded and shown as a gap in the timeline; a state change that
731
+ happened during such a gap is not counted. Without `--source` everything is combined (as before).
732
+ Logs without a `SOURCE` column are treated as `local`.
733
+
734
+ ![epinga report, source local](https://raw.githubusercontent.com/ewaldj/eping/main/docs/img/report-source.png)
735
+
689
736
  ## Called from eping.py
690
737
 
691
738
  `GENERATE REPORT` (web gui) and `N`/ANALYSE NOW (CLI) both run epinga.py in a
@@ -1,4 +1,4 @@
1
- # eping.py 3.91
1
+ # eping.py 4.00
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.
@@ -33,7 +33,7 @@ Portable Windows version (web GUI only, no installation): download and unpack
33
33
  [`eping-windows.zip`](https://github.com/ewaldj/eping/blob/main/Windows_Version/eping-windows.zip)
34
34
  ([folder](https://github.com/ewaldj/eping/tree/main/Windows_Version/)), then start `eping.exe`.
35
35
 
36
- - Contains `eping.exe` (small launcher window: web port, Start / Stop / Restart, open web GUI),
36
+ - Contains `eping.exe` (small launcher window: web port, Start / Stop / Restart, open web GUI, Disable autostart / logging / file, CLI options, Check updates),
37
37
  `eping.py`, `epinga.py`, `fping.exe` + `cygwin1.dll` (fping for Windows) and an embedded Python.
38
38
  - The web GUI opens in the browser (default `http://127.0.0.1:8080`). The port is read from the hosts file
39
39
  (`opt: -port 9000`); a port already in use is reported and can be changed in the launcher window.
@@ -178,6 +178,7 @@ DOWN. Columns: hostname/IP, state, RTT (ms), last-change timestamp, change count
178
178
  | `C` | clear all hosts and state |
179
179
  | `P` | address mode picker — 4 modes (see *Address modes*) |
180
180
  | `X` | ADV OPTIONS — live option editing (see *ADV OPTIONS*) |
181
+ | `J` | JUMPHOST — run fping on a jump host via ssh (see *SSH source (JUMPHOST)*) |
181
182
  | `N` | ANALYSE NOW — run epinga.py against the active logfile in the background (see *GENERATE REPORT*) |
182
183
  | `G` | GET NAMES — reverse-DNS raw IPs, one-shot, background |
183
184
  | `R` | redraw screen |
@@ -357,6 +358,8 @@ Same bounds as the matching CLI flags (`-lms`/`-lmf` for the last two - see *Out
357
358
  | POST | `/api/command` | `{"cmd":"...","value":"..."}` | control (see cmd list below) |
358
359
  | POST | `/api/advvalues` | `{"filter":{...}}` | ADV FILTER: values still selectable for a draft selection (same format as `adv_filter`) |
359
360
  | POST | `/api/upload` | host list, text | add hosts |
361
+ | POST | `/api/log_sources` | `{"names":[...]}` | SOURCE values of the named logfiles (empty = active logfile), for SELECT JUMPHOST |
362
+ | 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)*) |
360
363
 
361
364
  `cmd` values: `up_only`, `set_filter`, `addr_mode`, `get_names`, `match_filter`,
362
365
  `adv_filter`, `sort`, `add`, `del`, `set_ref`, `zero`, `add_comment`, `reset_log`, `clear`,
@@ -367,7 +370,7 @@ value: `key=value`. `reset_log` value: logging off - optional custom file name (
367
370
  auto-generated); logging on - `y` (clear) or `new`/`new=<name>` (new file, optional
368
371
  custom name). `run_report`: `value` = empty (active logfile) or one `.csv` filename; or
369
372
  JSON body field `values`: `[...]` to merge and analyse multiple `.csv` files as one
370
- (max 25). `save_hosts_file` value: optional target file name (blank
373
+ (max 25); optional body field `sources`: `[...]` restricts the analysis to these SOURCE values. `save_hosts_file` value: optional target file name (blank
371
374
  = active `-f` hostfile, or `eping-hosts.txt` if none).
372
375
 
373
376
  `-wv` answers `403` to `POST /api/command`/`/api/upload`; `-wvc`/`-web` allow both. No
@@ -422,6 +425,9 @@ separated) · `-r` IP range (comma separated, shortened end)
422
425
  | `-ipo` | — | off | start with IP ONLY |
423
426
  | `-gn` | — | off | GET NAMES once at startup |
424
427
  | `-ncs` | — | off | skip `--check-source` |
428
+ | `-ssh` | `[USER@]HOST[:PORT]` | off | run fping on a jump host via ssh (see *SSH source (JUMPHOST)*) |
429
+ | `-sshkey` | file | agent | private key file for `-ssh` |
430
+ | `-sshhk` | accept-new/ask/off | accept-new | host key check for `-ssh` |
425
431
  | `-ncf` | — | off | CSV: do not ping the CSV IP of a name without DNS record |
426
432
  | `-up` | — | 0 | learning phase: after N rounds keep only hosts seen UP |
427
433
  | `-setref` | — | off | with `-up`: hosts seen UP become new reference list |
@@ -449,11 +455,11 @@ Hard-enforced at startup and live via ADV OPTIONS (`-web` only), same bounds.
449
455
  Unless `-dl`, every round appends to `eping-log_YYYY-MM-DD_HH:MM:SS.csv` (or `-o FILE`):
450
456
 
451
457
  ```
452
- TIMESTAMP,HOSTNAME,PREVIOUS_STATE,CURRENT_STATE,RTT,NO_OF_CHANGES,CHANGE_TIMESTAMP,TBD,IP,INV_HOSTNAME,SERIAL_NUMBER,MODEL,LOCATION,SYSLOCATION,TYPE,INV_COMMENT
458
+ TIMESTAMP,HOSTNAME,PREVIOUS_STATE,CURRENT_STATE,RTT,NO_OF_CHANGES,CHANGE_TIMESTAMP,TBD,IP,INV_HOSTNAME,SERIAL_NUMBER,MODEL,LOCATION,SYSLOCATION,TYPE,INV_COMMENT,SOURCE
453
459
  ```
454
460
 
455
461
  `INV_HOSTNAME` … `INV_COMMENT`: the inventory values of a host added from an inventory CSV (see
456
- *Inventory CSV import*), empty for all other hosts. Logs without these columns (older
462
+ *Inventory CSV import*), empty for all other hosts. `SOURCE`: `local` or the ssh jump host that produced the row. Logs without these columns (older
457
463
  versions) stay readable by epinga.py.
458
464
 
459
465
  `TBD`: suppressed DOWN observations (`-cf`). `IP`: address actually pinged (empty for
@@ -479,6 +485,29 @@ these rows automatically.
479
485
  - Logging off: same dialog, no clear option - `START LOGGING` starts a fresh file
480
486
  right away, same optional custom name.
481
487
 
488
+ ## SSH source (JUMPHOST)
489
+
490
+ Run fping on a jump host instead of locally (system `ssh` only). Any Linux host with a working `fping`
491
+ (e.g. a caretaker) will do; it resolves the names itself. Start: `-ssh [USER@]HOST[:PORT]` (+ `-sshkey FILE`, `-sshhk MODE`);
492
+ the password or key passphrase is asked on the terminal at startup. At runtime: `J` in the CLI,
493
+ JUMPHOST button in the web GUI (after ADV OPTIONS).
494
+
495
+ ![JUMPHOST window](https://raw.githubusercontent.com/ewaldj/eping/main/docs/img/jumphost.png)
496
+
497
+ - Window: HOST, PORT, USER, PASSWORD (key passphrase), HOST KEY, KEY FILE. TEST checks ssh, login and
498
+ fping on the jump host, CONNECT switches the scan source, USE LOCAL switches back. A missing local
499
+ `ssh` is shown in the window.
500
+ - HOST KEY: `accept-new` (default) - hosts seen for the first time are trusted automatically, a changed
501
+ key is still refused; `ask` - an unknown key is shown with its fingerprint and must be accepted with
502
+ TRUST KEY; `off` - no check at all (insecure).
503
+ - The switch is applied at the start of the next round; hosts, states and counters are kept.
504
+ - Connection loss: results of the round are discarded, hosts keep their state, a banner is shown and
505
+ eping reconnects. Logged as `#COMMENT#` rows (`JUMPHOST ... OFFLINE: <reason>`, `JUMPHOST ... ONLINE
506
+ again`, `SOURCE SWITCH <old> -> <new>`), shown in the report's comment timeline.
507
+ - Log column `SOURCE`: `local` or the jump host of each row.
508
+ - Limits: GET NAMES and the CSV-IP fallback are not available over ssh; at most 4 ssh processes
509
+ (2 on Windows); the web password transfer is plain HTTP - use `-bind 127.0.0.1` or a trusted network.
510
+
482
511
  ## Web GUI header
483
512
 
484
513
  Header: `eping.py vX.XX · © Ewald Jeitler · supervised by Nelly · tools.jeitler.cc ·
@@ -520,11 +549,17 @@ logging is off or the logfile is empty/missing.
520
549
  ## GENERATE REPORT (web gui) / ANALYSE NOW (CLI `N`)
521
550
 
522
551
  Runs epinga.py against one or more logfiles in the background while eping.py keeps
523
- running - not just at exit. Web: GENERATE REPORT dropdown, two entries - `ACTIVE
552
+ running - not just at exit. Web: GENERATE REPORT dropdown, three entries - `ACTIVE
524
553
  LOGFILE` analyses the active CSV log (needs logging on, non-empty logfile, else the tab
525
554
  closes and a footer error is shown), `CHOOSE LOGFILE` picks one or more `.csv` files in
526
555
  the working dir - table (name/size/date), "select all" checkbox, nothing preselected;
527
- up to 25 files per report, checking a 26th is refused.
556
+ up to 25 files per report, checking a 26th is refused. `SELECT JUMPHOST` lists the
557
+ sources (`local` and jump hosts, log column `SOURCE`) found in the active logfile - all checked,
558
+ ENTER = GENERATE; only the periods of the checked sources are calculated (see *Source filter* in the
559
+ epinga.py section). Shown only if the log holds more than one source.
560
+
561
+ ![SELECT JUMPHOST](https://raw.githubusercontent.com/ewaldj/eping/main/docs/img/select-jumphost.png)
562
+
528
563
  More than one selected file is merged chronologically (by mtime) into one temporary
529
564
  CSV, analysed as a single logfile, then the temp file is removed. Result opens in a new
530
565
  tab; if a selected file was invalid or has meanwhile been removed (e.g. by log rotation
@@ -635,7 +670,7 @@ phases: eping's own work (~0.12s on 4109 hosts).
635
670
  - `-p` > 1 and `-i 0` reduce accuracy (false DOWN) — defaults avoid both.
636
671
  - `-dr 0` produces flapping hosts in practice — keep the default of 1.
637
672
 
638
- # epinga.py 2.35
673
+ # epinga.py 2.37
639
674
 
640
675
  Analyses an eping.py CSV log: terminal summary + self-contained HTML report (no
641
676
  server, no external assets) with per-host detail, state-change timelines, and
@@ -660,6 +695,7 @@ Output: `<base>_report.txt` and `<base>_report.html` (`--html FILE` overrides).
660
695
  | `-s`, `--start YYYY-MM-DD HH:MM:SS` | rows from this timestamp on |
661
696
  | `-e`, `--end YYYY-MM-DD HH:MM:SS` | rows up to this timestamp |
662
697
  | `-S`, `--sort {name,flapping,uptime,rtt}` | summary sort order (default `name`) |
698
+ | `--source SOURCE` | only rows of this source - `local` or the jump host label from the log column `SOURCE` (repeatable; see *Source filter*) |
663
699
  | `--no-detail` | summary only |
664
700
  | `--no-changes` | omit state-change list |
665
701
  | `--html FILE` | custom HTML filename |
@@ -667,6 +703,17 @@ Output: `<base>_report.txt` and `<base>_report.html` (`--html FILE` overrides).
667
703
  | `-q`, `--quiet` | suppress progress bar |
668
704
  | `--no-version-check` | skip online update check |
669
705
 
706
+ ## Source filter
707
+
708
+ Logs written while eping.py ran on a jump host carry a `SOURCE` column. With `--source` (or the
709
+ selection shown on a terminal when the log holds several sources; numbers like `1,3`, ENTER = all)
710
+ only the periods of the selected sources are calculated: uptime, up/down time, RTT, changes and the
711
+ timeline. Periods of other sources are excluded and shown as a gap in the timeline; a state change that
712
+ happened during such a gap is not counted. Without `--source` everything is combined (as before).
713
+ Logs without a `SOURCE` column are treated as `local`.
714
+
715
+ ![epinga report, source local](https://raw.githubusercontent.com/ewaldj/eping/main/docs/img/report-source.png)
716
+
670
717
  ## Called from eping.py
671
718
 
672
719
  `GENERATE REPORT` (web gui) and `N`/ANALYSE NOW (CLI) both run epinga.py in a
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "eping"
7
- version = "3.91"
7
+ version = "4.00"
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" }