Browse Source

add traffic

windows
Florian N 12 years ago
parent
commit
7b88aa6d49
  1. 10
      main/views.py
  2. 2
      pydash/urls.py
  3. 34
      static/css/dashboard.css
  4. 7
      templates/ip.html
  5. 42
      templates/main.html
  6. 125
      usage/views.py

10
main/views.py

@ -62,12 +62,14 @@ def get_ipaddress():
""" """
try: try:
pipe = os.popen("/sbin/ifconfig |" + "grep -B1 'inet addr' |" + "awk '{ if ( $1 == \"inet\" ) { print $2 } else if ( $2 == \"Link\" ) { printf \"%s:\",$1 } }' |" + "awk -F: '{ print $1, $3 }'") pipe = os.popen("/sbin/ifconfig |" + "grep -B1 'inet addr' |" + "awk '{ if ( $1 == \"inet\" ) { print $2 } else if ( $2 == \"Link\" ) { printf \"%s:\",$1 } }' |" + "awk -F: '{ print $1, $3 }'")
data = pipe.read().strip().split()
data = pipe.read().strip().split('\n')
pipe.close() pipe.close()
data = [n for n in data if not n.startswith(('lo', '127'))] data = [n for n in data if not n.startswith(('lo', '127'))]
itf = dict(zip(*[iter(data)] * 2)) itf = dict(zip(*[iter(data)] * 2))
data = [i.split(None, 2) for i in data]
ips = {'interface': itf, 'itfip': data} ips = {'interface': itf, 'itfip': data}
data = ips data = ips
@ -119,7 +121,7 @@ def get_traffic(request):
Get the traffic for the specified interface Get the traffic for the specified interface
""" """
try: try:
pipe = os.popen("cat /proc/net/dev |" + "grep " + request + "| awk {'print $1, $9'}")
pipe = os.popen("cat /proc/net/dev |" + "grep " + request + "| awk '{print $2, $10}'")
data = pipe.read().strip().split(':',1)[-1] data = pipe.read().strip().split(':',1)[-1]
pipe.close() pipe.close()
@ -232,8 +234,8 @@ def getall(request):
'getplatform': get_platform(), 'getplatform': get_platform(),
'getcpus': get_cpus(), 'getcpus': get_cpus(),
#'getdisk': get_disk(), #'getdisk': get_disk(),
'getip': get_ipaddress(),
'gettraffic': get_traffic('eth0'),
#'getip': get_ipaddress(),
#'gettraffic': get_traffic('eth0'),
#'getusers': get_users(), #'getusers': get_users(),
'getcpuusage': get_cpu_usage(), 'getcpuusage': get_cpu_usage(),
'time_refresh': time_refresh, 'time_refresh': time_refresh,

2
pydash/urls.py

@ -20,6 +20,8 @@ urlpatterns = patterns('',
url(r'^info/cpuusage/$', 'usage.views.cpuusage', name='cpuusage'), url(r'^info/cpuusage/$', 'usage.views.cpuusage', name='cpuusage'),
url(r'^info/getdisk/$', 'usage.views.getdisk', name='getdisk'), url(r'^info/getdisk/$', 'usage.views.getdisk', name='getdisk'),
url(r'^info/getusers/$', 'usage.views.getusers', name='getusers'), url(r'^info/getusers/$', 'usage.views.getusers', name='getusers'),
url(r'^info/getips/$', 'usage.views.getips', name='getips'),
url(r'^info/gettraffic/$', 'usage.views.gettraffic', name='gettraffic'),
url(r'^info/loadaverage/$', 'usage.views.loadaverage', name='loadaverage') url(r'^info/loadaverage/$', 'usage.views.loadaverage', name='loadaverage')
) )

34
static/css/dashboard.css

