eping 4.12__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.
- {eping-4.12 → eping-4.76}/PKG-INFO +135 -88
- {eping-4.12 → eping-4.76}/README.md +134 -87
- {eping-4.12 → eping-4.76}/pyproject.toml +1 -1
- {eping-4.12 → eping-4.76}/src/eping/eping.py +1951 -1319
- {eping-4.12 → eping-4.76}/src/eping/epinga.py +256 -30
- {eping-4.12 → eping-4.76}/src/eping.egg-info/PKG-INFO +135 -88
- {eping-4.12 → eping-4.76}/LICENSE +0 -0
- {eping-4.12 → eping-4.76}/setup.cfg +0 -0
- {eping-4.12 → eping-4.76}/src/eping/__init__.py +0 -0
- {eping-4.12 → eping-4.76}/src/eping/_launch_eping.py +0 -0
- {eping-4.12 → eping-4.76}/src/eping.egg-info/SOURCES.txt +0 -0
- {eping-4.12 → eping-4.76}/src/eping.egg-info/dependency_links.txt +0 -0
- {eping-4.12 → eping-4.76}/src/eping.egg-info/entry_points.txt +0 -0
- {eping-4.12 → eping-4.76}/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: 4.
|
|
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.
|
|
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
|
+

|
|
32
|
+
|
|
33
|
+

|
|
34
|
+
|
|
35
|
+
Terminal (curses) mode:
|
|
36
|
+
|
|
37
|
+

