Beispiel #1
0
 def element_is_displayed(self, keys):
     try:
         element = self.get_element(keys)
         if element is not None:
             element.is_displayed()
     except BaseException, e:
         Log.error(e)
Beispiel #2
0
 def wait_unit_el_present(self, keys, sec=15):
     """
     Display wait,wait until element display, time out 15 sec
     """
     wait = WebDriverWait(self.driver, sec)
     key = keys[0]
     value = keys[1]
     if key in ['XPATH', 'xpath']:
         locator = (By.XPATH, value)
     elif key in ['link_text', 'LINK_TEXT']:
         locator = (By.LINK_TEXT, value)
     elif key in ['ID', 'id']:
         locator = (By.ID, value)
     elif key in ['NAME', 'name']:
         locator = (By.NAME, value)
     elif key in ['CLASS_NAME', 'class_name']:
         locator = (By.CLASS_NAME, value)
     elif key in ['TAG', 'tag']:
         locator = (By.TAG_NAME, value)
     try:
         element = wait.until(ec.presence_of_element_located(locator))
         return element
     except BaseException, e:
         Log.error(e)
         self.get_windows_img()
         return None
Beispiel #3
0
def wait_for_page_changes(driver,
                          page_title_to_change_to,
                          wait_for_seconds=60):
    """
    wait_for_page_changes

    Waits for an page to change, subject to timeout specified in wait_for_seconds

    :param driver: Webdriver controller for the web page
    :param page_title_to_change_to: Title of the page we want to go to.
    :param wait_for_seconds: Timeout value for the page to change to the desired page title
    """
    Log.info(f"Current page title is {driver.title}")
    Log.info(
        f"Waiting {wait_for_seconds} seconds for page to change to {page_title_to_change_to}"
    )
    try:
        WebDriverWait(driver, wait_for_seconds).until(
            expected_conditions.title_contains(page_title_to_change_to))
    except TimeoutException as e:
        Log.error(f"Timed out with page title at {driver.title}")
        take_screenshot(driver)
        driver.quit()
        raise TimeoutException(
            f"Timed out with page title at {driver.title}. {e}")
    Log.info(f"Page has changed to {page_title_to_change_to}")
 def click_menu(self, menuname):
     """
     Click ADMIN page menu
     """
     Log.info("Click the % s menu")
     if menuname == "Configure":
         newmenu = "menu_performance_{}".format("Configure")
     elif menuname == "KPIs":
         newmenu = "menu_performance_searchKpi"
     elif menuname == "Trackers":
         newmenu = "menu_performance_addPerformanceTracker"
     elif menuname == "Manage Reviews":
         newmenu = "menu_performance_ManageReviews"
     elif menuname == "Employee Trackers":
         newmenu = "menu_performance_viewEmployeePerformanceTrackerList"
     else:
         newmenu = "menu_performance_{}".format(menuname)
     menu = self.menuBar.format(newmenu)
     try:
         element = self.wait_unit_el_present(("xpath", menu))
         element.click()
     except BaseException, e:
         print e
         Log.error(e)
         raise "Element %s not found" % menuname
Beispiel #5
0
 def candidates_edit_status(self, vacan_name, status, status_reason):
     """
     Test Change the candidate's vacancy status to reject Function
     1. click edit button
     2. change status to reject
     3. input reject reason
     4. validate the status
     """
     rcandi_xpath = self.rcandi_xpath.format(vacan_name)
     rcandi = ('xpath', rcandi_xpath)
     candi_rec = self.get_element(rcandi)
     if candi_rec is not None:
         self.click(rcandi)
         self.click(self.save_btn)
         self.set_combox_value(status, self.action)
         self.clear_text(self.status_reason)
         self.input_text(status_reason, self.status_reason)
         self.click(self.status_btn)
         self.click(self.back_btn)
         self.click_menu('Candidates')
         status_xpath = self.status_xpath.format(vacan_name, )
         status = ('xpath', status_xpath)
         assert 'Rejected' == self.get_element_text(status)
     else:
         Log.error("Unable to locate the candidate record")
