eping 3.91__tar.gz → 4.1__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.
- {eping-3.91 → eping-4.1}/PKG-INFO +63 -14
- {eping-3.91 → eping-4.1}/README.md +62 -13
- {eping-3.91 → eping-4.1}/pyproject.toml +1 -1
- {eping-3.91 → eping-4.1}/src/eping/eping.py +946 -85
- {eping-3.91 → eping-4.1}/src/eping/epinga.py +113 -7
- {eping-3.91 → eping-4.1}/src/eping.egg-info/PKG-INFO +63 -14
- {eping-3.91 → eping-4.1}/LICENSE +0 -0
- {eping-3.91 → eping-4.1}/setup.cfg +0 -0
- {eping-3.91 → eping-4.1}/src/eping/__init__.py +0 -0
- {eping-3.91 → eping-4.1}/src/eping/_launch_eping.py +0 -0
- {eping-3.91 → eping-4.1}/src/eping.egg-info/SOURCES.txt +0 -0
- {eping-3.91 → eping-4.1}/src/eping.egg-info/dependency_links.txt +0 -0
- {eping-3.91 → eping-4.1}/src/eping.egg-info/entry_points.txt +0 -0
- {eping-3.91 → eping-4.1}/src/eping.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: eping
|
|
3
|
-
Version:
|
|
3
|
+
Version: 4.1
|
|
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
|
|
20
|
+
# eping.py 4.01
|
|
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.
|
|
@@ -192,11 +192,12 @@ DOWN. Columns: hostname/IP, state, RTT (ms), last-change timestamp, change count
|
|
|
192
192
|
| `F` | add hosts from a file |
|
|
193
193
|
| `O` | sort order picker — 5 orders (see *Views and sort orders*) |
|
|
194
194
|
| `T` | add comment — timestamped CSV row (logging on only) |
|
|
195
|
-
| `S` | set reference — shown list becomes new base list |
|
|
195
|
+
| `S` | set reference — shown list becomes new base list (hosts not shown are removed and no longer pinged) |
|
|
196
196
|
| `Z` | zero changes — reset CH-TIME/CH NO, states kept |
|
|
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 |
|
|
@@ -299,9 +300,11 @@ unless lowered). `CH NO` counts changes; `Z` resets it.
|
|
|
299
300
|
|
|
300
301
|
CLI `U` and web GUI's view select/`U` picker (see *CLI mode*) reach the same 9 views.
|
|
301
302
|
The web GUI's own `U` keyboard shortcut only cycles ALL HOSTS → CURRENTLY-UP →
|
|
302
|
-
UP+FLAPPING → ALL HOSTS (see *Web GUI* keyboard shortcuts). A view
|
|
303
|
-
|
|
304
|
-
|
|
303
|
+
UP+FLAPPING → ALL HOSTS (see *Web GUI* keyboard shortcuts). A view is a pure display
|
|
304
|
+
filter, evaluated live on every refresh: all hosts keep being pinged, a host that goes
|
|
305
|
+
DOWN leaves `CURRENTLY-UP`, a host that comes UP appears. Only SET REFERENCE removes the
|
|
306
|
+
hosts that are not shown from the host list (they are no longer pinged) and resets the
|
|
307
|
+
view to ALL HOSTS. A view with no matches is rejected, previous view stays active.
|
|
305
308
|
|
|
306
309
|
`ALWAYS-UP`/`ALWAYS-DOWN`: never changed state this run (`CH NO` = 0). `NO-DNS` counts
|
|
307
310
|
as DOWN for `CURRENTLY-DOWN`/`ALWAYS-DOWN`/`DOWN+FLAPPING`.
|
|
@@ -376,6 +379,8 @@ Same bounds as the matching CLI flags (`-lms`/`-lmf` for the last two - see *Out
|
|
|
376
379
|
| POST | `/api/command` | `{"cmd":"...","value":"..."}` | control (see cmd list below) |
|
|
377
380
|
| POST | `/api/advvalues` | `{"filter":{...}}` | ADV FILTER: values still selectable for a draft selection (same format as `adv_filter`) |
|
|
378
381
|
| POST | `/api/upload` | host list, text | add hosts |
|
|
382
|
+
| POST | `/api/log_sources` | `{"names":[...]}` | SOURCE values of the named logfiles (empty = active logfile), for SELECT JUMPHOST |
|
|
383
|
+
| 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
384
|
|
|
380
385
|
`cmd` values: `up_only`, `set_filter`, `addr_mode`, `get_names`, `match_filter`,
|
|
381
386
|
`adv_filter`, `sort`, `add`, `del`, `set_ref`, `zero`, `add_comment`, `reset_log`, `clear`,
|
|
@@ -386,7 +391,7 @@ value: `key=value`. `reset_log` value: logging off - optional custom file name (
|
|
|
386
391
|
auto-generated); logging on - `y` (clear) or `new`/`new=<name>` (new file, optional
|
|
387
392
|
custom name). `run_report`: `value` = empty (active logfile) or one `.csv` filename; or
|
|
388
393
|
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
|
|
394
|
+
(max 25); optional body field `sources`: `[...]` restricts the analysis to these SOURCE values. `save_hosts_file` value: optional target file name (blank
|
|
390
395
|
= active `-f` hostfile, or `eping-hosts.txt` if none).
|
|
391
396
|
|
|
392
397
|
`-wv` answers `403` to `POST /api/command`/`/api/upload`; `-wvc`/`-web` allow both. No
|
|
@@ -441,8 +446,11 @@ separated) · `-r` IP range (comma separated, shortened end)
|
|
|
441
446
|
| `-ipo` | — | off | start with IP ONLY |
|
|
442
447
|
| `-gn` | — | off | GET NAMES once at startup |
|
|
443
448
|
| `-ncs` | — | off | skip `--check-source` |
|
|
449
|
+
| `-ssh` | `[USER@]HOST[:PORT]` | off | run fping on a jump host via ssh (see *SSH source (JUMPHOST)*) |
|
|
450
|
+
| `-sshkey` | file | agent | private key file for `-ssh` |
|
|
451
|
+
| `-sshhk` | accept-new/ask/off | accept-new | host key check for `-ssh` |
|
|
444
452
|
| `-ncf` | — | off | CSV: do not ping the CSV IP of a name without DNS record |
|
|
445
|
-
| `-up` | — | 0 | learning phase: after N rounds
|
|
453
|
+
| `-up` | — | 0 | learning phase: after N rounds show only hosts seen UP (view CURRENTLY-UP; all hosts are still pinged until SET REFERENCE) |
|
|
446
454
|
| `-setref` | — | off | with `-up`: hosts seen UP become new reference list |
|
|
447
455
|
|
|
448
456
|
Hard-enforced at startup and live via ADV OPTIONS (`-web` only), same bounds.
|
|
@@ -468,11 +476,11 @@ Hard-enforced at startup and live via ADV OPTIONS (`-web` only), same bounds.
|
|
|
468
476
|
Unless `-dl`, every round appends to `eping-log_YYYY-MM-DD_HH:MM:SS.csv` (or `-o FILE`):
|
|
469
477
|
|
|
470
478
|
```
|
|
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
|
|
479
|
+
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
480
|
```
|
|
473
481
|
|
|
474
482
|
`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
|
|
483
|
+
*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
484
|
versions) stay readable by epinga.py.
|
|
477
485
|
|
|
478
486
|
`TBD`: suppressed DOWN observations (`-cf`). `IP`: address actually pinged (empty for
|
|
@@ -498,6 +506,29 @@ these rows automatically.
|
|
|
498
506
|
- Logging off: same dialog, no clear option - `START LOGGING` starts a fresh file
|
|
499
507
|
right away, same optional custom name.
|
|
500
508
|
|
|
509
|
+
## SSH source (JUMPHOST)
|
|
510
|
+
|
|
511
|
+
Run fping on a jump host instead of locally (system `ssh` only). Any Linux host with a working `fping`
|
|
512
|
+
(e.g. a caretaker) will do; it resolves the names itself. Start: `-ssh [USER@]HOST[:PORT]` (+ `-sshkey FILE`, `-sshhk MODE`);
|
|
513
|
+
the password or key passphrase is asked on the terminal at startup. At runtime: `J` in the CLI,
|
|
514
|
+
JUMPHOST button in the web GUI (after ADV OPTIONS).
|
|
515
|
+
|
|
516
|
+

|
|
517
|
+
|
|
518
|
+
- Window: HOST, PORT, USER, PASSWORD (key passphrase), HOST KEY, KEY FILE. TEST checks ssh, login and
|
|
519
|
+
fping on the jump host, CONNECT switches the scan source, USE LOCAL switches back. A missing local
|
|
520
|
+
`ssh` is shown in the window.
|
|
521
|
+
- HOST KEY: `accept-new` (default) - hosts seen for the first time are trusted automatically, a changed
|
|
522
|
+
key is still refused; `ask` - an unknown key is shown with its fingerprint and must be accepted with
|
|
523
|
+
TRUST KEY; `off` - no check at all (insecure).
|
|
524
|
+
- The switch is applied at the start of the next round; hosts, states and counters are kept.
|
|
525
|
+
- Connection loss: results of the round are discarded, hosts keep their state, a banner is shown and
|
|
526
|
+
eping reconnects. Logged as `#COMMENT#` rows (`JUMPHOST ... OFFLINE: <reason>`, `JUMPHOST ... ONLINE
|
|
527
|
+
again`, `SOURCE SWITCH <old> -> <new>`), shown in the report's comment timeline.
|
|
528
|
+
- Log column `SOURCE`: `local` or the jump host of each row.
|
|
529
|
+
- Limits: GET NAMES and the CSV-IP fallback are not available over ssh; at most 4 ssh processes
|
|
530
|
+
(2 on Windows); the web password transfer is plain HTTP - use `-bind 127.0.0.1` or a trusted network.
|
|
531
|
+
|
|
501
532
|
## Web GUI header
|
|
502
533
|
|
|
503
534
|
Header: `eping.py vX.XX · © Ewald Jeitler · supervised by Nelly · tools.jeitler.cc ·
|
|
@@ -539,11 +570,17 @@ logging is off or the logfile is empty/missing.
|
|
|
539
570
|
## GENERATE REPORT (web gui) / ANALYSE NOW (CLI `N`)
|
|
540
571
|
|
|
541
572
|
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,
|
|
573
|
+
running - not just at exit. Web: GENERATE REPORT dropdown, three entries - `ACTIVE
|
|
543
574
|
LOGFILE` analyses the active CSV log (needs logging on, non-empty logfile, else the tab
|
|
544
575
|
closes and a footer error is shown), `CHOOSE LOGFILE` picks one or more `.csv` files in
|
|
545
576
|
the working dir - table (name/size/date), "select all" checkbox, nothing preselected;
|
|
546
|
-
up to 25 files per report, checking a 26th is refused.
|
|
577
|
+
up to 25 files per report, checking a 26th is refused. `SELECT JUMPHOST` lists the
|
|
578
|
+
sources (`local` and jump hosts, log column `SOURCE`) found in the active logfile - all checked,
|
|
579
|
+
ENTER = GENERATE; only the periods of the checked sources are calculated (see *Source filter* in the
|
|
580
|
+
epinga.py section). Shown only if the log holds more than one source.
|
|
581
|
+
|
|
582
|
+

