diff --git a/main/views.py b/main/views.py index 5cc5fd6..789f972 100755 --- a/main/views.py +++ b/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, diff --git a/pydash/urls.py b/pydash/urls.py index 90bd6f6..47e0b47 100644 --- a/pydash/urls.py +++ b/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') ) diff --git a/static/css/dashboard.css b/static/css/dashboard.css index 78dd108..337845c 100644 --- a/static/css/dashboard.css +++ b/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;} \ No newline at end of file +.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; +} + diff --git a/templates/ip.html b/templates/ip.html index 9a7cc37..59e44a7 100644 --- a/templates/ip.html +++ b/templates/ip.html @@ -5,12 +5,7 @@ IP - - {% for itfip in getip.itfip %} - {% cycle '' ''%} - {{itfip}} - {% cycle '' '' %} - {% endfor %} + diff --git a/templates/main.html b/templates/main.html index dce8961..9bee9e1 100644 --- a/templates/main.html +++ b/templates/main.html @@ -91,6 +91,10 @@

+
+ {% trans "Free" %} + {% trans "Used" %} +
@@ -212,16 +216,20 @@
-

Internet Speed

+

Internet Traffic

-
- {{gettraffic}} -
+

+ +
+ {% trans "In" %} + {% trans "Out" %} +
+
@@ -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+=''+item[0]+''+item[1]+''; + }) + 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(); }); diff --git a/usage/views.py b/usage/views.py index 992d50b..6676dae 100755 --- a/usage/views.py +++ b/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 +