def remote_diag(reader):
    glob_logger.debug("Remote diagnosis for reader {0} is starting.".format(reader))
    if reader in moxa_readers:
        test_con = TelnetAgent(reader, 'admin', 'admin', '\> ')
        try:
            test_con.login()
            test_con.logout()
        except Exception as e:
            glob_logger.error("Reader {0} failed login test, hard reboot will be execute.".format(reader))
            hard_reboot(reader)
            glob_logger.debug("Reader {0} hard reboot complete.".format(reader))
    elif reader in uno1150_readers:
        test_con = SSH_Agent(reader, 'admin', 'admin')
        try:
            test_con.login()
            test_con.logout()
        except Exception as e:
            glob_logger.error("Reader {0} failed login test, hard reboot will be execute.".format(reader))
            hard_reboot(reader)
            glob_logger.debug("Reader {0} hard reboot complete.".format(reader))
    glob_logger.debug("Remote diagnosis for reader {0} end.".format(reader))
def moxa_readers_restart(enclosure, applications_list, hard_reboot_flag=False):
    telnetcon = TelnetAgent(enclosure, 'admin', 'admin', '\> ')
    try:
        if telnetcon.login():
            while True:
                if not moxa_readers_apps_kill(telnetcon, applications_list, hard_reboot_flag):
                    glob_logger.debug("Target apps terminated on reader {0}".format(enclosure))
                    break
            if not hard_reboot_flag:
                while True:
                    if moxa_readers_apps_start(telnetcon, applications_list):     
                        glob_logger.debug("Target apps restarted on reader {0}, no system reboot performed.".format(enclosure))
                        telnetcon.logout()
                        break
            else:
                telnetcon.run("reboot")
                glob_logger.debug("System reboot on reader {0} completed.".format(enclosure))
        if (hard_reboot_flag):
            sleep(reboot_sleep_time)
        else:
            sleep(sleep_time)
        remote_diag(enclosure)
    except Exception as e:
        raise Exception("Exception on reader {0} ".format(enclosure) + e.args[0])