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