2 local sys = require "luci.sys"
3 local twa = require "luci.tools.webadmin"
6 local system, model, memtotal, memcached, membuffers, memfree = sys.sysinfo()
7 local uptime = twa.date_format(tonumber(sys.uptime()))
8 local_time = os.date("%c")
9 local load1, load5, load15 = sys.loadavg()
10 local load = string.format("%.2f, %.2f, %.2f", load1, load5, load15)
11 local memory = string.format("%.2f MB (%.0f%% %s, %.0f%% %s, %.0f%% %s)",
12 tonumber(memtotal) / 1024,
13 100 * memcached / memtotal,
14 tostring(translate("cached")),
15 100 * membuffers / memtotal,
16 tostring(translate("buffered")),
17 100 * memfree / memtotal,
18 tostring(translate("free"))
22 local uci = require "luci.model.uci".cursor()
23 local ntm = require "luci.model.network"
25 local devices = ntm:get_wifidevs()
31 local defroutev4 = sys.net.defaultroute()
32 local defroutev6 = sys.net.defaultroute6 ()
39 <div class="cbi-section-node">
40 <div class="cbi-value"><label class="cbi-value-title"><%:System%></label><div class="cbi-value-field"><%=system%></div></div>
41 <div class="cbi-value"><label class="cbi-value-title"><%:Processor%></label><div class="cbi-value-field"><%=model%></div></div>
42 <div class="cbi-value"><label class="cbi-value-title"><%:Load%></label><div class="cbi-value-field"><%=load%></div></div>
43 <div class="cbi-value"><label class="cbi-value-title"><%:Memory%></label><div class="cbi-value-field"><%=memory%></div></div>
44 <div class="cbi-value"><label class="cbi-value-title"><%:Local Time%></label><div class="cbi-value-field"><%=local_time%></div></div>
45 <div class="cbi-value"><label class="cbi-value-title"><%:Uptime%></label><div class="cbi-value-field"><%=uptime%></div></div>
49 <% if devices[1] then %>
52 <h2><%:Wireless Overview%></h2>
53 <div class="cbi-section">
54 <div class="cbi-section-node">
55 <table class="cbi-section-table">
56 <tr class="cbi-section-table-titles">
57 <th class="cbi-section-table-cell"><%:Signal%></th>
58 <th class="cbi-section-table-cell"><%:Bitrate%></th>
59 <th class="cbi-section-table-cell"><%:SSID%></th>
60 <th class="cbi-section-table-cell"><%:BSSID%></th>
61 <th class="cbi-section-table-cell"><%:Channel%></th>
62 <th class="cbi-section-table-cell"><%:Mode%></th>
63 <th class="cbi-section-table-cell"><%:TX%>-<%:Power%></th>
64 <th class="cbi-section-table-cell"><%:Interface%></th>
67 for _, dev in ipairs(devices) do
69 for _, net in ipairs(dev:get_wifinets()) do
70 netlist[#netlist+1] = net:ifname()
71 netdevs[net:ifname()] = dev:name()
73 if net.iwdata.ifname then
74 local signal = net.iwinfo.signal or "N/A"
75 local noise = net.iwinfo.noise or "N/A"
76 local q = net.iwinfo.quality or "0"
77 local qmax = net.iwinfo.quality_max or "100"
78 local qperc = q / qmax * 100
81 icon = "signal-none.png"
82 elseif qperc < 26 then
83 icon = "signal-0-25.png"
84 elseif qperc < 51 then
85 icon = "signal-25-50.png"
86 elseif qperc < 76 then
87 icon = "signal-50-75.png"
88 elseif qperc < 100 then
89 icon = "signal-75-100.png"
94 signal_string = "<img src='"..resource.."/icons/"..icon.."' title='Signal: "..signal.." db / Noise: "..noise.." db' alt='Signal Quality'></img>"
96 local ssid = net.iwinfo.ssid or "N/A"
97 local bssid = net.iwinfo.bssid or "N/A"
98 local chan = net.iwinfo.channel or "N/A"
99 local mode = net.iwinfo.mode or "N/A"
100 local txpwr = net.iwinfo.txpower or "N/A"
101 if txpwr ~= "N/A" then
102 txpwr = txpwr.." dbm"
104 local bitrate = net.iwinfo.bitrate or "N/A"
105 if bitrate ~= "N/A" then
106 bitrate = ( bitrate / 1000 ).."Mb/s"
108 local interface = net.iwdata.ifname or "N/A"
110 <tr class="cbi-section-table-row cbi-rowstyle-1">
111 <td class="cbi-value-field"><%=signal_string%></td>
112 <td class="cbi-value-field"><%=bitrate%></td>
113 <td class="cbi-value-field"><%=ssid%></td>
114 <td class="cbi-value-field"><%=bssid%></td>
115 <td class="cbi-value-field"><%=chan%></td>
116 <td class="cbi-value-field"><%=mode%></td>
117 <td class="cbi-value-field"><%=txpwr%></td>
118 <td class="cbi-value-field"><%=interface%></td>
129 <div class="cbi-map">
130 <h2><%:Default routes%></h2>
131 <div class="cbi-section">
132 <div class="cbi-section-node">
133 <table class="cbi-section-table">
135 <% if not defroutev4 and not defroutev6 then %>
136 <%:No defaultroutes known.%>
138 <tr class="cbi-section-table-titles">
139 <th class="cbi-section-table-cell"><%:Network%></th>
140 <th class="cbi-section-table-cell"><%:Interface%></th>
141 <th class="cbi-section-table-cell"><%:Gateway%></th>
142 <th class="cbi-section-table-cell"><%:Metric%></th>
145 <% if defroutev4 then %>
147 <tr class="cbi-section-table-row cbi-rowstyle-1">
148 <td class="cbi-value-field"><%=defroutev4.dest:string()%></td>
149 <td class="cbi-value-field"><%=defroutev4.device%></td>
150 <td class="cbi-value-field"><%=defroutev4.gateway:string()%></td>
151 <td class="cbi-value-field"><%=defroutev4.metric%></td>
155 if defroutev6 then %>
157 <tr class="cbi-section-table-row cbi-rowstyle-2">
158 <td class="cbi-value-field"><%=defroutev6.dest:string()%></td>
159 <td class="cbi-value-field"><%=defroutev6.device%></td>
160 <td class="cbi-value-field"><%=defroutev6.nexthop:string()%></td>
161 <td class="cbi-value-field"><%=defroutev6.metric%></td>