eping 3.65__tar.gz → 3.85__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.85
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.85
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.
@@ -40,13 +40,24 @@ Via pip (installs `eping` and `epinga` as commands, `fping` still required separ
40
40
  pip install eping
41
41
  ```
42
42
 
43
- Standalone scripts (installs/updates `eping.py`, `epinga.py`, `esplit.py`):
43
+ Standalone scripts (installs/updates `eping.py`, `epinga.py`):
44
44
 
45
45
  ```sh
46
46
  /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/ewaldj/eping/refs/heads/main/e-install.sh)"
47
47
  ```
48
48
 
49
- `esplit.py` isn't part of the pip package - use the standalone install for it.
49
+ ## Windows
50
+
51
+ Portable Windows version (web GUI only, no installation): download and unpack
52
+ [`eping-windows.zip`](https://github.com/ewaldj/eping/blob/main/Windows_Version/eping-windows.zip)
53
+ ([folder](https://github.com/ewaldj/eping/tree/main/Windows_Version/)), then start `eping.exe`.
54
+
55
+ - Contains `eping.exe` (small launcher window: web port, Start / Stop / Restart, open web GUI),
56
+ `eping.py`, `epinga.py`, `fping.exe` + `cygwin1.dll` (fping for Windows) and an embedded Python.
57
+ - The web GUI opens in the browser (default `http://127.0.0.1:8080`). The port is read from the hosts file
58
+ (`opt: -port 9000`); a port already in use is reported and can be changed in the launcher window.
59
+ - No terminal (curses) mode and no `-wv`/`-wvc` on Windows; log file names use `-` instead of `:`.
60
+ - Extra options: put them in `eping-args.txt` next to `eping.exe`. Details: `README-WINDOWS.txt` in the zip.
50
61
 
51
62
  ## Quick start
52
63
 
@@ -61,7 +72,7 @@ pip install: use `eping`/`epinga` instead of `./eping.py`/`./epinga.py` below.
61
72
  ./eping.py -wvc # CLI + controllable web view
62
73
  ```
63
74
 
64
- No args: creates a sample `eping-hosts.txt`. `-df`: start with no hosts, add at runtime.
75
+ 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
76
 
66
77
  ### Running unattended (screen / tmux)
67
78
 
@@ -86,7 +97,7 @@ expansion includes network/broadcast. Several `-f` files are combined before ded
86
97
 
87
98
  ### Host file format
88
99
 
89
- Same parser for `-f`, `F`/ADD FILE (CLI), and web GUI ADD FILE:
100
+ Same parser for `-f`, `F`/ADD FILE (CLI), and web GUI ADD HOSTS FILE:
90
101
 
91
102
  ```
92
103
  # comment to end of line
@@ -99,7 +110,7 @@ www.google.com # hostname/FQDN
99
110
  2606:4700:4700::1111/128 # IPv6 with /128 - single host
100
111
  ```
101
112
 
102
- Network mask range /13…/32 everywhere (host file, ADD FILE, web upload, ADD/DELETE
113
+ Network mask range /13…/32 everywhere (host file, ADD HOSTS FILE, web upload, ADD/DELETE
103
114
  host input); out of range is rejected (message names the allowed range; `-f` warns and
104
115
  ignores). IPv6: only `/128` accepted, any other mask rejected. Anything else is ignored.
105
116
 
@@ -117,34 +128,39 @@ opt: -web -port 9000
117
128
  Multiple `opt:` lines join in file order. `#` comments out the rest of the line (or
118
129
  the whole line at the start). Quote values with spaces: `opt: -f "my hosts.txt"`. A
119
130
  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)
131
+ the initial `-f` read at startup — `F`/ADD FILE (CLI) and ADD HOSTS FILE (web)
121
132
  never parse `opt:` lines, they're just text.
122
133
 
134
+ `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`).
135
+
123
136
  The default `eping-hosts.txt`: sample hosts, this section, then every CLI option as a
124
137
  commented-out `opt:` line with its default (remove `# ` to activate).
125
138
 
126
139
  ## Inventory CSV import
127
140
 
128
141
  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
142
+ `F`/ADD FILE (CLI), web GUI FILE OPERATIONS > ADD HOSTS FILE (FROM CLIENT, FROM SERVER, drag and drop). Files
130
143
  named `*.txt` are never treated as CSV - they keep the plain host file format above.
131
144
 
