From a055659910ad0c313c3bda8136feb2c6b9e36fa7 Mon Sep 17 00:00:00 2001
From: Giorgos Korfiatis <gkorf@grnet.gr>
Date: Fri, 4 Sep 2015 15:59:25 +0300
Subject: [PATCH] Add debug option in script

---
 agkyra/gui.py         |  4 ++--
 agkyra/protocol.py    | 14 +++++++++++---
 agkyra/scripts/agkyra | 31 ++++++++++++++++++++++---------
 3 files changed, 35 insertions(+), 14 deletions(-)

diff --git a/agkyra/gui.py b/agkyra/gui.py
index c13ca35..196f2c8 100644
--- a/agkyra/gui.py
+++ b/agkyra/gui.py
@@ -96,9 +96,9 @@ class GUI(WebSocketBaseClient):
         LOG.debug('GUI finished, close GUI wrapper connection')
 
 
-def run(callback):
+def run(callback, debug):
     """Prepare SessionHelper and GUI and run them in the proper order"""
-    launch_server(callback)
+    launch_server(callback, debug)
     LOG.info('Client blocks until session is ready')
     session = SessionHelper().wait_session_to_load()
     assert session, 'UI server failed to load...'
diff --git a/agkyra/protocol.py b/agkyra/protocol.py
index dcedfcb..07db742 100644
--- a/agkyra/protocol.py
+++ b/agkyra/protocol.py
@@ -711,13 +711,21 @@ class WebSocketProtocol(WebSocket):
             self.terminate()
 
 
-def launch_server(callback):
+def launch_server(callback, debug):
     """Launch the server in a separate process"""
     LOG.info('Start SessionHelper session')
     if utils.iswin():
-        subprocess.Popen([callback, "server"],
+        command = [callback]
+        if debug:
+            command.append('-d')
+        command.append("server")
+        subprocess.Popen(command,
                          close_fds=True)
     else:
         pid = os.fork()
         if not pid:
-            os.execlp(callback, callback, "server")
+            command = [callback, callback]
+            if debug:
+                command.append('-d')
+            command.append("server")
+            os.execlp(*command)
diff --git a/agkyra/scripts/agkyra b/agkyra/scripts/agkyra
index e76231a..62c11af 100755
--- a/agkyra/scripts/agkyra
+++ b/agkyra/scripts/agkyra
@@ -16,6 +16,7 @@
 
 import os
 import sys
+import argparse
 
 try:
     from agkyra import config
@@ -33,11 +34,16 @@ FORMATTER = logging.Formatter(
     "%(name)s:%(lineno)s %(levelname)s:%(asctime)s:%(message)s")
 HANDLER.setFormatter(FORMATTER)
 LOGGER.addHandler(HANDLER)
-LOGGER.setLevel(logging.INFO)
 
 CALLBACK = os.path.realpath(sys.argv[0])
 
-def run_server():
+def set_debug(debug):
+    level = logging.DEBUG if debug else logging.INFO
+    LOGGER.setLevel(level)
+
+
+def run_server(debug):
+    set_debug(debug)
     from agkyra.protocol import SessionHelper
     LOGGER.debug('Start the session helper')
     helper = SessionHelper()
@@ -50,21 +56,28 @@ def run_server():
     LOGGER.debug('Session Helper is now down')
 
 
-def run_gui():
+def run_gui(debug):
+    set_debug(debug)
     from agkyra import gui
-    gui.run(callback=CALLBACK)
+    gui.run(callback=CALLBACK, debug=debug)
 
 DISPATCH = {
     'server': run_server,
     'gui': run_gui,
 }
 
+parser = argparse.ArgumentParser(description='Agkyra syncer launcher')
+parser.add_argument('--debug', '-d', action='store_true',
+                    help="set logging level to 'debug'")
+parser.add_argument('component', nargs="?", default="gui",
+                    help="run 'server' or 'gui' (default)")
+
 def main():
-    if len(sys.argv) > 1:
-        arg = sys.argv[1]
-    else:
-        arg = 'gui'
-    DISPATCH[arg]()
+    args = parser.parse_args()
+    debug = args.debug
+    set_debug(debug)
+    component = args.component
+    DISPATCH[component](debug)
 
 if __name__ == "__main__":
     main()
-- 
GitLab