summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb
diff options
context:
space:
mode:
authorJoshua Watt <JPEWhacker@gmail.com>2023-11-03 08:26:23 -0600
committerRichard Purdie <richard.purdie@linuxfoundation.org>2023-11-09 17:33:02 +0000
commit4cdb0f00f9c687337bd08b97022349f4dddadcc0 (patch)
tree6a5195e72017ae93572be7e32b920d682bf98083 /bitbake/lib/bb
parent8ae00cf20d510995263cfc948e73b0556ffdbf32 (diff)
downloadpoky-4cdb0f00f9c687337bd08b97022349f4dddadcc0.tar.gz
bitbake: asyncrpc: Prefix log messages with client info
Adds a logging adaptor to the asyncrpc clients that prefixes log messages with the client remote address to aid in debugging (Bitbake rev: f4d64ce73c2449c008ff5d9b32376a2893ef7195) Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb')
-rw-r--r--bitbake/lib/bb/asyncrpc/serv.py21
1 files changed, 18 insertions, 3 deletions
diff --git a/bitbake/lib/bb/asyncrpc/serv.py b/bitbake/lib/bb/asyncrpc/serv.py
index dfb0377380..c99add4dd1 100644
--- a/bitbake/lib/bb/asyncrpc/serv.py
+++ b/bitbake/lib/bb/asyncrpc/serv.py
@@ -12,10 +12,16 @@ import signal
12import socket 12import socket
13import sys 13import sys
14import multiprocessing 14import multiprocessing
15import logging
15from .connection import StreamConnection, WebsocketConnection 16from .connection import StreamConnection, WebsocketConnection
16from .exceptions import ClientError, ServerError, ConnectionClosedError 17from .exceptions import ClientError, ServerError, ConnectionClosedError
17 18
18 19
20class ClientLoggerAdapter(logging.LoggerAdapter):
21 def process(self, msg, kwargs):
22 return f"[Client {self.extra['address']}] {msg}", kwargs
23
24
19class AsyncServerConnection(object): 25class AsyncServerConnection(object):
20 # If a handler returns this object (e.g. `return self.NO_RESPONSE`), no 26 # If a handler returns this object (e.g. `return self.NO_RESPONSE`), no
21 # return message will be automatically be sent back to the client 27 # return message will be automatically be sent back to the client
@@ -27,7 +33,12 @@ class AsyncServerConnection(object):
27 self.handlers = { 33 self.handlers = {
28 "ping": self.handle_ping, 34 "ping": self.handle_ping,
29 } 35 }
30 self.logger = logger 36 self.logger = ClientLoggerAdapter(
37 logger,
38 {
39 "address": socket.address,
40 },
41 )
31 42
32 async def close(self): 43 async def close(self):
33 await self.socket.close() 44 await self.socket.close()
@@ -242,16 +253,20 @@ class AsyncServer(object):
242 self.server = WebsocketsServer(host, port, self._client_handler, self.logger) 253 self.server = WebsocketsServer(host, port, self._client_handler, self.logger)
243 254
244 async def _client_handler(self, socket): 255 async def _client_handler(self, socket):
256 address = socket.address
245 try: 257 try:
246 client = self.accept_client(socket) 258 client = self.accept_client(socket)
247 await client.process_requests() 259 await client.process_requests()
248 except Exception as e: 260 except Exception as e:
249 import traceback 261 import traceback
250 262
251 self.logger.error("Error from client: %s" % str(e), exc_info=True) 263 self.logger.error(
264 "Error from client %s: %s" % (address, str(e)), exc_info=True
265 )
252 traceback.print_exc() 266 traceback.print_exc()
267 finally:
268 self.logger.debug("Client %s disconnected", address)
253 await socket.close() 269 await socket.close()
254 self.logger.debug("Client disconnected")
255 270
256 @abc.abstractmethod 271 @abc.abstractmethod
257 def accept_client(self, socket): 272 def accept_client(self, socket):