132
- - **Detection**: first non-empty line is a header with the columns `IP Address` and
145
+ - **Detection**: first line that is not blank, a `#` comment or an `opt:` line is a header with the columns `IP Address` and
133
146
  `Hostname` (case-insensitive); the delimiter (`;`, `,` or tab) is detected.
134
147
  - **Columns used**: `IP Address`, `Hostname`, `Serial Number`, `Model`, `Location`,
135
148
  `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.
149
+ - **Host entry**: the `Hostname` (default; rows without an IP are pinged by name too,
150
+ NO-DNS if it does not resolve). A name without DNS record is pinged by the row's
151
+ IP instead (marked in the host popup, `-ncf` turns this off). A name that is not a valid hostname falls back to the
152
+ IP; rows without a usable entry are ignored. In the IP modes (`-ipo`, PREFER IP
153
+ ADDRESS, also when active while the file is added) the entry is the IP address
154
+ instead and rows without a valid IP are ignored. `-ph` is not needed for a CSV.
141
155
  - **Duplicates**: one host per entry, the first row wins. The count of ignored and
142
156
  duplicate rows is reported when the file is added (startup message / web footer).
143
157
  - **Log**: the six inventory values and the CSV hostname are written with every row
144
158
  of that host, see *Logging*. A `Hostname` that is not the host entry (IP mode) is
145
159
  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.
160
+ - **Filters**: `M` matches the inventory values as text, `V` / ADV FILTER selects them
161
+ (see *ADV FILTER*).
162
+ - **Save**: if the displayed hosts carry inventory values, `SAVE HOSTS FILE` writes an
163
+ inventory `.csv` (see *Web GUI*); plain `.txt` hosts are saved as `.txt`.
148
164
 
149
165
  Example (`;` delimited, extra columns are ignored):
150
166
 
@@ -158,8 +174,8 @@ sw-access-01;10.0.1.1;FOC5678C3DE;C9200L-24P;Vienna DC1;Rack C1;Switch;
158
174
  fw-edge-01;192.0.2.1;JMX2345F6GH;ASA5516;Linz POP;Rack B2;Firewall;ASA 5516 - EoL 2027
159
175
  ```
160
176
 
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`.
177
+ This gives 6 hosts, named by `Hostname`. In an IP mode it gives 5 hosts (the IP
178
+ addresses); `ap-lobby-01` has no IP and is ignored.
163
179
 
164
180
  ## CLI mode
165
181
 
@@ -170,6 +186,7 @@ DOWN. Columns: hostname/IP, state, RTT (ms), last-change timestamp, change count
170
186
  |---|---|
171
187
  | `U` | view picker — all 9 views (see *Views and sort orders*) |
172
188
  | `M` | match filter — regex on hostname/IP and inventory fields, display only (see *Match filter*) |
189
+ | `V` | ADV FILTER — check/uncheck Model/Location/sysLocation/Type/Comment values (show only / hide), display only (see *ADV FILTER*) |
173
190
  | `A` | add host — IP, hostname, CIDR (/13…/32), or `ip1-ip2` (max 524288) |
174
191
  | `D` | delete host — same formats/limits as add |
175
192
  | `F` | add hosts from a file |
@@ -192,7 +209,7 @@ same option set as the matching web GUI dropdown.
192
209
  Dialogs: ENTER confirms, ESC/empty cancels. Key bar shortens on narrow terminals.
193
210
  `PLEASE WAIT` box with elapsed counter shown until the first round has results.
194
211
 
195
- Ping checks keep running while a dialog (`A`/`D`/`F`/`M`/`T`) is open — same
212
+ Ping checks keep running while a dialog (`A`/`D`/`F`/`M`/`V`/`T`) is open — same
196
213
  retry/state/logging logic as the main loop; screen repaints once the dialog closes.
197
214
 
198
215
  Screen repaints ~7×/s independent of fping. `UP`, `SET REFERENCE`, `DEL HOST`, `ZERO
@@ -217,9 +234,9 @@ Single self-contained page, no external resources.
217
234
 
218
235
  - Table: CLI-style columns, filled top-down then next column right. Horizontal scroll
219
236
  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,
237
+ - Footer stats: HOSTS, RUNTIME, HOST UP/DOWN/FLAPPING, for the whole current view regardless
238
+ 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.
239
+ - Adding many hosts (`ADD`, ADD HOSTS FILE, upload) shows "added N host(s) - please wait,
223
240
  pinging ..." until they appear with a state, then `done`.
224
241
  - Font size 6–28px (slider, `A−`/`A+`, `+`/`−` keys), stored in `localStorage`.
