diff options
author | Steven Barth <steven@midlink.org> | 2008-06-02 20:16:05 +0000 |
---|---|---|
committer | Steven Barth <steven@midlink.org> | 2008-06-02 20:16:05 +0000 |
commit | 561b0cfaa3fb8163d9ec74a3f96fd5b22ad54f33 (patch) | |
tree | 8b4b1765c70bae824bbad3006021cf7a4a775a34 /modules/admin-core/luasrc/controller/admin | |
parent | 953510ccac9b9c6b3c1d8634897c0dddc92913e4 (diff) |
* Moved Freifunk status pages to admin-core and linked them in Freifunk
* luci/web: Added assign() to dispatcher to reference foreign nodes in the dispatching tree
Diffstat (limited to 'modules/admin-core/luasrc/controller/admin')
-rw-r--r-- | modules/admin-core/luasrc/controller/admin/status.lua | 2 | ||||
-rw-r--r-- | modules/admin-core/luasrc/controller/admin/status_olsr.lua | 163 |
2 files changed, 165 insertions, 0 deletions
diff --git a/modules/admin-core/luasrc/controller/admin/status.lua b/modules/admin-core/luasrc/controller/admin/status.lua index 223f54b295..afd6804f79 100644 --- a/modules/admin-core/luasrc/controller/admin/status.lua +++ b/modules/admin-core/luasrc/controller/admin/status.lua @@ -6,6 +6,8 @@ function index() entry({"admin", "status"}, template("admin_status/index"), i18n("status", "Status"), 20) entry({"admin", "status", "syslog"}, call("action_syslog"), i18n("syslog", "Systemprotokoll")) + entry({"admin", "status", "routes"}, template("admin_status/routes"), "Routingtabelle", 10) + entry({"admin", "status", "iwscan"}, template("admin_status/iwscan"), "WLAN-Scan", 20) end function action_syslog() diff --git a/modules/admin-core/luasrc/controller/admin/status_olsr.lua b/modules/admin-core/luasrc/controller/admin/status_olsr.lua new file mode 100644 index 0000000000..cadda546ef --- /dev/null +++ b/modules/admin-core/luasrc/controller/admin/status_olsr.lua @@ -0,0 +1,163 @@ +module("luci.controller.admin.status_olsr", package.seeall) +require("luci.sys") + +function index() + local page = node("admin", "status", "olsr") + page.target = call("action_index") + page.title = "OLSR" + + local page = node("admin", "status", "olsr", "routes") + page.target = call("action_routes") + page.title = "Routen" + page.order = 10 + + local page = node("admin", "status", "olsr", "topology") + page.target = call("action_topology") + page.title = "Topologie" + page.order = 20 + + local page = node("admin", "status", "olsr", "hna") + page.target = call("action_hna") + page.title = "HNA" + page.order = 30 + + local page = node("admin", "status", "olsr", "mid") + page.target = call("action_mid") + page.title = "MID" + page.order = 50 +end + +function action_index() + local data = fetch_txtinfo("links") + + if not data or not data.Links then + luci.template.render("status-olsr/error_olsr") + return nil + end + + local function compare(a, b) + if tonumber(a.ETX) == 0 then + return false + end + + if tonumber(b.ETX) == 0 then + return true + end + + return tonumber(a.ETX) < tonumber(b.ETX) + end + + table.sort(data.Links, compare) + + luci.template.render("status-olsr/index", {links=data.Links}) +end + +function action_routes() + local data = fetch_txtinfo("routes") + + if not data or not data.Routes then + luci.template.render("status-olsr/error_olsr") + return nil + end + + local function compare(a, b) + if tonumber(a.ETX) == 0 then + return false + end + + if tonumber(b.ETX) == 0 then + return true + end + + return tonumber(a.ETX) < tonumber(b.ETX) + end + + table.sort(data.Routes, compare) + + luci.template.render("status-olsr/routes", {routes=data.Routes}) +end + +function action_topology() + local data = fetch_txtinfo("topology") + + if not data or not data.Topology then + luci.template.render("status-olsr/error_olsr") + return nil + end + + local function compare(a, b) + return a["Destination IP"] < b["Destination IP"] + end + + table.sort(data.Topology, compare) + + luci.template.render("status-olsr/topology", {routes=data.Topology}) +end + +function action_hna() + local data = fetch_txtinfo("hna") + + if not data or not data.HNA then + luci.template.render("status-olsr/error_olsr") + return nil + end + + local function compare(a, b) + return a.Network < b.Network + end + + table.sort(data.HNA, compare) + + luci.template.render("status-olsr/hna", {routes=data.HNA}) +end + +function action_mid() + local data = fetch_txtinfo("mid") + + if not data or not data.MID then + luci.template.render("status-olsr/error_olsr") + return nil + end + + local function compare(a, b) + return a.IP < b.IP + end + + table.sort(data.MID, compare) + + luci.template.render("status-olsr/mid", {mids=data.MID}) +end + + +-- Internal +function fetch_txtinfo(otable) + otable = otable or "" + local rawdata = luci.sys.httpget("http://127.0.0.1:2006/"..otable) + + if #rawdata == 0 then + return nil + end + + local data = {} + + local tables = luci.util.split(luci.util.trim(rawdata), "\n\n") + + + for i, tbl in ipairs(tables) do + local lines = luci.util.split(tbl, "\n") + local name = table.remove(lines, 1):sub(8) + local keys = luci.util.split(table.remove(lines, 1), "\t") + + data[name] = {} + + for j, line in ipairs(lines) do + local fields = luci.util.split(line, "\t") + data[name][j] = {} + for k, key in pairs(keys) do + data[name][j][key] = fields[k] + end + end + end + + return data +end
\ No newline at end of file |