Beispiel #6
0
 def fail(self, data={}, info=""):
     """请求返回失败"""
     if not isinstance(data, dict):
         data = {}
     frame = inspect.stack()[1].frame
     Log.error(f"{self.fail.__doc__} {call_me(frame)} {data} {info}")
     return JResponse(msg="FAIL", code=-1, info=info, data=data)
Beispiel #7
0
 def press_enter_key(self, keys):
     """
     Todo  need test later
     """
     try:
         self.get_element(keys).send_keys(Keys.ENTER)
     except BaseException, e:
         Log.error(e)
Beispiel #8
0
 def open_immigration_page_via_creating_emp(self, first_name, last_name):
     """
     Go to Immigration page via creating an employee
     """
     try:
         self.add_employee(first_name, last_name)
     except Exception, e:
         Log.error(e)
Beispiel #9
0
 def get_all_window(self):
     """
     Get current window page
     """
     try:
         return self.driver.window_handles
     except BaseException, e:
         Log.error(e)
Beispiel #10
0
def input_random_number(*args):
    try:
        if len(args) == 0:
            number_length = randrange(4, 8)
        else:
            number_length = args[0]
        number = ''.join(choice(dig) for _ in range(number_length))
    except Exception, e:
        Log.error("% s, please transfer one digit param." % e)
Beispiel #11
0
 def get_page_url(self):
     """
     Get page title
     """
     try:
         Log.info("Current page title is %s" % self.driver.current_url)
         return self.driver.current_url
     except BaseException, e:
         Log.error(e)
Beispiel #12
0
 def select_option(self, keys, option):
     """
     select option
     """
     try:
         value = Select(self.get_element(keys)).select_by_index(option)
         return value
     except BaseException, e:
         Log.error(e)
Beispiel #13
0
 def get_first_select(self, keys):
     """
     get select option first value
     """
     try:
         value1 = Select(self.get_element(keys)).first_selected_option.text
         return value1
     except BaseException, e:
         Log.error(e)
Beispiel #14
0
def input_random_password(*args):
    try:
        if len(args) == 0:
            password_length = randrange(4, 8)
        else:
            password_length = args[0]
        password = ''.join(
            choice(lc + up + dig + pun) for _ in range(password_length))
    except Exception, e:
        Log.error("% s, please transfer one digit param." % e)
Beispiel #15
0
def input_random_text(*args):
    try:
        if len(args) == 0:
            text_length = randrange(4, 8)
        else:
            text_length = args[0]
        text = ''.join(choice(lc) for _ in range(text_length))
    except Exception, e:
        Log.error("% s, please transfer one digit param." % e)
        text = text.capitalize()
Beispiel #16
0
 def mouse_move_to_element(self, keys):
     """
     Mouse move to the element - Added by Linda
     """
     try:
         mouse = self.get_element(keys)
         if mouse is not None:
             ActionChains(self.driver).move_to_element(mouse).perform()
     except BaseException, e:
         Log.error(e)
Beispiel #17
0
 def switch_employee_detail_page(self, tab_name):
     """
     Switch any Employee Details page - added by Linda
     """
     try:
         tab = self.tab_ele.format(tab_name)
         self.click(('xpath', tab))
     except BaseException, e:
         print e
         Log.error(e)
         raise "Element %s not found" % tab_name
Beispiel #18
0
 def get_random_data(self, keys):
     """
     Get random data - Added by Linda
     """
     try:
         elements = self.get_elements(keys)
         element = choice(elements)
         element_text = element.text
         return element_text
     except Exception, e:
         Log.error(e)
Beispiel #19
0
    def get(self, *args, **kwargs):

        try:

            self._get(*args, **kwargs)

        except Exception, e:

            Log.error(e)

            self.render('500.htm', next_url=self.request.uri)
Beispiel #20
0
    def post(self, *args, **kwargs):

        try:

            self._post(*args, **kwargs)

        except Exception, e:

            Log.error(e)

            self.write('Error')
Beispiel #21
0
 def click_menu(self, menuname):
     """
     Click ADMIN page menu
     """
     Log.info("Click the % s menu")
     menu_name = menuname.title()
     try:
         element = self.get_element(("link_text", menu_name))
         element.click()
     except BaseException, e:
         print e
         Log.error(e)
