public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Zac Medico" <zmedico@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/portage:master commit in: pym/portage/util/, pym/_emerge/
Date: Wed, 16 Jan 2013 14:12:18 +0000 (UTC)	[thread overview]
Message-ID: <1358345515.9a3a82fda113008b877c0447e1d6a8780365ab98.zmedico@gentoo> (raw)

commit:     9a3a82fda113008b877c0447e1d6a8780365ab98
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Wed Jan 16 14:11:55 2013 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Wed Jan 16 14:11:55 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=9a3a82fd

emerge --info: show free ram/swap, bug #451048

---
 pym/_emerge/actions.py           |   13 ++++++
 pym/portage/util/_get_vm_info.py |   80 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 93 insertions(+), 0 deletions(-)

diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
index ac9a60f..589680a 100644
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@ -25,6 +25,7 @@ portage.proxy.lazyimport.lazyimport(globals(),
 	'portage.dbapi._similar_name_search:similar_name_search',
 	'portage.debug',
 	'portage.news:count_unread_news,display_news_notifications',
+	'portage.util._get_vm_info:get_vm_info',
 	'_emerge.chk_updated_cfg_files:chk_updated_cfg_files',
 	'_emerge.help:help@emerge_help',
 	'_emerge.post_emerge:display_news_notification,post_emerge',
@@ -1488,6 +1489,18 @@ def action_info(settings, trees, myopts, myfiles):
 	append(header_width * "=")
 	append("System uname: %s" % (platform.platform(aliased=1),))
 
+	vm_info = get_vm_info()
+	if "ram.total" in vm_info:
+		line = "%-9s %10d total" % ("KiB Mem:", vm_info["ram.total"] / 1024)
+		if "ram.free" in vm_info:
+			line += ",%10d free" % (vm_info["ram.free"] / 1024,)
+		append(line)
+	if "swap.total" in vm_info:
+		line = "%-9s %10d total" % ("KiB Swap:", vm_info["swap.total"] / 1024)
+		if "swap.free" in vm_info:
+			line += ",%10d free" % (vm_info["swap.free"] / 1024,)
+		append(line)
+
 	lastSync = portage.grabfile(os.path.join(
 		settings["PORTDIR"], "metadata", "timestamp.chk"))
 	if lastSync:

diff --git a/pym/portage/util/_get_vm_info.py b/pym/portage/util/_get_vm_info.py
new file mode 100644
index 0000000..e8ad938
--- /dev/null
+++ b/pym/portage/util/_get_vm_info.py
@@ -0,0 +1,80 @@
+# Copyright 2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+import os
+import platform
+import subprocess
+
+from portage import _unicode_decode
+
+def get_vm_info():
+
+	vm_info = {}
+
+	if platform.system() == 'Linux':
+		try:
+			proc = subprocess.Popen(["free"],
+				stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+		except OSError:
+			pass
+		else:
+			output = _unicode_decode(proc.communicate()[0])
+			if proc.wait() == os.EX_OK:
+				for line in output.splitlines():
+					line = line.split()
+					if len(line) < 2:
+						continue
+					if line[0] == "Mem:":
+						try:
+							vm_info["ram.total"] = int(line[1]) * 1024
+						except ValueError:
+							pass
+						if len(line) > 3:
+							try:
+								vm_info["ram.free"] = int(line[3]) * 1024
+							except ValueError:
+								pass
+					elif line[0] == "Swap:":
+						try:
+							vm_info["swap.total"] = int(line[1]) * 1024
+						except ValueError:
+							pass
+						if len(line) > 3:
+							try:
+								vm_info["swap.free"] = int(line[3]) * 1024
+							except ValueError:
+								pass
+
+	else:
+
+		try:
+			proc = subprocess.Popen(["sysctl", "-a"],
+				stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+		except OSError:
+			pass
+		else:
+			output = _unicode_decode(proc.communicate()[0])
+			if proc.wait() == os.EX_OK:
+				for line in output.splitlines():
+					line = line.split(":", 1)
+					if len(line) != 2:
+						continue
+					line[1] = line[1].strip()
+					if line[0] == "hw.physmem":
+						try:
+							vm_info["ram.total"] = int(line[1])
+						except ValueError:
+							pass
+					elif line[0] == "vm.swap_total":
+						try:
+							vm_info["swap.total"] = int(line[1])
+						except ValueError:
+							pass
+					elif line[0] == "Free Memory Pages":
+						if line[1][-1] == "K":
+							try:
+								vm_info["ram.free"] = int(line[1][:-1]) * 1024
+							except ValueError:
+								pass
+
+	return vm_info


             reply	other threads:[~2013-01-16 14:12 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-16 14:12 Zac Medico [this message]
  -- strict thread matches above, loose matches on Subject: below --
2013-06-27 19:39 [gentoo-commits] proj/portage:master commit in: pym/portage/util/, pym/_emerge/ Zac Medico
2012-10-14 22:57 Zac Medico
2011-06-03  5:21 Zac Medico
2011-03-14 16:41 Zac Medico

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1358345515.9a3a82fda113008b877c0447e1d6a8780365ab98.zmedico@gentoo \
    --to=zmedico@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox