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"