eping 3.86__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.
- {eping-3.86 → eping-4.0}/PKG-INFO +64 -10
- {eping-3.86 → eping-4.0}/README.md +63 -9
- {eping-3.86 → eping-4.0}/pyproject.toml +1 -1
- {eping-3.86 → eping-4.0}/src/eping/eping.py +1136 -40
- {eping-3.86 → eping-4.0}/src/eping/epinga.py +113 -7
- {eping-3.86 → eping-4.0}/src/eping.egg-info/PKG-INFO +64 -10
- {eping-3.86 → eping-4.0}/LICENSE +0 -0
- {eping-3.86 → eping-4.0}/setup.cfg +0 -0
- {eping-3.86 → eping-4.0}/src/eping/__init__.py +0 -0
- {eping-3.86 → eping-4.0}/src/eping/_launch_eping.py +0 -0
- {eping-3.86 → eping-4.0}/src/eping.egg-info/SOURCES.txt +0 -0
- {eping-3.86 → eping-4.0}/src/eping.egg-info/dependency_links.txt +0 -0
- {eping-3.86 → eping-4.0}/src/eping.egg-info/entry_points.txt +0 -0
- {eping-3.86 → eping-4.0}/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.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
|
|
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 |
|
|
@@ -244,7 +245,7 @@ Single self-contained page, no external resources.
|
|
|
244
245
|
- Row 1: view select (9 views), sort order select, SET REFERENCE, ZERO CHANGES,
|
|
245
246
|
CLEAR ALL, address mode select, GET NAMES, ADV OPTIONS, RESET LOG, FILE OPERATIONS
|
|
246
247
|
select, EXIT, font size.
|
|
247
|
-
- Row 2: match filter (SET/CLEAR), ADV FILTER, host field (ADD/DELETE), comment
|
|
248
|
+
- Row 2: match filter (SET/CLEAR), ADV FILTER, host field (ADD/DELETE), ADD/DEL LIST, comment
|
|
248
249
|
field (COMMENT), GENERATE REPORT select.
|
|
249
250
|
- View select, sort order select, address mode select and ADV OPTIONS all match the
|
|
250
251
|
CLI's `U`/`O`/`P`/`X` pickers exactly. FILE OPERATIONS (incl. ADD HOSTS FILE FROM CLIENT/
|
|
@@ -273,6 +274,13 @@ Single self-contained page, no external resources.
|
|
|
273
274
|
`+`/`−` font size (works while typing). No keyboard shortcut for `X`/ADV OPTIONS or
|
|
274
275
|
GENERATE REPORT - click required.
|
|
275
276
|
- Host field feeds both ADD/DELETE; ENTER triggers the button used last, ESC clears.
|
|
277
|
+
- **ADD/DEL LIST** (button after DELETE; also Ctrl/Cmd+V on the page while no field has focus): paste a
|
|
278
|
+
host list - one per line or separated by comma/semicolon/blank, `#` comment, CIDR expanded. A live
|
|
279
|
+
preview shows found / new / already in list / ignored words / masks out of range; ADD and DELETE are
|
|
280
|
+
enabled only if they would change something (DELETE over 20 hosts asks to confirm; exact name match
|
|
281
|
+
only). A pasted inventory `.csv` (with the `IP Address`/`Hostname` header) also updates hosts already in
|
|
282
|
+
the list: IP entries (e.g. from a `.txt`) are renamed to the CSV hostname, history kept, and the CSV
|
|
283
|
+
values are attached. Works with `-wvc` too.
|
|
276
284
|
- Files can also be dropped anywhere on the page (max 16MB, see *Host file format*).
|
|
277
285
|
- Commands acknowledge immediately; a click aborts the running round.
|
|
278
286
|
- **Host popup**: hovering a host row (after ~350 ms) shows everything known about it:
|
|
@@ -369,6 +377,8 @@ Same bounds as the matching CLI flags (`-lms`/`-lmf` for the last two - see *Out
|
|
|
369
377
|
| POST | `/api/command` | `{"cmd":"...","value":"..."}` | control (see cmd list below) |
|
|
370
378
|
| POST | `/api/advvalues` | `{"filter":{...}}` | ADV FILTER: values still selectable for a draft selection (same format as `adv_filter`) |
|
|
371
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)*) |
|
|
372
382
|
|
|
373
383
|
`cmd` values: `up_only`, `set_filter`, `addr_mode`, `get_names`, `match_filter`,
|
|
374
384
|
`adv_filter`, `sort`, `add`, `del`, `set_ref`, `zero`, `add_comment`, `reset_log`, `clear`,
|
|
@@ -379,7 +389,7 @@ value: `key=value`. `reset_log` value: logging off - optional custom file name (
|
|
|
379
389
|
auto-generated); logging on - `y` (clear) or `new`/`new=<name>` (new file, optional
|
|
380
390
|
custom name). `run_report`: `value` = empty (active logfile) or one `.csv` filename; or
|
|
381
391
|
JSON body field `values`: `[...]` to merge and analyse multiple `.csv` files as one
|
|
382
|
-
(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
|
|
383
393
|
= active `-f` hostfile, or `eping-hosts.txt` if none).
|
|
384
394
|
|
|
385
395
|
`-wv` answers `403` to `POST /api/command`/`/api/upload`; `-wvc`/`-web` allow both. No
|
|
@@ -434,6 +444,9 @@ separated) · `-r` IP range (comma separated, shortened end)
|
|
|
434
444
|
| `-ipo` | — | off | start with IP ONLY |
|
|
435
445
|
| `-gn` | — | off | GET NAMES once at startup |
|
|
436
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` |
|
|
437
450
|
| `-ncf` | — | off | CSV: do not ping the CSV IP of a name without DNS record |
|
|
438
451
|
| `-up` | — | 0 | learning phase: after N rounds keep only hosts seen UP |
|
|
439
452
|
| `-setref` | — | off | with `-up`: hosts seen UP become new reference list |
|
|
@@ -461,11 +474,11 @@ Hard-enforced at startup and live via ADV OPTIONS (`-web` only), same bounds.
|
|
|
461
474
|
Unless `-dl`, every round appends to `eping-log_YYYY-MM-DD_HH:MM:SS.csv` (or `-o FILE`):
|
|
462
475
|
|
|
463
476
|
```
|
|
464
|
-
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
|
|
465
478
|
```
|
|
466
479
|
|
|
467
480
|
`INV_HOSTNAME` … `INV_COMMENT`: the inventory values of a host added from an inventory CSV (see
|
|
468
|
-
*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
|
|
469
482
|
versions) stay readable by epinga.py.
|
|
470
483
|
|
|
471
484
|
`TBD`: suppressed DOWN observations (`-cf`). `IP`: address actually pinged (empty for
|
|
@@ -491,6 +504,29 @@ these rows automatically.
|
|
|
491
504
|
- Logging off: same dialog, no clear option - `START LOGGING` starts a fresh file
|
|
492
505
|
right away, same optional custom name.
|
|
493
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
|
+

|
|
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
|
+
|
|
494
530
|
## Web GUI header
|
|
495
531
|
|
|
496
532
|
Header: `eping.py vX.XX · © Ewald Jeitler · supervised by Nelly · tools.jeitler.cc ·
|
|
@@ -532,11 +568,17 @@ logging is off or the logfile is empty/missing.
|
|
|
532
568
|
## GENERATE REPORT (web gui) / ANALYSE NOW (CLI `N`)
|
|
533
569
|
|
|
534
570
|
Runs epinga.py against one or more logfiles in the background while eping.py keeps
|
|
535
|
-
running - not just at exit. Web: GENERATE REPORT dropdown,
|
|
571
|
+
running - not just at exit. Web: GENERATE REPORT dropdown, three entries - `ACTIVE
|
|
536
572
|
LOGFILE` analyses the active CSV log (needs logging on, non-empty logfile, else the tab
|
|
537
573
|
closes and a footer error is shown), `CHOOSE LOGFILE` picks one or more `.csv` files in
|
|
538
574
|
the working dir - table (name/size/date), "select all" checkbox, nothing preselected;
|
|
539
|
-
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
|
+