Beispiel #22
0
 def clear_text(self, keys):
     """
     Clear the text box
     """
     try:
         element = self.get_element(keys)
         if element is None:
             return None
         else:
             self.get_element(keys).clear()
     except BaseException, e:
         Log.error(e)
Beispiel #23
0
 def click(self, keys):
     """
     Click button
     """
     try:
         element = self.get_element(keys)
         if element is None:
             raise Exception
         else:
             self.get_element(keys).click()
     except BaseException, e:
         Log.error(e)
Beispiel #24
0
 def open_immigration_page_via_editing_emp(self):
     """
     Go to Immigration page via editing an employee
     """
     try:
         select_data = self.get_random_data(self.select_ele)
         click_ele = self.click_selected_ele.format(select_data)
         self.click(('xpath', click_ele))
         assert self.get_element(self.person_page_ele) is not None
         Log.info("Arrive Personal Details page of id: %s" % select_data)
     except Exception, e:
         Log.error(e)
Beispiel #25
0
 def decrypt(encryptCode: str, _private_key=private.api_key) -> Any:
     """私钥解密"""
     try:
         _secret_byte_obj = base64.b64decode(encryptCode)
         cipher_pri_obj = PKCS1_v1_5.new(RSA.import_key(_private_key))
         _byte_obj = cipher_pri_obj.decrypt(_secret_byte_obj,
                                            Random.new().read)
         plain_text = _byte_obj.decode("utf-8")
         Log.info(f"RSA加密信息结果:{plain_text}")
         return json.loads(plain_text)
     except Exception as ex:
         Log.error(f"解析RSA加密信息失败:{ex}")
         return {}
Beispiel #26
0
 def get_windows_img(self):
     """
     save the screenshot
     """
     file_path = "screenshots//"
     rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
     screen_name = file_path + rq + '.png'
     try:
         self.driver.get_screenshot_as_file(screen_name)
         Log.info("Save screen shot to screenshots")
     except NameError as e:
         Log.error("Failed to take screenshot! %s" % e)
         self.get_windows_img()
Beispiel #27
0
 def get_element_attribute(self, keys, attkey):
     """
     Get element attribute value
     """
     try:
         element = self.get_element(keys)
         if element is None:
             return None
         else:
             value = element.get_attribute(attkey)
             return value
     except BaseException, e:
         Log.error(e)
Beispiel #28
0
 def input_text(self, value, keys):
     """
     Input text
     """
     try:
         element = self.get_element(keys)
         if element is None:
             return None
         else:
             element.clear()  # added by Linda
             element.send_keys(value)
     except BaseException, e:
         Log.error(e)
Beispiel #29
0
 def get_element_text(self, keys):
     """
     Get element text
     """
     try:
         element = self.get_element(keys)
         if element is None:
             raise Exception(
                 Log.error(
                     "Could not locate the element value {}".format(keys)))
         else:
             return element.text
     except BaseException, e:
         Log.error(e)
Beispiel #30
0
 def set_combox_value(self, value, keys):
     """
     Choose combox value
     """
     try:
         element = self.get_element(keys)
         if element is None:
             raise Exception(
                 Log.error(
                     "Could not locate the element value {}".format(keys)))
         else:
             Select(element).select_by_visible_text(value)
     except NoSuchElementException:
         Log.error("Could not locate the element value {}".format(value))
Beispiel #31
0
class RaidMonitor(object):

    def __init__(self):
        self.logger = Log("raid_mon", config=conf)
        self.is_running = False
        self.last_state = True
        self.vps_mgr = VPSMgr()
        self.hostname = socket.gethostname()

    def start(self):
        if self.is_running:
            return
        self.is_running = True
        self.logger.info("started")

    def stop(self):
        if not self.is_running:
            return
        self.is_running = False

    def send_alarm(self, msg):
        rpc = self.vps_mgr.rpc_connect()
        try:
            rpc.alarm("%s: raid_mon: %s" % (self.hostname, msg))
        finally:
            rpc.close()

    def check(self):
        cmd = """MegaCli64 -pdlist -aall | grep -i 'firmware state:' | grep -P -v -i "online|Unconfigured\(good\)" """
        try:
            out, err = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
            msg = out + err
            if msg:
                self.logger.error(msg)
                if self.last_state:
                    self.last_state = False
                    self.send_alarm("error, %s" % (out))
                    self.logger.error("alarm sent")
            else:
                self.logger.info("ok")
                if not self.last_state:
                    self.send_alarm("ok")
                    self.last_state = True
        except Exception, e:
            self.logger.exception(e)
