efeb40566d2f6e0ec5665fc31822e71b26d24d16
[project/luci.git] / modules / freifunk / luasrc / view / freifunk / public_status.htm
1 <%
2 local sys = require "luci.sys"
3 local twa = require "luci.tools.webadmin"
4
5 -- System
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"))
19 )
20
21 -- wireless
22 local uci = require "luci.model.uci".cursor()
23 local ntm = require "luci.model.network"
24 ntm.init(uci)
25 local devices  = ntm:get_wifidevs()
26 local netlist = { }
27 local netdevs = { }
28 local dev
29
30 -- Routes
31 local defroutev4 = sys.net.defaultroute()
32 local defroutev6 = sys.net.defaultroute6 ()
33
34 %>
35 <%+header%>
36
37 <div class="cbi-map">
38         <h2><%:System%></h2>
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>
46         </div>
47 </div>
48
49 <% if devices[1] then %>
50
51 <div class="cbi-map">
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>
65                                         </tr>
66         <% 
67         for _, dev in ipairs(devices) do
68         local net
69                 for _, net in ipairs(dev:get_wifinets()) do
70                         netlist[#netlist+1] = net:ifname()
71                         netdevs[net:ifname()] = dev:name()
72
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
79
80                                 if qperc == 0 then
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"
90                                 else
91                                         icon = "signal-0.png"
92                                 end
93
94                                 signal_string = "<img src='"..resource.."/icons/"..icon.."' title='Signal: "..signal.." db / Noise: "..noise.." db' alt='Signal Quality'></img>"
95
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"
103                                 end
104                                 local bitrate = net.iwinfo.bitrate or "N/A"
105                                 if bitrate ~= "N/A" then
106                                         bitrate = ( bitrate / 1000 ).."Mb/s"
107                                 end
108                                 local interface = net.iwdata.ifname or "N/A"
109         %>
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>
119                                         </tr>
120                         <% end
121                 end
122         end %>
123                         </table>
124                 </div>
125         </div>
126 </div>
127 <% end %>
128
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">
134
135 <% if not defroutev4 and not defroutev6 then %>
136         <%:No defaultroutes known.%>
137 <%else%>
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>
143                                                 </tr>
144
145         <% if defroutev4 then %>
146
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>
152                                                 </tr>
153
154         <% end
155         if defroutev6 then %>
156
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>
162                                                 </tr>
163
164         <% end %>
165
166                                 </table>
167                 </div>
168         </div>
169 </div>
170 <% end %>
171
172 <%+footer%>
173