|
|
583
|
+
|
|
547
584
|
More than one selected file is merged chronologically (by mtime) into one temporary
|
|
548
585
|
CSV, analysed as a single logfile, then the temp file is removed. Result opens in a new
|
|
549
586
|
tab; if a selected file was invalid or has meanwhile been removed (e.g. by log rotation
|
|
@@ -654,7 +691,7 @@ phases: eping's own work (~0.12s on 4109 hosts).
|
|
|
654
691
|
- `-p` > 1 and `-i 0` reduce accuracy (false DOWN) — defaults avoid both.
|
|
655
692
|
- `-dr 0` produces flapping hosts in practice — keep the default of 1.
|
|
656
693
|
|
|
657
|
-
# epinga.py 2.
|
|
694
|
+
# epinga.py 2.37
|
|
658
695
|
|
|
659
696
|
Analyses an eping.py CSV log: terminal summary + self-contained HTML report (no
|
|
660
697
|
server, no external assets) with per-host detail, state-change timelines, and
|
|
@@ -679,6 +716,7 @@ Output: `<base>_report.txt` and `<base>_report.html` (`--html FILE` overrides).
|
|
|
679
716
|
| `-s`, `--start YYYY-MM-DD HH:MM:SS` | rows from this timestamp on |
|
|
680
717
|
| `-e`, `--end YYYY-MM-DD HH:MM:SS` | rows up to this timestamp |
|
|
681
718
|
| `-S`, `--sort {name,flapping,uptime,rtt}` | summary sort order (default `name`) |
|
|
719
|
+
| `--source SOURCE` | only rows of this source - `local` or the jump host label from the log column `SOURCE` (repeatable; see *Source filter*) |
|
|
682
720
|
| `--no-detail` | summary only |
|
|
683
721
|
| `--no-changes` | omit state-change list |
|
|
684
722
|
| `--html FILE` | custom HTML filename |
|
|
@@ -686,6 +724,17 @@ Output: `<base>_report.txt` and `<base>_report.html` (`--html FILE` overrides).
|
|
|
686
724
|
| `-q`, `--quiet` | suppress progress bar |
|
|
687
725
|
| `--no-version-check` | skip online update check |
|
|
688
726
|
|
|
727
|
+
## Source filter
|
|
728
|
+
|
|
729
|
+
Logs written while eping.py ran on a jump host carry a `SOURCE` column. With `--source` (or the
|
|
730
|
+
selection shown on a terminal when the log holds several sources; numbers like `1,3`, ENTER = all)
|
|
731
|
+
only the periods of the selected sources are calculated: uptime, up/down time, RTT, changes and the
|
|
732
|
+
timeline. Periods of other sources are excluded and shown as a gap in the timeline; a state change that
|
|
733
|
+
happened during such a gap is not counted. Without `--source` everything is combined (as before).
|
|
734
|
+
Logs without a `SOURCE` column are treated as `local`.
|
|
735
|
+
|
|
736
|
+

|
|
737
|
+
|
|
689
738
|
## Called from eping.py
|
|
690
739
|
|
|
691
740
|
`GENERATE REPORT` (web gui) and `N`/ANALYSE NOW (CLI) both run epinga.py in a
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# eping.py
|
|
1
|
+
# eping.py 4.01
|
|
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.
|
|
@@ -173,11 +173,12 @@ DOWN. Columns: hostname/IP, state, RTT (ms), last-change timestamp, change count
|
|
|
173
173
|
| `F` | add hosts from a file |
|
|
174
174
|
| `O` | sort order picker — 5 orders (see *Views and sort orders*) |
|
|
175
175
|
| `T` | add comment — timestamped CSV row (logging on only) |
|
|
176
|
-
| `S` | set reference — shown list becomes new base list |
|
|
176
|
+
| `S` | set reference — shown list becomes new base list (hosts not shown are removed and no longer pinged) |
|
|
177
177
|
| `Z` | zero changes — reset CH-TIME/CH NO, states kept |
|
|
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 |
|
|
@@ -280,9 +281,11 @@ unless lowered). `CH NO` counts changes; `Z` resets it.
|
|
|
280
281
|
|
|
281
282
|
CLI `U` and web GUI's view select/`U` picker (see *CLI mode*) reach the same 9 views.
|
|
282
283
|
The web GUI's own `U` keyboard shortcut only cycles ALL HOSTS → CURRENTLY-UP →
|
|
283
|
-
UP+FLAPPING → ALL HOSTS (see *Web GUI* keyboard shortcuts). A view
|
|
284
|
-
|
|
285
|
-
|
|
284
|
+
UP+FLAPPING → ALL HOSTS (see *Web GUI* keyboard shortcuts). A view is a pure display
|
|
285
|
+
filter, evaluated live on every refresh: all hosts keep being pinged, a host that goes
|
|
286
|
+
DOWN leaves `CURRENTLY-UP`, a host that comes UP appears. Only SET REFERENCE removes the
|
|
287
|
+
hosts that are not shown from the host list (they are no longer pinged) and resets the
|
|
288
|
+
view to ALL HOSTS. A view with no matches is rejected, previous view stays active.
|
|
286
289
|
|
|
287
290
|
`ALWAYS-UP`/`ALWAYS-DOWN`: never changed state this run (`CH NO` = 0). `NO-DNS` counts
|
|
288
291
|
as DOWN for `CURRENTLY-DOWN`/`ALWAYS-DOWN`/`DOWN+FLAPPING`.
|
|
@@ -357,6 +360,8 @@ Same bounds as the matching CLI flags (`-lms`/`-lmf` for the last two - see *Out
|
|
|
357
360
|
| POST | `/api/command` | `{"cmd":"...","value":"..."}` | control (see cmd list below) |
|
|
358
361
|
| POST | `/api/advvalues` | `{"filter":{...}}` | ADV FILTER: values still selectable for a draft selection (same format as `adv_filter`) |
|
|
359
362
|
| POST | `/api/upload` | host list, text | add hosts |
|
|
363
|
+
| POST | `/api/log_sources` | `{"names":[...]}` | SOURCE values of the named logfiles (empty = active logfile), for SELECT JUMPHOST |
|
|
364
|
+
| 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
365
|
|
|
361
366
|
`cmd` values: `up_only`, `set_filter`, `addr_mode`, `get_names`, `match_filter`,
|
|
362
367
|
`adv_filter`, `sort`, `add`, `del`, `set_ref`, `zero`, `add_comment`, `reset_log`, `clear`,
|
|
@@ -367,7 +372,7 @@ value: `key=value`. `reset_log` value: logging off - optional custom file name (
|
|
|
367
372
|
auto-generated); logging on - `y` (clear) or `new`/`new=<name>` (new file, optional
|
|
368
373
|
custom name). `run_report`: `value` = empty (active logfile) or one `.csv` filename; or
|
|
369
374
|
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
|
|
375
|
+
(max 25); optional body field `sources`: `[...]` restricts the analysis to these SOURCE values. `save_hosts_file` value: optional target file name (blank
|
|
371
376
|
= active `-f` hostfile, or `eping-hosts.txt` if none).
|
|
372
377
|
|
|
373
378
|
`-wv` answers `403` to `POST /api/command`/`/api/upload`; `-wvc`/`-web` allow both. No
|
|
@@ -422,8 +427,11 @@ separated) · `-r` IP range (comma separated, shortened end)
|
|
|
422
427
|
| `-ipo` | — | off | start with IP ONLY |
|
|
423
428
|
| `-gn` | — | off | GET NAMES once at startup |
|
|
424
429
|
| `-ncs` | — | off | skip `--check-source` |
|
|
430
|
+
| `-ssh` | `[USER@]HOST[:PORT]` | off | run fping on a jump host via ssh (see *SSH source (JUMPHOST)*) |
|
|
431
|
+
| `-sshkey` | file | agent | private key file for `-ssh` |
|
|
432
|
+
| `-sshhk` | accept-new/ask/off | accept-new | host key check for `-ssh` |
|
|
425
433
|
| `-ncf` | — | off | CSV: do not ping the CSV IP of a name without DNS record |
|
|
426
|
-
| `-up` | — | 0 | learning phase: after N rounds
|
|
434
|
+
| `-up` | — | 0 | learning phase: after N rounds show only hosts seen UP (view CURRENTLY-UP; all hosts are still pinged until SET REFERENCE) |
|
|
427
435
|
| `-setref` | — | off | with `-up`: hosts seen UP become new reference list |
|
|
428
436
|
|
|
429
437
|
Hard-enforced at startup and live via ADV OPTIONS (`-web` only), same bounds.
|
|
@@ -449,11 +457,11 @@ Hard-enforced at startup and live via ADV OPTIONS (`-web` only), same bounds.
|
|
|
449
457
|
Unless `-dl`, every round appends to `eping-log_YYYY-MM-DD_HH:MM:SS.csv` (or `-o FILE`):
|
|
450
458
|
|
|
451
459
|
```
|
|
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
|
|
460
|
+
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
461
|
```
|
|
454
462
|
|
|
455
463
|
`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
|
|
464
|
+
*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
465
|
versions) stay readable by epinga.py.
|
|
458
466
|
|
|
459
467
|
`TBD`: suppressed DOWN observations (`-cf`). `IP`: address actually pinged (empty for
|
|
@@ -479,6 +487,29 @@ these rows automatically.
|
|
|
479
487
|
- Logging off: same dialog, no clear option - `START LOGGING` starts a fresh file
|
|
480
488
|
right away, same optional custom name.
|
|
481
489
|
|
|
490
|
+
## SSH source (JUMPHOST)
|
|
491
|
+
|
|
492
|
+
Run fping on a jump host instead of locally (system `ssh` only). Any Linux host with a working `fping`
|
|
493
|
+
(e.g. a caretaker) will do; it resolves the names itself. Start: `-ssh [USER@]HOST[:PORT]` (+ `-sshkey FILE`, `-sshhk MODE`);
|
|
494
|
+
the password or key passphrase is asked on the terminal at startup. At runtime: `J` in the CLI,
|
|
495
|
+
JUMPHOST button in the web GUI (after ADV OPTIONS).
|
|
496
|
+
|
|
497
|
+

|
|
498
|
+
|
|
499
|
+
- Window: HOST, PORT, USER, PASSWORD (key passphrase), HOST KEY, KEY FILE. TEST checks ssh, login and
|
|
500
|
+
fping on the jump host, CONNECT switches the scan source, USE LOCAL switches back. A missing local
|
|
501
|
+
`ssh` is shown in the window.
|
|
502
|
+
- HOST KEY: `accept-new` (default) - hosts seen for the first time are trusted automatically, a changed
|
|
503
|
+
key is still refused; `ask` - an unknown key is shown with its fingerprint and must be accepted with
|
|
504
|
+
TRUST KEY; `off` - no check at all (insecure).
|
|
505
|
+
- The switch is applied at the start of the next round; hosts, states and counters are kept.
|
|
506
|
+
- Connection loss: results of the round are discarded, hosts keep their state, a banner is shown and
|
|
507
|
+
eping reconnects. Logged as `#COMMENT#` rows (`JUMPHOST ... OFFLINE: <reason>`, `JUMPHOST ... ONLINE
|
|
508
|
+
again`, `SOURCE SWITCH <old> -> <new>`), shown in the report's comment timeline.
|
|
509
|
+
- Log column `SOURCE`: `local` or the jump host of each row.
|
|
510
|
+
- Limits: GET NAMES and the CSV-IP fallback are not available over ssh; at most 4 ssh processes
|
|
511
|
+
(2 on Windows); the web password transfer is plain HTTP - use `-bind 127.0.0.1` or a trusted network.
|
|
512
|
+
|
|
482
513
|
## Web GUI header
|
|
483
514
|
|
|
484
515
|
Header: `eping.py vX.XX · © Ewald Jeitler · supervised by Nelly · tools.jeitler.cc ·
|
|
@@ -520,11 +551,17 @@ logging is off or the logfile is empty/missing.
|
|
|
520
551
|
## GENERATE REPORT (web gui) / ANALYSE NOW (CLI `N`)
|
|
521
552
|
|
|
522
553
|
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,
|
|
554
|
+
running - not just at exit. Web: GENERATE REPORT dropdown, three entries - `ACTIVE
|
|
524
555
|
LOGFILE` analyses the active CSV log (needs logging on, non-empty logfile, else the tab
|
|
525
556
|
closes and a footer error is shown), `CHOOSE LOGFILE` picks one or more `.csv` files in
|
|
526
557
|
the working dir - table (name/size/date), "select all" checkbox, nothing preselected;
|
|
527
|
-
up to 25 files per report, checking a 26th is refused.
|
|
558
|
+
up to 25 files per report, checking a 26th is refused. `SELECT JUMPHOST` lists the
|
|
559
|
+
sources (`local` and jump hosts, log column `SOURCE`) found in the active logfile - all checked,
|
|
560
|
+
ENTER = GENERATE; only the periods of the checked sources are calculated (see *Source filter* in the
|
|
561
|
+
epinga.py section). Shown only if the log holds more than one source.
|
|
562
|
+
|
|
563
|
+

