changeset 29:879ae3f7a4d9

Server: Log to file if requested
author Lewin Bormann <lbo@spheniscida.de>
date Sun, 03 Mar 2019 18:37:55 +0100
parents e1e015e0a805
children 7171bc4fe498
files server/server.py
diffstat 1 files changed, 25 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/server/server.py	Sat Mar 02 14:26:23 2019 +0100
+++ b/server/server.py	Sun Mar 03 18:37:55 2019 +0100
@@ -15,6 +15,15 @@
 _splitvalue = 20000
 _maxhistory = 100
 
+class Log:
+    def __init__(self, file=sys.stderr):
+        self.out = file
+
+    def log(self, *kwargs):
+        print(*kwargs, file=self.out, flush=True)
+
+LOG = None
+
 class Groups:
     """Groups manages depot subscriptions for groups."""
     groups = {}
@@ -23,7 +32,7 @@
         """updates user info in a group. info is a dict containing the fields 'cash'."""
         if not (group and user and info):
             return
-        print('updated ', group, user, info)
+        LOG.log('updated ', group, user, info)
         self.groups[group] = {} if group not in self.groups else self.groups[group]
         self.groups[group][user] = info
 
@@ -123,6 +132,7 @@
         --stocks=<stocks>       Number of stocks to generate.
         --stocklist=<stocks>    List of ticker symbols to generate stocks for.
         --interval=<interval>   Interval in ms to publish stock data (default 500)
+        --log=<file>            Log file.
         --help                  Print help.
     """
 
@@ -131,6 +141,7 @@
         def __init__(self, zctx, callback=None):
             """callback is called with a StockData object every time new data are available."""
             super(arguments.BaseArguments, self).__init__(doc=self._doc)
+            self.setup_log()
             if self.help or None:
                 print(self._doc)
                 sys.exit(0)
@@ -149,6 +160,18 @@
             self.pubsocket = pubsocket
             self.init_stocks()
 
+        def setup_log(self):
+            if self.log is not None:
+                # Attempt to create file if it doesn't exist.
+                try:
+                    with open(self.log, mode='x') as f:
+                        pass
+                except:
+                    pass
+                log = open(self.log, mode='a')
+                global LOG
+                LOG = Log(log)
+
         def init_stocks(self):
             stocklist = []
             if self.stocklist:
@@ -191,7 +214,7 @@
                     msgs = sock.recv_multipart()
                     assert len(msgs) > 2
                     msg = json.loads(msgs[2].decode())
-                    print ('Client {}: {} {}'.format(msgs[0].hex(), msgs[1].decode(), msg))
+                    LOG.log('Client {}: {} {}'.format(msgs[0].hex(), msgs[1].decode(), msg))
 
                     custom_msg = msg.get('msg', '')
                     groupinfo = {'cash': custom_msg.get('cash', -1), 'value': custom_msg.get('value', -1)}