From f4a72553794035b16da8f913bdf4731ec40c7f82 Mon Sep 17 00:00:00 2001 From: Florian N Date: Tue, 9 Dec 2014 19:02:00 -0500 Subject: [PATCH] Add cached and buffered memory, version 1.4.5. --- pydash/services.py | 10 +++++-- pydash/static/css/dashboard.css | 14 ++++++++- pydash/templates/main.html | 4 ++- pydash/views.py | 51 +++++++++++++++++++++++++++++---- 4 files changed, 69 insertions(+), 10 deletions(-) diff --git a/pydash/services.py b/pydash/services.py index 8eb1c2d..6a5f331 100644 --- a/pydash/services.py +++ b/pydash/services.py @@ -211,17 +211,23 @@ def get_mem(): """ try: pipe = os.popen( - "free -tmo | " + "grep 'Mem' | " + "awk '{print $2,$4}'") + "free -tmo | " + "grep 'Mem' | " + "awk '{print $2,$4,$6,$7}'") data = pipe.read().strip().split() pipe.close() allmem = int(data[0]) freemem = int(data[1]) + buffers = int(data[2]) + cachedmem = int(data[3]) + + # Memory in buffers + cached is actually available, so we count it + # as free. See http://www.linuxatemyram.com/ for details + freemem += buffers + cachedmem percent = (100 - ((freemem * 100) / allmem)) usage = (allmem - freemem) - mem_usage = {'usage': usage, 'free': freemem, 'percent': percent} + mem_usage = {'usage': usage, 'buffers': buffers, 'cached': cachedmem, 'free': freemem, 'percent': percent} data = mem_usage diff --git a/pydash/static/css/dashboard.css b/pydash/static/css/dashboard.css index 11dfca5..b0f5750 100644 --- a/pydash/static/css/dashboard.css +++ b/pydash/static/css/dashboard.css @@ -397,7 +397,19 @@ h6.bigstats { } .memu { margin: 0.5em; - border: 0 solid rgb(249, 134, 33); + border: 0 solid rgb(247, 70, 74); + border-left-width: 1em; + padding: 0 0.3em; +} +.memb { + margin: 0.5em; + border: 0 solid rgb(0, 154, 205); + border-left-width: 1em; + padding: 0 0.3em; +} +.memc { + margin: 0.5em; + border: 0 solid rgb(255, 185, 15); border-left-width: 1em; padding: 0 0.3em; } diff --git a/pydash/templates/main.html b/pydash/templates/main.html index be893cb..91370d1 100644 --- a/pydash/templates/main.html +++ b/pydash/templates/main.html @@ -128,6 +128,8 @@
{% trans "Free" %} {% trans "Used" %} + {% trans "Buffers" %} + {% trans "Cached" %}
@@ -340,7 +342,7 @@ var mem_ctx = $("#memoryChart").get(0).getContext("2d"); $.getJSON(pydashUrls['memusage'], function(data) { var options = { animation : false, - pointDotRadius : 2, + pointDotRadius : 4, scaleLabel : "<%=value%> Mb" } memChart.Line(data, options); diff --git a/pydash/views.py b/pydash/views.py index 7f6400a..f838b57 100755 --- a/pydash/views.py +++ b/pydash/views.py @@ -271,6 +271,8 @@ def memusage(request): """ datasets_free = [] datasets_used = [] + datasets_buffers = [] + datasets_cached = [] try: mem_usage = services.get_mem() @@ -285,10 +287,14 @@ def memusage(request): if not cookies: datasets_free.append(0) datasets_used.append(0) + datasets_buffers.append(0) + datasets_cached.append(0) else: datasets = json.loads(cookies) datasets_free = datasets[0] datasets_used = datasets[1] + atasets_buffers = datasets[2] + datasets_cached = datasets[3] if len(datasets_free) > 10: while datasets_free: @@ -300,6 +306,16 @@ def memusage(request): del datasets_used[0] if len(datasets_used) == 10: break + if len(datasets_buffers) > 10: + while datasets_buffers: + del datasets_buffers[0] + if len(datasets_buffers) == 10: + break + if len(datasets_cached) > 10: + while datasets_cached: + del datasets_cached[0] + if len(datasets_cached) == 10: + break if len(datasets_free) <= 9: datasets_free.append(int(mem_usage['free'])) if len(datasets_free) == 10: @@ -310,7 +326,16 @@ def memusage(request): if len(datasets_used) == 10: datasets_used.append(int(mem_usage['usage'])) del datasets_used[0] - + if len(datasets_buffers) <= 9: + datasets_buffers.append(int(mem_usage['buffers'])) + if len(datasets_buffers) == 10: + datasets_buffers.append(int(mem_usage['buffers'])) + del datasets_buffers[0] + if len(datasets_cached) <= 9: + datasets_cached.append(int(mem_usage['cached'])) + if len(datasets_cached) == 10: + datasets_cached.append(int(mem_usage['cached'])) + del datasets_cached[0] # Some fix division by 0 Chart.js if len(datasets_free) == 10: if sum(datasets_free) == 0: @@ -322,9 +347,9 @@ def memusage(request): 'labels': [""] * 10, 'datasets': [ { - "fillColor": "rgba(249,134,33,0.5)", - "strokeColor": "rgba(249,134,33,1)", - "pointColor": "rgba(249,134,33,1)", + "fillColor": "rgba(247,70,74,0.5)", + "strokeColor": "rgba(247,70,74,1)", + "pointColor": "rgba(247,70,74,1)", "pointStrokeColor": "#fff", "data": datasets_used }, @@ -334,11 +359,25 @@ def memusage(request): "pointColor": "rgba(43,214,66,1)", "pointStrokeColor": "#fff", "data": datasets_free - } + }, + { + "fillColor": "rgba(0,154,205,0.5)", + "strokeColor": "rgba(0,154,205,1)", + "pointColor": "rgba(0,154,205,1)", + "pointStrokeColor": "#fff", + "data": datasets_buffers + }, + { + "fillColor": "rgba(255,185,15,0.5)", + "strokeColor": "rgba(255,185,15,1)", + "pointColor": "rgba(265,185,15,1)", + "pointStrokeColor": "#fff", + "data": datasets_cached + } ] } - cookie_memory = [datasets_free, datasets_used] + cookie_memory = [datasets_free, datasets_used, datasets_buffers, datasets_cached] data = json.dumps(memory) response = HttpResponse() response['Content-Type'] = "text/javascript"