100 lines
2.9 KiB
HTML
100 lines
2.9 KiB
HTML
<%#
|
|
Copyright 2008 Steven Barth <steven@midlink.org>
|
|
Copyright 2008-2011 Jo-Philipp Wich <jow@openwrt.org>
|
|
Licensed to the public under the Apache License 2.0.
|
|
-%>
|
|
|
|
<%
|
|
local util = require "luci.util"
|
|
local function online_data()
|
|
local rv = { }
|
|
local fd = util.execi('/usr/bin/awk \'BEGIN{while ((getline < "/tmp/dhcp.leases") > 0){a[$2]=$4;}while ((getline < "/proc/net/arp") > 0){if (!a[$4]){a[$4]="\?";}if (match($3,"0x[26]")){"ping -q -c 1 "$1" &";if (b[$4]){b[$4]=b[$4]"/"$1;}else{b[$4]=$1;}c[$4]=$6;}}while (("ip -6 neighbor show | grep -v fe80" | getline) > 0){if (b[$5]) {"ping -q -c 1 "$1" &";b[$5]=b[$5]"/"$1;}}for (mac in b){print(a[mac],b[mac],mac,c[mac]);}}\' ')
|
|
while true do
|
|
local ln = fd()
|
|
if ln == nil then break end
|
|
local name,ip,mac,dev = ln:match("^(%S+) (%S+) (%S+) (%S+)")
|
|
if mac and ip and name and dev then
|
|
rv[#rv+1] = {
|
|
hostname = name,
|
|
device = dev,
|
|
macaddr = mac,
|
|
ipaddr = ip
|
|
}
|
|
end
|
|
end
|
|
return rv
|
|
end
|
|
|
|
|
|
if luci.http.formvalue("status") == "1" then
|
|
local rv = {
|
|
onlines = online_data()
|
|
}
|
|
luci.http.prepare_content("application/json")
|
|
luci.http.write_json(rv)
|
|
return
|
|
end
|
|
-%>
|
|
|
|
<%+header%>
|
|
|
|
<script type="text/javascript" src="<%=resource%>/cbi.js?v=git-19.271.33176-b099749"></script>
|
|
<script type="text/javascript">//<![CDATA[
|
|
var npoll = 1;
|
|
|
|
XHR.poll(5, '<%=REQUEST_URI%>', { status: 1 },
|
|
function(x, info)
|
|
{
|
|
var ls = document.getElementById('online_status_table');
|
|
if (ls)
|
|
{
|
|
/* clear all rows */
|
|
while( ls.rows.length > 1 )
|
|
ls.rows[0].parentNode.deleteRow(1);
|
|
|
|
for( var i = 0; i < info.onlines.length; i++ )
|
|
{
|
|
|
|
var tr = ls.rows[0].parentNode.insertRow(-1);
|
|
tr.className = 'cbi-section-table-row cbi-rowstyle-' + ((i % 2) + 1);
|
|
|
|
tr.insertCell(-1).innerHTML = info.onlines[i].hostname ? info.onlines[i].hostname : '?';
|
|
tr.insertCell(-1).innerHTML = info.onlines[i].ipaddr.split("/").join("<br>");
|
|
tr.insertCell(-1).innerHTML = info.onlines[i].macaddr;
|
|
tr.insertCell(-1).innerHTML = info.onlines[i].device;
|
|
}
|
|
|
|
if( ls.rows.length == 1 )
|
|
{
|
|
var tr = ls.rows[0].parentNode.insertRow(-1);
|
|
tr.className = 'cbi-section-table-row';
|
|
|
|
var td = tr.insertCell(-1);
|
|
td.colSpan = 4;
|
|
td.innerHTML = '<em><br /><%:There is no one online now.%></em>';
|
|
}
|
|
}
|
|
}
|
|
);
|
|
//]]></script>
|
|
|
|
<h2 name="content"><%:Status%></h2>
|
|
|
|
<fieldset class="cbi-section">
|
|
<legend><%:Online User%></legend>
|
|
|
|
<table class="cbi-section-table" id="online_status_table">
|
|
<tr class="cbi-section-table-titles">
|
|
<th class="cbi-section-table-cell"><%:Hostname%></th>
|
|
<th class="cbi-section-table-cell"><%:IPv4-Address%></th>
|
|
<th class="cbi-section-table-cell"><%:MAC-Address%></th>
|
|
<th class="cbi-section-table-cell"><%:Interface%></th>
|
|
</tr>
|
|
<tr class="cbi-section-table-row">
|
|
<td colspan="4"><em><br /><%:Collecting data...%></em></td>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
|
|
<%+footer%>
|