|
|
38
|
+
|
|
27
39
|
## Requirements
|
|
28
40
|
|
|
29
41
|
- Python 3.6+ (eping.py and epinga.py)
|
|
@@ -57,7 +69,7 @@ Portable Windows version (web GUI only, no installation): download and unpack
|
|
|
57
69
|
- The web GUI opens in the browser (default `http://127.0.0.1:8080`). The port is read from the hosts file
|
|
58
70
|
(`opt: -port 9000`); a port already in use is reported and can be changed in the launcher window.
|
|
59
71
|
- No terminal (curses) mode and no `-wv`/`-wvc` on Windows; log file names use `-` instead of `:`.
|
|
60
|
-
- Extra options:
|
|
72
|
+
- Extra options: CLI options field or `eping-args.txt` in the working folder. Working folder: `<home>/eping` (`%USERPROFILE%\eping` on Windows) - hosts file, logs, reports, `eping-console.log`, `eping-args.txt` and `eping-launcher.cfg` live there, so the program folder needs no write access. Change it with the *Working dir* field (paste a path, Enter confirms) or the *Change...* button (folder dialog); applied with Start / Restart, or with `-wd DIR` in the CLI options field (wins over the button) (hosts file, logs, reports and console log then use DIR). An `eping-args.txt` / `eping-launcher.cfg` found next to the program (older versions) is read until the first save; copy an existing `eping-hosts.txt` to the working folder once. Details: `README-WINDOWS.txt` in the zip.
|
|
61
73
|
|
|
62
74
|
## Quick start
|
|
63
75
|
|
|
@@ -131,7 +143,7 @@ flag typed on the command line wins over the same flag from a file. Only applies
|
|
|
131
143
|
the initial `-f` read at startup — `F`/ADD FILE (CLI) and ADD HOSTS FILE (web)
|
|
132
144
|
never parse `opt:` lines, they're just text.
|
|
133
145
|
|
|
134
|
-
`opt:` lines also work at the top of an inventory `.csv`. SAVE HOSTS
|
|
146
|
+
`opt:` lines also work at the top of an inventory `.csv`. SAVE HOSTS writes every option that differs from the default there (start-up flags and live ADV OPTIONS changes; not `-f -df -n -r -o -up -setref -gn -cl`).
|
|
135
147
|
|
|
136
148
|
The default `eping-hosts.txt`: sample hosts, this section, then every CLI option as a
|
|
137
149
|
commented-out `opt:` line with its default (remove `# ` to activate).
|
|
@@ -159,8 +171,8 @@ named `*.txt` are never treated as CSV - they keep the plain host file format ab
|
|
|
159
171
|
only kept there as information.
|
|
160
172
|
- **Filters**: `M` matches the inventory values as text, `V` / ADV FILTER selects them
|
|
161
173
|
(see *ADV FILTER*).
|
|
162
|
-
- **Save**: if the displayed hosts carry inventory values, `SAVE HOSTS
|
|
163
|
-
inventory `.csv` (see *Web GUI*)
|
|
174
|
+
- **Save**: if the displayed hosts carry inventory values, `SAVE HOSTS` offers an
|
|
175
|
+
inventory `.csv` (default for such hosts, see *Web GUI*) or a plain `.txt`.
|
|
164
176
|
|
|
165
177
|
Example (`;` delimited, extra columns are ignored):
|
|
166
178
|
|
|
@@ -237,16 +249,24 @@ Single self-contained page, no external resources.
|
|
|
237
249
|
if needed ("SCROLL RIGHT FOR MORE" hint in the stats bar).
|
|
238
250
|
- Footer stats: HOSTS, RUNTIME, HOST UP/DOWN/FLAPPING always count all hosts; SHOWN is the
|
|
239
251
|
number of rows displayed after the view, the match filter and the ADV FILTER. The CLI footer counts the same way. RUNTIME shows `n/a` briefly during a background round.
|
|
252
|
+
- While a source switch (local / jump host) is under way the message line shows `switching to ... - please wait ...`,
|
|
253
|
+
then `switched to ... - done`. The JUMPHOST button is green while a jump host is active.
|
|
240
254
|
- Adding many hosts (`ADD`, ADD HOSTS FILE, upload) shows "added N host(s) - please wait,
|
|
241
255
|
pinging ..." until they appear with a state, then `done`.
|
|
242
256
|
- Font size 6–28px (slider, `A−`/`A+`, `+`/`−` keys), stored in `localStorage`.
|
|
243
257
|
- Column headers sort the list (IPv4-aware).
|
|
244
258
|
- Toolbar, two rows (wraps if narrow):
|
|
245
259
|
- Row 1: view select (9 views), sort order select, SET REFERENCE, ZERO CHANGES,
|
|
246
|
-
CLEAR ALL, address mode select, GET NAMES, ADV OPTIONS,
|
|
247
|
-
select,
|
|
260
|
+
CLEAR ALL, address mode select, GET NAMES, ADV OPTIONS, LOGGING, FILE OPERATIONS
|
|
261
|
+
select, STOP, font size.
|
|
248
262
|
- Row 2: match filter (SET/CLEAR), ADV FILTER, host field (ADD/DELETE), ADD/DEL LIST, comment
|
|
249
|
-
field (COMMENT), GENERATE REPORT select.
|
|
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`).
|
|
266
|
+
Commands (view, sort, filter, ADD/DELETE ...) keep working while paused; added hosts are pinged after
|
|
267
|
+
`RESUME`. A round that is running when `PAUSE` is pressed is cut short. The log gets the comment rows
|
|
268
|
+
`CHECK PAUSED` / `CHECK RESUMED`; epinga.py shows the pause as a gap in the timeline
|
|
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`).
|
|
250
270
|
- View select, sort order select, address mode select and ADV OPTIONS all match the
|
|
251
271
|
CLI's `U`/`O`/`P`/`X` pickers exactly. FILE OPERATIONS (incl. ADD HOSTS FILE FROM CLIENT/
|
|
252
272
|
FROM SERVER) is web-gui-only (no CLI key - CLI already runs on the server's own
|
|
@@ -256,19 +276,13 @@ Single self-contained page, no external resources.
|
|
|
256
276
|
|---|---|
|
|
257
277
|
| ADD HOSTS FILE FROM SERVER | picks one or more `.txt` files or inventory `.csv` files already on the server, adds their hosts; a `.csv` without the inventory header, e.g. an eping log, is refused |
|
|
258
278
|
| ADD HOSTS FILE FROM CLIENT | dialog with a file picker (`.txt`/`.csv`; works in Safari), adds the hosts; a file can also be dropped anywhere on the page |
|
|
259
|
-
| SAVE HOSTS
|
|
260
|
-
|
|
|
261
|
-
| DOWNLOAD ALL HOSTS | full reference list: inventory `.csv` if the hosts carry inventory values, else `.txt`; non-default options first as `opt:` lines (`.csv`: checkboxes `include options`, default on, and `save as .txt`, default off) |
|
|
262
|
-
| DOWNLOAD ACTIVE HOSTS | currently displayed hosts (view/address mode/filter applied), same format and options as DOWNLOAD ALL HOSTS |
|
|
263
|
-
| DOWNLOAD ACTIVE LOGFILE | active CSV log, zipped; disabled while logging off |
|
|
264
|
-
| DOWNLOAD SELECTED FILES | picker: every `.csv`/`.txt`/`.html` in the working dir, table (name/size/date), extension filter, "select all", "no compression" checkbox (single-file selection only); multi-select bundles into one ZIP |
|
|
265
|
-
| DELETE FILES FROM SERVER | same picker as DOWNLOAD SELECTED FILES, red DELETE button, confirms with file count; active logfile can't be deleted |
|
|
266
|
-
| VIEW FILE FROM SERVER | picker: every `.csv`/`.txt` in the working dir, table (name/size/date), "select all"; opens each picked file read-only, raw content, COPY/DOWNLOAD buttons - see *VIEW FILE FROM SERVER* below |
|
|
279
|
+
| SAVE HOSTS | one dialog: `ALL HOSTS` (default, full reference list) or `SHOWN HOSTS` (current view/address mode/filter); `ON SERVER` or `DOWNLOAD TO THIS COMPUTER`; format `CSV` (inventory `;` columns, preselected) or `TXT` (one host per line) is offered only if the list carries inventory values, otherwise `TXT` is used without asking; checkbox `include options (opt: lines)` (default on). On the server a blank name overwrites the active `-f` hostfile (first one; extension follows the format) or, with none active, writes `eping-hosts.csv`/`.txt`; a typed name saves as that new file, active hostfile untouched |
|
|
280
|
+
| SERVER OPERATIONS | one dialog with a file table (every `.csv`/`.txt`/`.html`/`.zip` in the working dir; name/size/date, sortable, extension filter, "select all") and the buttons `DOWNLOAD` (more than one file = one ZIP; "no compression" checkbox for a single file), `VIEW` (only `.txt`/`.csv`, read-only, raw content, COPY/DOWNLOAD buttons - see *VIEW (SERVER OPERATIONS)* below), `DELETE` (red, confirms with file count, never the active logfile) and `UPLOAD` (picks a local `.txt`/`.csv`/`.zip`, saves as-is server-side, no host parsing; never overwrites, appends `-1`/`-2`/...) |
|
|
267
281
|
- Keyboard shortcuts (no modifier, only while no text field has focus; own quick
|
|
268
282
|
variants, not the CLI's picker keys of the same letter): `U` cycles the original 3
|
|
269
283
|
views (ALL HOSTS → CURRENTLY-UP → UP+FLAPPING → ALL HOSTS), the other 6 need the
|
|
270
|
-
dropdown; `O` cycles all 5 sort orders one at a time; `P`/`I` toggle
|
|
271
|
-
|
|
284
|
+
dropdown; `O` cycles all 5 sort orders one at a time; `P`/`I` toggle DEDUP: KEEP HOSTNAME /
|
|
285
|
+
RESOLVE ALL TO IP directly, the address mode select reaches all 4 modes; `G`/`S`/`Z`/
|
|
272
286
|
`C`/`L`/`E` click the matching button (`E`/`C`/`L` confirm); `A`/`D` focus host field;
|
|
273
287
|
`M`/`T` focus their field; `V` opens ADV FILTER; `F` opens the ADD HOSTS FILE FROM CLIENT picker; `R` forces a status refresh;
|
|
274
288
|
`+`/`−` font size (works while typing). No keyboard shortcut for `X`/ADV OPTIONS or
|
|
@@ -340,21 +354,19 @@ directly, `D` resets the selected option to its default, `R` resets all, ESC/`X`
|
|
|
340
354
|
|
|
341
355
|
| Option | Range | 0/-1 means |
|
|
342
356
|
|---|---|---|
|
|
343
|
-
| BACKOFF | 1 – 2 | — |
|
|
344
357
|
| TIMEOUT | 10 – 5000 ms | — |
|
|
345
358
|
| RETRIES | 0 – 5 | — |
|
|
346
|
-
| DOWN RETRIES | 0 – 5 | `0` = disabled, full RETRIES |
|
|
347
359
|
| INTERVAL | -1 – 250 ms | `-1` = auto (use RATE), `0` = no pacing |
|
|
348
360
|
| THREADS | 0 – 32 | `0` = auto |
|
|
349
361
|
| WAIT TIME | 0 – 600 s | — |
|
|
350
362
|
| CONFIRM | 1 – 10 | — |
|
|
363
|
+
| NEW HOST GRACE | 0 – 60 s | — |
|
|
364
|
+
| SILENT LIMIT | 2 – 10 periods | — |
|
|
351
365
|
| RATE | 10 – 25000 pps | — |
|
|
352
366
|
| FLAP WINDOW | 1 – 72000 min | — |
|
|
353
|
-
| DOWN SLICES | 1 – 20 | — |
|
|
354
|
-
| FULL SWEEP | 0 – 50 | `0` = disabled |
|
|
355
367
|
| DNS TTL | 0 – 3600 s | — |
|
|
356
368
|
| TIMEZONE | -24 – +24 h | — |
|
|
357
|
-
| MAX LOG SIZE | 0, 10 – 2500 MB | `0` = no rotation |
|
|
369
|
+
| MAX LOG SIZE | 0, 10 – 2500 MB | default `500`; `0` = no rotation |
|
|
358
370
|
| MAX LOG FILES | 0 – 500 | `0` = unlimited |
|
|
359
371
|
|
|
360
372
|
Same bounds as the matching CLI flags (`-lms`/`-lmf` for the last two - see *Output*).
|
|
@@ -380,48 +392,60 @@ Same bounds as the matching CLI flags (`-lms`/`-lmf` for the last two - see *Out
|
|
|
380
392
|
| POST | `/api/command` | `{"cmd":"...","value":"..."}` | control (see cmd list below) |
|
|
381
393
|
| POST | `/api/advvalues` | `{"filter":{...}}` | ADV FILTER: values still selectable for a draft selection (same format as `adv_filter`) |
|
|
382
394
|
| POST | `/api/upload` | host list, text | add hosts |
|
|
383
|
-
| POST | `/api/log_sources` | `{"names":[...]}` | SOURCE values of the named logfiles (empty = active logfile), for SELECT JUMPHOST |
|
|
384
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)*) |
|
|
385
396
|
|
|
386
397
|
`cmd` values: `up_only`, `set_filter`, `addr_mode`, `get_names`, `match_filter`,
|
|
387
398
|
`adv_filter`, `sort`, `add`, `del`, `set_ref`, `zero`, `add_comment`, `reset_log`, `clear`,
|
|
388
|
-
`set_option`, `reset_options`, `run_report`, `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`,
|
|
389
400
|
`location`, `sysloc`, `type`, `comment`; `\u0001none` as value = hosts without a value; `{}` = off
|
|
390
|
-
|
|
401
|
+
`set_option`
|
|
391
402
|
value: `key=value`. `reset_log` value: logging off - optional custom file name (blank =
|
|
392
403
|
auto-generated); logging on - `y` (clear) or `new`/`new=<name>` (new file, optional
|
|
393
404
|
custom name). `run_report`: `value` = empty (active logfile) or one `.csv` filename; or
|
|
394
405
|
JSON body field `values`: `[...]` to merge and analyse multiple `.csv` files as one
|
|
395
|
-
(max 25); optional body field `sources`: `[...]` restricts the analysis to these SOURCE values. `
|
|
396
|
-
= active `-f` hostfile, or `eping-hosts.txt` if none).
|
|
406
|
+
(max 25); optional body field `sources`: `[...]` restricts the analysis to these SOURCE values. `save_hosts_csv`/`save_hosts_txt` (+ `_noopt`, + `_all` for all hosts) value: optional target file name (blank
|
|
407
|
+
= active `-f` hostfile, or `eping-hosts.csv`/`.txt` if none); `save_hosts_file` = auto format.
|
|
397
408
|
|
|
398
409
|
`-wv` answers `403` to `POST /api/command`/`/api/upload`; `-wvc`/`-web` allow both. No
|
|
399
410
|
authentication. Default bind `0.0.0.0` — use `-bind 127.0.0.1` outside trusted networks.
|
|
400
411
|
|
|
401
|
-
## How
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
a
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
412
|
+
## How checking works (loop mode)
|
|
413
|
+
|
|
414
|
+
eping starts long-running `fping -l` processes and takes one snapshot of their latest results
|
|
415
|
+
per round. A process keeps one ICMP identifier for its whole life (few NAT / conntrack entries
|
|
416
|
+
on a router) and a jump host sees one command instead of one per round.
|
|
417
|
+
|
|
418
|
+
- **Period:** fping pings every host once per period = `-w` (at least 200 ms), raised to
|
|
419
|
+
`hosts x interval + timeout` so one pass fits. A round ends when every host delivered a new
|
|
420
|
+
result (at most one period + timeout). RUNS counts only rounds in which hosts were checked.
|
|
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
|
|
426
|
+
contact (new NAT / firewall state) must not show up as DOWN.
|
|
427
|
+
- **Names:** resolved by background threads (32 parallel, cached `-dns` seconds, randomized; an expired
|
|
428
|
+
entry stays in use until its refresh is done). A name without an address yet joins as soon as it
|
|
429
|
+
resolves, a round waits at most 2 s for names never resolved before; unresolvable = NO-DNS.
|
|
430
|
+
`-dns 0` = fping resolves. With a jump host the jump host resolves.
|
|
431
|
+
- **Add / delete:** ADD starts one extra fping for the new hosts, running processes are not touched.
|
|
432
|
+
DELETE only stops judging the hosts. Everything is restarted (results kept) when the source or a
|
|
433
|
+
timing option changes, a process died, there are more than 16 processes or many hosts were removed.
|
|
434
|
+
- **Stall guard:** if at least 30 % (and 20) of the hosts of one fping process go silent at once, that is
|
|
435
|
+
taken as a stall of fping or of this computer's network, not as hosts being down: their state is kept for
|
|
436
|
+
up to 5 silent periods.
|
|
437
|
+
- **Rate:** one process sends one packet per `-i` ms, `-ra` sets the packets/s. A pass over N hosts takes at
|
|
438
|
+
least N / `-ra` s: 32 000 hosts at `-ra 1000` = about 34 s per round. Raise `-ra` for big lists (mind the
|
|
439
|
+
router / NAT / jump host). `-i` floor is 1 ms; `-i 0` removes pacing.
|
|
440
|
+
- PAUSE stops the processes, RESUME starts them again.
|
|
422
441
|
|
|
423
442
|
## Options
|
|
424
443
|
|
|
444
|
+
### Working directory
|
|
445
|
+
`-wd DIR` · hosts file, logs and reports live in DIR (created if missing, `~` expanded; default: current directory).
|
|
446
|
+
Relative `-f` / `-sshkey` paths stay relative to the invocation directory. Not read from `opt:` lines. The macOS / Windows
|
|
447
|
+
launchers pass `-wd <home>/eping` by default; change it with `-wd DIR` in the launcher's CLI options field.
|
|
448
|
+
|
|
425
449
|
### Host selection
|
|
426
450
|
`-f` hostfile(s) (comma/space separated) · `-df` disable hostfile · `-n` CIDR (comma
|
|
427
451
|
separated) · `-r` IP range (comma separated, shortened end)
|
|
@@ -429,21 +453,19 @@ separated) · `-r` IP range (comma separated, shortened end)
|
|
|
429
453
|
### Probing
|
|
430
454
|
| Option | Range | Default | Meaning |
|
|
431
455
|
|---|---|---|---|
|
|
432
|
-
| `-
|
|
433
|
-
| `-
|
|
434
|
-
| `-re` | 0 – 5 | 3 | retries, UP/unknown hosts |
|
|
435
|
-
| `-dr` | 0 – 5 | 1 | retries, confirmed DOWN (`0` = same as others) |
|
|
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*) |
|
|
436
458
|
| `-i` | -1 – 250 | auto | send interval (ms), overrides `-ra`; `-1` auto, `0` unpaced |
|
|
437
|
-
| `-p` | 0 – 32 | auto | fping processes per
|
|
438
|
-
| `-w` | 0 – 600 | 0.5 |
|
|
459
|
+
| `-p` | 0 – 32 | auto | fping processes per address family |
|
|
460
|
+
| `-w` | 0 – 600 | 0.5 | ping period per host (s, at least 0.2) |
|
|
439
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 |
|
|
440
464
|
| `-ra` | 10 – 25000 | 1000 | ICMP packets/s |
|
|
441
465
|
| `-fw` | 1 – 72000 | 72000 | minutes to count as flapping |
|
|
442
|
-
| `-ds` | 1 – 20 | 4 | spread DOWN hosts over N rounds |
|
|
443
|
-
| `-fs` | 0 – 50 | 10 | every Nth round: full sweep (`0` = never) |
|
|
444
466
|
| `-dns` | 0 – 3600 | 300 | hostname cache TTL (s, `0` off) |
|
|
445
467
|
| `-4` / `-6` | — | auto | prefer IPv4/IPv6, mutually exclusive |
|
|
446
|
-
| `-ph` | — | off | start with
|
|
468
|
+
| `-ph` | — | off | start with DEDUP: KEEP HOSTNAME |
|
|
447
469
|
| `-ipo` | — | off | start with IP ONLY |
|
|
448
470
|
| `-gn` | — | off | GET NAMES once at startup |
|
|
449
471
|
| `-ncs` | — | off | skip `--check-source` |
|
|
@@ -465,9 +487,11 @@ Hard-enforced at startup and live via ADV OPTIONS (`-web` only), same bounds.
|
|
|
465
487
|
| `-cl` | — | — | delete all `eping-*` files and exit |
|
|
466
488
|
| `-tz` | -24 – +24 | 0 | timezone offset (h) |
|
|
467
489
|
| `-dg` | — | off | cycle time breakdown |
|
|
490
|
+
| `-debug` | — | off | write engine events (LOOP START / ADD / DOWN burst / STALL, SLOW ROUND) as `#COMMENT#` rows to the log |
|
|
468
491
|
| `-du` | — | — | disable online version check |
|
|
469
|
-
| `-lms` | 0, 10 – 2500 |
|
|
492
|
+
| `-lms` | 0, 10 – 2500 | 500 | max CSV log size (MB) before rotating; `0` = no rotation |
|
|
470
493
|
| `-lmf` | 0 – 500 | 0 | max `eping-log_*.csv` files kept, oldest deleted first; `0` = unlimited |
|
|
494
|
+
| `-lnz` | — | off | do not zip logfiles finished by size rotation (default: zipped in the background) |
|
|
471
495
|
| `-web` | — | off | web GUI instead of CLI |
|
|
472
496
|
| `-wv` | — | off | CLI + read-only web view |
|
|
473
497
|
| `-port` | — | 8080 | http port |
|
|
@@ -493,6 +517,12 @@ original timestamp with an incrementing `-1`/`-2`/... suffix
|
|
|
493
517
|
(`eping-log_<original-timestamp>-N.csv`); starting a new file manually (`RESET
|
|
494
518
|
LOGGING`/`L`) always gets the current time instead and begins a fresh chain.
|
|
495
519
|
|
|
520
|
+
By default a finished (rotated) file is zipped in the background to `eping-log_<ts>-N.csv.zip` (one csv inside, original
|
|
521
|
+
timestamp kept; the csv is removed only after the zip is complete); `-lnz` keeps plain csv. A `*.zip` (rotated file, or a
|
|
522
|
+
download - also `name(1).zip`) is handled like a `*.csv` everywhere: CHOOSE FILE / VIEW FILE / DELETE lists, UPLOAD FILE TO
|
|
523
|
+
SERVER / UPLOAD FROM CLIENT, GENERATE REPORT (a zip with several csv, e.g. a multi-file download, is read completely and
|
|
524
|
+
merged), `-lmf` pruning and `epinga.py -f` (one csv per zip). Downloading a zip sends it as is.
|
|
525
|
+
|
|
496
526
|
`ZERO CHANGES`/`Z`: resets `NO_OF_CHANGES`/`CHANGE_TIMESTAMP` for the running instance;
|
|
497
527
|
log file keeps everything already written.
|
|
498
528
|
|
|
@@ -500,11 +530,12 @@ log file keeps everything already written.
|
|
|
500
530
|
in `HOSTNAME`, text in `IP`. No-op with a notice if logging is off. epinga.py detects
|
|
501
531
|
these rows automatically.
|
|
502
532
|
|
|
503
|
-
`
|
|
533
|
+
`LOGGING`/`L`:
|
|
504
534
|
- Logging on: confirmation first (CLI keypress / web modal). `Y` clears all entries,
|
|
505
535
|
restarts logging into the same file. `N` starts a fresh file, old file untouched -
|
|
506
536
|
optional custom name (blank = auto-generated `eping-log_<timestamp>.csv`); a name
|
|
507
|
-
that already exists is rejected, nothing is created. `
|
|
537
|
+
that already exists is rejected, nothing is created. `S` (STOP LOGGING) stops logging,
|
|
538
|
+
file kept; `L` then offers START LOGGING again. `ESC`/`ENTER` cancels.
|
|
508
539
|
- Logging off: same dialog, no clear option - `START LOGGING` starts a fresh file
|
|
509
540
|
right away, same optional custom name.
|
|
510
541
|
|
|
@@ -515,6 +546,9 @@ Run fping on a jump host instead of locally (system `ssh` only). Any Linux host
|
|
|
515
546
|
the password or key passphrase is asked on the terminal at startup. At runtime: `J` in the CLI,
|
|
516
547
|
JUMPHOST button in the web GUI (after ADV OPTIONS).
|
|
517
548
|
|
|
549
|
+
With a working resolver on the jump host (default, see `-sshnr`) the `IP` column of the log holds the address the jump host
|
|
550
|
+
resolved a hostname to - like a local run - so epinga shows `host | IP` for jump host rows as well. Without one it stays the hostname.
|
|
551
|
+
|
|
518
552
|

