Browse Source

add traffic

windows
Florian N 12 years ago
parent
commit
7b88aa6d49
  1. 10
      main/views.py
  2. 2
      pydash/urls.py
  3. 36
      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:
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()
data = [n for n in data if not n.startswith(('lo', '127'))]
itf = dict(zip(*[iter(data)] * 2))
data = [i.split(None, 2) for i in data]
ips = {'interface': itf, 'itfip': data}
data = ips
@ -119,7 +121,7 @@ def get_traffic(request):
Get the traffic for the specified interface
"""
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]
pipe.close()
@ -232,8 +234,8 @@ def getall(request):
'getplatform': get_platform(),
'getcpus': get_cpus(),
#'getdisk': get_disk(),
'getip': get_ipaddress(),
'gettraffic': get_traffic('eth0'),
#'getip': get_ipaddress(),
#'gettraffic': get_traffic('eth0'),
#'getusers': get_users(),
'getcpuusage': get_cpu_usage(),
'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/getdisk/$', 'usage.views.getdisk', name='getdisk'),
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')
)

36
static/css/dashboard.css

@ -354,4 +354,38 @@ h6.bigstats {
.dataTables_paginate a{ margin-left:8px;}
.dataTables_paginate a:hover{ pointer:pointer;}
.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>
</tr>
</thead>
<tbody>
{% for itfip in getip.itfip %}
{% cycle '<tr>' ''%}
<td>{{itfip}}</td>
{% cycle '' '</tr>' %}
{% endfor %}
<tbody id="get-ips">
</tbody>
</table>

42
templates/main.html

@ -91,6 +91,10 @@
<div class="widget-content">
<p></p>
<canvas id="cpuuChart" width="270" height="200"></canvas>
<div>
<span class="cpuf">{% trans "Free" %}</span>
<span class="cpuu">{% trans "Used" %}</span>
</div>
</div>
<!-- /widget-content -->
</div>
@ -212,16 +216,20 @@
<div class="span3">
<div class="widget">
<div class="widget-header"> <i class="icon-monitor"></i>
<h3>Internet Speed</h3>
<h3>Internet Traffic</h3>
<div id="refresh-ispeed">
</div>
</div>
<!-- /widget-header -->
<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>
<!-- /widget-content -->
</div>
<!-- /widget -->
@ -303,6 +311,16 @@ dashboard.getUsers = function() {
$("#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");
@ -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 loadChart = new Chart(load_ctx);
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.getUsers()', {{ time_refresh_long }});
window.setInterval('cpuu_usage()', {{ time_refresh }});
window.setInterval('traffic_usage()', 1000);
});
$(function pageLoad() {
memory_usage();
load_average();
cpuu_usage();
traffic_usage();
dashboard.getUptime();
dashboard.getDisk();
dashboard.getUsers();
dashboard.getIps();
});
</script>

125
usage/views.py

@ -45,7 +45,7 @@ def getdisk(request):
response.write(data)
return response
def getusers(request):
def getips(request):
"""
Return the online users
"""
@ -53,11 +53,11 @@ def getusers(request):
return HttpResponseRedirect('/login')
try:
getusers = get_users()
get_ips = get_ipaddress()
except Exception:
getusers = None
get_ips = None
data = simplejson.dumps(getusers)
data = simplejson.dumps(get_ips['itfip'])
response = HttpResponse()
response['Content-Type'] = "text/javascript"
response.write(data)
@ -233,3 +233,120 @@ def loadaverage(request):
response.cookies['load_average'] = datasets
response.write(data)
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