Skip to content

Commit b1b315c

Browse files
authored
Merge pull request #170 from JdeRobot/neutral-ram
Add Neutral ram
2 parents f82ea1d + e7bd6ad commit b1b315c

File tree

5 files changed

+581
-21
lines changed

5 files changed

+581
-21
lines changed

manager/comms/new_consumer.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
import logging
33
from queue import Queue
44
from uuid import uuid4
5-
from websocket_server import WebsocketServer
65
from datetime import datetime
76

87
from src.manager.comms.consumer_message import ManagerConsumerMessageException, ManagerConsumerMessage
8+
from src.manager.comms.websocker_server import WebsocketServer
99
from src.manager.ram_logging.log_manager import LogManager
1010

1111

@@ -65,6 +65,8 @@ def handle_client_disconnect(self, client, server):
6565
self.server.allow_new_connections()
6666

6767
def handle_message_received(self, client, server, websocket_message):
68+
LogManager.logger.info(
69+
f"message received length: {len(websocket_message)} from client {client}")
6870
LogManager.logger.info(
6971
f"message received: {websocket_message} from client {client}")
7072
message = None

manager/comms/thread.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# From https://github.com/Pithikos/python-websocket-server
2+
# Use this instead of python package because to solve OPCODE_CONTINUATION we have to apply a patch. See more in websocket_server.py
3+
4+
import threading
5+
6+
7+
class ThreadWithLoggedException(threading.Thread):
8+
"""
9+
Similar to Thread but will log exceptions to passed logger.
10+
11+
Args:
12+
logger: Logger instance used to log any exception in child thread
13+
14+
Exception is also reachable via <thread>.exception from the main thread.
15+
"""
16+
17+
DIVIDER = "*"*80
18+
19+
def __init__(self, *args, **kwargs):
20+
try:
21+
self.logger = kwargs.pop("logger")
22+
except KeyError:
23+
raise Exception("Missing 'logger' in kwargs")
24+
super().__init__(*args, **kwargs)
25+
self.exception = None
26+
27+
def run(self):
28+
try:
29+
if self._target is not None:
30+
self._target(*self._args, **self._kwargs)
31+
except Exception as exception:
32+
thread = threading.current_thread()
33+
self.exception = exception
34+
self.logger.exception(f"{self.DIVIDER}\nException in child thread {thread}: {exception}\n{self.DIVIDER}")
35+
finally:
36+
del self._target, self._args, self._kwargs
37+
38+
39+
class WebsocketServerThread(ThreadWithLoggedException):
40+
"""Dummy wrapper to make debug messages a bit more readable"""
41+
pass

0 commit comments

Comments
 (0)