Beispiel #32
0
def main():
    bridge = args[0]
    vif_name = args[1]
    logger = Log("vps_mgr", config=conf)
    try:
        ovsops = OVSOps()
        ofport = ovsops.find_ofport_by_name(vif_name)
        if ofport < 0:
            logger.error("vif %s ofport=%s, skip it" % (vif_name, ofport))
        else:
            ovsops.unset_mac_filter(bridge, ofport)
        # it's strange that if you unset traffic first, might find ofport==-1
        ovsops.unset_traffic_limit(vif_name)
        logger.debug("unset %s" % vif_name)
        return 0
    except Exception, e:
        logger.exception(e)
        print >> sys.stderr, str(e)
        return 0
Beispiel #33
0
def main():
    bridge = args[0]
    vif_name = args[1]

    logger = Log("vps_mgr", config=conf)
    vpsops = VPSOps(logger)
    logger.debug("set %s" % vif_name)
    try:
        ovsops = OVSOps()
        om = re.match(r"^\w+?(\d+)\w*?$", vif_name)
        if not om:
            print >> sys.stderr, "wrong vif format %s" % (vif_name)
            return 1
        vps_id = int(om.group(1))
        xv = vpsops.load_vps_meta(vps_id)
        vif = xv.vifs.get(vif_name)
        if not vif:
            logger.error("no vif %s in metadata of %s" % (vif_name, vps_id))
            return 1
        ofport = ovsops.find_ofport_by_name(vif_name)
        if ofport < 0:
            logger.error("vif %s ofport=%s, fix it by delete the port from bridge " % (vif_name, ofport))
            ovsops.del_port_from_bridge(bridge, vif_name)
            ovsops.add_port_to_bridge(bridge, vif_name)
            ofport = ovsops.find_ofport_by_name(vif_name)
            if ofport < 0:
                logger.error("vif %s ofport=%s, impossible " % (vif_name, ofport))
        if ofport >= 0:
            ovsops.set_mac_filter(bridge, ofport, vif.ip_dict.keys())
        ovsops.unset_traffic_limit(vif_name)
        bandwidth = float(vif.bandwidth or 0)
        ovsops.set_traffic_limit(vif_name, int(bandwidth * 1000))
        print "set vif %s bandwidth %sm/s" % (vif_name, vif.bandwidth)
        return 0
    except Exception, e:
        logger.exception(e)
        print >> sys.stderr, str(e)
        return 1
Beispiel #34
0
	def _load(self):
		# get routes
		f = open('config/route.json')
		r = json.load(f)

		# get uri
		path = Url.getUri()

		# if url doesn't end with /, redirect to / ended url
		if path.endswith('/') == False:
			path = path + "/"
			raise web.redirect(path, '301 ')

		# check url in routes json
		for key,value in r.items():

			if self._regex(path, key):

				# controller dynamic load
				module_name = "controller.{}".format(value['controller'])

				# uppercase first char
				class_name = value['controller'].title()

				#default method name
				method_name = 'main'
				if 'method' in value:
					method_name = value['method']

				# from path import module
				try:
					module = __import__(module_name, fromlist=[class_name])
				except Exception as e:
					Log.error(e)
					raise Error('500')

				# get class from module
				try:
					class_object = getattr(module, class_name)
				except Exception as e:
					return Log.error(e)

				# instance module
				try:
					controller_instance = class_object()
				except Exception as e:
					return Log.error(e)

				# exec method from class instance
				try:				
					func = getattr(controller_instance, method_name)
				except Exception as e:
					return Log.error(e)

				# method instance
				try:
					func_instance = func()
					return func_instance
				except Exception as e:
					m = re.match("[0-9]{3}", str(e))
					if m:
						http_code = m.group(0)
						if re.match("(4|5)", http_code):
							Error(http_code)

		# redirect to 404 page
		raise Error('404')