225
242
  - Column headers sort the list (IPv4-aware).
@@ -227,38 +244,46 @@ Single self-contained page, no external resources.
227
244
  - Row 1: view select (9 views), sort order select, SET REFERENCE, ZERO CHANGES,
228
245
  CLEAR ALL, address mode select, GET NAMES, ADV OPTIONS, RESET LOG, FILE OPERATIONS
229
246
  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.
247
+ - Row 2: match filter (SET/CLEAR), ADV FILTER, host field (ADD/DELETE), comment
248
+ field (COMMENT), GENERATE REPORT select.
232
249
  - 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
250
+ CLI's `U`/`O`/`P`/`X` pickers exactly. FILE OPERATIONS (incl. ADD HOSTS FILE FROM CLIENT/
251
+ FROM SERVER) is web-gui-only (no CLI key - CLI already runs on the server's own
235
252
  filesystem).
236
253
  - **FILE OPERATIONS** dropdown, in this order:
237
254
  | Entry | Does |
238
255
  |---|---|
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 |
256
+ | 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 |
257
+ | ADD HOSTS FILE FROM CLIENT | local file picker (`.txt`/`.csv`), adds the hosts; a file can also be dropped anywhere on the page |
258
+ | 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
259
  | 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 |
260
+ | 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) |
261
+ | DOWNLOAD ACTIVE HOSTS | currently displayed hosts (view/address mode/filter applied), same format and options as DOWNLOAD ALL HOSTS |
243
262
  | DOWNLOAD ACTIVE LOGFILE | active CSV log, zipped; disabled while logging off |
244
263
  | 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
264
  | DELETE FILES FROM SERVER | same picker as DOWNLOAD SELECTED FILES, red DELETE button, confirms with file count; active logfile can't be deleted |
246
265
  | 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
