small-package/luci-app-onliner/luasrc/view/onliner/onliner.htm

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%>