3 require
"luci.tools.webadmin"
7 local system, model, memtotal, memcached, membuffers, memfree = luci.sys.sysinfo()
8 local uptime = luci.sys.uptime()
9 local load1, load5, load15 = luci.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"))
20 local_time = os.date(
"%c")
21 local uptime = luci.tools.webadmin.date_format(tonumber(uptime))
24 local uci = require
"luci.model.uci".cursor()
26 uci:foreach(
"wireless",
"wifi-iface", function(s)
28 table.insert(ifaces, s.network)
29 if (uci:get(
"network", s.network,
"ifname")) then
36 local defroutev4 = luci.sys.net.defaultroute()
37 local defroutev6 = luci.sys.net.defaultroute6 ()
44 <div class=
"cbi-section-node">
45 <div class=
"cbi-value"><label class=
"cbi-value-title"><%:System%
></label><div class=
"cbi-value-field"><%=system%
></div></div>
46 <div class=
"cbi-value"><label class=
"cbi-value-title"><%:Processor%
></label><div class=
"cbi-value-field"><%=model%
></div></div>
47 <div class=
"cbi-value"><label class=
"cbi-value-title"><%:Load%
></label><div class=
"cbi-value-field"><%=load%
></div></div>
48 <div class=
"cbi-value"><label class=
"cbi-value-title"><%:Memory%
></label><div class=
"cbi-value-field"><%=memory%
></div></div>
49 <div class=
"cbi-value"><label class=
"cbi-value-title"><%:Local Time%
></label><div class=
"cbi-value-field"><%=local_time%
></div></div>
50 <div class=
"cbi-value"><label class=
"cbi-value-title"><%:Uptime%
></label><div class=
"cbi-value-field"><%=uptime%
></div></div>
54 <% if has_ifaces == true then %
>
56 <h2><%:Wireless Overview%
></h2>
57 <div class=
"cbi-section">
58 <div class=
"cbi-section-node">
59 <table class=
"cbi-section-table">
60 <tr class=
"cbi-section-table-titles">
61 <th class=
"cbi-section-table-cell"><%:Signal%
></th>
62 <th class=
"cbi-section-table-cell"><%:Bitrate%
></th>
63 <th class=
"cbi-section-table-cell"><%:SSID%
></th>
64 <th class=
"cbi-section-table-cell"><%:BSSID%
></th>
65 <th class=
"cbi-section-table-cell"><%:Channel%
></th>
66 <th class=
"cbi-section-table-cell"><%:Mode%
></th><th><%:TX%
>-<%:Power%
></th>
70 <% for k,v in pairs(ifaces) do
71 local iface = uci:get(
"network", v,
"ifname")
73 iwinf = luci.sys.wifi.getiwinfo(iface)
74 local signal = iwinf.signal
75 local noise = iwinf.noise
76 local q = iwinf.quality
77 local qmax = iwinf.quality_max
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 = iwinf.ssid
97 local bssid = iwinf.bssid
98 local chan = iwinf.channel
99 local mode = iwinf.mode
100 local txpwr = iwinf.txpower..
" dbm"
101 local bitrate = (iwinf.bitrate /
1000)..
"Mb/s"
103 <tr class=
"cbi-section-table-row cbi-rowstyle-1">
104 <td class=
"cbi-value-field"><%=signal_string%
></td>
105 <td class=
"cbi-value-field"><%=bitrate%
></td>
106 <td class=
"cbi-value-field"><%=ssid%
></td>
107 <td class=
"cbi-value-field"><%=bssid%
></td>
108 <td class=
"cbi-value-field"><%=chan%
></td>
109 <td class=
"cbi-value-field"><%=mode%
></td><td><%=txpwr%
></td>
119 <div class=
"cbi-map">
120 <h2><%:Default routes%
></h2>
121 <div class=
"cbi-section">
122 <div class=
"cbi-section-node">
123 <table class=
"cbi-section-table">
124 <% if not defroutev4 and not defroutev6 then %
>
125 <%:No defaultroutes known.%
>
127 <tr class=
"cbi-section-table-titles">
128 <th class=
"cbi-section-table-cell"><%:Network%
></th>
129 <th class=
"cbi-section-table-cell"><%:Interface%
></th>
130 <th class=
"cbi-section-table-cell"><%:Gateway%
></th>
131 <th class=
"cbi-section-table-cell"><%:Metric%
></th>
133 <% if defroutev4 then %
>
134 <tr class=
"cbi-section-table-row cbi-rowstyle-1">
135 <td class=
"cbi-value-field"><%=defroutev4.dest:string()%
></td>
136 <td class=
"cbi-value-field"><%=defroutev4.device%
></td>
137 <td class=
"cbi-value-field"><%=defroutev4.gateway:string()%
></td>
138 <td class=
"cbi-value-field"><%=defroutev4.metric%
></td>
141 <% if defroutev6 then %
>
142 <tr class=
"cbi-section-table-row cbi-rowstyle-2">
143 <td class=
"cbi-value-field"><%=defroutev6.dest:string()%
></td>
144 <td class=
"cbi-value-field"><%=defroutev6.device%
></td>
145 <td class=
"cbi-value-field"><%=defroutev6.nexthop:string()%
></td>
146 <td class=
"cbi-value-field"><%=defroutev6.metric%
></td>