@ -355,3 +355,37 @@ h6.bigstats {
.dataTables_paginate a:hover{ pointer:pointer;} .dataTables_paginate a:hover{ pointer:pointer;}
.navbar-fixed-top{ margin-left:0px;} .navbar-fixed-top{ margin-left:0px;}
.widget-search{display: inline-block; vertical-align: middle; margin: 0 6px; width: 200px;} .widget-search{display: inline-block; vertical-align: middle; margin: 0 6px; width: 200px;}
.netin {
border-color: rgb(105,210,231);
margin: 0.5em;
border-style: solid;
border-width: 0 0 0 1em;
padding: 0 0.3em;
border-style: solid;
}
.netout {
border-color: rgb(227,48,81);
margin: 0.5em;
border-style: solid;
border-width: 0 0 0 1em;
padding: 0 0.3em;
border-style: solid;
}
.cpuu {
border-color: rgb(247,70,74);
margin: 0.5em;
border-style: solid;
border-width: 0 0 0 1em;
padding: 0 0.3em;
border-style: solid;
}
.cpuf {
border-color: rgb(10,209,27);
margin: 0.5em;
border-style: solid;
border-width: 0 0 0 1em;
padding: 0 0.3em;
border-style: solid;
}

7
templates/ip.html

@ -5,12 +5,7 @@
<th>IP</th> <th>IP</th>
</tr> </tr>
</thead> </thead>
<tbody>
{% for itfip in getip.itfip %}
{% cycle '<tr>' ''%}
<td>{{itfip}}</td>
{% cycle '' '</tr>' %}
{% endfor %}
<tbody id="get-ips">
</tbody> </tbody>
</table> </table>

42
templates/main.html

@ -91,6 +91,10 @@
<div class="widget-content"> <div class="widget-content">
<p></p> <p></p>
<canvas id="cpuuChart" width="270" height="200"></canvas> <canvas id="cpuuChart" width="270" height="200"></canvas>
<div>
<span class="cpuf">{% trans "Free" %}</span>
<span class="cpuu">{% trans "Used" %}</span>
</div>
</div> </div>
<!-- /widget-content --> <!-- /widget-content -->
</div> </div>
@ -212,16 +216,20 @@
<div class="span3"> <div class="span3">
<div class="widget"> <div class="widget">
<div class="widget-header"> <i class="icon-monitor"></i> <div class="widget-header"> <i class="icon-monitor"></i>
<h3>Internet Speed</h3>
<h3>Internet Traffic</h3>
<div id="refresh-ispeed"> <div id="refresh-ispeed">
</div> </div>
</div> </div>
<!-- /widget-header --> <!-- /widget-header -->
<div class="widget-content"> <div class="widget-content">
<div align="center" style="padding:10px;">
<span class="lead">{{gettraffic}}</span>
</div>
<p></p>
<canvas id="trfChart" width="250" height="200"></canvas>
<div>
<span class="netin">{% trans "In" %}</span>
<span class="netout">{% trans "Out" %}</span>
</div>
</div> </div>
<!-- /widget-content --> <!-- /widget-content -->
</div> </div>
<!-- /widget --> <!-- /widget -->
@ -303,6 +311,16 @@ dashboard.getUsers = function() {
$("#get-users").html( tr ); $("#get-users").html( tr );
}); });
} }
dashboard.getIps = function() {
$.getJSON('/info/getips/{{ getips }}', function(data) {
var tr='';
$.each( data, function( index, item){
tr+='<tr><td>'+item[0]+'</td><td>'+item[1]+'</td></tr>';
})
tr+='';
$("#get-ips").html( tr );
});
}
var mem_ctx = $("#memoryChart").get(0).getContext("2d"); var mem_ctx = $("#memoryChart").get(0).getContext("2d");
@ -331,6 +349,19 @@ var cpu_ctx = $("#cpuuChart").get(0).getContext("2d");
}); });
} }
var trf_ctx = $("#trfChart").get(0).getContext("2d");
var trfChart = new Chart(trf_ctx);
function traffic_usage(){
$.getJSON('/info/gettraffic/', function(data) {
var options = {
animation : false,
pointDotRadius : 2,
scaleLabel : "<%=value%> Kb"
}
trfChart.Line(data, options);
});
}
var load_ctx = $("#loadChart").get(0).getContext("2d"); var load_ctx = $("#loadChart").get(0).getContext("2d");
var loadChart = new Chart(load_ctx); var loadChart = new Chart(load_ctx);
function load_average(){ function load_average(){
@ -351,15 +382,18 @@ var load_ctx = $("#loadChart").get(0).getContext("2d");
window.setInterval('dashboard.getDisk()', {{ time_refresh_long }}); window.setInterval('dashboard.getDisk()', {{ time_refresh_long }});
window.setInterval('dashboard.getUsers()', {{ time_refresh_long }}); window.setInterval('dashboard.getUsers()', {{ time_refresh_long }});
window.setInterval('cpuu_usage()', {{ time_refresh }}); window.setInterval('cpuu_usage()', {{ time_refresh }});
window.setInterval('traffic_usage()', 1000);
}); });
$(function pageLoad() { $(function pageLoad() {
memory_usage(); memory_usage();
load_average(); load_average();
cpuu_usage(); cpuu_usage();
traffic_usage();
dashboard.getUptime(); dashboard.getUptime();
dashboard.getDisk(); dashboard.getDisk();
dashboard.getUsers(); dashboard.getUsers();
dashboard.getIps();
}); });
</script> </script>