266
  - Keyboard shortcuts (no modifier, only while no text field has focus; own quick
251
267
  variants, not the CLI's picker keys of the same letter): `U` cycles the original 3
252
268
  views (ALL HOSTS → CURRENTLY-UP → UP+FLAPPING → ALL HOSTS), the other 6 need the
253
269
  dropdown; `O` cycles all 5 sort orders one at a time; `P`/`I` toggle PREFER HOSTNAME /
254
270
  SWITCH TO IP ONLY directly, the address mode select reaches all 4 modes; `G`/`S`/`Z`/
255
271
  `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;
272
+ `M`/`T` focus their field; `V` opens ADV FILTER; `F` opens the ADD HOSTS FILE FROM CLIENT picker; `R` forces a status refresh;
257
273
  `+`/`−` font size (works while typing). No keyboard shortcut for `X`/ADV OPTIONS or
258
274
  GENERATE REPORT - click required.
259
275
  - Host field feeds both ADD/DELETE; ENTER triggers the button used last, ESC clears.
260
276
  - Files can also be dropped anywhere on the page (max 16MB, see *Host file format*).
261
277
  - Commands acknowledge immediately; a click aborts the running round.
278
+ - **Host popup**: hovering a host row (after ~350 ms) shows everything known about it:
279
+ state, previous state, RTT, last check, changes, time in the current state, resolved/CSV
280
+ IP, inventory values (Model, Location, sysLocation, Type, Comment, serial) and its
281
+ history (last up to 50 state changes, newest first, merged with the log `COMMENT`s
282
+ by time). The data is fetched per host on demand (`GET /api/host`), the polled status
283
+ stays small. A click on the row pins the popup: the text can be selected, `COPY` copies
284
+ all of it, `DELETE` removes the host immediately (no confirmation; not shown in `-wv`),
285
+ `×`/ESC/click elsewhere closes it. The history lives in memory only; it is cleared by
286
+ ZERO CHANGES and CLEAR ALL.
262
287
 
263
288
  ### Views and sort orders
264
289
 
@@ -330,7 +355,8 @@ Same bounds as the matching CLI flags (`-lms`/`-lmf` for the last two - see *Out
330
355
  |---|---|---|---|
331
356
  | GET | `/` | — | the page |
332
357
  | 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) |
358
+ | GET | `/api/host?name=...` | — | JSON: all known data and history of one host (mouse-over popup) |
359
+ | GET | `/api/logfiles` | — | JSON list of `.csv`/`.txt`/`.html` files (FILE OPERATIONS > ADD HOSTS FILE FROM SERVER) |
334
360
  | GET | `/api/download/hosts_all` | — | full reference list, `.txt` |
335
361
  | GET | `/api/download/hosts_shown` | — | shown hosts, `.txt` |
336
362
  | GET | `/api/download/logfile` | — | active CSV log, zipped; `404` if logging off |
@@ -341,11 +367,14 @@ Same bounds as the matching CLI flags (`-lms`/`-lmf` for the last two - see *Out
341
367
  | POST | `/api/add_from_server` | `{"names":[...]}` | add hosts from listed `.txt` files |
342
368
  | GET | `/api/report` | — | last GENERATE REPORT HTML; `404` until done |
343
369
  | POST | `/api/command` | `{"cmd":"...","value":"..."}` | control (see cmd list below) |
370
+ | POST | `/api/advvalues` | `{"filter":{...}}` | ADV FILTER: values still selectable for a draft selection (same format as `adv_filter`) |
344
371
  | POST | `/api/upload` | host list, text | add hosts |
345
372
 
346
373
  `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`
374
+ `adv_filter`, `sort`, `add`, `del`, `set_ref`, `zero`, `add_comment`, `reset_log`, `clear`,
375
+ `set_option`, `reset_options`, `run_report`, `save_hosts_file`, `exit`. `adv_filter` value: JSON object `{"<field>":{"mode":"in|out","values":[...]}}` with the fields `model`,
376
+ `location`, `sysloc`, `type`, `comment`; `\u0001none` as value = hosts without a value; `{}` = off
377
+ (the old `{"<field>":"<value>"}` form is still accepted as `in` with one value). `set_option`
349
378
  value: `key=value`. `reset_log` value: logging off - optional custom file name (blank =
350
379
  auto-generated); logging on - `y` (clear) or `new`/`new=<name>` (new file, optional
351
380
  custom name). `run_report`: `value` = empty (active logfile) or one `.csv` filename; or
@@ -361,7 +390,9 @@ authentication. Default bind `0.0.0.0` — use `-bind 127.0.0.1` outside trusted
361
390
  1. Hostnames resolved once (32 parallel), cached around `-dns` seconds (randomized a
362
391
  bit so a large batch resolved together doesn't all expire - and need re-resolving -
363
392
  in the same round later). Same-address names share one probe. Unresolvable → NO-DNS,
364
- no fping call. `-dns 0` = fping-side resolve.
393
+ no fping call. `-dns 0` = fping-side resolve. A command (filter, add, ...) cuts
394
+ the name resolution short as well, so it applies at once even with thousands of
395
+ hostnames.
365
396
  2. UP/new hosts get full `-re` retries; confirmed-DOWN hosts get `-dr` retries. Every
366
397
  `-fs`-th round probes everything with full retries.
367
398
  3. Only 1/`-ds` of DOWN hosts probed per round, strided.
@@ -403,6 +434,7 @@ separated) · `-r` IP range (comma separated, shortened end)
403
434
  | `-ipo` | — | off | start with IP ONLY |
404
435
  | `-gn` | — | off | GET NAMES once at startup |
405
436
  | `-ncs` | — | off | skip `--check-source` |
437
+ | `-ncf` | — | off | CSV: do not ping the CSV IP of a name without DNS record |
406
438
  | `-up` | — | 0 | learning phase: after N rounds keep only hosts seen UP |
407
439
  | `-setref` | — | off | with `-up`: hosts seen UP become new reference list |
408
440
 
@@ -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
@@ -671,21 +728,3 @@ Each bucket: Download (`<base>-<up|down|flap|nodns>-hosts.txt`) + Copy (clipboar
671
728
 
672
729
  Row click expands: state-change history with timestamps, per-host stats (IP, uptime,
673
730
  downtime, span, first/last seen, RTT min/avg/max).
674
-
675
- # esplit.py 1.14
676
-
677
- Splits a large CSV logfile into smaller parts by size.
678
-
679
- ```sh
680
- ./esplit.py # interactive menu
681
- ./esplit.py -i eping-log_2026-09-05.csv -o parts -s 20 # ~20MB parts
682
- ```
683
-
684
- | Option | Effect |
685
- |---|---|
686
- | `-i`, `--input FILE` | CSV file to split (omit for interactive picker) |
687
- | `-o`, `--output DIR` | output folder (created if missing) |
688
- | `-s`, `--size MB` | max size per part |
689
-
690
- Each part: `part_NNN.csv`, own header row. Rows never split across parts; a
691
- `#COMMENT#` row lands in whichever part it falls into.
@@ -1,4 +1,4 @@
1
- # eping.py 3.65
1
+ # eping.py 3.85
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.
@@ -21,13 +21,24 @@ Via pip (installs `eping` and `epinga` as commands, `fping` still required separ
21
21
  pip install eping
22
22
  ```
23
23
 
24
- Standalone scripts (installs/updates `eping.py`, `epinga.py`, `esplit.py`):
24
+ Standalone scripts (installs/updates `eping.py`, `epinga.py`):
25
25
 
26
26
  ```sh
27
27
  /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/ewaldj/eping/refs/heads/main/e-install.sh)"
28
28
  ```
29
29
 
30
- `esplit.py` isn't part of the pip package - use the standalone install for it.
30
+ ## Windows
31
+
32
+ Portable Windows version (web GUI only, no installation): download and unpack
33
+ [`eping-windows.zip`](https://github.com/ewaldj/eping/blob/main/Windows_Version/eping-windows.zip)
34
+ ([folder](https://github.com/ewaldj/eping/tree/main/Windows_Version/)), then start `eping.exe`.
35
+
36
+ - Contains `eping.exe` (small launcher window: web port, Start / Stop / Restart, open web GUI),
37
+ `eping.py`, `epinga.py`, `fping.exe` + `cygwin1.dll` (fping for Windows) and an embedded Python.
38
+ - The web GUI opens in the browser (default `http://127.0.0.1:8080`). The port is read from the hosts file
39
+ (`opt: -port 9000`); a port already in use is reported and can be changed in the launcher window.
40
+ - No terminal (curses) mode and no `-wv`/`-wvc` on Windows; log file names use `-` instead of `:`.
41
+ - Extra options: put them in `eping-args.txt` next to `eping.exe`. Details: `README-WINDOWS.txt` in the zip.
31
42
 
32
43
  ## Quick start
33
44
 
@@ -42,7 +53,7 @@ pip install: use `eping`/`epinga` instead of `./eping.py`/`./epinga.py` below.
42
53
  ./eping.py -wvc # CLI + controllable web view
43
54
  ```
44
55
 
45
- No args: creates a sample `eping-hosts.txt`. `-df`: start with no hosts, add at runtime.
56
+ 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
57
 
47
58
  ### Running unattended (screen / tmux)
48
59
 
@@ -67,7 +78,7 @@ expansion includes network/broadcast. Several `-f` files are combined before ded
67
78
 
68
79
  ### Host file format
69
80
 
70
- Same parser for `-f`, `F`/ADD FILE (CLI), and web GUI ADD FILE:
81
+ Same parser for `-f`, `F`/ADD FILE (CLI), and web GUI ADD HOSTS FILE:
71
82
 
72
83
  ```
73
84
  # comment to end of line
@@ -80,7 +91,7 @@ www.google.com # hostname/FQDN
80
91
  2606:4700:4700::1111/128 # IPv6 with /128 - single host
81
92
  ```
82
93
 
83
- Network mask range /13…/32 everywhere (host file, ADD FILE, web upload, ADD/DELETE
94
+ Network mask range /13…/32 everywhere (host file, ADD HOSTS FILE, web upload, ADD/DELETE
84
95
  host input); out of range is rejected (message names the allowed range; `-f` warns and
85
96
  ignores). IPv6: only `/128` accepted, any other mask rejected. Anything else is ignored.
86
97
 
@@ -98,34 +109,39 @@ opt: -web -port 9000
98
109
  Multiple `opt:` lines join in file order. `#` comments out the rest of the line (or
99
110
  the whole line at the start). Quote values with spaces: `opt: -f "my hosts.txt"`. A
