952dd28cc73ea84217ba6b707cc48a55825b898a
[project/luci.git] / applications / luci-olsr / luasrc / view / status-olsr / overview.htm
1 <%#
2 LuCI - Lua Configuration Interface
3 Copyright 2008 Steven Barth <steven@midlink.org>
4 Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
5 Copyright 2010 Manuel Munz <freifunk at somakoma dot de>
6
7 Licensed under the Apache License, Version 2.0 (the "License");
8 you may not use this file except in compliance with the License.
9 You may obtain a copy of the License at
10
11 http://www.apache.org/licenses/LICENSE-2.0
12 -%>
13
14 <%
15 local sys = require "luci.sys"
16 local utl = require "luci.util"
17 local fs = require "luci.fs"
18
19 function get_version()
20 local data = utl.split((utl.trim(sys.exec("/usr/sbin/olsrd -v"))))
21 local buildfull = utl.trim(utl.split(data[2],": ")[2])
22 local ver = {
23 version = utl.trim(utl.split(data[1]," - ")[2]),
24 date = utl.trim(utl.split(buildfull, " ")[1]),
25 time = utl.trim(utl.split(buildfull, " ")[2]),
26 host = utl.trim(utl.split(buildfull, " ")[4])
27 }
28 return ver
29 end
30 local ver = get_version()
31
32 local ifaces = fetch_txtinfo("int")
33 if not ifaces or not ifaces.Interfaces then
34 luci.template.render("status-olsr/error_olsr")
35 return nil
36 end
37 local interfaces = ""
38 for k,v in pairs(ifaces.Interfaces) do
39 interfaces = utl.trim(interfaces.." "..v.Name)
40 end
41 interfaces = string.gsub(interfaces, " ", ", ")
42 local nr_ifaces = #ifaces.Interfaces
43
44 local links = fetch_txtinfo("links")
45 local nr_neigh = #links.Links
46 local neighbors = ""
47 for k,v in pairs(links.Links) do
48 local link
49 if v.Hostname then
50 link = v.Hostname
51 else
52 link = v["Remote IP"]
53 end
54 neighbors = utl.trim("<a href=http://"..link.."/cgi-bin-status.html>"..link.."</a> "..neighbors)
55 end
56
57 local data = fetch_txtinfo("topology")
58 local nr_topo = #data.Topology
59 local utable = {}
60 for k,v in pairs(data.Topology) do
61 if utl.contains(utable, v["Dest. IP"]) == false then
62 table.insert(utable, v["Dest. IP"])
63 end
64 end
65 local nr_nodes = #utable
66
67 local data = fetch_txtinfo("hna")
68 local nr_hna = #data.HNA
69
70 local meshfactor = string.format("%.2f", nr_topo / nr_nodes)
71
72 local ipv = luci.model.uci.cursor():get_first("olsrd", "olsrd", "IpVersion", "4")
73
74 function write_conf(conf, file)
75 if fs.access(conf) then
76 luci.http.header("Content-Disposition", "attachment; filename="..file)
77 luci.http.prepare_content("text/plain")
78 luci.http.write(fs.readfile(conf))
79 end
80 end
81
82 conf = luci.http.formvalue()
83
84 if conf.openwrt then
85 write_conf("/etc/config/olsrd", "olsrd")
86 return false
87 end
88
89 if conf.conf_v4 then
90 write_conf("/var/etc/olsrd.conf.ipv4", "olsrd.conf.ipv4")
91 return false
92 end
93
94 if conf.conf_v6 then
95 write_conf("/var/etc/olsrd.conf.ipv6", "olsrd.conf.ipv6")
96 return false
97 end
98
99 if conf.conf then
100 write_conf("/var/etc/olsrd.conf", "olsrd.conf")
101 return false
102 end
103
104 %>
105
106 <%+header%>
107 <h2><a id="content" name="content">OLSR <%:Overview%></a></h2>
108
109 <div class="cbi-map">
110 <div class="cbi-section-node">
111 <div class="cbi-value"><label class="cbi-value-title"><%:Interfaces%></label>
112 <div class="cbi-value-field">
113 <div style="width: 6em; float:left;">
114 <a href="<%=luci.dispatcher.build_url("freifunk", "olsr", "interfaces")%>"><%=nr_ifaces%></a>
115 </div>
116 <div style="padding-left: 6em;">
117 <%=interfaces%>
118 </div>
119 </div>
120 </div>
121
122 <div class="cbi-value"><label class="cbi-value-title"><%:Neighbors%></label>
123 <div class="cbi-value-field">
124 <div style="width: 6em; float:left;">
125 <a href="<%=luci.dispatcher.build_url("freifunk", "olsr", "neighbors")%>"><%=nr_neigh%></a>
126 </div>
127 <div style="padding-left: 6em;">
128 <%=neighbors%>
129 </div>
130 </div>
131 </div>
132
133 <div class="cbi-value"><label class="cbi-value-title"><%:Nodes%></label>
134 <div class="cbi-value-field"><a href="<%=luci.dispatcher.build_url("freifunk", "olsr", "topology")%>"><%=nr_nodes%></a>
135 </div>
136 </div>
137
138 <div class="cbi-value"><label class="cbi-value-title"><%:HNA%></label>
139 <div class="cbi-value-field"><a href="<%=luci.dispatcher.build_url("freifunk", "olsr", "hna")%>"><%=nr_hna%></a>
140 </div>
141 </div>
142
143 <div class="cbi-value"><label class="cbi-value-title"><%:Links total%></label>
144 <div class="cbi-value-field"><a href="<%=luci.dispatcher.build_url("freifunk", "olsr", "topology")%>"><%=nr_topo%></a>
145 </div>
146 </div>
147
148 <div class="cbi-value"><label class="cbi-value-title"><%:Links per node (average)%></label>
149 <div class="cbi-value-field"><%=meshfactor%>
150 </div>
151 </div>
152 </div>
153 </div>
154
155 <h2><a id="content" name="content">OLSR <%:Configuration%></a></h2>
156
157 <div class="cbi-map">
158 <div class="cbi-section-node">
159 <div class="cbi-value"><label class="cbi-value-title"><%:Version%></label>
160 <div class="cbi-value-field"><%=ver.version%> (built <%=ver.date%> on <%=ver.host%>)
161 </div>
162 </div>
163
164 <div class="cbi-value"><label class="cbi-value-title"><%:Download Config%></label>
165 <div class="cbi-value-field">
166 <a href="<%=REQUEST_URI%>?openwrt">OpenWrt</a>,
167 <% if ipv == "6and4" then %>
168 <a href="<%=REQUEST_URI%>?conf_v4">OLSRD IPv4</a>,
169 <a href="<%=REQUEST_URI%>?conf_v6">OLSRD IPv6</a>
170 <% else %>
171 <a href="<%=REQUEST_URI%>?conf">OLSRD</a>
172 <% end %>
173 </div>
174 </div>
175 </div>
176 </div>
177
178 <%+footer%>