125
usage/views.py

@ -45,7 +45,7 @@ def getdisk(request):
response.write(data) response.write(data)
return response return response
def getusers(request):
def getips(request):
""" """
Return the online users Return the online users
""" """
@ -53,11 +53,11 @@ def getusers(request):
return HttpResponseRedirect('/login') return HttpResponseRedirect('/login')
try: try:
getusers = get_users()
get_ips = get_ipaddress()
except Exception: except Exception:
getusers = None
get_ips = None
data = simplejson.dumps(getusers)
data = simplejson.dumps(get_ips['itfip'])
response = HttpResponse() response = HttpResponse()
response['Content-Type'] = "text/javascript" response['Content-Type'] = "text/javascript"
response.write(data) response.write(data)
@ -233,3 +233,120 @@ def loadaverage(request):
response.cookies['load_average'] = datasets response.cookies['load_average'] = datasets
response.write(data) response.write(data)
return response return response
def gettraffic(request):
"""
Return the traffic for the interface
"""
if not request.user.is_authenticated():
return HttpResponseRedirect('/login')
datasets_in = []
datasets_in_i = []
datasets_out = []
datasets_out_o = []
json_traffic = []
cookie_traffic = {}
try:
traffic = get_traffic('eth0')
except Exception:
traffic = 0
try:
cookies = request._cookies['traffic']
except Exception:
cookies = None
if not cookies:
datasets_in.append(0)
datasets_in_i.append(0)
datasets_out.append(0)
datasets_out_o.append(0)
else:
datasets = eval(cookies)
datasets_in = datasets[0]
datasets_out = datasets[1]
datasets_in_i = datasets[2]
datasets_out_o = datasets[3]
if len(datasets_in) > 10:
while datasets_in:
del datasets_in[0]
if len(datasets_in) == 10:
break
if len(datasets_in_i) > 2:
while datasets_in_i:
del datasets_in_i[0]
if len(datasets_in_i) == 2:
break
if len(datasets_out) > 10:
while datasets_out:
del datasets_out[0]
if len(datasets_out) == 10:
break
if len(datasets_out_o) > 2:
while datasets_out_o:
del datasets_out_o[0]
if len(datasets_out_o) == 2:
break
if len(datasets_in_i) <= 1:
datasets_in_i.append(int(traffic['traffic_in']))
if len(datasets_in_i) == 2:
datasets_in_i.append(int(traffic['traffic_in']))
del datasets_in_i[0]
if len(datasets_out_o) <= 1:
datasets_out_o.append(int(traffic['traffic_out']))
if len(datasets_out_o) == 2:
datasets_out_o.append(int(traffic['traffic_out']))
del datasets_out_o[0]
if len(datasets_in) <= 9:
datasets_in.append(float((datasets_in_i[1] - datasets_in_i[0]) / 1024 ))
if len(datasets_in) == 10:
datasets_in.append(float((datasets_in_i[1] - datasets_in_i[0]) / 1024 ))
del datasets_in[0]
if len(datasets_out) <= 9:
datasets_out.append(float((datasets_out_o[1] - datasets_out_o[0]) / 1024 ))
if len(datasets_out) == 10:
datasets_out.append(float((datasets_out_o[1] - datasets_out_o[0]) / 1024 ))
del datasets_out[0]
# Some fix division by 0 Chart.js
if len(datasets_in) == 10:
if sum(datasets_in) == 0:
datasets_in[9] += 0.1
if sum(datasets_in) / 10 == datasets_in[0]:
datasets_in[9] += 0.1
traff = {
'labels': [""] * 10,
'datasets': [
{
"fillColor": "rgba(105,210,231,0.5)",
"strokeColor": "rgba(105,210,231,1)",
"pointColor": "rgba(105,210,231,1)",
"pointStrokeColor": "#fff",
"data": datasets_in
},
{
"fillColor": "rgba(227,48,81,0.5)",
"strokeColor": "rgba(227,48,81,1)",
"pointColor": "rgba(227,48,81,1)",
"pointStrokeColor": "#fff",
"data": datasets_out
}
]
}
cookie_traffic = [datasets_in, datasets_out, datasets_in_i, datasets_out_o]
data = simplejson.dumps(traff)
response = HttpResponse()
response['Content-Type'] = "text/javascript"
response.cookies['traffic'] = cookie_traffic
response.write(data)
return response
Loading…
Cancel
Save