100
111
  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)
112
+ the initial `-f` read at startup — `F`/ADD FILE (CLI) and ADD HOSTS FILE (web)
102
113
  never parse `opt:` lines, they're just text.
103
114
 
115
+ `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`).
116
+
104
117
  The default `eping-hosts.txt`: sample hosts, this section, then every CLI option as a
105
118
  commented-out `opt:` line with its default (remove `# ` to activate).
106
119
 
107
120
  ## Inventory CSV import
108
121
 
109
122
  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
123
+ `F`/ADD FILE (CLI), web GUI FILE OPERATIONS > ADD HOSTS FILE (FROM CLIENT, FROM SERVER, drag and drop). Files
111
124
  named `*.txt` are never treated as CSV - they keep the plain host file format above.
112
125
 
113
- - **Detection**: first non-empty line is a header with the columns `IP Address` and
126
+ - **Detection**: first line that is not blank, a `#` comment or an `opt:` line is a header with the columns `IP Address` and
114
127
  `Hostname` (case-insensitive); the delimiter (`;`, `,` or tab) is detected.
115
128
  - **Columns used**: `IP Address`, `Hostname`, `Serial Number`, `Model`, `Location`,
116
129
  `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.
130
+ - **Host entry**: the `Hostname` (default; rows without an IP are pinged by name too,
131
+ NO-DNS if it does not resolve). A name without DNS record is pinged by the row's
132
+ IP instead (marked in the host popup, `-ncf` turns this off). A name that is not a valid hostname falls back to the
133
+ IP; rows without a usable entry are ignored. In the IP modes (`-ipo`, PREFER IP
134
+ ADDRESS, also when active while the file is added) the entry is the IP address
135
+ instead and rows without a valid IP are ignored. `-ph` is not needed for a CSV.
122
136
  - **Duplicates**: one host per entry, the first row wins. The count of ignored and
123
137
  duplicate rows is reported when the file is added (startup message / web footer).
124
138
  - **Log**: the six inventory values and the CSV hostname are written with every row
125
139
  of that host, see *Logging*. A `Hostname` that is not the host entry (IP mode) is
126
140
  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.
141
+ - **Filters**: `M` matches the inventory values as text, `V` / ADV FILTER selects them
142
+ (see *ADV FILTER*).
143
+ - **Save**: if the displayed hosts carry inventory values, `SAVE HOSTS FILE` writes an
144
+ inventory `.csv` (see *Web GUI*); plain `.txt` hosts are saved as `.txt`.
129
145
 
130
146
  Example (`;` delimited, extra columns are ignored):
131
147
 
@@ -139,8 +155,8 @@ sw-access-01;10.0.1.1;FOC5678C3DE;C9200L-24P;Vienna DC1;Rack C1;Switch;
139
155
  fw-edge-01;192.0.2.1;JMX2345F6GH;ASA5516;Linz POP;Rack B2;Firewall;ASA 5516 - EoL 2027
140
156
  ```
