eping 3.85__tar.gz → 3.86__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.85
3
+ Version: 3.86
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.85
20
+ # eping.py 3.86
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.
@@ -254,7 +254,7 @@ Single self-contained page, no external resources.
254
254
  | Entry | Does |
255
255
  |---|---|
256
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 |
257
+ | 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 |
258
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 |
259
259
  | UPLOAD FILE TO SERVER | picks a local `.txt`/`.csv`, saves as-is server-side, no host parsing; never overwrites, appends `-1`/`-2`/... |
260
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) |
@@ -1,4 +1,4 @@
1
- # eping.py 3.85
1
+ # eping.py 3.86
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.
@@ -235,7 +235,7 @@ Single self-contained page, no external resources.
235
235
  | Entry | Does |
236
236
  |---|---|
237
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 |
238
+ | 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 |
239
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 |
240
240
  | UPLOAD FILE TO SERVER | picks a local `.txt`/`.csv`, saves as-is server-side, no host parsing; never overwrites, appends `-1`/`-2`/... |
241
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) |
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "eping"
7
- version = "3.85"
7
+ version = "3.86"
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" }
@@ -7,7 +7,7 @@
7
7
  # I knew how it worked.
8
8
  # Now, only god knows it!
9
9
  # - - - - - - - - - - - - - - - - - - - - - - - -
10
- VERSION = '3.85'
10
+ VERSION = '3.86'
11
11
  version = VERSION # legacy alias (kept for existing references)
12
12
 
13
13
  # --- scaling limits ---
@@ -2848,6 +2848,16 @@ WEB_INDEX_HTML = r"""<!DOCTYPE html>
2848
2848
  </div>
2849
2849
  </div>
2850
2850
  </div>
2851
+ <div id="addFromClientModal" class="modal-overlay" style="display:none">
2852
+ <div class="modal-box">
2853
+ <h3>ADD FROM CLIENT</h3>
2854
+ <p>Choose a `.txt` or `.csv` hosts file from this computer to add its hosts.</p>
2855
+ <input type="file" id="fileInputVis" accept=".txt,.csv,.list,text/plain" style="margin-bottom:14px;color:var(--fg)">
2856
+ <div class="modal-buttons">
2857
+ <button id="modalBtnAddFromClientCancel">CANCEL</button>
2858
+ </div>
2859
+ </div>
2860
+ </div>
2851
2861
  <div id="chooseReportModal" class="modal-overlay" style="display:none">
2852
2862
  <div class="modal-box wide xwide">
2853
2863
  <h3>CHOOSE LOGFILE</h3>
@@ -4087,9 +4097,21 @@ document.getElementById('btnClear').onclick = function(){
4087
4097
 
4088
4098
  /* ---- host file upload ---- */
4089
4099
  var fileInput = document.getElementById('fileInput');
4100
+ var fileInputVis = document.getElementById('fileInputVis');
4101
+ var addFromClientModal = document.getElementById('addFromClientModal');
4102
+ function closeAddFromClient(){ addFromClientModal.style.display = 'none'; fileInputVis.value = ''; }
4103
+ function addFromClientOpen(){ return addFromClientModal.style.display === 'flex'; }
4104
+ document.getElementById('modalBtnAddFromClientCancel').onclick = closeAddFromClient;
4105
+ fileInputVis.addEventListener('change', function(){
4106
+ var f = fileInputVis.files && fileInputVis.files[0];
4107
+ closeAddFromClient();
4108
+ if(f) uploadHostsFile(f, null);
4109
+ });
4090
4110
  fileInput.addEventListener('change', function(){
4091
4111
  var f = fileInput.files && fileInput.files[0];
4092
- if(!f) return;
4112
+ if(f) uploadHostsFile(f, fileInput);
4113
+ });
4114
+ function uploadHostsFile(f, inp){
4093
4115
  var rd = new FileReader();
4094
4116
  rd.onload = function(){
4095
4117
  note('uploading ' + f.name + ' ...', true);
@@ -4097,10 +4119,10 @@ fileInput.addEventListener('change', function(){
4097
4119
  body: rd.result}).then(function(r){ return r.json(); }).then(function(j){
4098
4120
  if(!j.ok){ note('upload failed: ' + (j.error||''), false); }
4099
4121
  }).catch(function(){ note('upload failed', false); });
4100
- fileInput.value = '';
4122
+ if(inp) inp.value = '';
4101
4123
  };
4102
4124
  rd.readAsText(f);
4103
- });
4125
+ }
4104
4126
 
4105
4127
  var uploadServerFileInput = document.getElementById('uploadServerFileInput');
4106
4128
  uploadServerFileInput.addEventListener('change', function(){
@@ -4367,7 +4389,7 @@ document.getElementById('selDownload').onchange = function(){
4367
4389
  this.value = ''; // reset - a select, not a toggle
4368
4390
  if(!what) return;
4369
4391
  if(what === 'add_from_server'){ openAddFromServer(); return; }
4370
- if(what === 'add_from_client'){ fileInput.click(); return; }
4392
+ if(what === 'add_from_client'){ addFromClientModal.style.display = 'flex'; return; } // visible input: Safari blocks click() from select change
4371
4393
  if(what === 'choose_logfile'){ openChooseLog(); return; }
4372
4394
  if(what === 'delete_files'){ openDeleteFiles(); return; }
4373
4395
  if(what === 'view_file'){ openViewFile(); return; }
@@ -4489,6 +4511,10 @@ document.addEventListener('keydown', function(e){
4489
4511
  if(sk === 'y' || e.key === 'Enter'){ runSaveHostsFile(); e.preventDefault(); }
4490
4512
  return;
4491
4513
  }
4514
+ if(addFromClientOpen()){
4515
+ if(e.key === 'Escape'){ closeAddFromClient(); e.preventDefault(); }
4516
+ return;
4517
+ }
4492
4518
  if(chooseLogOpen()){
4493
4519
  if(e.key === 'Escape'){ closeChooseLog(); e.preventDefault(); }
4494
4520
  return;
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: eping
3
- Version: 3.85
3
+ Version: 3.86
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.85
20
+ # eping.py 3.86
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.
@@ -254,7 +254,7 @@ Single self-contained page, no external resources.
254
254
  | Entry | Does |
255
255
  |---|---|
256
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 |
257
+ | 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 |
258
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 |
259
259
  | UPLOAD FILE TO SERVER | picks a local `.txt`/`.csv`, saves as-is server-side, no host parsing; never overwrites, appends `-1`/`-2`/... |
260
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) |
File without changes
File without changes
File without changes
File without changes
File without changes