|
|
519
553
|
|
|
520
554
|
- Window: HOST, PORT, USER, PASSWORD (key passphrase), HOST KEY, NAMES, KEY FILE. TEST checks ssh, login and
|
|
@@ -560,7 +594,7 @@ exit, a full notice prints once:
|
|
|
560
594
|
https://github.com/ewaldj/eping
|
|
561
595
|
```
|
|
562
596
|
|
|
563
|
-
Shown on any terminal-driven exit (CLI `[E]`/Ctrl-C, `-web`'s
|
|
597
|
+
Shown on any terminal-driven exit (CLI `[E]`/Ctrl-C, `-web`'s STOP/Ctrl-C in its
|
|
564
598
|
terminal). The web GUI's in-browser banner is separate and shorter.
|
|
565
599
|
|
|
566
600
|
## Run analysis on exit
|
|
@@ -573,7 +607,7 @@ Run an analysis of this logfile with epinga.py now? [y/N]:
|
|
|
573
607
|
|
|
574
608
|
`y` (case-insensitive) runs `epinga.py -f <logfile>` before exit; anything else skips
|
|
575
609
|
it. Only asked on a terminal-driven exit (CLI `[E]`/Ctrl-C, or `-wv`/`-wvc`'s own
|
|
576
|
-
keyboard `[E]`/Ctrl-C); exiting via a browser's
|
|
610
|
+
keyboard `[E]`/Ctrl-C); exiting via a browser's STOP button never asks. No prompt if
|
|
577
611
|
logging is off or the logfile is empty/missing.
|
|
578
612
|
|
|
579
613
|
## GENERATE REPORT (web gui) / ANALYSE NOW (CLI `N`)
|
|
@@ -583,17 +617,16 @@ running - not just at exit. Web: GENERATE REPORT dropdown, four entries - `ACTIV
|
|
|
583
617
|
LOGFILE` analyses the active CSV log (needs logging on, non-empty logfile, else the tab
|
|
584
618
|
closes and a footer error is shown), `CHOOSE LOGFILE` picks one or more `.csv` files in
|
|
585
619
|
the working dir - table (name/size/date), "select all" checkbox, nothing preselected;
|
|
586
|
-
up to 25 files per report, checking a 26th is refused. `
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
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.
|
|
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*).
|
|
590
625
|
|
|
591
626
|
`UPLOAD FROM CLIENT` picks one or more `.csv` logfiles on the computer running the browser (max 25, 1 GB each);
|
|
592
627
|
they are uploaded to a server temp dir, merged like `CHOOSE LOGFILE` and analysed as one report. Temp files and
|
|
593
628
|
report are removed when eping.py exits or on the next upload.
|
|
594
629
|
|
|
595
|
-

