From 33d01bf58627b7d0472a4040faaa15e715d56dac Mon Sep 17 00:00:00 2001 From: nicolargo Date: Sat, 2 Apr 2016 15:38:32 +0200 Subject: [PATCH] Improve IP plugin to display public IP address #646 --- NEWS | 1 + docs/_static/header.png | Bin 9187 -> 19879 bytes docs/aoa/header.rst | 2 +- glances/compat.py | 3 ++ glances/plugins/glances_ip.py | 64 +++++++++++++++++++++++++++++++++- 5 files changed, 68 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index aa2b8dd0..ace8e881 100644 --- a/NEWS +++ b/NEWS @@ -7,6 +7,7 @@ Version 2.7 Enhancements and new features: + * Improve IP plugin to display public IP address (issue #646) * CPU additionnal stats monitoring: Context switch, Interrupts... (issue #810) * [Folders] Differentiate permission issue and non-existence of a directory (issue #828) * [Web UI] add cpu name in quicklook plugin (issue #825) diff --git a/docs/_static/header.png b/docs/_static/header.png index 33f1ba1d05e1fcad26b5d8924c59563a026e687b..2c140d461fee6daf7e908c3155d53009b775ba9b 100644 GIT binary patch literal 19879 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 z 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 literal 9187 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 0: + ip = q.get() + + return ip + + def _get_ip_public(self, queue, url, json=False, key=None): + """Request the url service and put the result in the queue""" + try: + u = urlopen(url, timeout=self.timeout) + except URLError: + queue.put(None) + else: + # Request depend on service + if not json: + queue.put(u.read()) + else: + queue.put(load(u)[key])