From cf4478e8fa311652393e888bcd9edec5e01413c0 Mon Sep 17 00:00:00 2001
From: Csók Tamás <godhak@gmail.com>
Date: Thu, 2 Oct 2014 12:57:22 +0200
Subject: [PATCH] client: logging added and selenium fully depricated

---
 src/nsi/installer/cloud.py | 134 +++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------
 1 file changed, 35 insertions(+), 99 deletions(-)

diff --git a/src/nsi/installer/cloud.py b/src/nsi/installer/cloud.py
index 41329a6..645ecd9 100644
--- a/src/nsi/installer/cloud.py
+++ b/src/nsi/installer/cloud.py
@@ -8,13 +8,9 @@ The Client job is to help the ease of use of the cloud system.
 
 import platform
 import argparse
-try:
-    from selenium import webdriver
-    from selenium.webdriver.common.by import By
-    from selenium.webdriver.support.ui import WebDriverWait
-    from selenium.webdriver.support import expected_conditions as EC
-except ImportError:
-    pass
+import logging
+import os
+from time import gmtime, strftime
 
 
 class Struct:
@@ -43,119 +39,59 @@ def parse_arguments():
     parser.add_argument(
         "uri", type=str, help="Specific schema handler", nargs='?',
         default=None)
-    parser.add_argument("-u", "--username", type=str)
-    parser.add_argument("-p", "--password", type=str)
     parser.add_argument(
-        "-d", "--driver",
-        help="Select webdriver. Aside from Firefox, you have to install "
-        + "first the proper driver.", type=str,
-        choices=['firefox', 'chrome', 'ie', 'opera'],
-        default="firefox")
+        "-l", "--loglevel",
+        help="The level of logging severity", type=str,
+        choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'],
+        default="INFO")
+    parser.add_argument(
+        "-f", "--logfile",
+        help="Explicit location of the wanted logfile location and name",
+        type=str,
+        default=("%(directory)s\\%(file)s" % {
+            'directory': os.path.dirname(os.path.abspath(__file__)),
+            'file': 'client.log'}))
     args = parser.parse_args()
     return args
 
 
-class Browser:
-    """
-    Browser initialisation
-
-    Keyword arguments:
-    @param args  -- args.driver tells us which installed browser
-                    we want to use with selenium.
-    """
-    def __init__(self, args):
-        self.args = args
-        if args.driver == "firefox":
-            self.driver = webdriver.Firefox()
-        elif args.driver == "chrome":
-            self.driver = webdriver.Chrome()
-        elif args.driver == "ie":
-            self.driver = webdriver.Ie()
-        elif args.driver == "opera":
-            self.driver = webdriver.Opera()
-        self.driver.implicitly_wait(10)
-
-    def login(self):
-        """
-        Eduid login based on the given console arguments
-        """
-        driver = self.driver
-        args = self.args
-        if args.username is not None:
-            driver.find_element_by_name("j_username").clear()
-            driver.find_element_by_name("j_username").send_keys(args.username)
-        if args.password is not None:
-            driver.find_element_by_name("j_password").clear()
-            driver.find_element_by_name("j_password").send_keys(args.password)
-        if args.username is not None and args.password is not None:
-            driver.find_element_by_css_selector(
-                "input[type='submit']").click()
-
-    def main(self):
-        """
-        Use of the https://cloud.bme.hu/
-
-        Keyword arguments:
-        @return vm   -- Necessarily parameters to connect
-                        to the Virtual Machine
-        """
-        vm = Struct()
-        driver = self.driver
-        driver.maximize_window()
-        driver.get("https://cloud.bme.hu/")
-        # driver.find_element_by_css_selector("a[href*='/login/']").click()
-        # self.login()
-        vm.state, vm.protocol = "", "NONE"
-        try:
-            while vm.state.upper()[:3] not in ("FUT", "RUN"):
-                WebDriverWait(driver, 7200).until(
-                    EC.presence_of_element_located((
-                        By.CSS_SELECTOR,
-                        "#vm-details-pw-eye.fa.fa-eye-slash")))
-                vm.state = driver.find_element_by_css_selector(
-                    "#vm-details-state > span").text
-            # cl: connection string converted to list
-            cl = driver.find_element_by_css_selector(
-                "#vm-details-connection-string").get_attribute(
-                    "value").split()
-            if cl[0] == "sshpass":
-                vm.protocol = "SSH"
-                vm.user, vm.host = cl[6].split("@")
-                vm.password, vm.port = cl[2], cl[8]
-            elif cl[0] == "rdesktop":
-                vm.protocol = "RDP"
-                vm.host, vm.port = cl[1].split(":")
-                vm.user, vm.password = cl[3], cl[5]
-            driver.find_element_by_css_selector("a[href*='/logout/']").click()
-        except:
-            print "Browser session timed out!"
-            raise
-        return vm
-
-
 def main():
     """
     Main program
     """
+    args = parse_arguments()
+    logging.basicConfig(filename='%s' % args.logfile,
+                        format='%(levelname)s:%(message)s')
+    logger = logging.getLogger()
+    logger.setLevel(args.loglevel)
+    logger.info("----------------------------")
+    logger.info("Client started running at %s",
+                strftime("%Y-%d-%m %H:%M:%S GMT", gmtime()))
     try:
-        args = parse_arguments()
+
         if args.uri is not None:
+            logger.info('Received the following URI: %s', args.uri)
             vm = Struct()
             x, vm.protocol, vm.user, vm.password, vm.host, vm.port = \
                 args.uri.split(':', 5)
             vm.protocol = vm.protocol.upper()
-            vm.state = "RUN"
+            logger.debug("The Client split it followingly: protocol -> %s | "
+                         "user -> %s | password -> %s | "
+                         "host -> %s | port -> %s",
+                         vm.protocol, vm.user, vm.password, vm.host, vm.port)
         else:
-            browser = Browser(args)
-            vm = browser.main()
-            browser.driver.quit()
+            logger.critical("Client did not receive an URI which would be "
+                            "necessary to continue")
         if platform.system() == "Linux":
+            logger.debug('Linux OS found, proceeding to connect methods')
             from cloud_connect_from_linux import connect
         elif platform.system() == "Windows":
+            logger.debug('Windows OS found, proceeding to connect methods')
             from cloud_connect_from_windows import connect
-        if vm.state.upper()[:3] in ("FUT", "RUN"):
-            connect(vm)
+        connect(vm)
     except:
+        logger.exception("An exception was raised before connect methods"
+                         "could be invoked")
         print "Unknown error occurred! Please contact the developers!"
 
 
--
libgit2 0.26.0