Merge pull request #278 from nmav/ocserv
[project/luci.git] / modules / freifunk / luasrc / view / freifunk / public_status.htm
index 9cb1856..10bd849 100644 (file)
@@ -1,12 +1,11 @@
 <%
-
 local sys = require "luci.sys"
 local twa = require "luci.tools.webadmin"
 
 -- System
-local system, model, memtotal, memcached, membuffers, memfree, bogomips = sys.sysinfo()
+local model, system, memtotal, memcached, membuffers, memfree, bogomips = sys.sysinfo()
 local uptime = twa.date_format(tonumber(sys.uptime()))
-local_time = os.date("%a, %d %b %Y, %H:%M:%S")
+local time = os.date("%a, %d %b %Y, %H:%M:%S")
 local load1, load5, load15 = sys.loadavg()
 local load = string.format("%.2f, %.2f, %.2f", load1, load5, load15)
 
@@ -49,15 +48,79 @@ local has_iwinfo = pcall(require, "iwinfo")
 local defroutev4 = sys.net.defaultroute()
 local defroutev6 = sys.net.defaultroute6()
 
+if defroutev4 then
+       defroutev4.dest = defroutev4.dest:string()
+       defroutev4.gateway = defroutev4.gateway:string()
+else
+       -- probably policy routing activated, try olsr-default table
+       local dr4 = sys.exec("ip r s t olsr-default")
+       if dr4 then
+               defroutev4 = { }
+               defroutev4.dest, defroutev4.gateway, defroutev4.device, defroutev4.metric = dr4:match("^(%w+) via (%d+.%d+.%d+.%d+) dev ([%w-]+) +metric (%d+)")
+       end
+end
+
+if defroutev6 then
+       defroutev6.dest = defroutev6.dest:string()
+       defroutev6.nexthop = defroutev6.nexthop:string()
+end
+
+if luci.http.formvalue("status") == "1" then
+       local rv = { }
+       for dev in pairs(netdevs) do
+               local j = { id = dev }
+               local iw = luci.sys.wifi.getiwinfo(dev)
+               if iw then
+                       local f
+                       for _, f in ipairs({
+                               "channel", "txpower", "bitrate", "signal", "noise",
+                               "quality", "quality_max", "mode", "ssid", "bssid", "encryption", "ifname"
+                       }) do
+                               j[f] = iw[f]
+                       end
+               end
+               rv[#rv+1] = j
+       end
+
+       if defroutev6 then
+               def6 = {
+                       gateway = defroutev6.nexthop,
+                       dest = defroutev6.dest,
+                       dev = defroutev6.device,
+                       metr = defroutev6.metric
+               }
+       end
+
+       if defroutev4 then
+               def4 = {
+                       gateway = defroutev4.gateway,
+                       dest = defroutev4.dest,
+                       dev = defroutev4.device,
+                       metr = defroutev4.metric
+               }
+       end
+
+       rv[#rv+1] = {
+               time = time,
+               uptime = uptime,
+               load = load,
+               mem = mem,
+               defroutev4 = def4,
+               defroutev6 = def6
+       }
+
+       luci.http.prepare_content("application/json")
+       luci.http.write_json(rv)
+       return
+end
 -%>
 
 <%+header%>
 
-
 <script type="text/javascript" src="<%=resource%>/cbi.js"></script>
 
 <script type="text/javascript">//<![CDATA[
-       XHR.poll(<%=interval%>, '<%=luci.dispatcher.build_url("freifunk", "status", "public_status_json", table.concat(netlist, ","))%>', null,
+        XHR.poll(<%=interval%> , '<%=REQUEST_URI%>', { status: 1 },
                function(x, st)
                {
                        if (st)
@@ -171,7 +234,7 @@ local defroutev6 = sys.net.defaultroute6()
                <div class="cbi-value"><label class="cbi-value-title"><%:Processor%></label><div class="cbi-value-field"><%=model%></div></div>
                <div class="cbi-value"><label class="cbi-value-title"><%:Load%></label><div class="cbi-value-field" id="dynload"><%=load%></div></div>
                <div class="cbi-value"><label class="cbi-value-title"><%:Memory%></label><div class="cbi-value-field" id="dynmem"><%=mem%></div></div>
-               <div class="cbi-value"><label class="cbi-value-title"><%:Local Time%></label><div class="cbi-value-field" id="dyntime"><%=local_time%></div></div>
+               <div class="cbi-value"><label class="cbi-value-title"><%:Local Time%></label><div class="cbi-value-field" id="dyntime"><%=time%></div></div>
                <div class="cbi-value"><label class="cbi-value-title"><%:Uptime%></label><div class="cbi-value-field" id="dynuptime"><%=uptime%></div></div>
        </div>
 </div>
@@ -208,7 +271,7 @@ local defroutev6 = sys.net.defaultroute6()
                        netlist[#netlist+1] = net:ifname()
                        netdevs[net:ifname()] = dev:name()
 
-                       if net.iwdata.ifname then
+                       if net.iwdata.device then
                                local signal = net.iwinfo.signal or "N/A"
                                local noise = net.iwinfo.noise or "N/A"
                                local q = net.iwinfo.quality or "0"
@@ -283,9 +346,9 @@ local defroutev6 = sys.net.defaultroute6()
        <% if defroutev4 then %>
 
                                                <tr class="cbi-section-table-row cbi-rowstyle-1">
-                                                       <td class="cbi-value-field" id="v4dst"><%=defroutev4.dest:string()%></td>
+                                                       <td class="cbi-value-field" id="v4dst"><%=defroutev4.dest%></td>
                                                        <td class="cbi-value-field" id="v4dev"><%=defroutev4.device%></td>
-                                                       <td class="cbi-value-field" id="v4gw"><%=defroutev4.gateway:string()%></td>
+                                                       <td class="cbi-value-field" id="v4gw"><%=defroutev4.gateway%></td>
                                                        <td class="cbi-value-field" id="v4metr"><%=defroutev4.metric%></td>
                                                </tr>
 
@@ -293,9 +356,9 @@ local defroutev6 = sys.net.defaultroute6()
        if defroutev6 then %>
 
                                                <tr class="cbi-section-table-row cbi-rowstyle-2">
-                                                       <td class="cbi-value-field" id="v6dst"><%=defroutev6.dest:string()%></td>
+                                                       <td class="cbi-value-field" id="v6dst"><%=defroutev6.dest%></td>
                                                        <td class="cbi-value-field" id="v6dev"><%=defroutev6.device%></td>
-                                                       <td class="cbi-value-field" id="v6gw"><%=defroutev6.nexthop:string()%></td>
+                                                       <td class="cbi-value-field" id="v6gw"><%=defroutev6.nexthop%></td>
                                                        <td class="cbi-value-field" id="v6metr"><%=defroutev6.metric%></td>
                                                </tr>