Beispiel #35
0
class TransWarpClient (TransWarpBase):

    def __init__(self):
        TransWarpBase.__init__(self)
        self.logger = Log("client", config=config)
        self.engine.set_logger(self.logger)
        self.sock5_addr = config.SOCK5_ADDR
        self._sock5_users = 'SOCK5_USERS' in dir(
            config) and config.SOCK5_USERS or {}
        ip = self.sock5_addr[0]
        arr = map(lambda x: chr(int(x)), ip.split("."))
        self._sock5_server_id = struct.pack(
            "!4cH", arr[0], arr[1], arr[2], arr[3], self.sock5_addr[1])
        self.server_addr = config.SERVER_ADDR
        self.sock5_sock = None
        self.key = config.KEY

    def start(self):
        if self.is_running:
            return
        self.sock5_sock = self.engine.listen_addr(
            self.sock5_addr, readable_cb=None, new_conn_cb=self._sock5_handshake, backlog=50)
        self.is_running = True

    def stop(self):
        if not self.is_running:
            return
        self.engine.unlisten(self.sock5_sock)
        self.is_running = False

    def _send_sock5_unsupport(self, conn):
        self.logger.error("peer %s not supported" % (str(conn.peer)))
        buf = "%s%s\x00\x01%s" % (VER, "\x07", self._sock5_server_id)

        def __write_ok(conn):
            self.engine.close_conn(conn)
            return
        self.engine.write_unblock(conn, buf, __write_ok)

    def _send_sock5_reply(self, client, err_no):
        if err_no == 0:
            status = "\x00"
        elif err_no == errno.ENETUNREACH:
            status = "\x03"
        elif err_no == errno.EHOSTUNREACH:
            status = "\x04"
        elif err_no == errno.ECONNREFUSED:
            status = "\x05"
        else:
            status = "\x01"  # general error
        buf = "%s%s\x00\x01%s" % (VER, status, self._sock5_server_id)

        def __write_ok(cli_conn, *args):
            if err_no == 0:
                self.logger.info(
                    "client %s: sent sock5 response" % (client.client_id))
                client.cli_state = proto.ClientState.CONNECTED
                self._check_client_state(client)
            else:
                self.logger.info(
                    "client %s: sent sock5 err response and close" % (client.client_id))
                self.close_client(client)
            return
        self.engine.write_unblock(
            client.cli_conn, buf, __write_ok, self._on_err, cb_args=(client,))

    def _on_client_readable(self, cli_conn, client):
#        print "client %s client readable" % (client.client_id)
        self.stream_to_fix(cli_conn, client.r_conn, client)

    def _on_remote_readable(self, r_conn, client):
#        print "client %s remote readable" % (client.client_id)
        self.fix_to_stream(r_conn, client.cli_conn, client)

    def _on_server_connected(self, sock, client):
        self.logger.info("client %s connected to server" % (client.client_id))
        r_conn = Connection(sock)
        _hash = proto.myhash(client.seed, self.key)
        auth_data = proto.AuthData(
            client.seed, _hash, self.key, client.r_host, client.r_port)
        buf = auth_data.serialize()
        buf = proto.pack_head(len(buf)) + buf
        client.r_conn = r_conn

        def __on_remote_respond(r_conn, *args):
            resp = None
            try:
                buf = client.crypter_r.decrypt(r_conn.get_readbuf())
                resp = proto.ServerResponse.deserialize(buf)
                if resp.err_no:
                    self.logger.error("client %s: %s %s" %
                                      (client.client_id, resp.err_no, resp.message))
                    self.close_client(client)
                else:
                    self.logger.info(
                        "client %s server response" % (client.client_id))
                    client.r_state = proto.ClientState.CONNECTED
                    self._check_client_state(client)
            except Exception, e:
                self.logger.exception(
                    "client %s: server response error %s" % (client.client_id, str(e)))
                self.close_client(client)
                return

        def __on_read_head(r_conn, *args):
            data_len = 0
            try:
                data_len = proto.unpack_head(r_conn.get_readbuf())
            except Exception, e:
                self.logger.error(
                    "client %s remote head invalid" % (client.client_id))
                self.close_client(client)
                return
            if data_len > 0:
                self.engine.read_unblock(
                    r_conn, data_len, __on_remote_respond, self._on_err, cb_args=(client, ))
                return
            self.logger.error("zero len head")
            self.close_client(client)
            return