|
|
581
|
+
|
|
540
582
|
More than one selected file is merged chronologically (by mtime) into one temporary
|
|
541
583
|
CSV, analysed as a single logfile, then the temp file is removed. Result opens in a new
|
|
542
584
|
tab; if a selected file was invalid or has meanwhile been removed (e.g. by log rotation
|
|
@@ -647,7 +689,7 @@ phases: eping's own work (~0.12s on 4109 hosts).
|
|
|
647
689
|
- `-p` > 1 and `-i 0` reduce accuracy (false DOWN) — defaults avoid both.
|
|
648
690
|
- `-dr 0` produces flapping hosts in practice — keep the default of 1.
|
|
649
691
|
|
|
650
|
-
# epinga.py 2.
|
|
692
|
+
# epinga.py 2.37
|
|
651
693
|
|
|
652
694
|
Analyses an eping.py CSV log: terminal summary + self-contained HTML report (no
|
|
653
695
|
server, no external assets) with per-host detail, state-change timelines, and
|
|
@@ -672,6 +714,7 @@ Output: `<base>_report.txt` and `<base>_report.html` (`--html FILE` overrides).
|
|
|
672
714
|
| `-s`, `--start YYYY-MM-DD HH:MM:SS` | rows from this timestamp on |
|
|
673
715
|
| `-e`, `--end YYYY-MM-DD HH:MM:SS` | rows up to this timestamp |
|
|
674
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*) |
|
|
675
718
|
| `--no-detail` | summary only |
|
|
676
719
|
| `--no-changes` | omit state-change list |
|
|
677
720
|
| `--html FILE` | custom HTML filename |
|
|
@@ -679,6 +722,17 @@ Output: `<base>_report.txt` and `<base>_report.html` (`--html FILE` overrides).
|
|
|
679
722
|
| `-q`, `--quiet` | suppress progress bar |
|
|
680
723
|
| `--no-version-check` | skip online update check |
|
|
681
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
|
+

