Development
This commit is contained in:
parent
8129b2f757
commit
1dce33d4eb
2 changed files with 14 additions and 22 deletions
|
|
@ -54,13 +54,12 @@
|
|||
"field": "vlan_name"
|
||||
},
|
||||
{
|
||||
"label": "Renews",
|
||||
"field": "renews"
|
||||
"label": "Last Active",
|
||||
"field": "last_active"
|
||||
},
|
||||
{
|
||||
"label": "Recent",
|
||||
"field": "recent",
|
||||
"render": "badge_yes_no"
|
||||
"label": "Renews",
|
||||
"field": "renews"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -175,18 +175,6 @@ def _parse_lease_secs(s):
|
|||
pass
|
||||
return None
|
||||
|
||||
def _dnsmasq_start_time(vlan_name):
|
||||
"""Return epoch timestamp when the dnsmasq instance for this VLAN last started."""
|
||||
try:
|
||||
pid = int(open(f'/run/dnsmasq-routlin-{vlan_name}.pid').read().strip())
|
||||
start_ticks = int(open(f'/proc/{pid}/stat').read().split()[21])
|
||||
clk_tck = os.sysconf('SC_CLK_TCK')
|
||||
boot_time = next(
|
||||
int(line.split()[1]) for line in open('/proc/stat') if line.startswith('btime ')
|
||||
)
|
||||
return boot_time + start_ticks / clk_tck
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
def live_dhcp_leases():
|
||||
rows = []
|
||||
|
|
@ -206,7 +194,6 @@ def live_dhcp_leases():
|
|||
stem = os.path.basename(leases_file)
|
||||
vlan_name = stem[len('dnsmasq-routlin-'):-len('.leases')]
|
||||
lease_secs = vlan_lease_secs.get(vlan_name)
|
||||
restart_time = _dnsmasq_start_time(vlan_name)
|
||||
try:
|
||||
with open(leases_file) as f:
|
||||
for line in f:
|
||||
|
|
@ -218,8 +205,14 @@ def live_dhcp_leases():
|
|||
continue
|
||||
obtained_ts = (expiry - lease_secs) if lease_secs else None
|
||||
renews_ts = (expiry - lease_secs // 2) if lease_secs else None
|
||||
recent = (obtained_ts is not None and restart_time is not None
|
||||
and obtained_ts >= restart_time)
|
||||
if obtained_ts is None:
|
||||
last_active = '-'
|
||||
elif obtained_ts <= now:
|
||||
last_active = relative_time(obtained_ts)
|
||||
elif renews_ts and renews_ts > now:
|
||||
last_active = 'ETA ' + relative_time_future(renews_ts)[3:]
|
||||
else:
|
||||
last_active = 'ETA soon'
|
||||
mac_norm = parts[1].lower()
|
||||
device_h = parts[3] if parts[3] != '*' else None
|
||||
res_h = mac_to_res.get(mac_norm)
|
||||
|
|
@ -237,8 +230,8 @@ def live_dhcp_leases():
|
|||
'mac_address': parts[1],
|
||||
'vendor': _get_vendor(parts[1]),
|
||||
'vlan_name': vlan_name,
|
||||
'last_active': last_active,
|
||||
'renews': relative_time_future(renews_ts) if renews_ts else relative_time_future(expiry),
|
||||
'recent': recent,
|
||||
})
|
||||
except Exception:
|
||||
pass
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue