eping 3.65__tar.gz → 3.84__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: eping
3
- Version: 3.65
3
+ Version: 3.84
4
4
  Summary: Continuous ICMP reachability monitor built on fping, with a CSV logfile analyser (epinga)
5
5
  Author-email: Ewald Jeitler <ewald@jeitler.cc>
6
6
  License: GPL-3.0-or-later
@@ -17,7 +17,7 @@ Description-Content-Type: text/markdown
17
17
  License-File: LICENSE
18
18
  Dynamic: license-file
19
19
 
20
- # eping.py 3.65
20
+ # eping.py 3.84
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.
@@ -48,6 +48,19 @@ Standalone scripts (installs/updates `eping.py`, `epinga.py`, `esplit.py`):
48
48
 
49
49
  `esplit.py` isn't part of the pip package - use the standalone install for it.
50
50
 
51
+ ## Windows
52
+
53
+ Portable Windows version (web GUI only, no installation): download and unpack
54
+ [`eping-windows.zip`](https://github.com/ewaldj/eping/blob/main/Windows_Version/eping-windows.zip)
55
+ ([folder](https://github.com/ewaldj/eping/tree/main/Windows_Version/)), then start `eping.exe`.
56
+
57
+ - Contains `eping.exe` (small launcher window: web port, Start / Stop / Restart, open web GUI),
58
+ `eping.py`, `epinga.py`, `fping.exe` + `cygwin1.dll` (fping for Windows) and an embedded Python.
59
+ - The web GUI opens in the browser (default `http://127.0.0.1:8080`). The port is read from the hosts file
60
+ (`opt: -port 9000`); a port already in use is reported and can be changed in the launcher window.
61
+ - No terminal (curses) mode and no `-wv`/`-wvc` on Windows; log file names use `-` instead of `:`.
62
+ - Extra options: put them in `eping-args.txt` next to `eping.exe`. Details: `README-WINDOWS.txt` in the zip.
63
+
51
64
  ## Quick start
52
65
 
53
66
  pip install: use `eping`/`epinga` instead of `./eping.py`/`./epinga.py` below.
@@ -61,7 +74,7 @@ pip install: use `eping`/`epinga` instead of `./eping.py`/`./epinga.py` below.
61
74
  ./eping.py -wvc # CLI + controllable web view
62
75
  ```
63
76
 
64
- No args: creates a sample `eping-hosts.txt`. `-df`: start with no hosts, add at runtime.
77
+ No args: creates a sample `eping-hosts.txt` and `eping-hosts-sample.csv` (same hosts with invented inventory values, a template for the *Inventory CSV import*; never loaded by eping). `-df`: start with no hosts, add at runtime.
65
78
 
66
79
  ### Running unattended (screen / tmux)
67
80
 
@@ -86,7 +99,7 @@ expansion includes network/broadcast. Several `-f` files are combined before ded
86
99
 
87
100
  ### Host file format
88
101
 
89
- Same parser for `-f`, `F`/ADD FILE (CLI), and web GUI ADD FILE:
102
+ Same parser for `-f`, `F`/ADD FILE (CLI), and web GUI ADD HOSTS FILE:
90
103
 
91
104
  ```
92
105
  # comment to end of line
@@ -99,7 +112,7 @@ www.google.com # hostname/FQDN
99
112
  2606:4700:4700::1111/128 # IPv6 with /128 - single host
100
113
  ```
101
114
 
102
- Network mask range /13…/32 everywhere (host file, ADD FILE, web upload, ADD/DELETE
115
+ Network mask range /13…/32 everywhere (host file, ADD HOSTS FILE, web upload, ADD/DELETE
103
116
  host input); out of range is rejected (message names the allowed range; `-f` warns and
104
117
  ignores). IPv6: only `/128` accepted, any other mask rejected. Anything else is ignored.
105
118
 
@@ -117,34 +130,38 @@ opt: -web -port 9000
117
130
  Multiple `opt:` lines join in file order. `#` comments out the rest of the line (or
118
131
  the whole line at the start). Quote values with spaces: `opt: -f "my hosts.txt"`. A
119
132
  flag typed on the command line wins over the same flag from a file. Only applies to
120
- the initial `-f` read at startup — `F`/ADD FILE (CLI or web, FROM CLIENT/FROM SERVER)
133
+ the initial `-f` read at startup — `F`/ADD FILE (CLI) and ADD HOSTS FILE (web)
121
134
  never parse `opt:` lines, they're just text.
122
135
 
136
+ `opt:` lines also work at the top of an inventory `.csv`. SAVE HOSTS FILE and DOWNLOAD ALL/ACTIVE HOSTS write 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`).
137
+
123
138
  The default `eping-hosts.txt`: sample hosts, this section, then every CLI option as a
124
139
  commented-out `opt:` line with its default (remove `# ` to activate).
125
140
 
126
141
  ## Inventory CSV import
127
142
 
128
143
  A `.csv` inventory export (one device per row) can be used as host file: `-f FILE.csv`,
129
- `F`/ADD FILE (CLI), web GUI ADD FILE (FROM CLIENT, FROM SERVER, drag and drop). Files
144
+ `F`/ADD FILE (CLI), web GUI FILE OPERATIONS > ADD HOSTS FILE (FROM CLIENT, FROM SERVER, drag and drop). Files
130
145
  named `*.txt` are never treated as CSV - they keep the plain host file format above.
131
146
 
132
- - **Detection**: first non-empty line is a header with the columns `IP Address` and
147
+ - **Detection**: first line that is not blank, a `#` comment or an `opt:` line is a header with the columns `IP Address` and
133
148
  `Hostname` (case-insensitive); the delimiter (`;`, `,` or tab) is detected.
134
149
  - **Columns used**: `IP Address`, `Hostname`, `Serial Number`, `Model`, `Location`,
135
150
  `sysLocation`, `Type`, `Comment`. All other columns are ignored.
136
- - **Host entry**: the IP address; rows without a valid IP are ignored. With PREFER
137
- HOSTNAME (`-ph`, or that address mode active when the file is added) the entry is
138
- the `Hostname` instead - rows without an IP are then pinged by name too (NO-DNS if it
139
- does not resolve); a name that is not a valid hostname falls back to the IP.
140
- Rows without a usable entry are ignored.
151
+ - **Host entry**: the `Hostname` (default; rows without an IP are pinged by name too,
152
+ NO-DNS if it does not resolve). A name that is not a valid hostname falls back to the
153
+ IP; rows without a usable entry are ignored. In the IP modes (`-ipo`, PREFER IP
154
+ ADDRESS, also when active while the file is added) the entry is the IP address
155
+ instead and rows without a valid IP are ignored. `-ph` is not needed for a CSV.
141
156
  - **Duplicates**: one host per entry, the first row wins. The count of ignored and
142
157
  duplicate rows is reported when the file is added (startup message / web footer).
143
158
  - **Log**: the six inventory values and the CSV hostname are written with every row
144
159
  of that host, see *Logging*. A `Hostname` that is not the host entry (IP mode) is
145
160
  only kept there as information.
146
- - Plain `.txt` hosts and `SAVE HOSTS FILE` carry no inventory values: a saved hosts
147
- file lists only the host entries.
161
+ - **Filters**: `M` matches the inventory values as text, `V` / ADV FILTER selects them
162
+ (see *ADV FILTER*).
163
+ - **Save**: if the displayed hosts carry inventory values, `SAVE HOSTS FILE` writes an
164
+ inventory `.csv` (see *Web GUI*); plain `.txt` hosts are saved as `.txt`.
148
165
 
149
166
  Example (`;` delimited, extra columns are ignored):
150
167
 
@@ -158,8 +175,8 @@ sw-access-01;10.0.1.1;FOC5678C3DE;C9200L-24P;Vienna DC1;Rack C1;Switch;
158
175
  fw-edge-01;192.0.2.1;JMX2345F6GH;ASA5516;Linz POP;Rack B2;Firewall;ASA 5516 - EoL 2027
159
176
  ```
160
177
 
161
- Without `-ph` this gives 5 hosts (the IP addresses); `ap-lobby-01` has no IP and is
162
- ignored. With `-ph` it gives 6 hosts, named by `Hostname`.
178
+ This gives 6 hosts, named by `Hostname`. In an IP mode it gives 5 hosts (the IP
179
+ addresses); `ap-lobby-01` has no IP and is ignored.
163
180
 
164
181
  ## CLI mode
165
182
 
@@ -170,6 +187,7 @@ DOWN. Columns: hostname/IP, state, RTT (ms), last-change timestamp, change count
170
187
  |---|---|
171
188
  | `U` | view picker — all 9 views (see *Views and sort orders*) |
172
189
  | `M` | match filter — regex on hostname/IP and inventory fields, display only (see *Match filter*) |
190
+ | `V` | ADV FILTER — check/uncheck Model/Location/sysLocation/Type/Comment values (show only / hide), display only (see *ADV FILTER*) |
173
191
  | `A` | add host — IP, hostname, CIDR (/13…/32), or `ip1-ip2` (max 524288) |
174
192
  | `D` | delete host — same formats/limits as add |
175
193
  | `F` | add hosts from a file |
@@ -192,7 +210,7 @@ same option set as the matching web GUI dropdown.
192
210
  Dialogs: ENTER confirms, ESC/empty cancels. Key bar shortens on narrow terminals.
193
211
  `PLEASE WAIT` box with elapsed counter shown until the first round has results.
194
212
 
195
- Ping checks keep running while a dialog (`A`/`D`/`F`/`M`/`T`) is open — same
213
+ Ping checks keep running while a dialog (`A`/`D`/`F`/`M`/`V`/`T`) is open — same
196
214
  retry/state/logging logic as the main loop; screen repaints once the dialog closes.
197
215
 
198
216
  Screen repaints ~7×/s independent of fping. `UP`, `SET REFERENCE`, `DEL HOST`, `ZERO
@@ -217,9 +235,9 @@ Single self-contained page, no external resources.
217
235
 
218
236
  - Table: CLI-style columns, filled top-down then next column right. Horizontal scroll
219
237
  if needed ("SCROLL RIGHT FOR MORE" hint in the stats bar).
220
- - Footer stats: RUNTIME, HOST UP/DOWN/FLAPPING, for the whole current view regardless
221
- of the match filter. RUNTIME shows `n/a` briefly during a background round.
222
- - Adding many hosts (`ADD`, `ADD FILE`, upload) shows "added N host(s) - please wait,
238
+ - Footer stats: HOSTS, RUNTIME, HOST UP/DOWN/FLAPPING, for the whole current view regardless
239
+ of the match filter and the ADV FILTER (HOSTS-SHOWN = shown count). The CLI footer counts the same way. RUNTIME shows `n/a` briefly during a background round.
240
+ - Adding many hosts (`ADD`, ADD HOSTS FILE, upload) shows "added N host(s) - please wait,
223
241
  pinging ..." until they appear with a state, then `done`.
224
242
  - Font size 6–28px (slider, `A−`/`A+`, `+`/`−` keys), stored in `localStorage`.
225
243
  - Column headers sort the list (IPv4-aware).
@@ -227,38 +245,46 @@ Single self-contained page, no external resources.
227
245
  - Row 1: view select (9 views), sort order select, SET REFERENCE, ZERO CHANGES,
228
246
  CLEAR ALL, address mode select, GET NAMES, ADV OPTIONS, RESET LOG, FILE OPERATIONS
229
247
  select, EXIT, font size.
230
- - Row 2: match filter (SET/CLEAR), host field (ADD/DELETE), comment field (COMMENT),
231
- ADD FILE select, GENERATE REPORT select.
248
+ - Row 2: match filter (SET/CLEAR), ADV FILTER, host field (ADD/DELETE), comment
249
+ field (COMMENT), GENERATE REPORT select.
232
250
  - View select, sort order select, address mode select and ADV OPTIONS all match the
233
- CLI's `U`/`O`/`P`/`X` pickers exactly. FILE OPERATIONS and ADD FILE > FROM CLIENT/
234
- FROM SERVER are web-gui-only (no CLI key - CLI already runs on the server's own
251
+ CLI's `U`/`O`/`P`/`X` pickers exactly. FILE OPERATIONS (incl. ADD HOSTS FILE FROM CLIENT/
252
+ FROM SERVER) is web-gui-only (no CLI key - CLI already runs on the server's own
235
253
  filesystem).
236
254
  - **FILE OPERATIONS** dropdown, in this order:
237
255
  | Entry | Does |
238
256
  |---|---|
239
- | SAVE HOSTS FILE ON SERVER | confirmation, then saves the currently displayed hosts; blank name overwrites the active `-f` hostfile (first one, if eping.py was started with one) or, with none active, the default `eping-hosts.txt`; a typed name always saves as that new file instead, `.txt` appended once, active hostfile left untouched |
257
+ | 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
+ | ADD HOSTS FILE FROM CLIENT | local file picker (`.txt`/`.csv`), adds the hosts; a file can also be dropped anywhere on the page |
259
+ | SAVE HOSTS FILE ON SERVER | confirmation, then saves the currently displayed hosts; blank name overwrites the active `-f` hostfile (first one, if eping.py was started with one) or, with none active, the default `eping-hosts.txt`; a typed name always saves as that new file instead, `.txt` appended once, active hostfile left untouched. If the displayed hosts carry inventory values (CSV import) an inventory `.csv` is written instead (`;` delimited, columns as in *Inventory CSV import*); a `.txt` name or hostfile then becomes `.csv`, the default is `eping-hosts.csv`. The options that differ from the default are written first as `opt:` lines (see *Host file format*); for a `.csv` the checkboxes `include options (opt: lines)` (default on) and `save as .txt (hosts only, no inventory)` (default off) are offered |
240
260
  | UPLOAD FILE TO SERVER | picks a local `.txt`/`.csv`, saves as-is server-side, no host parsing; never overwrites, appends `-1`/`-2`/... |
241
- | DOWNLOAD ALL HOSTS | full reference list, plain text |
242
- | DOWNLOAD ACTIVE HOSTS | currently displayed hosts (view/address mode/filter applied), plain text |
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 |
243
263
  | DOWNLOAD ACTIVE LOGFILE | active CSV log, zipped; disabled while logging off |
244
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 |
245
265
  | DELETE FILES FROM SERVER | same picker as DOWNLOAD SELECTED FILES, red DELETE button, confirms with file count; active logfile can't be deleted |
246
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 |
247
- - **ADD FILE** dropdown: `FROM CLIENT` (local file picker) / `FROM SERVER` (picks one
248
- or more `.txt` files or inventory `.csv` files already on the server, adds their
249
- hosts; a `.csv` without the inventory header, e.g. an eping log, is refused).
250
267
  - Keyboard shortcuts (no modifier, only while no text field has focus; own quick
251
268
  variants, not the CLI's picker keys of the same letter): `U` cycles the original 3
252
269
  views (ALL HOSTS → CURRENTLY-UP → UP+FLAPPING → ALL HOSTS), the other 6 need the
253
270
  dropdown; `O` cycles all 5 sort orders one at a time; `P`/`I` toggle PREFER HOSTNAME /
254
271
  SWITCH TO IP ONLY directly, the address mode select reaches all 4 modes; `G`/`S`/`Z`/
255
272
  `C`/`L`/`E` click the matching button (`E`/`C`/`L` confirm); `A`/`D` focus host field;
256
- `M`/`T` focus their field; `F` opens the file picker; `R` forces a status refresh;
273
+ `M`/`T` focus their field; `V` opens ADV FILTER; `F` opens the ADD HOSTS FILE FROM CLIENT picker; `R` forces a status refresh;
257
274
  `+`/`−` font size (works while typing). No keyboard shortcut for `X`/ADV OPTIONS or
258
275
  GENERATE REPORT - click required.
259
276
  - Host field feeds both ADD/DELETE; ENTER triggers the button used last, ESC clears.
260
277
  - Files can also be dropped anywhere on the page (max 16MB, see *Host file format*).
261
278
  - Commands acknowledge immediately; a click aborts the running round.
279
+ - **Host popup**: hovering a host row (after ~350 ms) shows everything known about it:
280
+ state, previous state, RTT, last check, changes, time in the current state, resolved/CSV
281
+ IP, inventory values (Model, Location, sysLocation, Type, Comment, serial) and its
282
+ history (last up to 50 state changes, newest first, merged with the log `COMMENT`s
283
+ by time). The data is fetched per host on demand (`GET /api/host`), the polled status
284
+ stays small. A click on the row pins the popup: the text can be selected, `COPY` copies
285
+ all of it, `DELETE` removes the host immediately (no confirmation; not shown in `-wv`),
286
+ `×`/ESC/click elsewhere closes it. The history lives in memory only; it is cleared by
287
+ ZERO CHANGES and CLEAR ALL.
262
288
 
263
289
  ### Views and sort orders
264
290
 
@@ -330,7 +356,8 @@ Same bounds as the matching CLI flags (`-lms`/`-lmf` for the last two - see *Out
330
356
  |---|---|---|---|
331
357
  | GET | `/` | — | the page |
332
358
  | GET | `/api/status` | — | JSON: rows, counters, scan/phase info |
333
- | GET | `/api/logfiles` | — | JSON list of `.csv`/`.txt`/`.html` files (FILE OPERATIONS, ADD FILE > FROM SERVER) |
359
+ | GET | `/api/host?name=...` | — | JSON: all known data and history of one host (mouse-over popup) |
360
+ | GET | `/api/logfiles` | — | JSON list of `.csv`/`.txt`/`.html` files (FILE OPERATIONS > ADD HOSTS FILE FROM SERVER) |
334
361
  | GET | `/api/download/hosts_all` | — | full reference list, `.txt` |
335
362
  | GET | `/api/download/hosts_shown` | — | shown hosts, `.txt` |
336
363
  | GET | `/api/download/logfile` | — | active CSV log, zipped; `404` if logging off |
@@ -341,11 +368,14 @@ Same bounds as the matching CLI flags (`-lms`/`-lmf` for the last two - see *Out
341
368
  | POST | `/api/add_from_server` | `{"names":[...]}` | add hosts from listed `.txt` files |
342
369
  | GET | `/api/report` | — | last GENERATE REPORT HTML; `404` until done |
343
370
  | POST | `/api/command` | `{"cmd":"...","value":"..."}` | control (see cmd list below) |
371
+ | POST | `/api/advvalues` | `{"filter":{...}}` | ADV FILTER: values still selectable for a draft selection (same format as `adv_filter`) |
344
372
  | POST | `/api/upload` | host list, text | add hosts |
345
373
 
346
374
  `cmd` values: `up_only`, `set_filter`, `addr_mode`, `get_names`, `match_filter`,
347
- `sort`, `add`, `del`, `set_ref`, `zero`, `add_comment`, `reset_log`, `clear`,
348
- `set_option`, `reset_options`, `run_report`, `save_hosts_file`, `exit`. `set_option`
375
+ `adv_filter`, `sort`, `add`, `del`, `set_ref`, `zero`, `add_comment`, `reset_log`, `clear`,
376
+ `set_option`, `reset_options`, `run_report`, `save_hosts_file`, `exit`. `adv_filter` value: JSON object `{"<field>":{"mode":"in|out","values":[...]}}` with the fields `model`,
377
+ `location`, `sysloc`, `type`, `comment`; `\u0001none` as value = hosts without a value; `{}` = off
378
+ (the old `{"<field>":"<value>"}` form is still accepted as `in` with one value). `set_option`
349
379
  value: `key=value`. `reset_log` value: logging off - optional custom file name (blank =
350
380
  auto-generated); logging on - `y` (clear) or `new`/`new=<name>` (new file, optional
351
381
  custom name). `run_report`: `value` = empty (active logfile) or one `.csv` filename; or
@@ -361,7 +391,9 @@ authentication. Default bind `0.0.0.0` — use `-bind 127.0.0.1` outside trusted
361
391
  1. Hostnames resolved once (32 parallel), cached around `-dns` seconds (randomized a
362
392
  bit so a large batch resolved together doesn't all expire - and need re-resolving -
363
393
  in the same round later). Same-address names share one probe. Unresolvable → NO-DNS,
364
- no fping call. `-dns 0` = fping-side resolve.
394
+ no fping call. `-dns 0` = fping-side resolve. A command (filter, add, ...) cuts
395
+ the name resolution short as well, so it applies at once even with thousands of
396
+ hostnames.
365
397
  2. UP/new hosts get full `-re` retries; confirmed-DOWN hosts get `-dr` retries. Every
366
398
  `-fs`-th round probes everything with full retries.
367
399
  3. Only 1/`-ds` of DOWN hosts probed per round, strided.
@@ -565,6 +597,31 @@ value turns it off. CLI: replaces the version banner with `MATCH FILTER '<regex>
565
597
  active (N of M hosts shown, all still pinged)`. Invalid regex: error shown, previous
566
598
  filter unchanged.
567
599
 
600
+ ## ADV FILTER
601
+
602
+ Excel-style display filter on the inventory values of a CSV import (*Inventory CSV
603
+ import*) for `Model`, `Location`, `sysLocation`, `Type` and `Comment`. Display only -
604
+ every host keeps being pinged. Needs hosts with inventory values; without them the
605
+ dialog says so.
606
+
607
+ - **Open**: CLI `V`, web GUI button `ADV FILTER` or key `V`. A separate window; the
608
+ filter only changes when applied.
609
+ - **Per field**: check any number of values (with host count; `(empty)` = hosts without
610
+ a value) and choose the mode: `SHOW ONLY CHECKED` (include) or `HIDE CHECKED`
611
+ (exclude). Nothing checked = field not filtered.
612
+ - **Combination**: values within a field are ORed, fields are ANDed with each other, with
613
+ the match filter (`M`) and the view. The lists narrow as you select: only values still
614
+ possible with the other fields' selection are offered.
615
+ - **Web window**: one list per field with search box, `ALL`/`NONE` (act on the entries
616
+ matching the search), the mode toggle, APPLY, RESET ALL, CLOSE. Lists show the first
617
+ 500 entries, the rest via search.
618
+ - **CLI window**: `↑`/`↓` field, ENTER opens the value list (`SPACE` check, `I` show-only/hide,
619
+ `A` all, `N` none, ENTER ok, ESC cancel), then `A` APPLY, `R` RESET ALL, ESC CANCEL.
620
+ No search in the CLI list.
621
+ - **Banner**: while active the CLI banner shows e.g. `ADV Type not in (Firewall, Switch)`.
622
+ - **Reset**: SET REFERENCE and CLEAR ALL turn the filter off. It is not saved
623
+ with `SAVE HOSTS FILE`.
624
+
568
625
  ## IPv6
569
626
 
570
627
  IPv4/IPv6 mixed freely. Resolution follows `-4`/`-6` (preference, not restriction; A
@@ -1,4 +1,4 @@
1
- # eping.py 3.65
1
+ # eping.py 3.84
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.
@@ -29,6 +29,19 @@ Standalone scripts (installs/updates `eping.py`, `epinga.py`, `esplit.py`):
29
29
 
30
30
  `esplit.py` isn't part of the pip package - use the standalone install for it.
31
31
 
32
+ ## Windows
33
+
34
+ Portable Windows version (web GUI only, no installation): download and unpack
35
+ [`eping-windows.zip`](https://github.com/ewaldj/eping/blob/main/Windows_Version/eping-windows.zip)
36
+ ([folder](https://github.com/ewaldj/eping/tree/main/Windows_Version/)), then start `eping.exe`.
37
+
38
+ - Contains `eping.exe` (small launcher window: web port, Start / Stop / Restart, open web GUI),
39
+ `eping.py`, `epinga.py`, `fping.exe` + `cygwin1.dll` (fping for Windows) and an embedded Python.
40
+ - The web GUI opens in the browser (default `http://127.0.0.1:8080`). The port is read from the hosts file
41
+ (`opt: -port 9000`); a port already in use is reported and can be changed in the launcher window.
42
+ - No terminal (curses) mode and no `-wv`/`-wvc` on Windows; log file names use `-` instead of `:`.
43
+ - Extra options: put them in `eping-args.txt` next to `eping.exe`. Details: `README-WINDOWS.txt` in the zip.
44
+
32
45
  ## Quick start
33
46
 
34
47
  pip install: use `eping`/`epinga` instead of `./eping.py`/`./epinga.py` below.
@@ -42,7 +55,7 @@ pip install: use `eping`/`epinga` instead of `./eping.py`/`./epinga.py` below.
42
55
  ./eping.py -wvc # CLI + controllable web view
43
56
  ```
44
57
 
45
- No args: creates a sample `eping-hosts.txt`. `-df`: start with no hosts, add at runtime.
58
+ No args: creates a sample `eping-hosts.txt` and `eping-hosts-sample.csv` (same hosts with invented inventory values, a template for the *Inventory CSV import*; never loaded by eping). `-df`: start with no hosts, add at runtime.
46
59
 
47
60
  ### Running unattended (screen / tmux)
48
61
 
@@ -67,7 +80,7 @@ expansion includes network/broadcast. Several `-f` files are combined before ded
67
80
 
68
81
  ### Host file format
69
82
 
70
- Same parser for `-f`, `F`/ADD FILE (CLI), and web GUI ADD FILE:
83
+ Same parser for `-f`, `F`/ADD FILE (CLI), and web GUI ADD HOSTS FILE:
71
84
 
72
85
  ```
73
86
  # comment to end of line
@@ -80,7 +93,7 @@ www.google.com # hostname/FQDN
80
93
  2606:4700:4700::1111/128 # IPv6 with /128 - single host
81
94
  ```
82
95
 
83
- Network mask range /13…/32 everywhere (host file, ADD FILE, web upload, ADD/DELETE
96
+ Network mask range /13…/32 everywhere (host file, ADD HOSTS FILE, web upload, ADD/DELETE
84
97
  host input); out of range is rejected (message names the allowed range; `-f` warns and
85
98
  ignores). IPv6: only `/128` accepted, any other mask rejected. Anything else is ignored.
86
99
 
@@ -98,34 +111,38 @@ opt: -web -port 9000
98
111
  Multiple `opt:` lines join in file order. `#` comments out the rest of the line (or
99
112
  the whole line at the start). Quote values with spaces: `opt: -f "my hosts.txt"`. A
100
113
  flag typed on the command line wins over the same flag from a file. Only applies to
101
- the initial `-f` read at startup — `F`/ADD FILE (CLI or web, FROM CLIENT/FROM SERVER)
114
+ the initial `-f` read at startup — `F`/ADD FILE (CLI) and ADD HOSTS FILE (web)
102
115
  never parse `opt:` lines, they're just text.
103
116
 
117
+ `opt:` lines also work at the top of an inventory `.csv`. SAVE HOSTS FILE and DOWNLOAD ALL/ACTIVE HOSTS write 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`).
118
+
104
119
  The default `eping-hosts.txt`: sample hosts, this section, then every CLI option as a
105
120
  commented-out `opt:` line with its default (remove `# ` to activate).
106
121
 
107
122
  ## Inventory CSV import
108
123
 
109
124
  A `.csv` inventory export (one device per row) can be used as host file: `-f FILE.csv`,
110
- `F`/ADD FILE (CLI), web GUI ADD FILE (FROM CLIENT, FROM SERVER, drag and drop). Files
125
+ `F`/ADD FILE (CLI), web GUI FILE OPERATIONS > ADD HOSTS FILE (FROM CLIENT, FROM SERVER, drag and drop). Files
111
126
  named `*.txt` are never treated as CSV - they keep the plain host file format above.
112
127
 
113
- - **Detection**: first non-empty line is a header with the columns `IP Address` and
128
+ - **Detection**: first line that is not blank, a `#` comment or an `opt:` line is a header with the columns `IP Address` and
114
129
  `Hostname` (case-insensitive); the delimiter (`;`, `,` or tab) is detected.
115
130
  - **Columns used**: `IP Address`, `Hostname`, `Serial Number`, `Model`, `Location`,
116
131
  `sysLocation`, `Type`, `Comment`. All other columns are ignored.
117
- - **Host entry**: the IP address; rows without a valid IP are ignored. With PREFER
118
- HOSTNAME (`-ph`, or that address mode active when the file is added) the entry is
119
- the `Hostname` instead - rows without an IP are then pinged by name too (NO-DNS if it
120
- does not resolve); a name that is not a valid hostname falls back to the IP.
121
- Rows without a usable entry are ignored.
132
+ - **Host entry**: the `Hostname` (default; rows without an IP are pinged by name too,
133
+ NO-DNS if it does not resolve). A name that is not a valid hostname falls back to the
134
+ IP; rows without a usable entry are ignored. In the IP modes (`-ipo`, PREFER IP
135
+ ADDRESS, also when active while the file is added) the entry is the IP address
136
+ instead and rows without a valid IP are ignored. `-ph` is not needed for a CSV.
122
137
  - **Duplicates**: one host per entry, the first row wins. The count of ignored and
123
138
  duplicate rows is reported when the file is added (startup message / web footer).
124
139
  - **Log**: the six inventory values and the CSV hostname are written with every row
125
140
  of that host, see *Logging*. A `Hostname` that is not the host entry (IP mode) is
126
141
  only kept there as information.
127
- - Plain `.txt` hosts and `SAVE HOSTS FILE` carry no inventory values: a saved hosts
128
- file lists only the host entries.
142
+ - **Filters**: `M` matches the inventory values as text, `V` / ADV FILTER selects them
143
+ (see *ADV FILTER*).
144
+ - **Save**: if the displayed hosts carry inventory values, `SAVE HOSTS FILE` writes an
145
+ inventory `.csv` (see *Web GUI*); plain `.txt` hosts are saved as `.txt`.
129
146
 
130
147
  Example (`;` delimited, extra columns are ignored):
131
148
 
@@ -139,8 +156,8 @@ sw-access-01;10.0.1.1;FOC5678C3DE;C9200L-24P;Vienna DC1;Rack C1;Switch;
139
156
  fw-edge-01;192.0.2.1;JMX2345F6GH;ASA5516;Linz POP;Rack B2;Firewall;ASA 5516 - EoL 2027
140
157
  ```
141
158
 
142
- Without `-ph` this gives 5 hosts (the IP addresses); `ap-lobby-01` has no IP and is
143
- ignored. With `-ph` it gives 6 hosts, named by `Hostname`.
159
+ This gives 6 hosts, named by `Hostname`. In an IP mode it gives 5 hosts (the IP
160
+ addresses); `ap-lobby-01` has no IP and is ignored.
144
161
 
145
162
  ## CLI mode
146
163
 
@@ -151,6 +168,7 @@ DOWN. Columns: hostname/IP, state, RTT (ms), last-change timestamp, change count
151
168
  |---|---|
152
169
  | `U` | view picker — all 9 views (see *Views and sort orders*) |
153
170
  | `M` | match filter — regex on hostname/IP and inventory fields, display only (see *Match filter*) |
171
+ | `V` | ADV FILTER — check/uncheck Model/Location/sysLocation/Type/Comment values (show only / hide), display only (see *ADV FILTER*) |
154
172
  | `A` | add host — IP, hostname, CIDR (/13…/32), or `ip1-ip2` (max 524288) |
155
173
  | `D` | delete host — same formats/limits as add |
156
174
  | `F` | add hosts from a file |
@@ -173,7 +191,7 @@ same option set as the matching web GUI dropdown.
173
191
  Dialogs: ENTER confirms, ESC/empty cancels. Key bar shortens on narrow terminals.
174
192
  `PLEASE WAIT` box with elapsed counter shown until the first round has results.
175
193
 
176
- Ping checks keep running while a dialog (`A`/`D`/`F`/`M`/`T`) is open — same
194
+ Ping checks keep running while a dialog (`A`/`D`/`F`/`M`/`V`/`T`) is open — same
177
195
  retry/state/logging logic as the main loop; screen repaints once the dialog closes.
178
196
 
179
197
  Screen repaints ~7×/s independent of fping. `UP`, `SET REFERENCE`, `DEL HOST`, `ZERO
@@ -198,9 +216,9 @@ Single self-contained page, no external resources.
198
216
 
199
217
  - Table: CLI-style columns, filled top-down then next column right. Horizontal scroll
200
218
  if needed ("SCROLL RIGHT FOR MORE" hint in the stats bar).
201
- - Footer stats: RUNTIME, HOST UP/DOWN/FLAPPING, for the whole current view regardless
202
- of the match filter. RUNTIME shows `n/a` briefly during a background round.
203
- - Adding many hosts (`ADD`, `ADD FILE`, upload) shows "added N host(s) - please wait,
219
+ - Footer stats: HOSTS, RUNTIME, HOST UP/DOWN/FLAPPING, for the whole current view regardless
220
+ of the match filter and the ADV FILTER (HOSTS-SHOWN = shown count). The CLI footer counts the same way. RUNTIME shows `n/a` briefly during a background round.
221
+ - Adding many hosts (`ADD`, ADD HOSTS FILE, upload) shows "added N host(s) - please wait,
204
222
  pinging ..." until they appear with a state, then `done`.
205
223
  - Font size 6–28px (slider, `A−`/`A+`, `+`/`−` keys), stored in `localStorage`.
206
224
  - Column headers sort the list (IPv4-aware).
@@ -208,38 +226,46 @@ Single self-contained page, no external resources.
208
226
  - Row 1: view select (9 views), sort order select, SET REFERENCE, ZERO CHANGES,
209
227
  CLEAR ALL, address mode select, GET NAMES, ADV OPTIONS, RESET LOG, FILE OPERATIONS
210
228
  select, EXIT, font size.
211
- - Row 2: match filter (SET/CLEAR), host field (ADD/DELETE), comment field (COMMENT),
212
- ADD FILE select, GENERATE REPORT select.
229
+ - Row 2: match filter (SET/CLEAR), ADV FILTER, host field (ADD/DELETE), comment
230
+ field (COMMENT), GENERATE REPORT select.
213
231
  - View select, sort order select, address mode select and ADV OPTIONS all match the
214
- CLI's `U`/`O`/`P`/`X` pickers exactly. FILE OPERATIONS and ADD FILE > FROM CLIENT/
215
- FROM SERVER are web-gui-only (no CLI key - CLI already runs on the server's own
232
+ CLI's `U`/`O`/`P`/`X` pickers exactly. FILE OPERATIONS (incl. ADD HOSTS FILE FROM CLIENT/
233
+ FROM SERVER) is web-gui-only (no CLI key - CLI already runs on the server's own
216
234
  filesystem).
217
235
  - **FILE OPERATIONS** dropdown, in this order:
218
236
  | Entry | Does |
219
237
  |---|---|
220
- | SAVE HOSTS FILE ON SERVER | confirmation, then saves the currently displayed hosts; blank name overwrites the active `-f` hostfile (first one, if eping.py was started with one) or, with none active, the default `eping-hosts.txt`; a typed name always saves as that new file instead, `.txt` appended once, active hostfile left untouched |
238
+ | 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 |
239
+ | ADD HOSTS FILE FROM CLIENT | local file picker (`.txt`/`.csv`), adds the hosts; a file can also be dropped anywhere on the page |
240
+ | SAVE HOSTS FILE ON SERVER | confirmation, then saves the currently displayed hosts; blank name overwrites the active `-f` hostfile (first one, if eping.py was started with one) or, with none active, the default `eping-hosts.txt`; a typed name always saves as that new file instead, `.txt` appended once, active hostfile left untouched. If the displayed hosts carry inventory values (CSV import) an inventory `.csv` is written instead (`;` delimited, columns as in *Inventory CSV import*); a `.txt` name or hostfile then becomes `.csv`, the default is `eping-hosts.csv`. The options that differ from the default are written first as `opt:` lines (see *Host file format*); for a `.csv` the checkboxes `include options (opt: lines)` (default on) and `save as .txt (hosts only, no inventory)` (default off) are offered |
221
241
  | UPLOAD FILE TO SERVER | picks a local `.txt`/`.csv`, saves as-is server-side, no host parsing; never overwrites, appends `-1`/`-2`/... |
222
- | DOWNLOAD ALL HOSTS | full reference list, plain text |
223
- | DOWNLOAD ACTIVE HOSTS | currently displayed hosts (view/address mode/filter applied), plain text |
242
+ | 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) |
243
+ | DOWNLOAD ACTIVE HOSTS | currently displayed hosts (view/address mode/filter applied), same format and options as DOWNLOAD ALL HOSTS |
224
244
  | DOWNLOAD ACTIVE LOGFILE | active CSV log, zipped; disabled while logging off |
225
245
  | 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 |
226
246
  | DELETE FILES FROM SERVER | same picker as DOWNLOAD SELECTED FILES, red DELETE button, confirms with file count; active logfile can't be deleted |
227
247
  | 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 |
228
- - **ADD FILE** dropdown: `FROM CLIENT` (local file picker) / `FROM SERVER` (picks one
229
- or more `.txt` files or inventory `.csv` files already on the server, adds their
230
- hosts; a `.csv` without the inventory header, e.g. an eping log, is refused).
231
248
  - Keyboard shortcuts (no modifier, only while no text field has focus; own quick
232
249
  variants, not the CLI's picker keys of the same letter): `U` cycles the original 3
233
250
  views (ALL HOSTS → CURRENTLY-UP → UP+FLAPPING → ALL HOSTS), the other 6 need the
234
251
  dropdown; `O` cycles all 5 sort orders one at a time; `P`/`I` toggle PREFER HOSTNAME /
235
252
  SWITCH TO IP ONLY directly, the address mode select reaches all 4 modes; `G`/`S`/`Z`/
236
253
  `C`/`L`/`E` click the matching button (`E`/`C`/`L` confirm); `A`/`D` focus host field;
237
- `M`/`T` focus their field; `F` opens the file picker; `R` forces a status refresh;
254
+ `M`/`T` focus their field; `V` opens ADV FILTER; `F` opens the ADD HOSTS FILE FROM CLIENT picker; `R` forces a status refresh;
238
255
  `+`/`−` font size (works while typing). No keyboard shortcut for `X`/ADV OPTIONS or
239
256
  GENERATE REPORT - click required.
240
257
  - Host field feeds both ADD/DELETE; ENTER triggers the button used last, ESC clears.
241
258
  - Files can also be dropped anywhere on the page (max 16MB, see *Host file format*).
242
259
  - Commands acknowledge immediately; a click aborts the running round.
260
+ - **Host popup**: hovering a host row (after ~350 ms) shows everything known about it:
261
+ state, previous state, RTT, last check, changes, time in the current state, resolved/CSV
262
+ IP, inventory values (Model, Location, sysLocation, Type, Comment, serial) and its
263
+ history (last up to 50 state changes, newest first, merged with the log `COMMENT`s
264
+ by time). The data is fetched per host on demand (`GET /api/host`), the polled status
265
+ stays small. A click on the row pins the popup: the text can be selected, `COPY` copies
266
+ all of it, `DELETE` removes the host immediately (no confirmation; not shown in `-wv`),
267
+ `×`/ESC/click elsewhere closes it. The history lives in memory only; it is cleared by
268
+ ZERO CHANGES and CLEAR ALL.
243
269
 
244
270
  ### Views and sort orders
245
271
 
@@ -311,7 +337,8 @@ Same bounds as the matching CLI flags (`-lms`/`-lmf` for the last two - see *Out
311
337
  |---|---|---|---|
312
338
  | GET | `/` | — | the page |
313
339
  | GET | `/api/status` | — | JSON: rows, counters, scan/phase info |
314
- | GET | `/api/logfiles` | — | JSON list of `.csv`/`.txt`/`.html` files (FILE OPERATIONS, ADD FILE > FROM SERVER) |
340
+ | GET | `/api/host?name=...` | — | JSON: all known data and history of one host (mouse-over popup) |
341
+ | GET | `/api/logfiles` | — | JSON list of `.csv`/`.txt`/`.html` files (FILE OPERATIONS > ADD HOSTS FILE FROM SERVER) |
315
342
  | GET | `/api/download/hosts_all` | — | full reference list, `.txt` |
316
343
  | GET | `/api/download/hosts_shown` | — | shown hosts, `.txt` |
317
344
  | GET | `/api/download/logfile` | — | active CSV log, zipped; `404` if logging off |
@@ -322,11 +349,14 @@ Same bounds as the matching CLI flags (`-lms`/`-lmf` for the last two - see *Out
322
349
  | POST | `/api/add_from_server` | `{"names":[...]}` | add hosts from listed `.txt` files |
323
350
  | GET | `/api/report` | — | last GENERATE REPORT HTML; `404` until done |
324
351
  | POST | `/api/command` | `{"cmd":"...","value":"..."}` | control (see cmd list below) |
352
+ | POST | `/api/advvalues` | `{"filter":{...}}` | ADV FILTER: values still selectable for a draft selection (same format as `adv_filter`) |
325
353
  | POST | `/api/upload` | host list, text | add hosts |
326
354
 
327
355
  `cmd` values: `up_only`, `set_filter`, `addr_mode`, `get_names`, `match_filter`,
328
- `sort`, `add`, `del`, `set_ref`, `zero`, `add_comment`, `reset_log`, `clear`,
329
- `set_option`, `reset_options`, `run_report`, `save_hosts_file`, `exit`. `set_option`
356
+ `adv_filter`, `sort`, `add`, `del`, `set_ref`, `zero`, `add_comment`, `reset_log`, `clear`,
357
+ `set_option`, `reset_options`, `run_report`, `save_hosts_file`, `exit`. `adv_filter` value: JSON object `{"<field>":{"mode":"in|out","values":[...]}}` with the fields `model`,
358
+ `location`, `sysloc`, `type`, `comment`; `\u0001none` as value = hosts without a value; `{}` = off
359
+ (the old `{"<field>":"<value>"}` form is still accepted as `in` with one value). `set_option`
330
360
  value: `key=value`. `reset_log` value: logging off - optional custom file name (blank =
331
361
  auto-generated); logging on - `y` (clear) or `new`/`new=<name>` (new file, optional
332
362
  custom name). `run_report`: `value` = empty (active logfile) or one `.csv` filename; or
@@ -342,7 +372,9 @@ authentication. Default bind `0.0.0.0` — use `-bind 127.0.0.1` outside trusted
342
372
  1. Hostnames resolved once (32 parallel), cached around `-dns` seconds (randomized a
343
373
  bit so a large batch resolved together doesn't all expire - and need re-resolving -
344
374
  in the same round later). Same-address names share one probe. Unresolvable → NO-DNS,
345
- no fping call. `-dns 0` = fping-side resolve.
375
+ no fping call. `-dns 0` = fping-side resolve. A command (filter, add, ...) cuts
376
+ the name resolution short as well, so it applies at once even with thousands of
377
+ hostnames.
346
378
  2. UP/new hosts get full `-re` retries; confirmed-DOWN hosts get `-dr` retries. Every
347
379
  `-fs`-th round probes everything with full retries.
348
380
  3. Only 1/`-ds` of DOWN hosts probed per round, strided.
@@ -546,6 +578,31 @@ value turns it off. CLI: replaces the version banner with `MATCH FILTER '<regex>
546
578
  active (N of M hosts shown, all still pinged)`. Invalid regex: error shown, previous
547
579
  filter unchanged.
548
580
 
581
+ ## ADV FILTER
582
+
583
+ Excel-style display filter on the inventory values of a CSV import (*Inventory CSV
584
+ import*) for `Model`, `Location`, `sysLocation`, `Type` and `Comment`. Display only -
585
+ every host keeps being pinged. Needs hosts with inventory values; without them the
586
+ dialog says so.
587
+
588
+ - **Open**: CLI `V`, web GUI button `ADV FILTER` or key `V`. A separate window; the
589
+ filter only changes when applied.
590
+ - **Per field**: check any number of values (with host count; `(empty)` = hosts without
591
+ a value) and choose the mode: `SHOW ONLY CHECKED` (include) or `HIDE CHECKED`
592
+ (exclude). Nothing checked = field not filtered.
593
+ - **Combination**: values within a field are ORed, fields are ANDed with each other, with
594
+ the match filter (`M`) and the view. The lists narrow as you select: only values still
595
+ possible with the other fields' selection are offered.
596
+ - **Web window**: one list per field with search box, `ALL`/`NONE` (act on the entries
597
+ matching the search), the mode toggle, APPLY, RESET ALL, CLOSE. Lists show the first
598
+ 500 entries, the rest via search.
599
+ - **CLI window**: `↑`/`↓` field, ENTER opens the value list (`SPACE` check, `I` show-only/hide,
600
+ `A` all, `N` none, ENTER ok, ESC cancel), then `A` APPLY, `R` RESET ALL, ESC CANCEL.
601
+ No search in the CLI list.
602
+ - **Banner**: while active the CLI banner shows e.g. `ADV Type not in (Firewall, Switch)`.
603
+ - **Reset**: SET REFERENCE and CLEAR ALL turn the filter off. It is not saved
604
+ with `SAVE HOSTS FILE`.
605
+
549
606
  ## IPv6
550
607
 
551
608
  IPv4/IPv6 mixed freely. Resolution follows `-4`/`-6` (preference, not restriction; A
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "eping"
7
- version = "3.65"
7
+ version = "3.84"
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" }
File without changes
File without changes