141
157
 
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`.
158
+ This gives 6 hosts, named by `Hostname`. In an IP mode it gives 5 hosts (the IP
159
+ addresses); `ap-lobby-01` has no IP and is ignored.
144
160
 
145
161
  ## CLI mode
146
162
 
@@ -151,6 +167,7 @@ DOWN. Columns: hostname/IP, state, RTT (ms), last-change timestamp, change count
151
167
  |---|---|
152
168
  | `U` | view picker — all 9 views (see *Views and sort orders*) |
153
169
  | `M` | match filter — regex on hostname/IP and inventory fields, display only (see *Match filter*) |
170
+ | `V` | ADV FILTER — check/uncheck Model/Location/sysLocation/Type/Comment values (show only / hide), display only (see *ADV FILTER*) |
154
171
  | `A` | add host — IP, hostname, CIDR (/13…/32), or `ip1-ip2` (max 524288) |
155
172
  | `D` | delete host — same formats/limits as add |
156
173
  | `F` | add hosts from a file |
@@ -173,7 +190,7 @@ same option set as the matching web GUI dropdown.
173
190
  Dialogs: ENTER confirms, ESC/empty cancels. Key bar shortens on narrow terminals.
174
191
  `PLEASE WAIT` box with elapsed counter shown until the first round has results.
175
192
 
176
- Ping checks keep running while a dialog (`A`/`D`/`F`/`M`/`T`) is open — same
193
+ Ping checks keep running while a dialog (`A`/`D`/`F`/`M`/`V`/`T`) is open — same
177
194
  retry/state/logging logic as the main loop; screen repaints once the dialog closes.
178
195
 
179
196
  Screen repaints ~7×/s independent of fping. `UP`, `SET REFERENCE`, `DEL HOST`, `ZERO
@@ -198,9 +215,9 @@ Single self-contained page, no external resources.
198
215
 
199
216
  - Table: CLI-style columns, filled top-down then next column right. Horizontal scroll
200
217
  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,
218
+ - Footer stats: HOSTS, RUNTIME, HOST UP/DOWN/FLAPPING, for the whole current view regardless
219
+ 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.
220
+ - Adding many hosts (`ADD`, ADD HOSTS FILE, upload) shows "added N host(s) - please wait,
204
221
  pinging ..." until they appear with a state, then `done`.
205
222
  - Font size 6–28px (slider, `A−`/`A+`, `+`/`−` keys), stored in `localStorage`.