|
|
735
|
+
|
|
682
736
|
## Called from eping.py
|
|
683
737
|
|
|
684
738
|
`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.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 |
|
|
@@ -225,7 +226,7 @@ Single self-contained page, no external resources.
|
|
|
225
226
|
- Row 1: view select (9 views), sort order select, SET REFERENCE, ZERO CHANGES,
|
|
226
227
|
CLEAR ALL, address mode select, GET NAMES, ADV OPTIONS, RESET LOG, FILE OPERATIONS
|
|
227
228
|
select, EXIT, font size.
|
|
228
|
-
- Row 2: match filter (SET/CLEAR), ADV FILTER, host field (ADD/DELETE), comment
|
|
229
|
+
- Row 2: match filter (SET/CLEAR), ADV FILTER, host field (ADD/DELETE), ADD/DEL LIST, comment
|
|
229
230
|
field (COMMENT), GENERATE REPORT select.
|
|
230
231
|
- View select, sort order select, address mode select and ADV OPTIONS all match the
|
|
231
232
|
CLI's `U`/`O`/`P`/`X` pickers exactly. FILE OPERATIONS (incl. ADD HOSTS FILE FROM CLIENT/
|
|
@@ -254,6 +255,13 @@ Single self-contained page, no external resources.
|
|
|
254
255
|
`+`/`−` font size (works while typing). No keyboard shortcut for `X`/ADV OPTIONS or
|
|
255
256
|
GENERATE REPORT - click required.
|
|
256
257
|
- Host field feeds both ADD/DELETE; ENTER triggers the button used last, ESC clears.
|
|
258
|
+
- **ADD/DEL LIST** (button after DELETE; also Ctrl/Cmd+V on the page while no field has focus): paste a
|
|
259
|
+
host list - one per line or separated by comma/semicolon/blank, `#` comment, CIDR expanded. A live
|
|
260
|
+
preview shows found / new / already in list / ignored words / masks out of range; ADD and DELETE are
|
|
261
|
+
enabled only if they would change something (DELETE over 20 hosts asks to confirm; exact name match
|
|
262
|
+
only). A pasted inventory `.csv` (with the `IP Address`/`Hostname` header) also updates hosts already in
|
|
263
|
+
the list: IP entries (e.g. from a `.txt`) are renamed to the CSV hostname, history kept, and the CSV
|
|
264
|
+
values are attached. Works with `-wvc` too.
|
|
257
265
|
- Files can also be dropped anywhere on the page (max 16MB, see *Host file format*).
|
|
258
266
|
- Commands acknowledge immediately; a click aborts the running round.
|
|
259
267
|
- **Host popup**: hovering a host row (after ~350 ms) shows everything known about it:
|
|
@@ -350,6 +358,8 @@ Same bounds as the matching CLI flags (`-lms`/`-lmf` for the last two - see *Out
|
|
|
350
358
|
| POST | `/api/command` | `{"cmd":"...","value":"..."}` | control (see cmd list below) |
|
|
351
359
|
| POST | `/api/advvalues` | `{"filter":{...}}` | ADV FILTER: values still selectable for a draft selection (same format as `adv_filter`) |
|
|
352
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)*) |
|
|
353
363
|
|
|
354
364
|
`cmd` values: `up_only`, `set_filter`, `addr_mode`, `get_names`, `match_filter`,
|
|
355
365
|
`adv_filter`, `sort`, `add`, `del`, `set_ref`, `zero`, `add_comment`, `reset_log`, `clear`,
|
|
@@ -360,7 +370,7 @@ value: `key=value`. `reset_log` value: logging off - optional custom file name (
|
|
|
360
370
|
auto-generated); logging on - `y` (clear) or `new`/`new=<name>` (new file, optional
|
|
361
371
|
custom name). `run_report`: `value` = empty (active logfile) or one `.csv` filename; or
|
|
362
372
|
JSON body field `values`: `[...]` to merge and analyse multiple `.csv` files as one
|
|
363
|
-
(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
|
|
364
374
|
= active `-f` hostfile, or `eping-hosts.txt` if none).
|
|
365
375
|
|
|
366
376
|
`-wv` answers `403` to `POST /api/command`/`/api/upload`; `-wvc`/`-web` allow both. No
|
|
@@ -415,6 +425,9 @@ separated) · `-r` IP range (comma separated, shortened end)
|
|
|
415
425
|
| `-ipo` | — | off | start with IP ONLY |
|
|
416
426
|
| `-gn` | — | off | GET NAMES once at startup |
|
|
417
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` |
|
|
418
431
|
| `-ncf` | — | off | CSV: do not ping the CSV IP of a name without DNS record |
|
|
419
432
|
| `-up` | — | 0 | learning phase: after N rounds keep only hosts seen UP |
|
|
420
433
|
| `-setref` | — | off | with `-up`: hosts seen UP become new reference list |
|
|
@@ -442,11 +455,11 @@ Hard-enforced at startup and live via ADV OPTIONS (`-web` only), same bounds.
|
|
|
442
455
|
Unless `-dl`, every round appends to `eping-log_YYYY-MM-DD_HH:MM:SS.csv` (or `-o FILE`):
|
|
443
456
|
|
|
444
457
|
```
|
|
445
|
-
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
|
|
446
459
|
```
|
|
447
460
|
|
|
448
461
|
`INV_HOSTNAME` … `INV_COMMENT`: the inventory values of a host added from an inventory CSV (see
|
|
449
|
-
*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
|
|
450
463
|
versions) stay readable by epinga.py.
|
|
451
464
|
|
|
452
465
|
`TBD`: suppressed DOWN observations (`-cf`). `IP`: address actually pinged (empty for
|
|
@@ -472,6 +485,29 @@ these rows automatically.
|
|
|
472
485
|
- Logging off: same dialog, no clear option - `START LOGGING` starts a fresh file
|
|
473
486
|
right away, same optional custom name.
|
|
474
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
|
+

|
|
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
|
+
|
|
475
511
|
## Web GUI header
|
|
476
512
|
|
|
477
513
|
Header: `eping.py vX.XX · © Ewald Jeitler · supervised by Nelly · tools.jeitler.cc ·
|
|
@@ -513,11 +549,17 @@ logging is off or the logfile is empty/missing.
|
|
|
513
549
|
## GENERATE REPORT (web gui) / ANALYSE NOW (CLI `N`)
|
|
514
550
|
|
|
515
551
|
Runs epinga.py against one or more logfiles in the background while eping.py keeps
|
|
516
|
-
running - not just at exit. Web: GENERATE REPORT dropdown,
|
|
552
|
+
running - not just at exit. Web: GENERATE REPORT dropdown, three entries - `ACTIVE
|
|
517
553
|
LOGFILE` analyses the active CSV log (needs logging on, non-empty logfile, else the tab
|
|
518
554
|
closes and a footer error is shown), `CHOOSE LOGFILE` picks one or more `.csv` files in
|
|
519
555
|
the working dir - table (name/size/date), "select all" checkbox, nothing preselected;
|
|
520
|
-
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
|
+