class ICMPMonitor (object):

    def __init__(self):
        self.is_running = False
        self.linkage_dict = dict()
        self.logger = Log("icmp_mon", config=config)
        self.alarm_q = JobQueue(self.logger)
        self.emailalarm = EmailAlarm(Log("alarm", config=config))
        self.logger_links = Log("links", config=config)
        if 'log_length_per_link' in dir(config):
            self.log_length_per_link = config.log_length_per_link
        else:
            self.log_length_per_link = 128
        if 'links' not in dir(config):
            self.logger.error("no 'links' in config")
            return
        g_alarm_levels = None
        g_recover = None
        if 'alarm_levels' in dir(config):
            g_alarm_levels = self._parse_alarm_levels(config.alarm_levels)
        if 'recover' in dir(config):
            g_recover = int(config.recover)
        links = config.links
        if isinstance(links, dict):
            for ip, v in links.iteritems():
                if not isinstance(v, dict):
                    v = dict()
                ttl = v.get('ttl')
                if ttl >= 0:
                    pass
                else:
                    ttl = 0
                alarm_levels = v.get('alarm_levels')
                if not alarm_levels and g_alarm_levels:
                    alarm_levels = g_alarm_levels
                elif alarm_levels:
                    alarm_levels = self._parse_alarm_levels(alarm_levels)
                    if not alarm_levels:
                        continue
                else:
                    self.logger.error(
                        "config: %s, missing alarm_levels value" % (ip))
                    continue
                recover = v.get('recover')
                if recover:
                    recover = int(recover)
                elif not recover and g_recover:
                    recover = g_recover
                else:
                    self.logger.error(
                        "config: %s, missing recover value" % (ip))
                    continue
                self.linkage_dict[ip] = Linkage(ip, alarm_levels, recover)
        self.logger.info("%d link loaded from config" %
                         (len(self.linkage_dict.keys())))

    def _parse_alarm_levels(self, alarm_levels, ip=""):
        if not isinstance(alarm_levels, (tuple, list)):
            self.logger.error("config: %s, alarm_levels is not a list" % (ip))
            return
        _alarm_levels = filter(lambda x: isinstance(x, int), alarm_levels)
        if len(_alarm_levels) != len(alarm_levels):
            self.logger.error(
                "config: %s, elements in alarm_levels must be integers" % (ip))
            return
        return _alarm_levels

    def start(self):
        if self.is_running:
            return
        self.is_running = True
        self.alarm_q.start_worker(1)
        self.logger.info("started")

    def stop(self):
        if not self.is_running:
            return
        self.is_running = False
        self.alarm_q.stop()
        self.logger.info("stopped")

    def _alarm_enqueue(self, link):
        t = "%Y-%m-%d %H:%M:%S"
        ts = "[%s]" % (time.strftime(t, time.localtime()))
        job = AlarmJob(
            self.emailalarm, ts + link.alarm_text(), link.details())
        self.alarm_q.put_job(job)

    def loop(self):
        ips = self.linkage_dict.keys()
        fping = FPing(ips)
        while self.is_running:
            start_time = time.time()
            recv_dict, error_dict = fping.ping(1)
            for ip, rtt in recv_dict.iteritems():
                link = self.linkage_dict[ip]
                res = link.new_state(True, rtt)
                if res:
                    self._alarm_enqueue(link)
                print ip, "ok", rtt
                if len(link.bitmap) == self.log_length_per_link:
                    self.logger_links.info(link.details())
                    link.reset_bitmap()
            for ip, err in error_dict.iteritems():
                link = self.linkage_dict[ip]
                res = link.new_state(False, 0)
                if res is False:
                    self._alarm_enqueue(link)
                print ip, "err", link.bitmap
                if len(link.bitmap) == self.log_length_per_link:
                    self.logger_links.info(link.details())
                    link.reset_bitmap()

            end_time = time.time()
            if end_time < start_time + 1:
                time.sleep(1 - end_time + start_time)