206
223
  - Column headers sort the list (IPv4-aware).
@@ -208,38 +225,46 @@ Single self-contained page, no external resources.
208
225
  - Row 1: view select (9 views), sort order select, SET REFERENCE, ZERO CHANGES,
209
226
  CLEAR ALL, address mode select, GET NAMES, ADV OPTIONS, RESET LOG, FILE OPERATIONS
210
227
  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.
228
+ - Row 2: match filter (SET/CLEAR), ADV FILTER, host field (ADD/DELETE), comment
229
+ field (COMMENT), GENERATE REPORT select.
213
230
  - 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
231
+ CLI's `U`/`O`/`P`/`X` pickers exactly. FILE OPERATIONS (incl. ADD HOSTS FILE FROM CLIENT/
232
+ FROM SERVER) is web-gui-only (no CLI key - CLI already runs on the server's own
216
233
  filesystem).
217
234
  - **FILE OPERATIONS** dropdown, in this order:
218
235
  | Entry | Does |
219
236
  |---|---|
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 |
237
+ | 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 |
238
+ | ADD HOSTS FILE FROM CLIENT | local file picker (`.txt`/`.csv`), adds the hosts; a file can also be dropped anywhere on the page |
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. 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
240
  | 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 |
241
+ | 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) |
242
+ | DOWNLOAD ACTIVE HOSTS | currently displayed hosts (view/address mode/filter applied), same format and options as DOWNLOAD ALL HOSTS |
224
243
  | DOWNLOAD ACTIVE LOGFILE | active CSV log, zipped; disabled while logging off |
225
244
  | 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
245
  | DELETE FILES FROM SERVER | same picker as DOWNLOAD SELECTED FILES, red DELETE button, confirms with file count; active logfile can't be deleted |
227
246
  | 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
