def time_out(self):

        ProcessStatMgr.check_process_stat()

        if self.__start_process_flag > 0:
            self.__start_process_flag -= 1
        else:        
            ProcessStatMgr.timer_process()
Example #2
0
    def handle_cmd(self, frame):
        """
        Method:    handle_cmd
        Description: 处理握手消息
        Parameter: 
            frame: 握手消息
        Return: 
        Others: 
        """

        process_name = frame.get_data(0)
        statflag = frame.get_data(1)

        if statflag != bf.BasicApp.SHAKEHAND_STOPPING:

            ack_datas = ProcessStatMgr.get_shakehand_ack(process_name)
            self.get_worker().send_ack(frame, ack_datas)
        
        ProcessStatMgr.on_process_shakehand(frame.get_sender_pid(), process_name, statflag)
    def __load_app_info(self):
        # 初始化进程的启动信息
        ret = self.__load_install_info()        
        if ret != 0:
            tracelog.error("_load_install_info() failed.")
            return ret 
        
        all_app_info = self._install_info.get_app_info()        
        for app in all_app_info:
            if app.get_service_name() == self.get_app().get_service_name():
                continue

            # 根据配置文件中的相对位置,获取绝对位置
            program_path = os.path.join(self.get_app().get_app_top_path()
                                        , app.get_program_path())
            
            for i in xrange(app.get_instance_num()):
                ProcessStatMgr.add_process('%s_%s'%(app.get_service_name(), i)
                                        , i
                                        , app.is_auto_run_on_master()
                                        , app.is_auto_run_on_slave()
                                        , app.is_exclude()
                                        , program_path)
        return 0
    def time_out(self):
        master_monitor_pid = self.get_worker().get_pid("Monitor", bf.MASTER_PID)
        if master_monitor_pid == bf.INVALID_PID:
            # 此时master可能还没有判决出来
            return
            
        # 通知名字服务进程信息
        msg = name_msg_def.NotifyRunningPidsMsg()
        msg.running_pids = ProcessStatMgr.get_running_process_pids()

        frame = bf.AppFrame()
        frame.set_cmd_code(monitor_cmd_code.CMD_NOTIFI_RUNNING_PIDS)
        frame.set_receiver_pid(master_monitor_pid)
        frame.add_data(msg.serialize())
        self.get_worker().dispatch_frame_to_process_by_pid(frame.get_receiver_pid(), frame)