From 837753d6e9f4f36d23d4e608ac16bf20763ba707 Mon Sep 17 00:00:00 2001 From: Per Qvarforth Date: Mon, 7 Feb 2022 21:17:09 +0000 Subject: [PATCH 1/3] websocket server worker refactoring --- server/bin/wsserver.py | 57 ++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 25 deletions(-) diff --git a/server/bin/wsserver.py b/server/bin/wsserver.py index e83d22b..4ad7d1d 100644 --- a/server/bin/wsserver.py +++ b/server/bin/wsserver.py @@ -49,8 +49,9 @@ def master(options, trackDirectLogger): childFDs={0: 0, 1: 1, 2: 2, port.fileno(): port.fileno()}, env=os.environ) - reactor.suggestThreadPoolSize(25) - reactor.run() + options.fd = port.fileno() + listen(options, trackDirectLogger) + except Exception as e: trackDirectLogger.error(e, exc_info=1) @@ -69,34 +70,40 @@ def worker(options, trackDirectLogger): trackDirectLogger.warning("Starting worker with PID " + str(workerPid) + " (on CPU id(s): " + ','.join(map(str, p.cpu_affinity())) + ")") - factory = WebSocketServerFactory( - "ws://" + config.websocketHostname + ":" + str(config.websocketPort), - externalPort = config.websocketExternalPort) - factory.protocol = trackdirect.TrackDirectWebsocketServer + listen(options, trackDirectLogger) - # Enable WebSocket extension "permessage-deflate". - # Function to accept offers from the client .. - def accept(offers): - for offer in offers: - if isinstance(offer, PerMessageDeflateOffer): - return PerMessageDeflateOfferAccept(offer) - factory.setProtocolOptions(perMessageCompressionAccept=accept) - - reactor.suggestThreadPoolSize(25) - - resource = WebSocketResource(factory) - root = File(".") - root.putChild(b"ws", resource) - site = Site(root) - - # The master already created the socket, just start listening and accepting - reactor.adoptStreamPort(options.fd, AF_INET, factory) - - reactor.run() except Exception as e: trackDirectLogger.error(e, exc_info=1) +def listen(options, trackDirectLogger) : + """ + Start to listen on websocket requests. + """ + config = trackdirect.TrackDirectConfig() + config.populate(options.config) + + factory = WebSocketServerFactory( + "ws://" + config.websocketHostname + ":" + str(config.websocketPort), + externalPort = config.websocketExternalPort) + factory.protocol = trackdirect.TrackDirectWebsocketServer + + # Enable WebSocket extension "permessage-deflate". + # Function to accept offers from the client .. + def accept(offers): + for offer in offers: + if isinstance(offer, PerMessageDeflateOffer): + return PerMessageDeflateOfferAccept(offer) + factory.setProtocolOptions(perMessageCompressionAccept=accept) + + reactor.suggestThreadPoolSize(25) + + # Socket already created, just start listening and accepting + reactor.adoptStreamPort(options.fd, AF_INET, factory) + + reactor.run() + + if __name__ == '__main__': DEFAULT_WORKERS = psutil.cpu_count() From 5318267dc5cf61d0b3c35487031083e936ccfb0a Mon Sep 17 00:00:00 2001 From: Per Qvarforth Date: Mon, 7 Feb 2022 21:17:51 +0000 Subject: [PATCH 2/3] improved websocket server logging --- server/trackdirect/TrackDirectWebsocketServer.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/server/trackdirect/TrackDirectWebsocketServer.py b/server/trackdirect/TrackDirectWebsocketServer.py index 133a6e9..9633f7a 100644 --- a/server/trackdirect/TrackDirectWebsocketServer.py +++ b/server/trackdirect/TrackDirectWebsocketServer.py @@ -11,6 +11,7 @@ import datetime import time import psycopg2 import psycopg2.extras +import os import re from trackdirect.TrackDirectConfig import TrackDirectConfig @@ -63,11 +64,11 @@ class TrackDirectWebsocketServer(WebSocketServerProtocol): """ try: if ('x-forwarded-for' in request.headers): - self.logger.warning("Client connecting from origin: {0}, x-forwarded-for: {1}".format( - request.origin, request.headers['x-forwarded-for'])) + self.logger.warning("Client connecting from origin: {0}, x-forwarded-for: {1} (server pid {2})".format( + request.origin, request.headers['x-forwarded-for'], str(os.getpid()))) else: self.logger.warning( - "Client connecting from origin: {0}".format(request.origin)) + "Client connecting from origin: {0} (server pid {1})".format(request.origin, str(os.getpid()))) except Exception as e: self.logger.error(e, exc_info=1) From 4b3285b15db6e82c71f888027cf7331018344a5e Mon Sep 17 00:00:00 2001 From: Per Qvarforth Date: Mon, 7 Feb 2022 21:29:03 +0000 Subject: [PATCH 3/3] added missing mailto --- htdocs/public/views/about.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/public/views/about.php b/htdocs/public/views/about.php index c5a4eee..96b190e 100644 --- a/htdocs/public/views/about.php +++ b/htdocs/public/views/about.php @@ -4,7 +4,7 @@