247
  - Keyboard shortcuts (no modifier, only while no text field has focus; own quick
232
248
  variants, not the CLI's picker keys of the same letter): `U` cycles the original 3
233
249
  views (ALL HOSTS → CURRENTLY-UP → UP+FLAPPING → ALL HOSTS), the other 6 need the
234
250
  dropdown; `O` cycles all 5 sort orders one at a time; `P`/`I` toggle PREFER HOSTNAME /
235
251
  SWITCH TO IP ONLY directly, the address mode select reaches all 4 modes; `G`/`S`/`Z`/
236
252
  `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;
253
+ `M`/`T` focus their field; `V` opens ADV FILTER; `F` opens the ADD HOSTS FILE FROM CLIENT picker; `R` forces a status refresh;
238
254
  `+`/`−` font size (works while typing). No keyboard shortcut for `X`/ADV OPTIONS or
239
255
  GENERATE REPORT - click required.
240
256
  - Host field feeds both ADD/DELETE; ENTER triggers the button used last, ESC clears.
241
257
  - Files can also be dropped anywhere on the page (max 16MB, see *Host file format*).
242
258
  - Commands acknowledge immediately; a click aborts the running round.
259
+ - **Host popup**: hovering a host row (after ~350 ms) shows everything known about it:
260
+ state, previous state, RTT, last check, changes, time in the current state, resolved/CSV
261
+ IP, inventory values (Model, Location, sysLocation, Type, Comment, serial) and its
262
+ history (last up to 50 state changes, newest first, merged with the log `COMMENT`s
263
+ by time). The data is fetched per host on demand (`GET /api/host`), the polled status
264
+ stays small. A click on the row pins the popup: the text can be selected, `COPY` copies
265
+ all of it, `DELETE` removes the host immediately (no confirmation; not shown in `-wv`),
266
+ `×`/ESC/click elsewhere closes it. The history lives in memory only; it is cleared by
267
+ ZERO CHANGES and CLEAR ALL.
243
268
 
244
269
  ### Views and sort orders
245
270
 
@@ -311,7 +336,8 @@ Same bounds as the matching CLI flags (`-lms`/`-lmf` for the last two - see *Out
311
336
  |---|---|---|---|
312
337
  | GET | `/` | — | the page |
313
338
  | 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) |
339
+ | GET | `/api/host?name=...` | — | JSON: all known data and history of one host (mouse-over popup) |
340
+ | GET | `/api/logfiles` | — | JSON list of `.csv`/`.txt`/`.html` files (FILE OPERATIONS > ADD HOSTS FILE FROM SERVER) |
315
341
  | GET | `/api/download/hosts_all` | — | full reference list, `.txt` |
316
342
  | GET | `/api/download/hosts_shown` | — | shown hosts, `.txt` |
317
343
  | GET | `/api/download/logfile` | — | active CSV log, zipped; `404` if logging off |
@@ -322,11 +348,14 @@ Same bounds as the matching CLI flags (`-lms`/`-lmf` for the last two - see *Out
322
348
  | POST | `/api/add_from_server` | `{"names":[...]}` | add hosts from listed `.txt` files |
323
349
  | GET | `/api/report` | — | last GENERATE REPORT HTML; `404` until done |
324
350
  | POST | `/api/command` | `{"cmd":"...","value":"..."}` | control (see cmd list below) |
351
+ | POST | `/api/advvalues` | `{"filter":{...}}` | ADV FILTER: values still selectable for a draft selection (same format as `adv_filter`) |
325
352
  | POST | `/api/upload` | host list, text | add hosts |
326
353
 
327
354
  `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`
355
+ `adv_filter`, `sort`, `add`, `del`, `set_ref`, `zero`, `add_comment`, `reset_log`, `clear`,
356
+ `set_option`, `reset_options`, `run_report`, `save_hosts_file`, `exit`. `adv_filter` value: JSON object `{"<field>":{"mode":"in|out","values":[...]}}` with the fields `model`,
357
+ `location`, `sysloc`, `type`, `comment`; `\u0001none` as value = hosts without a value; `{}` = off
358
+ (the old `{"<field>":"<value>"}` form is still accepted as `in` with one value). `set_option`
330
359
  value: `key=value`. `reset_log` value: logging off - optional custom file name (blank =
331
360
  auto-generated); logging on - `y` (clear) or `new`/`new=<name>` (new file, optional
332
361
  custom name). `run_report`: `value` = empty (active logfile) or one `.csv` filename; or
@@ -342,7 +371,9 @@ authentication. Default bind `0.0.0.0` — use `-bind 127.0.0.1` outside trusted
342
371
  1. Hostnames resolved once (32 parallel), cached around `-dns` seconds (randomized a
343
372
  bit so a large batch resolved together doesn't all expire - and need re-resolving -
344
373
  in the same round later). Same-address names share one probe. Unresolvable → NO-DNS,
345
- no fping call. `-dns 0` = fping-side resolve.
374
+ no fping call. `-dns 0` = fping-side resolve. A command (filter, add, ...) cuts
375
+ the name resolution short as well, so it applies at once even with thousands of
376
+ hostnames.
346
377
  2. UP/new hosts get full `-re` retries; confirmed-DOWN hosts get `-dr` retries. Every
347
378
  `-fs`-th round probes everything with full retries.
348
379
  3. Only 1/`-ds` of DOWN hosts probed per round, strided.
@@ -384,6 +415,7 @@ separated) · `-r` IP range (comma separated, shortened end)
384
415
  | `-ipo` | — | off | start with IP ONLY |
385
416
  | `-gn` | — | off | GET NAMES once at startup |
386
417
  | `-ncs` | — | off | skip `--check-source` |
418
+ | `-ncf` | — | off | CSV: do not ping the CSV IP of a name without DNS record |
387
419
  | `-up` | — | 0 | learning phase: after N rounds keep only hosts seen UP |
388
420
  | `-setref` | — | off | with `-up`: hosts seen UP become new reference list |
389
421
 
@@ -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
@@ -652,21 +709,3 @@ Each bucket: Download (`<base>-<up|down|flap|nodns>-hosts.txt`) + Copy (clipboar
652
709
 
653
710
  Row click expands: state-change history with timestamps, per-host stats (IP, uptime,
654
711
  downtime, span, first/last seen, RTT min/avg/max).
655
-
656
- # esplit.py 1.14
657
-
658
- Splits a large CSV logfile into smaller parts by size.
659
-
660
- ```sh
661
- ./esplit.py # interactive menu
662
- ./esplit.py -i eping-log_2026-09-05.csv -o parts -s 20 # ~20MB parts
663
- ```
664
-
665
- | Option | Effect |
666
- |---|---|
667
- | `-i`, `--input FILE` | CSV file to split (omit for interactive picker) |
668
- | `-o`, `--output DIR` | output folder (created if missing) |
669
- | `-s`, `--size MB` | max size per part |
670
-
671
- Each part: `part_NNN.csv`, own header row. Rows never split across parts; a
672
- `#COMMENT#` row lands in whichever part it falls into.