|
|
564
|
+
|
|
528
565
|
More than one selected file is merged chronologically (by mtime) into one temporary
|
|
529
566
|
CSV, analysed as a single logfile, then the temp file is removed. Result opens in a new
|
|
530
567
|
tab; if a selected file was invalid or has meanwhile been removed (e.g. by log rotation
|
|
@@ -635,7 +672,7 @@ phases: eping's own work (~0.12s on 4109 hosts).
|
|
|
635
672
|
- `-p` > 1 and `-i 0` reduce accuracy (false DOWN) — defaults avoid both.
|
|
636
673
|
- `-dr 0` produces flapping hosts in practice — keep the default of 1.
|
|
637
674
|
|
|
638
|
-
# epinga.py 2.
|
|
675
|
+
# epinga.py 2.37
|
|
639
676
|
|
|
640
677
|
Analyses an eping.py CSV log: terminal summary + self-contained HTML report (no
|
|
641
678
|
server, no external assets) with per-host detail, state-change timelines, and
|
|
@@ -660,6 +697,7 @@ Output: `<base>_report.txt` and `<base>_report.html` (`--html FILE` overrides).
|
|
|
660
697
|
| `-s`, `--start YYYY-MM-DD HH:MM:SS` | rows from this timestamp on |
|
|
661
698
|
| `-e`, `--end YYYY-MM-DD HH:MM:SS` | rows up to this timestamp |
|
|
662
699
|
| `-S`, `--sort {name,flapping,uptime,rtt}` | summary sort order (default `name`) |
|
|
700
|
+
| `--source SOURCE` | only rows of this source - `local` or the jump host label from the log column `SOURCE` (repeatable; see *Source filter*) |
|
|
663
701
|
| `--no-detail` | summary only |
|
|
664
702
|
| `--no-changes` | omit state-change list |
|
|
665
703
|
| `--html FILE` | custom HTML filename |
|
|
@@ -667,6 +705,17 @@ Output: `<base>_report.txt` and `<base>_report.html` (`--html FILE` overrides).
|
|
|
667
705
|
| `-q`, `--quiet` | suppress progress bar |
|
|
668
706
|
| `--no-version-check` | skip online update check |
|
|
669
707
|
|
|
708
|
+
## Source filter
|
|
709
|
+
|
|
710
|
+
Logs written while eping.py ran on a jump host carry a `SOURCE` column. With `--source` (or the
|
|
711
|
+
selection shown on a terminal when the log holds several sources; numbers like `1,3`, ENTER = all)
|
|
712
|
+
only the periods of the selected sources are calculated: uptime, up/down time, RTT, changes and the
|
|
713
|
+
timeline. Periods of other sources are excluded and shown as a gap in the timeline; a state change that
|
|
714
|
+
happened during such a gap is not counted. Without `--source` everything is combined (as before).
|
|
715
|
+
Logs without a `SOURCE` column are treated as `local`.
|
|
716
|
+
|
|
717
|
+

|
|
718
|
+
|
|
670
719
|
## Called from eping.py
|
|
671
720
|
|
|
672
721
|
`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 = "
|
|
7
|
+
version = "4.01"
|
|
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" }
|