Exemplo n.º 1
0
 def _execute_now():
     for ip in ips:
         Common.create_thread(func=self.exec_start_impl,
                              args=(ip, uploads[ip], params[ip]))
         logger.info(
             "execute_start {} for {}, params:{}, uploads:{}".format(
                 self.task, ip, params[ip], uploads[ip]))
Exemplo n.º 2
0
    def upload_file(self, ssh, ip, uploads, offset):
        # 不直接在上传的callback中调用更新状态的Caller,因为会影响上传的速度,
        # callback中只更新内存,状态更新在一个线程中定时去调用
        def upload_back(current, total):
            size[0] = current
            size[1] = total

        def get_progress():
            return int(size[0] / size[1] * offset)

        def update_thread():
            while not is_done:
                self.return_exec_start_result(ip, get_progress(), '', True)
                Common.sleep(0.2)

        size, is_done = [0, 1], False
        server_upload = Global.G_SERVER_UPLOAD % model_gate.settings_data.server_dir
        for local in uploads:
            remote = "{0}/{1}".format(server_upload, Common.basename(local))
            Common.create_thread(func=update_thread, args=())
            self.insert_text_info(ip, get_progress(),
                                  'Uploading {}'.format(local))
            ret, err = SSHUtil.upload_file(ssh, local, remote, upload_back)
            is_done = True
            if not ret:
                self.insert_text_info(
                    ip, get_progress(),
                    'Upload {} failed: {}'.format(local, err), 'ERROR')
                self.return_exec_start_result(ip, get_progress(), '', False)
                return False
            self.return_exec_start_result(ip, get_progress(), '', True)
        return True
Exemplo n.º 3
0
 def press_bar_handle(key):
     if key == 'TB_EXPAND':
         tree_inst.expand_trees()
     elif key in ['TB_ABOUT', "MENU_ABOUT"]:
         TopAbout()
     elif key in ['TB_SCREEN', 'MENU_SCREEN']:
         ScreenShot()
     elif key in ['TB_HELP', 'MENU_HELP']:
         pdf = 'SystemController.pdf'
         if not Common.is_file(pdf):
             WidgetTip.error('{}不存在,请确认!'.format(pdf))
             return
         Common.create_thread(lambda: Common.system_open(pdf))
     elif key in ['MENU_SET', 'TB_SET']:
         GuiSettings.pack()
     elif key == 'MENU_EXIT':
         app_gate.close()
     elif key == 'TB_LAST':
         tree_inst.last()
     elif key == 'TB_NEXT':
         tree_inst.next()
     elif key in ["MENU_WHITE", "MENU_BLACK"]:
         WidgetTip.info("敬请期待 !")
     else:
         # 根据界面 image 值即可进入对应界面 #
         tree_inst.selection(key)
Exemplo n.º 4
0
    def set_data(self, data, asynccall=False):
        def func(args=None):
            self._instance.data = data

        if asynccall:
            Common.create_thread(func=func)
        else:
            func()
Exemplo n.º 5
0
                def click_login():
                    def async_login(args=None):
                        self.login_handle()
                        try:
                            login_btn.disable(False)
                        except:
                            pass

                    login_btn.disable(True)
                    Common.create_thread(func=async_login)
Exemplo n.º 6
0
            def pack_sub_foot_fm():
                def update_info():
                    while True:
                        time.sleep(60)
                        sec = time.time() - app_gate.start_time
                        run_time = '软件运行时长 {} 小时 {} 分钟'.format(
                            int(sec / 3600), int((sec % 3600) / 60))
                        text = "{}      {}".format(use_time, run_time)
                        label['text'] = text

                use_time = '软件启动耗时 %.3f 秒' % app_gate.use_time
                run_time = '软件运行时长 0 小时 0 分钟'
                Common.create_thread(update_info)
                label = tk.Label(foot_fm,
                                 text="{}      {}".format(use_time, run_time))
                label.pack()
Exemplo n.º 7
0
    def execute_start(self, data):
        def _execute_now():
            for ip in ips:
                Common.create_thread(func=self.exec_start_impl,
                                     args=(ip, uploads[ip], params[ip]))
                logger.info(
                    "execute_start {} for {}, params:{}, uploads:{}".format(
                        self.task, ip, params[ip], uploads[ip]))

        def for_delay_loop():
            if delay and not self._mutex('DELAY'):
                model_gate.exception_data.set_data("已经存在延迟任务\n如需重置,请先点击'停止'")
                return
            if loop and not self._mutex('LOOP'):
                model_gate.exception_data.set_data("已经存在循环任务\n如需重置,请先点击'停止'")
                return
            if delay:
                start_time = Common.time()
                while True:
                    if self.is_break:
                        return
                    Common.sleep(1)
                    left_sec = delay * 60 - int(Common.time() - start_time)
                    left_sec = 0 if left_sec < 0 else left_sec
                    model_gate.delay_loop_timer_data.set_data(
                        [left_sec, left_sec])
                    if left_sec == 0:
                        self._mutex('DELAY', False)
                        break
            _execute_now()
            if loop:
                start_time = Common.time()
                while True:
                    if self.is_break:
                        return
                    Common.sleep(1)
                    left_sec = loop * 60 - int(Common.time() - start_time)
                    left_sec = 0 if left_sec < 0 else left_sec
                    model_gate.delay_loop_timer_data.set_data([0, left_sec])
                    if left_sec == 0:
                        _execute_now()
                        start_time = Common.time()

        ips, script, root, delay, loop, params, uploads = data
        self.init(script, root, True)
        Common.create_thread(for_delay_loop)
Exemplo n.º 8
0
 def execute_enter(self, data):
     ips, script = data
     self.init(script, True, False)
     for ip in ips:
         Common.create_thread(func=self.exec_enter_impl, args=(ip, ))
         logger.info("execute_enter {} for {}".format(self.task, ip))