Merge branch 'issue2979' into develop

This commit is contained in:
nicolargo 2024-10-19 15:27:43 +02:00
commit 5f3350e62f
4 changed files with 27 additions and 19 deletions

View File

@ -11,15 +11,20 @@
import sys
import time
from defusedxml import xmlrpc
from glances import __version__
from glances.globals import Fault, ProtocolError, ServerProxy, Transport, json_loads
from glances.globals import json_loads
from glances.logger import logger
from glances.outputs.glances_curses import GlancesCursesClient
from glances.stats_client import GlancesStatsClient
from glances.timer import Counter
# Correct issue #1025 by monkey path the xmlrpc lib
xmlrpc.monkey_patch()
class GlancesClientTransport(Transport):
class GlancesClientTransport(xmlrpc.xmlrpc_client.Transport):
"""This class overwrite the default XML-RPC transport and manage timeout."""
def set_timeout(self, timeout):
@ -57,7 +62,7 @@ class GlancesClient:
# Configure the server timeout
transport.set_timeout(timeout)
try:
self.client = ServerProxy(self.uri, transport=transport)
self.client = xmlrpc.xmlrpc_client.ServerProxy(self.uri, transport=transport)
except Exception as e:
self.log_and_exit(f"Client couldn't create socket {self.uri}: {e}")
@ -101,7 +106,7 @@ class GlancesClient:
print(fall_back_msg)
else:
logger.info(fall_back_msg)
except ProtocolError as err:
except xmlrpc.xmlrpc_client.ProtocolError as err:
# Other errors
msg = f"Connection to server {self.uri} failed"
if err.errcode == 401:
@ -197,7 +202,7 @@ class GlancesClient:
except OSError:
# Client cannot get server stats
return "Disconnected"
except Fault:
except xmlrpc.xmlrpc_client.Fault:
# Client cannot get server stats (issue #375)
return "Disconnected"
else:

View File

@ -10,14 +10,19 @@
import threading
from defusedxml import xmlrpc
from glances.autodiscover import GlancesAutoDiscoverServer
from glances.client import GlancesClient, GlancesClientTransport
from glances.globals import Fault, ProtocolError, ServerProxy, json_loads
from glances.globals import json_loads
from glances.logger import LOG_FILENAME, logger
from glances.outputs.glances_curses_browser import GlancesCursesBrowser
from glances.password_list import GlancesPasswordList as GlancesPassword
from glances.static_list import GlancesStaticServer
# Correct issue #1025 by monkey path the xmlrpc lib
xmlrpc.monkey_patch()
class GlancesClientBrowser:
"""This class creates and manages the TCP client browser (servers list)."""
@ -86,7 +91,7 @@ class GlancesClientBrowser:
# Get common stats from Glances server
try:
s = ServerProxy(uri, transport=t)
s = xmlrpc.xmlrpc_client.ServerProxy(uri, transport=t)
except Exception as e:
logger.warning(f"Client browser couldn't create socket ({e})")
return server
@ -107,12 +112,12 @@ class GlancesClientBrowser:
if 'key' in column:
d_json = d_json.get(column['key'])
server[server_key + '_decoration'] = d_json[column['field']]['decoration']
except (KeyError, IndexError, Fault) as e:
except (KeyError, IndexError, xmlrpc.xmlrpc_client.Fault) as e:
logger.debug(f"Error while grabbing stats form server ({e})")
except OSError as e:
logger.debug(f"Error while grabbing stats form server ({e})")
server['status'] = 'OFFLINE'
except ProtocolError as e:
except xmlrpc.xmlrpc_client.ProtocolError as e:
if e.errcode == 401:
# Error 401 (Authentication failed)
# Password is not the good one...

View File

@ -33,12 +33,6 @@ from urllib.error import HTTPError, URLError
from urllib.parse import urlparse
from urllib.request import Request, urlopen
from xmlrpc.client import Fault, ProtocolError, Server, ServerProxy, Transport
from xmlrpc.server import SimpleXMLRPCRequestHandler, SimpleXMLRPCServer
from defusedxml.xmlrpc import monkey_patch
# Correct issue #1025 by monkey path the xmlrpc lib
monkey_patch()
# Prefer faster libs for JSON (de)serialization
# Preference Order: orjson > ujson > json (builtin)

View File

@ -13,15 +13,19 @@ import socket
import sys
from base64 import b64decode
from defusedxml import xmlrpc
from glances import __version__
from glances.autodiscover import GlancesAutoDiscoverClient
from glances.globals import SimpleXMLRPCRequestHandler, SimpleXMLRPCServer
from glances.logger import logger
from glances.stats_server import GlancesStatsServer
from glances.timer import Timer
# Correct issue #1025 by monkey path the xmlrpc lib
xmlrpc.monkey_patch()
class GlancesXMLRPCHandler(SimpleXMLRPCRequestHandler):
class GlancesXMLRPCHandler(xmlrpc.xmlrpc_server.SimpleXMLRPCRequestHandler):
"""Main XML-RPC handler."""
rpc_paths = ('/RPC2',)
@ -71,7 +75,7 @@ class GlancesXMLRPCHandler(SimpleXMLRPCRequestHandler):
return False
def parse_request(self):
if SimpleXMLRPCRequestHandler.parse_request(self):
if xmlrpc.xmlrpc_server.SimpleXMLRPCRequestHandler.parse_request(self):
# Next we authenticate
if self.authenticate(self.headers):
return True
@ -84,7 +88,7 @@ class GlancesXMLRPCHandler(SimpleXMLRPCRequestHandler):
pass
class GlancesXMLRPCServer(SimpleXMLRPCServer):
class GlancesXMLRPCServer(xmlrpc.xmlrpc_server.SimpleXMLRPCServer):
"""Init a SimpleXMLRPCServer instance (IPv6-ready)."""
finished = False