diff options
Diffstat (limited to 'glances/plugins/ip')
-rw-r--r-- | glances/plugins/ip/__init__.py | 49 |
1 files changed, 25 insertions, 24 deletions
diff --git a/glances/plugins/ip/__init__.py b/glances/plugins/ip/__init__.py index 449f01d4..62a95658 100644 --- a/glances/plugins/ip/__init__.py +++ b/glances/plugins/ip/__init__.py @@ -1,8 +1,7 @@ -# -*- coding: utf-8 -*- # # This file is part of Glances. # -# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com> +# SPDX-FileCopyrightText: 2024 Nicolas Hennion <nicolas@nicolargo.com> # # SPDX-License-Identifier: LGPL-3.0-only # @@ -10,20 +9,20 @@ """IP plugin.""" import threading -from ujson import loads -from glances.globals import urlopen, queue, urlopen_auth +from orjson import loads + +from glances.globals import queue, urlopen_auth from glances.logger import logger -from glances.timer import Timer -from glances.timer import getTimeSinceLastUpdate from glances.plugins.plugin.model import GlancesPluginModel +from glances.timer import Timer, getTimeSinceLastUpdate # Import plugin specific dependency try: import netifaces except ImportError as e: import_error_tag = True - logger.warning("Missing Python Lib ({}), IP plugin is disabled".format(e)) + logger.warning(f"Missing Python Lib ({e}), IP plugin is disabled") else: import_error_tag = False @@ -66,10 +65,7 @@ class PluginModel(GlancesPluginModel): def __init__(self, args=None, config=None): """Init the plugin.""" - super(PluginModel, self).__init__( - args=args, config=config, - fields_description=fields_description - ) + super().__init__(args=args, config=config, fields_description=fields_description) # We want to display the stat in the curse interface self.display_curse = True @@ -83,8 +79,9 @@ class PluginModel(GlancesPluginModel): self.public_field = self.get_conf_value("public_field", default=[None]) self.public_template = self.get_conf_value("public_template", default=[None])[0] self.public_disabled = ( - self.get_conf_value('public_disabled', default='False')[0].lower() != 'false' or - self.public_api is None or self.public_field is None + self.get_conf_value('public_disabled', default='False')[0].lower() != 'false' + or self.public_api is None + or self.public_field is None ) self.public_address_refresh_interval = self.get_conf_value( "public_refresh_interval", default=self._default_public_refresh_interval @@ -106,7 +103,7 @@ class PluginModel(GlancesPluginModel): try: default_gw = netifaces.gateways()['default'][netifaces.AF_INET] except (KeyError, AttributeError) as e: - logger.debug("Cannot grab default gateway IP address ({})".format(e)) + logger.debug(f"Cannot grab default gateway IP address ({e})") return self.get_init_value() else: stats['gateway'] = default_gw[0] @@ -115,7 +112,7 @@ class PluginModel(GlancesPluginModel): address = netifaces.ifaddresses(default_gw[1])[netifaces.AF_INET][0]['addr'] mask = netifaces.ifaddresses(default_gw[1])[netifaces.AF_INET][0]['netmask'] except (KeyError, AttributeError) as e: - logger.debug("Cannot grab private IP address ({})".format(e)) + logger.debug(f"Cannot grab private IP address ({e})") return self.get_init_value() else: stats['address'] = address @@ -128,14 +125,14 @@ class PluginModel(GlancesPluginModel): if not self.public_disabled and ( self.public_address == "" or time_since_update > self.public_address_refresh_interval ): - self.public_info = PublicIpInfo( - self.public_api, self.public_username, self.public_password - ).get() + self.public_info = PublicIpInfo(self.public_api, self.public_username, self.public_password).get() self.public_address = self.public_info['ip'] - except (KeyError, AttributeError) as e: - logger.debug("Cannot grab public IP information ({})".format(e)) + except (KeyError, AttributeError, TypeError) as e: + logger.debug(f"Cannot grab public IP information ({e})") else: - stats['public_address'] = self.public_address + stats['public_address'] = ( + self.public_address if not self.args.hide_public_info else self.__hide_ip(self.public_address) + ) stats['public_info_human'] = self.public_info_for_human(self.public_info) elif self.input_method == 'snmp': @@ -147,6 +144,10 @@ class PluginModel(GlancesPluginModel): return self.stats + def __hide_ip(self, ip): + """Hide last to digit of the given IP address""" + return '.'.join(ip.split('.')[0:2]) + '.*.*' + def msg_curse(self, args=None, max_width=None): """Return the dict to display in the curse interface.""" # Init the return message @@ -209,7 +210,7 @@ class PluginModel(GlancesPluginModel): return sum(bin(int(x)).count('1') for x in ip.split('.')) -class PublicIpInfo(object): +class PublicIpInfo: """Get public IP information from online service.""" def __init__(self, url, username, password, timeout=2): @@ -240,11 +241,11 @@ class PublicIpInfo(object): try: response = urlopen_auth(url, username, password).read() except Exception as e: - logger.debug("IP plugin - Cannot get public IP information from {} ({})".format(url, e)) + logger.debug(f"IP plugin - Cannot get public IP information from {url} ({e})") queue_target.put(None) else: try: queue_target.put(loads(response)) except (ValueError, KeyError) as e: - logger.debug("IP plugin - Cannot load public IP information from {} ({})".format(url, e)) + logger.debug(f"IP plugin - Cannot load public IP information from {url} ({e})") queue_target.put(None) |