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)