1ba991379Sopenharmony_ci# encoding=utf-8 2ba991379Sopenharmony_ci 3ba991379Sopenharmony_ci''' 4ba991379Sopenharmony_ciCreated on 20181019 5ba991379Sopenharmony_ci 6ba991379Sopenharmony_ci@author: wangqi10 7ba991379Sopenharmony_ci@modify data:20200424 8ba991379Sopenharmony_ci@modify:update for BlueArea 9ba991379Sopenharmony_ci''' 10ba991379Sopenharmony_ciimport platform 11ba991379Sopenharmony_ciimport sys 12ba991379Sopenharmony_ciimport threading 13ba991379Sopenharmony_ciimport time 14ba991379Sopenharmony_ciimport os 15ba991379Sopenharmony_ciimport platform 16ba991379Sopenharmony_ci 17ba991379Sopenharmony_cifrom util.time_info import get_now_time_str_info, get_now_time_info, Timeout, timeout 18ba991379Sopenharmony_cifrom aw.Param.UpgradeParam import getAllParam 19ba991379Sopenharmony_cifrom aw.Common.Constant import CONSTANT 20ba991379Sopenharmony_cifrom util.log_info import logger 21ba991379Sopenharmony_ci 22ba991379Sopenharmony_cidef start(param): 23ba991379Sopenharmony_ci ''' 24ba991379Sopenharmony_ci #=================================================================================== 25ba991379Sopenharmony_ci # @Method: start(param) 26ba991379Sopenharmony_ci # @Precondition: none 27ba991379Sopenharmony_ci # @Func: 全流程执行模板:1.组合app执行顺序 28ba991379Sopenharmony_ci # 2.初始化app,调用app.excute方法 29ba991379Sopenharmony_ci # 3.返回app执行结果 30ba991379Sopenharmony_ci # @PostStatus: none 31ba991379Sopenharmony_ci # @Param: param:用户传递的参数列表 32ba991379Sopenharmony_ci # @eg: start() 33ba991379Sopenharmony_ci # @return: None 34ba991379Sopenharmony_ci #=================================================================================== 35ba991379Sopenharmony_ci ''' 36ba991379Sopenharmony_ci if isinstance(param, dict): 37ba991379Sopenharmony_ci logger.switchFilePath(param.get("logFilePath")) 38ba991379Sopenharmony_ci runstage = param.get("runstage") 39ba991379Sopenharmony_ci if runstage == "": 40ba991379Sopenharmony_ci CONSTANT.ENVERRMESSAGE = "no runstage" 41ba991379Sopenharmony_ci return -1 42ba991379Sopenharmony_ci step_list = runstage.split(",") 43ba991379Sopenharmony_ci param["step_list"] = step_list 44ba991379Sopenharmony_ci system_type = platform.system() 45ba991379Sopenharmony_ci for step in step_list: 46ba991379Sopenharmony_ci app_name = step 47ba991379Sopenharmony_ci app_pyFile = 'func.' + app_name[0: app_name.find('_')] + '.' + app_name 48ba991379Sopenharmony_ci #app_class_name = app_name[0: app_name.rfind('_')].capitalize() 49ba991379Sopenharmony_ci app_class_name = app_name[0: app_name.rfind('_')] 50ba991379Sopenharmony_ci improt_cmd_str = 'from %s import %s as APP' % (app_pyFile, app_class_name) 51ba991379Sopenharmony_ci print(improt_cmd_str) 52ba991379Sopenharmony_ci logger.info("import_cmd_str:%s" % improt_cmd_str) 53ba991379Sopenharmony_ci scope = {} 54ba991379Sopenharmony_ci exec(improt_cmd_str, scope) 55ba991379Sopenharmony_ci APP = scope.get('APP', 'none') 56ba991379Sopenharmony_ci logger.info("APP:%s" % APP) 57ba991379Sopenharmony_ci app = APP(param) 58ba991379Sopenharmony_ci errorcode = app._excuteApp('upgrade') 59ba991379Sopenharmony_ci time.sleep(5) 60ba991379Sopenharmony_ci scriptpath =os.path.dirname(os.path.dirname(os.path.abspath(os.path.dirname(__file__)))) 61ba991379Sopenharmony_ci if system_type == "Windows": 62ba991379Sopenharmony_ci loader_tool_path = os.path.join(scriptpath, "resource", "RK3568_tool", "upgrade_tool.exe") 63ba991379Sopenharmony_ci else: 64ba991379Sopenharmony_ci loader_tool_path = os.path.join(scriptpath, "resource", "RK3568_tool", "upgrade_tool") 65ba991379Sopenharmony_ci logger.info(loader_tool_path) 66ba991379Sopenharmony_ci# mycmd = "%s LD" % loader_tool_path 67ba991379Sopenharmony_ci# try: 68ba991379Sopenharmony_ci# num = send_cmd(mycmd) 69ba991379Sopenharmony_ci# if num != 2: 70ba991379Sopenharmony_ci# logger.info("try again!") 71ba991379Sopenharmony_ci# time.sleep(40) 72ba991379Sopenharmony_ci# num = send_cmd(mycmd) 73ba991379Sopenharmony_ci# if num != 2: 74ba991379Sopenharmony_ci# logger.error("有设备断连,全部处置为真隔离状态!") 75ba991379Sopenharmony_ci# errorcode = 200 76ba991379Sopenharmony_ci# except Exception as f: 77ba991379Sopenharmony_ci# logger.error(f) 78ba991379Sopenharmony_ci# logger.info(errorcode) 79ba991379Sopenharmony_ci if errorcode == 99: 80ba991379Sopenharmony_ci logger.error("upgrade success ,but Smoke failed, the fatal problem occurs.") 81ba991379Sopenharmony_ci return 99 82ba991379Sopenharmony_ci if errorcode == 98: 83ba991379Sopenharmony_ci logger.error("upgrade success ,but Smoke failed, the key problem occurs.") 84ba991379Sopenharmony_ci return 98 85ba991379Sopenharmony_ci if errorcode == -1: 86ba991379Sopenharmony_ci logger.error("upgrade failed.") 87ba991379Sopenharmony_ci return 101 88ba991379Sopenharmony_ci if errorcode == 200: 89ba991379Sopenharmony_ci return -1 90ba991379Sopenharmony_ci return 0 91ba991379Sopenharmony_ci return 0 92ba991379Sopenharmony_ci CONSTANT.ENVERRMESSAGE = "unknown error,please contact the engineer" 93ba991379Sopenharmony_ci return -1 94ba991379Sopenharmony_ci 95ba991379Sopenharmony_ci 96ba991379Sopenharmony_cidef send_cmd(mycmd): 97ba991379Sopenharmony_ci result = "".join(os.popen(mycmd).readlines()) 98ba991379Sopenharmony_ci logger.info(result) 99ba991379Sopenharmony_ci num = int(result.split("(")[1].split(")")[0]) 100ba991379Sopenharmony_ci logger.info(num) 101ba991379Sopenharmony_ci return num 102ba991379Sopenharmony_ci 103ba991379Sopenharmony_ci 104ba991379Sopenharmony_cidef parseProperties(param_file): 105ba991379Sopenharmony_ci ''' 106ba991379Sopenharmony_ci #=================================================================================== 107ba991379Sopenharmony_ci # @Method: parseProperties(param_file) 108ba991379Sopenharmony_ci # @Precondition: none 109ba991379Sopenharmony_ci # @Func: 将xxx.properties文件解析成start(param)方法中param参数需要的格式 110ba991379Sopenharmony_ci # @PostStatus: none 111ba991379Sopenharmony_ci # @Param: param:用户传递的参数列表 112ba991379Sopenharmony_ci # @eg: parseProperties() 113ba991379Sopenharmony_ci # @return: None 114ba991379Sopenharmony_ci #=================================================================================== 115ba991379Sopenharmony_ci ''' 116ba991379Sopenharmony_ci param_dict = getAllParam(param_file) 117ba991379Sopenharmony_ci 118ba991379Sopenharmony_ci #获取taskid 119ba991379Sopenharmony_ci taskid = "NoTaskidJob" 120ba991379Sopenharmony_ci task_path = param_file.split('.')[0] 121ba991379Sopenharmony_ci if task_path.rfind("/") > -1: 122ba991379Sopenharmony_ci r = task_path.rfind("/") 123ba991379Sopenharmony_ci else: 124ba991379Sopenharmony_ci r = task_path.rfind("\\") 125ba991379Sopenharmony_ci taskid = task_path[r + 1:] 126ba991379Sopenharmony_ci 127ba991379Sopenharmony_ci param_dict["taskId"] = taskid 128ba991379Sopenharmony_ci param_dict["logFilePath"] = ''.join([task_path, ".log"]) 129ba991379Sopenharmony_ci 130ba991379Sopenharmony_ci return param_dict 131ba991379Sopenharmony_ci 132ba991379Sopenharmony_ci 133ba991379Sopenharmony_cidef saveSuccessVersion(success_version): 134ba991379Sopenharmony_ci ''' 135ba991379Sopenharmony_ci #=================================================================================== 136ba991379Sopenharmony_ci # @Method: saveSuccessVersion(param_file) 137ba991379Sopenharmony_ci # @Precondition: none 138ba991379Sopenharmony_ci # @Func: 存储成功的版本 139ba991379Sopenharmony_ci # @PostStatus: none 140ba991379Sopenharmony_ci # @Param: param:用户传递的参数列表 141ba991379Sopenharmony_ci # @return: None 142ba991379Sopenharmony_ci #=================================================================================== 143ba991379Sopenharmony_ci ''' 144ba991379Sopenharmony_ci save_path = CONSTANT.Path.getSavePath() 145ba991379Sopenharmony_ci try: 146ba991379Sopenharmony_ci with open(save_path, 'w') as f: 147ba991379Sopenharmony_ci f.write(f'upgrade_upgradeLocation={success_version}') 148ba991379Sopenharmony_ci except: 149ba991379Sopenharmony_ci logger.info('save success version fail') 150ba991379Sopenharmony_ci logger.info('saving success') 151ba991379Sopenharmony_ci 152ba991379Sopenharmony_ci 153ba991379Sopenharmony_cidef send_times(mycmd): 154ba991379Sopenharmony_ci times = 0 155ba991379Sopenharmony_ci outcome = sendCmd(mycmd) 156ba991379Sopenharmony_ci while times < 3: 157ba991379Sopenharmony_ci if not outcome or "Empty" in outcome: 158ba991379Sopenharmony_ci times += 1 159ba991379Sopenharmony_ci time.sleep(3) 160ba991379Sopenharmony_ci else: 161ba991379Sopenharmony_ci return outcome 162ba991379Sopenharmony_ci return outcome 163ba991379Sopenharmony_ci 164ba991379Sopenharmony_ci 165ba991379Sopenharmony_cidef sendCmd(mycmd): 166ba991379Sopenharmony_ci result = "".join(os.popen(mycmd).readlines()) 167ba991379Sopenharmony_ci return result 168ba991379Sopenharmony_ci 169ba991379Sopenharmony_ci 170ba991379Sopenharmony_ci@timeout(30) 171ba991379Sopenharmony_cidef hdc_kill(): 172ba991379Sopenharmony_ci logger.info("kill the process") 173ba991379Sopenharmony_ci os.system("hdc_std kill") 174ba991379Sopenharmony_ci time.sleep(5) 175ba991379Sopenharmony_ci logger.info("start the process") 176ba991379Sopenharmony_ci os.system("hdc_std start") 177ba991379Sopenharmony_ci time.sleep(10)