|
|
596
|
-
|
|
597
630
|
More than one selected file is merged chronologically (by the row timestamps, streamed) into one temporary
|
|
598
631
|
CSV, analysed as a single logfile, then the temp file is removed. Result opens in a new
|
|
599
632
|
tab; if a selected file was invalid or has meanwhile been removed (e.g. by log rotation
|
|
@@ -603,10 +636,10 @@ logfile only (needs logging on, non-empty logfile, else a notice is shown); resu
|
|
|
603
636
|
path/error shown once done. Only one run at a time either way. See *epinga.py* below for
|
|
604
637
|
the report, and *Called from eping.py* under epinga.py for the invocation.
|
|
605
638
|
|
|
606
|
-
## VIEW
|
|
639
|
+
## VIEW (SERVER OPERATIONS, web gui only)
|
|
607
640
|
|
|
608
641
|
Read-only viewer for one or more `.csv`/`.txt` files in the working dir - FILE
|
|
609
|
-
OPERATIONS >
|
|
642
|
+
OPERATIONS > SERVER OPERATIONS > VIEW, table picker (name/size/date), "select all". Each
|
|
610
643
|
selected file opens in its own tab: raw content, COPY (clipboard) and DOWNLOAD buttons,
|
|
611
644
|
no editing. Selecting more than one file opens the first tab right away; that tab shows
|
|
612
645
|
a centered "N more file(s) selected / OPEN NEXT FILE" box to open the next one, and so
|
|
@@ -615,26 +648,27 @@ Max 200MB per file - larger files are refused with a message pointing at DOWNLOA
|
|
|
615
648
|
instead, and the picker greys those files out, labeled "TOO LARGE", with the current
|
|
616
649
|
limit shown in the modal text.
|
|
617
650
|
|
|
618
|
-
## Address modes (
|
|
651
|
+
## Address modes (DEDUP: KEEP HOSTNAME / RESOLVE ALL TO IP / GET NAMES)
|
|
619
652
|
|
|
620
|
-
`
|
|
621
|
-
to the same address. Redundancy check cached `-dns` seconds. `
|
|
653
|
+
`DEDUP: KEEP HOSTNAME` (`-ph`): drops a raw-IP host from pinging when another entry resolves
|
|
654
|
+
to the same address. Redundancy check cached `-dns` seconds. `DEDUP: KEEP IP`: the
|
|
622
655
|
mirror - drops a hostname entry once its resolved address is already covered by a
|
|
623
656
|
raw-IP entry. Both non-destructive, restored by switching to another mode. Starting
|
|
624
657
|
with `-ph` resolves every hostname first (in parallel): the CLI shows a PLEASE WAIT
|
|
625
658
|
box with an elapsed counter meanwhile, the web mode a line in the terminal.
|
|
626
659
|
|
|
627
|
-
`
|
|
660
|
+
`RESOLVE ALL TO IP` (`-ipo`): resolves every hostname to its address (v4/v6 per
|
|
628
661
|
`-4`/`-6`, A preferred by default) and renames it in place (history/uptime carry over).
|
|
629
662
|
CLI: a hostname whose address collides with another host is dropped and not restored.
|
|
630
663
|
Web GUI: colliding/unresolvable hosts are hidden (not pinged) while active, restored
|
|
631
664
|
automatically when switching away.
|
|
665
|
+
The web GUI mouse-over of a renamed host shows the hostname it had before (`hostname` row).
|
|
632
666
|
|
|
633
667
|
CLI `P` and the web GUI's address mode select/`P` picker reach the same 4 exclusive
|
|
634
|
-
modes: `
|
|
635
|
-
`
|
|
636
|
-
that toggle
|
|
637
|
-
`
|
|
668
|
+
modes: `KEEP ALL (NO DEDUP)` (default), `DEDUP: KEEP HOSTNAME`,
|
|
669
|
+
`DEDUP: KEEP IP`, `RESOLVE ALL TO IP`. The web GUI additionally has its own `P`/`I` keyboard shortcuts
|
|
670
|
+
that toggle DEDUP: KEEP HOSTNAME / RESOLVE ALL TO IP directly (see *Web GUI*). Leaving
|
|
671
|
+
`RESOLVE ALL TO IP` restores hostnames before applying the new mode.
|
|
638
672
|
|
|
639
673
|
`GET NAMES`/`G` (`-gn`): reverse-DNS every raw IP with no hostname counterpart, renames
|
|
640
674
|
on a PTR match (history/uptime carry over). Stays an IP if: no PTR record, name
|
|
@@ -677,7 +711,7 @@ dialog says so.
|
|
|
677
711
|
No search in the CLI list.
|
|
678
712
|
- **Banner**: while active the CLI banner shows e.g. `ADV Type not in (Firewall, Switch)`.
|
|
679
713
|
- **Reset**: SET REFERENCE and CLEAR ALL turn the filter off. It is not saved
|
|
680
|
-
with `SAVE HOSTS
|
|
714
|
+
with `SAVE HOSTS`.
|
|
681
715
|
|
|
682
716
|
## IPv6
|
|
683
717
|
|
|
@@ -691,20 +725,22 @@ other mask rejected. IPv6 addresses are always stored in shortest form.
|
|
|
691
725
|
## Diagnostics (`-dg`)
|
|
692
726
|
|
|
693
727
|
```
|
|
694
|
-
FPING 11
|
|
695
|
-
|| DNS 0.00 STATE 0.
|
|
728
|
+
FPING 34.11 [loop restarts=1 adds=0 pend=0 dnspend=0 abort=0 silent=0 young=0 30000(-r 4miss,-i 1ms) 34.11s]
|
|
729
|
+
|| DNS 0.00 STATE 0.35 BUILD 0.01 WAIT 0.10 DRAW 0.11
|
|
696
730
|
```
|
|
697
731
|
|
|
698
|
-
`FPING`:
|
|
699
|
-
|
|
732
|
+
`FPING`: wait for the snapshot, then engine counters: process restarts, added processes, hosts still without
|
|
733
|
+
a new result (`pend`), names being resolved (`dnspend`), cut short by a command (`abort`), hosts DOWN by
|
|
734
|
+
silence (`silent`), hosts in the grace period (`young`). Remaining phases: eping's own work.
|
|
735
|
+
With `-debug` a round longer than 10 s is also logged as a `SLOW ROUND` comment with these times.
|
|
700
736
|
|
|
701
737
|
## Notes
|
|
702
738
|
|
|
703
739
|
- ICMP echo requests only. Use only on authorised networks.
|
|
704
740
|
- `-p` > 1 and `-i 0` reduce accuracy (false DOWN) — defaults avoid both.
|
|
705
|
-
- `-
|
|
741
|
+
- Needs an fping with `-l` and per-target sequence numbers (fping 4.3 or newer; the Windows / macOS packages have it).
|
|
706
742
|
|
|
707
|
-
# epinga.py 2.
|
|
743
|
+
# epinga.py 2.47
|
|
708
744
|
|
|
709
745
|
Analyses an eping.py CSV log: terminal summary + self-contained HTML report (no
|
|
710
746
|
server, no external assets) with per-host detail, state-change timelines, and
|
|
@@ -716,6 +752,7 @@ always-UP/flapping/always-DOWN/no-DNS buckets.
|
|
|
716
752
|
./epinga.py # interactive menu - pick a *.csv
|
|
717
753
|
./epinga.py -f eping-log_2026-09-05.csv # analyse a specific logfile
|
|
718
754
|
./epinga.py -f FILE --open # analyse and open the report
|
|
755
|
+
./epinga.py -f eping-log_...csv.zip # a zipped logfile (one csv inside) is read directly
|
|
719
756
|
```
|
|
720
757
|
|
|
721
758
|
Output: `<base>_report.txt` and `<base>_report.html` (`--html FILE` overrides).
|
|
@@ -730,6 +767,8 @@ Output: `<base>_report.txt` and `<base>_report.html` (`--html FILE` overrides).
|
|
|
730
767
|
| `-e`, `--end YYYY-MM-DD HH:MM:SS` | rows up to this timestamp |
|
|
731
768
|
| `-S`, `--sort {name,flapping,uptime,rtt}` | summary sort order (default `name`) |
|
|
732
769
|
| `--source SOURCE` | only rows of this source - `local` or the jump host label from the log column `SOURCE` (repeatable; see *Source filter*) |
|
|
770
|
+
| `--progress-file FILE` | write the progress (percent, remaining seconds, phase) as JSON to FILE - used by eping.py's GENERATE REPORT |
|
|
771
|
+
| `--no-source-switch` | HTML report: do not embed one dataset per source (no source switch; faster on big multi-source logs) |
|
|
733
772
|
| `--no-detail` | summary only |
|
|
734
773
|
| `--no-changes` | omit state-change list |
|
|
735
774
|
| `--html FILE` | custom HTML filename |
|
|
@@ -743,9 +782,17 @@ Logs written while eping.py ran on a jump host carry a `SOURCE` column. With `--
|
|
|
743
782
|
selection shown on a terminal when the log holds several sources; numbers like `1,3`, ENTER = all)
|
|
744
783
|
only the periods of the selected sources are calculated: uptime, up/down time, RTT, changes and the
|
|
745
784
|
timeline. Periods of other sources are excluded and shown as a gap in the timeline; a state change that
|
|
746
|
-
happened during such a gap is not counted. Without `--source` everything is combined
|
|
785
|
+
happened during such a gap is not counted. Without `--source` everything is combined.
|
|
747
786
|
Logs without a `SOURCE` column are treated as `local`.
|
|
748
787
|
|
|
788
|
+
**Source switch in the HTML report**: if the (selected) sources are two or more, epinga analyses every source on
|
|
789
|
+
its own as well and embeds these datasets in the same HTML file. A drop-down in the toolbar (`All sources
|
|
790
|
+
(combined)` / `<label>`) switches the whole report - cards, host table, timelines, filters - to that
|
|
791
|
+
source; the choice is kept in the URL (`#src=<label>`), a reload keeps it, sort/filter state is reset on a switch.
|
|
792
|
+
The text report and the terminal output stay combined. Cost: one extra pass over the log per source and a
|
|
793
|
+
correspondingly larger HTML file; `--no-source-switch` turns it off. A saved copy of the report (Download) opens
|
|
794
|
+
on `All sources`.
|
|
795
|
+
|
|
749
796
|

|
|
750
797
|
|
|
751
798
|
## Called from eping.py
|