688a8ee99a9c5ab1f303b5d2e2350b8b93ad693d
[project/luci.git] / modules / freifunk / luasrc / view / freifunk / public_status.htm
1 <%
2 require "luci.sys"
3 require "luci.tools.webadmin"
4
5 -- System
6
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"))
19 )
20 local_time = os.date("%c")
21 local uptime = luci.tools.webadmin.date_format(tonumber(uptime))
22
23 -- Wireless
24 local uci = require "luci.model.uci".cursor()
25 ifaces = {}
26 uci:foreach("wireless", "wifi-iface", function(s)
27         if s.network then
28                 table.insert(ifaces, s.network)
29                 if (uci:get("network", s.network, "ifname")) then
30                         has_ifaces = true
31                 end
32         end
33 end)
34
35 -- Routes
36 local defroutev4 = luci.sys.net.defaultroute()
37 local defroutev6 = luci.sys.net.defaultroute6 ()
38
39 %>
40 <%+header%>
41
42 <div class="cbi-map">
43         <h2><%:System%></h2>
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>
51         </div>
52 </div>
53
54 <% if has_ifaces == true then %>
55 <div class="cbi-map">
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>
67                                         </tr>
68
69                                         
70         <% for k,v in pairs(ifaces) do
71         local iface = uci:get("network", v, "ifname")
72                 if iface then
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
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 = 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"
102                         %>
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>
110                                         </tr>
111                 <% end %>
112         <% end %>
113                                 </table>
114                 </div>
115         </div>
116 </div>
117 <% end %>
118
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.%>
126                                         <%else%>
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>
132                                                 </tr>
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>
139                                                 </tr>
140         <% end %>
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>
147                                                 </tr>
148         <% end %>
149                                 </table>
150                 </div>
151         </div>
152 </div>
153
154 <% end %>
155
156 <%+footer%>
157