|
|
562
|
+
|
|
521
563
|
More than one selected file is merged chronologically (by mtime) into one temporary
|
|
522
564
|
CSV, analysed as a single logfile, then the temp file is removed. Result opens in a new
|
|
523
565
|
tab; if a selected file was invalid or has meanwhile been removed (e.g. by log rotation
|
|
@@ -628,7 +670,7 @@ phases: eping's own work (~0.12s on 4109 hosts).
|
|
|
628
670
|
- `-p` > 1 and `-i 0` reduce accuracy (false DOWN) — defaults avoid both.
|
|
629
671
|
- `-dr 0` produces flapping hosts in practice — keep the default of 1.
|
|
630
672
|
|
|
631
|
-
# epinga.py 2.
|
|
673
|
+
# epinga.py 2.37
|
|
632
674
|
|
|
633
675
|
Analyses an eping.py CSV log: terminal summary + self-contained HTML report (no
|
|
634
676
|
server, no external assets) with per-host detail, state-change timelines, and
|
|
@@ -653,6 +695,7 @@ Output: `<base>_report.txt` and `<base>_report.html` (`--html FILE` overrides).
|
|
|
653
695
|
| `-s`, `--start YYYY-MM-DD HH:MM:SS` | rows from this timestamp on |
|
|
654
696
|
| `-e`, `--end YYYY-MM-DD HH:MM:SS` | rows up to this timestamp |
|
|
655
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*) |
|
|
656
699
|
| `--no-detail` | summary only |
|
|
657
700
|
| `--no-changes` | omit state-change list |
|
|
658
701
|
| `--html FILE` | custom HTML filename |
|
|
@@ -660,6 +703,17 @@ Output: `<base>_report.txt` and `<base>_report.html` (`--html FILE` overrides).
|
|
|
660
703
|
| `-q`, `--quiet` | suppress progress bar |
|
|
661
704
|
| `--no-version-check` | skip online update check |
|
|
662
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
|
+

|
|
716
|
+
|
|
663
717
|
## Called from eping.py
|
|
664
718
|
|
|
665
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 = "
|
|
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" }
|