added logging mechanism with --log argument
authoritraviv <[email protected]>
Wed, 24 Aug 2016 12:58:57 +0000 (15:58 +0300)
committeritraviv <[email protected]>
Wed, 24 Aug 2016 14:10:31 +0000 (17:10 +0300)
scripts/automation/trex_control_plane/stl/services/scapy_server/scapy_zmq_server.py

index 3f0bf3c..da22b69 100755 (executable)
@@ -13,6 +13,8 @@ import inspect
 from scapy_service import *\r
 from argparse import *\r
 import socket\r
+import logging\r
+import logging.handlers\r
 \r
 \r
 class ParseException(Exception): pass\r
@@ -55,7 +57,7 @@ class Scapy_wrapper:
             raise ParseException(req_id)\r
 \r
     def create_error_response(self,error_code,error_msg,req_id='null'):\r
-        return {"jsonrpc": "2.0", "error": {"code": error_code, "message:": error_msg}, "id": req_id}\r
+        return {"jsonrpc": "2.0", "error": {"code": error_code, "message": error_msg}, "id": req_id}\r
         \r
     def create_success_response(self,result,req_id=b'null'):\r
         return {"jsonrpc": "2.0", "result": result, "id": req_id }\r
@@ -102,39 +104,55 @@ class Scapy_server():
         self.socket = self.context.socket(zmq.REP)\r
         self.socket.bind("tcp://*:"+str(port))\r
         self.IP_address = socket.gethostbyname(socket.gethostname())\r
+        self.logger = logging.getLogger('scapy_logger')\r
+        self.logger.setLevel(logging.INFO)\r
+        console_h = logging.StreamHandler(sys.__stdout__)\r
+        formatter = logging.Formatter(fmt='%(asctime)s %(message)s',datefmt='%d-%m-%Y %H:%M:%S')\r
+        if args.log:\r
+            logfile_h = logging.FileHandler('scapy_server.log')\r
+            logfile_h.setLevel(logging.INFO)\r
+            logfile_h.setFormatter(formatter)\r
+            self.logger.addHandler(logfile_h)\r
+        if args.verbose:\r
+            console_h.setLevel(logging.INFO)\r
+        else:\r
+            console_h.setLevel(logging.WARNING)\r
+        console_h.setFormatter(formatter)\r
+        self.logger.addHandler(console_h)\r
+\r
 \r
     def activate(self):\r
-        print ('***Scapy Server Started***\nListening on port: %d' % self.port)\r
-        print ('Server IP address: %s' % self.IP_address)\r
+        self.logger.info('***Scapy Server Started***')\r
+        self.logger.info('Listening on port: %d' % self.port)\r
+        self.logger.info('Server IP address: %s' % self.IP_address)\r
         try:\r
             while True:\r
                 message = self.socket.recv_string()\r
-                if args.verbose:\r
-                    print('Received Message: %s \n' % message)\r
+                self.logger.info('Received Message: %s' % message)\r
                 try:\r
                     params = []\r
                     method=''\r
                     req_id = 'null'\r
                     method,params,req_id = self.scapy_wrapper.parse_req_msg(message)\r
                     if (method == 'shut_down'):\r
-                        print ('Shut down by remote user')\r
+                        self.logger.info('Shut down by remote user')\r
                         result = 'Server shut down command received - server had shut down'\r
                     else:\r
                         result = self.scapy_wrapper.execute(method,params)\r
                     response = self.scapy_wrapper.create_success_response(result,req_id)\r
                 except Exception as e:\r
                     response = self.scapy_wrapper.error_handler(e,req_id)\r
+                    self.logger.info('ERROR %s: %s',response['error']['code'], response['error']['message'])\r
                 finally:\r
                     json_response = json.dumps(response)\r
-                    if args.verbose:\r
-                        print('Sending Message: %s \n' % json_response)\r
+                    self.logger.info('Sending Message: %s' % json_response)\r
                 #  Send reply back to client\r
                     self.socket.send_string(json_response)\r
                     if (method == 'shut_down'):\r
                         break\r
 \r
         except KeyboardInterrupt:\r
-                print(b'Terminated By Ctrl+C')\r
+                self.logger.info(b'Terminated By local user')\r
 \r
         finally:\r
             self.socket.close()\r
@@ -151,8 +169,10 @@ if __name__=='__main__':
     if len(sys.argv)>1:\r
         parser = ArgumentParser(description=' Runs Scapy Server ')\r
         parser.add_argument('-s','--scapy-port',type=int, default = 4507, dest='scapy_port',\r
-                            help='Select port to which Scapy Server will listen to.\n default is 4507\n',action='store')\r
-        parser.add_argument('-v','--verbose',help='Print Client-Server Request-Reply logging',action='store_true',default = False)\r
+                            help='Select port to which Scapy Server will listen to.\n default is 4507.',action='store')\r
+        parser.add_argument('-v','--verbose',help='Print Client-Server Request-Reply information to console.',action='store_true',default = False)\r
+        parser.add_argument('-l','--log',help='Log every activity of the server to the log file scapy_server.log .The log does not discard older entries, the file is not limited by size.',\r
+                            action='store_true',default = False)\r
         args = parser.parse_args()\r
         port = args.scapy_port\r
         sys.exit(main(port))\r