Ejemplo n.º 1
0
    def handle_cmd(self, frame):
        """
        Method:    handle_cmd
        Description: 处理订阅者加入分组的命令消息
        Parameter: 
            frame: AppFrame
        Return: 
        Others: 
        """
        tracelog.info(self)
                
        result = basic_rep_to_web.BasicRepToWeb()
        result.init_all_attr()
        tracelog.info('subscriber cfg worker recv group frame: %s' % frame)
        
        self._req_frame = frame
        buf = frame.get_data()
        
        try:
            assoc_req = msg_params_def.PortalSubscriberGroupAssociateReq.deserialize(buf)
        except:
            result.return_code = err_code_mgr.ERR_PORTAL_DESERIALIZE_ERROR
            result.description = err_code_mgr.get_error_msg(err_code_mgr.ERR_PORTAL_DESERIALIZE_ERROR,
                                                            cmd = 'PORTAL_SUBSCRIBER_GROUP_ASSOCIATE',
                                                            param_name = 'PortalSubscriberGroupAssociateReq')
            result.user_session = ''
            self.get_worker().get_app().send_ack_dispatch(frame, (result.serialize(), ))
            return

        self._message = assoc_req
        # 检查订阅者是否存在
        subs = self.get_worker().get_app().get_mit_manager().rdm_find('Subscriber',
                                                                      subscriber_open_id = assoc_req.subscriber_open_id)   

        if len(subs) == 0:
            result.return_code = err_code_mgr.ERR_PORTAL_SUBSCRIBER_NOT_EXISTS
            result.description = err_code_mgr.get_error_msg(err_code_mgr.ERR_PORTAL_SUBSCRIBER_NOT_EXISTS)

            result.prepare_for_ack(assoc_req, result.return_code, result.description)
            self.get_worker().get_app().send_ack_dispatch(frame, (result.serialize(), ))
            return
        else:
            # 检查订阅者关联的分组是否都存在
            group_ids = assoc_req.group_ids
            for gid in group_ids:
                grps = self.get_worker().get_app().get_mit_manager().rdm_find('Group',
                                                                              group_id = int(gid))
                if len(grps) == 0:
                    result.return_code = err_code_mgr.ERR_PORTAL_GROUP_NOT_EXISTS
                    result.description = err_code_mgr.get_error_msg(err_code_mgr.ERR_PORTAL_GROUP_NOT_EXISTS)
        
                    result.prepare_for_ack(assoc_req, result.return_code, result.description)
                    self.get_worker().get_app().send_ack_dispatch(frame, (result.serialize(), ))
                    return
            
            sub_frame = bf.AppFrame()
            sub_frame.set_cmd_code(cmd_code_def.CLOUD_PORTAL_SUB_GROUP_ASSOC_MSG)
            sub_frame.set_receiver_pid(self.get_worker().get_pid("SubscriberManApp"))
            sub_frame.add_data(buf)
            self.wait_for_ack(sub_frame, 5)
Ejemplo n.º 2
0
def check_filter(event_filter):
    return_code = err_code_mgr.ER_SUCCESS
    description = err_code_mgr.get_error_msg(err_code_mgr.ER_SUCCESS)
    
    #event_filter 参数检查
    if event_filter is None:
        return_code = err_code_mgr.ER_NO_EVENT_FILTER_PARAMETER
        description = err_code_mgr.get_error_msg(err_code_mgr.ER_NO_EVENT_FILTER_PARAMETER)
    
    #start_time 和 end_time 参数检查
    elif event_filter.start_time is not None and event_filter.start_time<0:
        return_code = err_code_mgr.ER_NEGATIVE_START_TIME
        description = err_code_mgr.get_error_msg(err_code_mgr.ER_NEGATIVE_START_TIME                                                                
                                                        , start_time=event_filter.start_time)
    elif event_filter.end_time is not None and event_filter.end_time<0:
        return_code = err_code_mgr.ER_NEGATIVE_END_TIME
        description = err_code_mgr.get_error_msg(err_code_mgr.ER_NEGATIVE_END_TIME                                                                
                                                        , end_time=event_filter.end_time)
        
    elif (event_filter.start_time is not None 
        and event_filter.end_time is not None 
        and event_filter.start_time> event_filter.end_time):
        return_code = err_code_mgr.ER_END_LESS_START
        description = err_code_mgr.get_error_msg(err_code_mgr.ER_END_LESS_START
                                                        , end_time=event_filter.end_time
                                                        , start_time=event_filter.start_time)
    return return_code, description
Ejemplo n.º 3
0
    def handle_cmd(self, frame):
        """
        Method: handle_cmd
        Description: 调用事件查询处理器来查询可用的过滤条件列表
        Parameter: 
            frame: 请求消息,data中为EventFilterListRequest对象
        Return: 
        Others: 
        """

        result = message_across_app.EventFilterListResponse()
        result.init_all_attr()
        
        buf = frame.get_data()        
        try:
            req = message_across_app.EventFilterListRequest.deserialize(buf)
        except Exception:
            result.user_session = ''            
            result.return_code = err_code_mgr.ER_INVALID_DESERIALIZE_STRING_ERROR
            result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_INVALID_DESERIALIZE_STRING_ERROR
                                                            , cmd='EventFilterList'
                                                            , param_name='EventFilterListRequest')            
            self.get_worker().get_app().send_ack(frame, (result.serialize(), ))            
            return     
        levels, device_types, object_types = self.get_worker().get_event_query_processor().event_filter_list()
        result.user_session = req.user_session
        result.return_code = err_code_mgr.ER_SUCCESS
        result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_SUCCESS)
        result.levels = levels
        result.device_types = device_types
        result.object_types = object_types
        
        self.get_worker().get_app().send_ack(frame, (result.serialize(), ))
Ejemplo n.º 4
0
    def handle_cmd(self, frame):
        """
        Method:    handle_cmd
        Description: 处理修改分组的命令消息
        Parameter: 
            frame: AppFrame
        Return: 
        Others: 
        """
        tracelog.info(self)
                
        result = basic_rep_to_web.BasicRepToWeb()
        result.init_all_attr()
        tracelog.info('subscriber cfg worker recv group frame: %s' % frame)
        buf = frame.get_data()
        
        try:
            grp_mod = msg_params_def.PortalSubscriberGroupModifyReq.deserialize(buf)
        except:
            result.return_code = err_code_mgr.ERR_PORTAL_DESERIALIZE_ERROR
            result.description = err_code_mgr.get_error_msg(err_code_mgr.ERR_PORTAL_DESERIALIZE_ERROR,
                                                            cmd = 'PORTAL_SUBSCRIBER_GROUP_MODIFY',
                                                            param_name = 'PortalSubscriberGroupModifyReq')
            result.user_session = ''
            self.get_worker().get_app().send_ack_dispatch(frame, (result.serialize(), ))
            return
        
        grp_moc = self.get_worker().get_app().get_mit_manager().gen_rdm("Group")
        grp_moc.group_id = int(grp_mod.group_id)
        grp_moc.group_name = grp_mod.group_name
        grp_moc.description = grp_mod.description

        ret = self.get_worker().get_app().get_mit_manager().rdm_mod(grp_moc)
        
        if ret.get_err_code() == err_code_mgr.ER_OBJECT_NOT_EXIST:
            result.return_code = err_code_mgr.ERR_PORTAL_GROUP_NOT_EXISTS
            result.description = err_code_mgr.get_error_msg(err_code_mgr.ERR_PORTAL_GROUP_NOT_EXISTS)

            result.prepare_for_ack(grp_mod, result.return_code, result.description)
            self.get_worker().get_app().send_ack_dispatch(frame, (result.serialize(), ))
            return
        
        elif ret.get_err_code() != 0:
            result.return_code = ret.get_err_code()
            result.description = ret.get_msg()
            
            result.prepare_for_ack(grp_mod, result.return_code, result.description)
            self.get_worker().get_app().send_ack_dispatch(frame, (result.serialize(), ))
            return

        # 给WEB回成功响应
        result.return_code = err_code_mgr.ER_SUCCESS
        result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_SUCCESS)       
        result.prepare_for_ack(grp_mod, result.return_code, result.description)

        self.get_worker().get_app().send_ack_dispatch(frame, (result.serialize(), ))
Ejemplo n.º 5
0
    def handle_cmd(self, frame):
        """
        Method:    handle_cmd
        Description: 处理查询分组的命令消息
        Parameter: 
            frame: AppFrame
        Return: 
        Others: 
        """
        tracelog.info(self)
        
        result = msg_params_def.PortalSubscriberGroupQueryRsp()
        result.init_all_attr()
        tracelog.info('subscriber cfg worker recv group frame: %s' % frame)
        buf = frame.get_data()
        
        try:
            grp_qry = msg_params_def.CommonQueryReq.deserialize(buf)
        except:
            result.return_code = err_code_mgr.ERR_PORTAL_DESERIALIZE_ERROR
            result.description = err_code_mgr.get_error_msg(err_code_mgr.ERR_PORTAL_DESERIALIZE_ERROR,
                                                            cmd = 'PORTAL_SUBSCRIBER_GROUP_QUERY',
                                                            param_name = 'CommonQueryReq')
            result.user_session = ''
            self.get_worker().get_app().send_ack_dispatch(frame, (result.serialize(), ))
            return

        records = self.get_worker().get_app().get_mit_manager().rdm_find('Group')
        sub_records = self.get_worker().get_app().get_mit_manager().lookup_attrs('Subscriber', ['group_ids'])
        
        result.groups = []
        for grp_rec in records:
            grp = msg_params_def.Group()
            grp.init_all_attr()
            grp.group_id = str(grp_rec.group_id)
            grp.group_name = grp_rec.group_name
            grp.description = grp_rec.description

            count = 0
            for sub_rec in sub_records:
                if grp_rec.group_id in sub_rec[0].group_ids:
                    count += 1            
            grp.group_sub_num = count

            result.groups.append(grp)

        # 给WEB回成功响应
        result.count = len(result.groups)
        result.return_code = err_code_mgr.ER_SUCCESS
        result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_SUCCESS)
        result.prepare_for_ack(grp_qry, result.return_code, result.description)
        tracelog.info(result.serialize())
         
        self.get_worker().get_app().send_ack_dispatch(frame, (result.serialize(), ))
Ejemplo n.º 6
0
def ntpd_write(mit_manager):
    """
    Function: ntpd_write
    Description: 对系统ntp配置文件进行IO重写,并且重启ntp服务
    Parameter: 
        mit_manager: 在worker中注册的mit
    Return: errcode: 处理结果的错误码
            errdescription: 处理结果关于错误信息的描述
    Others: 无
    """

    openfile = None
    errcode = err_code_mgr.ER_SUCCESS
    errdescription = err_code_mgr.get_error_msg(err_code_mgr.ER_SUCCESS)
    try:
        openfile = open(filepath,'w+')
        openfile.write("driftfile /var/lib/ntp/drift\n")   
        openfile.write("includefile /etc/ntp/crypto/pw\n")
        openfile.write("keys /etc/ntp/keys\n")
        
        records = mit_manager.lookup_attrs("NtpdControlMOC", ['openserver' ,'stratum'])
        for record in records:
            if record[0] == "on":
                openfile.write("fudge 127.127.1.0 stratum %d\n" %(record[1]))
                openfile.write("restrict default\n")
                openfile.write("restrict 127.0.0.1\n")
                openfile.write("server 127.127.1.0\n")
            
        records = mit_manager.lookup_attrs("NtpdSubnetMOC", ['subnetip' ,'mask'])
        for record in records:
            openfile.write("restrict %s mask %s nomodify\n" % (record[0],record[1]))
        
        records = mit_manager.lookup_attrs("NtpdServerMOC", ['serverip'])
        for record in records:
            openfile.write("server %s minpoll 4 maxpoll 5\n" %  (record[0]))
    except IOError:
        errcode = err_code_mgr.ER_NTPD_IO_WRONG
        errdescription = err_code_mgr.get_error_msg(err_code_mgr.ER_NTPD_IO_WRONG)
    finally:
        if openfile is not None:
            openfile.close()
            
    if errcode == err_code_mgr.ER_NTPD_IO_WRONG:
        return errcode,errdescription
    
    for i in xrange(3):
        if os.system("service ntpd restart") == 0:
            return errcode,errdescription
        time.sleep(1)    
    
    tracelog.error('Can Not ReStart NTPD Service')
    errcode = err_code_mgr.ER_NTPD_SERVICE_OPEN_ERROR
    errdescription = err_code_mgr.get_error_msg(err_code_mgr.ER_NTPD_SERVICE_OPEN_ERROR)
    return errcode,errdescription
Ejemplo n.º 7
0
    def handle_cmd(self, frame):
        """
        Method: handle_cmd
        Description: 打开关闭NTPD服务
        Parameter: 
            frame: 收到的处理消息
            data区1个参数:
            msg:NtpdControl对象
        Return: 无
        Others: 1. 开关参数为on,off
                2. 打开服务时,stratum有效值为1-15,数值越小,优先级越高
        """

        try:
            msg = ntpd_params.NtpdControl().deserialize(frame.get_data())
        except:
            result = ntpd_params.GetNtpdHandlerResult()
            result.return_code = err_code_mgr.ER_NTPD_INVALID_DESERIALIZE_ERROR
            result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_NTPD_INVALID_DESERIALIZE_ERROR)
            self.get_worker().send_ack(frame, (result.serialize(), ))
            return
        
        rdms = self.get_worker().get_mit_manager().rdm_find("NtpdControlMOC")
        if len(rdms)==0:
            result = ntpd_params.GetNtpdHandlerResult()
            result.return_code = err_code_mgr.ER_NTPD_DB_ERROR
            result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_NTPD_DB_ERROR)
            self.get_worker().send_ack(frame, (result.serialize(), ))
            return
            
        if rdms[0].openserver==msg.openserver:
            response= ntpd_params.GetNtpdHandlerResult() 
            response.return_code = err_code_mgr.ER_NTPD_HAS_OP_ERROR
            response.description = err_code_mgr.get_error_msg(err_code_mgr.ER_NTPD_HAS_OP_ERROR)
            self.get_worker().send_ack(frame, (response.serialize(), ))
            return

        rdms[0].openserver = msg.openserver
        rdms[0].stratum = msg.stratum
        ret = self.get_worker().get_mit_manager().rdm_mod(rdms[0])
        if ret.get_err_code()!=err_code_mgr.ER_SUCCESS:
            result = ntpd_params.GetNtpdHandlerResult() 
            result.init_all_attr()
            result.return_code = ret.get_err_code()
            result.description = ret.get_msg()
            self.get_worker().send_ack(frame, (result.serialize(), ))
            return

        return_code, description = ntpd_set.ntpd_write(self.get_worker().get_mit_manager()) 
        response= ntpd_params.GetNtpdHandlerResult()    
        response.return_code = return_code
        response.description = description
        self.get_worker().send_ack(frame, (response.serialize(), ))    
Ejemplo n.º 8
0
    def handle_cmd(self, frame):
        """
        Method: handle_cmd
        Description: 删除NTPD的某个服务器IP地址
        Parameter: 
            frame: 收到的处理消息
            data区一个参数
            msg:NtpdServer对象
        Return: 无
        Others: 无
        """

        try:
            msg = ntpd_params.NtpdServer().deserialize(frame.get_data())
        except:
            result = ntpd_params.GetNtpdHandlerResult()
            result.return_code = err_code_mgr.ER_NTPD_INVALID_DESERIALIZE_ERROR
            result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_NTPD_INVALID_DESERIALIZE_ERROR)
            self.get_worker().send_ack(frame, (result.serialize(), ))
            return
        
        if msg.serverip is None:
            result = ntpd_params.GetNtpdHandlerResult()
            result.return_code = err_code_mgr.ER_NTPD_INVALID_DESERIALIZE_ERROR
            result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_NTPD_INVALID_DESERIALIZE_ERROR)
            self.get_worker().send_ack(frame, (result.serialize(), ))
            return
        
        ntpdserver_moc = self.get_worker().get_mit_manager().gen_rdm("NtpdServerMOC")  
        ntpdserver_moc.serverip = msg.serverip
           
        ret = self.get_worker().get_mit_manager().rdm_remove(ntpdserver_moc)
        if ret.get_err_code() == err_code_mgr.ER_OBJECT_NOT_EXIST:
            result = ntpd_params.GetNtpdHandlerResult()
            result.return_code = err_code_mgr.ER_NTPD_SERVER_NOT_EXIST
            result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_NTPD_SERVER_NOT_EXIST)
            self.get_worker().send_ack(frame, (result.serialize(), ))
            return 
        if ret.get_err_code()!=err_code_mgr.ER_SUCCESS:
            result = ntpd_params.GetNtpdHandlerResult()
            result.return_code = ret.get_err_code()
            result.description = ret.get_msg()
            self.get_worker().send_ack(frame, (result.serialize(), ))
            return   

        return_code, description = ntpd_set.ntpd_write(self.get_worker().get_mit_manager()) 
        response= ntpd_params.GetNtpdHandlerResult()    
        response.return_code = return_code
        response.description = description    
        self.get_worker().send_ack(frame, (response.serialize(), ))
        
Ejemplo n.º 9
0
    def handle_cmd(self, frame):
        """
        Method: handle_cmd
        Description: 为NTPD服务设置子网段
        Parameter: 
            frame: 收到的处理消息
            data区一个参数:
            msg:NtpdSubnet对象
        Return: 无
        Others: 无
        """

        try:
            msg = ntpd_params.NtpdSubnet().deserialize(frame.get_data())
        except:
            result = ntpd_params.GetNtpdHandlerResult()
            result.return_code = err_code_mgr.ER_NTPD_INVALID_DESERIALIZE_ERROR
            result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_NTPD_INVALID_DESERIALIZE_ERROR)
            self.get_worker().send_ack(frame, (result.serialize(), ))
            return
        
        if msg.subnetip is None or msg.mask is None:
            result = ntpd_params.GetNtpdHandlerResult()
            result.return_code = err_code_mgr.ER_NTPD_INVALID_DESERIALIZE_ERROR
            result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_NTPD_INVALID_DESERIALIZE_ERROR)
            self.get_worker().send_ack(frame, (result.serialize(), ))
            return

        ntpdsubnet_moc = self.get_worker().get_mit_manager().gen_rdm("NtpdSubnetMOC")        
        ntpdsubnet_moc.subnetip = msg.subnetip
        ntpdsubnet_moc.mask = msg.mask  
        ret = self.get_worker().get_mit_manager().rdm_add(ntpdsubnet_moc)
        
        if ret.get_err_code()==err_code_mgr.ER_OBJECT_ADD_CONFLICT:
            result = ntpd_params.GetNtpdHandlerResult()
            result.return_code = err_code_mgr.ER_DUPLICATE_NTPD_SUBNET_ERROR
            result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_DUPLICATE_NTPD_SUBNET_ERROR)
            self.get_worker().send_ack(frame, (result.serialize(), ))
            return
        if ret.get_err_code()!=err_code_mgr.ER_SUCCESS:
            result = ntpd_params.GetNtpdHandlerResult()
            result.return_code = ret.get_err_code()
            result.description = ret.get_msg()
            self.get_worker().send_ack(frame, (result.serialize(), ))
            return
 
        return_code, description = ntpd_set.ntpd_write(self.get_worker().get_mit_manager()) 
        response= ntpd_params.GetNtpdHandlerResult()    
        response.return_code = return_code
        response.description = description
        self.get_worker().send_ack(frame, (response.serialize(), ))  
Ejemplo n.º 10
0
    def handle_cmd(self, frame):
        """
        Method:    handle_cmd
        Description: 处理删除分组的命令消息
        Parameter: 
            frame: AppFrame
        Return: 
        Others: 
        """
        tracelog.info(self)
        
        result = basic_rep_to_web.BasicRepToWeb()
        result.init_all_attr()
        tracelog.info('subscriber cfg worker recv group frame: %s' % frame)
        buf = frame.get_data()
        
        try:
            grp_rmv = msg_params_def.PortalSubscriberGroupRemoveReq.deserialize(buf)
        except:
            result.return_code = err_code_mgr.ERR_PORTAL_DESERIALIZE_ERROR
            result.description = err_code_mgr.get_error_msg(err_code_mgr.ERR_PORTAL_DESERIALIZE_ERROR,
                                                            cmd = 'PORTAL_SUBSCRIBER_GROUP_REMOVE',
                                                            param_name = 'PortalSubscriberGroupRemoveReq')
            result.user_session = ''
            self.get_worker().get_app().send_ack_dispatch(frame, (result.serialize(), ))
            return

        group_id = int(grp_rmv.group_id)
        grps = self.get_worker().get_app().get_mit_manager().rdm_find(moc_name = "Group", group_id = group_id)
        if len(grps) == 1:
            subs = self.get_worker().get_app().get_mit_manager().lookup_attrs('Subscriber', ['group_ids'])
            for sub in subs:
                if group_id in sub[0]:
                    result.return_code = err_code_mgr.ERR_PORTAL_GROUP_ASSOCIATED_BY_SUB
                    result.description = err_code_mgr.get_error_msg(err_code_mgr.ERR_PORTAL_GROUP_ASSOCIATED_BY_SUB)
        
                    result.prepare_for_ack(grp_rmv, result.return_code, result.description)
                    self.get_worker().get_app().send_ack_dispatch(frame, (result.serialize(), ))
                    return
                            
            self.get_worker().get_app().get_mit_manager().rdm_remove(grps[0])

        # 给WEB回成功响应
        result.return_code = err_code_mgr.ER_SUCCESS
        result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_SUCCESS)       
        result.prepare_for_ack(grp_rmv, result.return_code, result.description)

        self.get_worker().get_app().send_ack_dispatch(frame, (result.serialize(), ))
Ejemplo n.º 11
0
    def handle_cmd(self, frame):
        """
        Method: handle_cmd
        Description: 收到web的消息,转换为event_data,加入到队列中。
        Parameter: 
            frame: 请求消息,data中为EventFromWebRequest对象
        Return: 无
        Others: 
        """

        buf = frame.get_data()
        tracelog.info('WebEventReportHandler data %s'%buf)
        result = basic_rep_to_web.BasicRepToWeb();
        result.init_all_attr()        
        
        buf = frame.get_data()        
        try:
            req = message_across_app.EventFromWebRequest.deserialize(buf)
        except Exception:
            result.user_session = ''            
            result.return_code = err_code_mgr.ER_INVALID_DESERIALIZE_STRING_ERROR
            result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_INVALID_DESERIALIZE_STRING_ERROR
                                                            , cmd='WebEventRepor'
                                                            , param_name='EventFromWebRequest')            
            self.get_worker().get_app().send_ack(frame, (result.serialize(), ))            
            return     
        
        event_data = event_sender.EventData()
        event_data.set_event_id(req.event_id)
        event_data.set_event_flag(req.event_flag)
        event_data.set_generate_time(req.generate_time_inner)
        event_data.set_device_id(req.device_id)
        event_data.set_object_id(req.object_id)
        
        params = {}
        #param需要全部转换为utf-8
        for key in req.params:
            if isinstance(req.params[key], unicode):
                params[key.encode('utf-8')] = req.params[key].encode('utf-8')
            else:
                params[key.encode('utf-8')] = req.params[key]
        event_data.set_params(params)        
        
        self.get_worker().add_event_data(event_data)
        
        result.prepare_for_ack(req, err_code_mgr.ER_SUCCESS, err_code_mgr.get_error_msg(err_code_mgr.ER_SUCCESS))
        self.get_worker().get_app().send_ack(frame, (result.serialize(), ))
        return    
Ejemplo n.º 12
0
    def handle_cmd(self, frame):
        """
        Method: handle_cmd
        Description: 获取NTPD服务器IP地址
        Parameter: 
            frame: 收到的处理消息
        Return: 无
        Others: 无
        """

        records = self.get_worker().get_mit_manager().lookup_attrs("NtpdServerMOC", ['serverip'])
    
        results = ntpd_params.GetNtpdServerListResult()
        results.init_all_attr()
        results.ntpdservers = []  
        
        for record in records:
            ntpdserver = ntpd_params.NtpdServer()
            ntpdserver .init_all_attr()
            ntpdserver .serverip = record[0]
            results.ntpdservers.append(ntpdserver)
        
        results.return_code = err_code_mgr.ER_SUCCESS
        results.description = err_code_mgr.get_error_msg(err_code_mgr.ER_SUCCESS)
        self.get_worker().send_ack(frame, (results.serialize(), ))
Ejemplo n.º 13
0
    def handle_cmd(self, frame):
        """
        Method: handle_cmd
        Description: 获取NTPD的子网段
        Parameter: 
            frame: 收到的处理消息
        Return: 无
        Others: 无
        """

        records = self.get_worker().get_mit_manager().lookup_attrs("NtpdSubnetMOC", ['subnetip', 'mask'])
   
        results = ntpd_params.GetNtpdSubnetListResult()
        results.init_all_attr()
        results.ntpdsubnets = []  
        
        for record in records:
            ntpdsubnet = ntpd_params.NtpdSubnet()
            ntpdsubnet.init_all_attr()
            ntpdsubnet.subnetip = record[0]
            ntpdsubnet.mask= record[1]
            results.ntpdsubnets.append(ntpdsubnet)
        
        results.return_code = err_code_mgr.ER_SUCCESS
        results.description = err_code_mgr.get_error_msg(err_code_mgr.ER_SUCCESS)
        self.get_worker().send_ack(frame, (results.serialize(), ))
Ejemplo n.º 14
0
    def handle_cmd(self, frame):
        """
        Method: handle_cmd
        Description: 提供FTP用户列表返回
        Parameter: 
            frame:无 
        Return: 无
        Others: 无
        """

        
        records =  self.get_worker().get_app().get_mit_manager().lookup_attrs("FtpServerUserMOC"
                                                                              ,['username','password','homedir','perm'])
        results = ftp_server_params.GetFtpUserListResult()
        results.init_all_attr()
        results.FtpUsers = []
        
        for record in records:
            ftp_user = ftp_server_params.FtpUser()
            ftp_user.init_all_attr()
            ftp_user.username = record[0]
            ftp_user.homedir = record[2]
            ftp_user.perm = record[3]
            results.FtpUsers.append(ftp_user)
        
        results.return_code = err_code_mgr.ER_SUCCESS
        results.description = err_code_mgr.get_error_msg(err_code_mgr.ER_SUCCESS)
        self.get_worker().send_ack(frame, (results.serialize(), ))
        
        
Ejemplo n.º 15
0
    def handle_cmd(self, frame):
        """
        Method: handle_cmd
        Description: 注销请求处理函数,调用name_mit_manager的相应函数进行处理,然后更新本地缓存,再广播到其他APP。
        Parameter: 
            frame: 注销请求消息,数据区为AppUnRegisterRequest
        Return: 
        Others: 
        """

        buf = frame.get_data()
        result = bf.AppUnRegisterResponse()
        result.init_all_attr()
        app = self.get_worker().get_app()
        try:
            un_reg_req = bf.AppUnRegisterRequest.deserialize(buf)
            tracelog.info("unregist name service:%r" % un_reg_req)
        except Exception:            
            result.return_code = err_code_mgr.ER_INVALID_DESERIALIZE_STRING_ERROR
            result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_INVALID_DESERIALIZE_STRING_ERROR
                                                            , cmd='UnRegisterApp'
                                                            , param_name='AppUnRegisterRequest')            
            app.send_ack(frame, result.serialize())
            tracelog.error('%s\n%s'%(result.description, buf))
            return
            
        result = self.get_worker().unregister_app(un_reg_req)        

        if un_reg_req.need_reponse is True:
            app.send_ack(frame, result.serialize())
        
        return
Ejemplo n.º 16
0
    def register_app(self, req):
        """
        Method: register_app
        Description: 提供注册名字到mit的函数,如果已经发现存在旧的注册信息,更新注册信息;否则,生成新的注册信息
        Parameter: 
            req: 注册请求消息
        Return: 注册结果信息
        Others: 
        """

        with self.__mit_mutex:
            # 只有master才可以进行名字注册
            if not self.__is_master:
                result = bf.AppUnRegisterResponse()
                result.init_all_attr()
                result.return_code = err_code_mgr.ER_NAME_SERVER_IS_NOT_MASTER
                result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_NAME_SERVER_IS_NOT_MASTER
                                                                        , ip=self.__cluster_master_ip)    
                return result
                
            result =  self.__name_mit_manager.register_app(req)

            if result.return_code==0:
                self.broadcast_reg_names() 
                
            return result
Ejemplo n.º 17
0
    def handle_cmd(self, frame):
        """
        Method: handle_cmd
        Description: 名字服务查询处理函数,调用name_mit_manager的相应函数进行处理,返回给发送者
        Parameter: 
            frame: 名字服务查询请求消息,数据区为 AppQueryRequest
        Return: 
        Others: 
        """

        buf = frame.get_data()
        result = bf.AppQueryResponse()
        result.init_all_attr()
        app = self.get_worker().get_app()
        try:
            req = bf.AppQueryRequest.deserialize(buf)            
        except Exception:            
            result.return_code = err_code_mgr.ER_INVALID_DESERIALIZE_STRING_ERROR
            result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_INVALID_DESERIALIZE_STRING_ERROR
                                                            , cmd='QueryApp'
                                                            , param_name='AppQueryRequest')            
            app.send_ack(frame, result.serialize())
            return        
        result = self.get_worker().query_registered_app(req)
        app.send_ack(frame, result.serialize())
        return
Ejemplo n.º 18
0
    def handle_cmd(self, frame):
        """
        Method:    handle_cmd
        Description: 处理消息
        Parameter: 
            frame: AppFrame
        Return: 无
        Others: 
        """
        
        para = cluster_msg_def.RmvClusterNodeRequest.deserialize(frame.get_data())

        if para is None:
            tracelog.error("invalid request! frame:%s" %(frame))
            return

        
        rep = cluster_msg_def.RmvClusterNodeResponse()        
        cur_cluster = self.get_worker().get_cur_cluster()
        if cur_cluster is None:
            rep.return_code = err_code_mgr.ER_CLUSTER_IS_DISABLE
            rep.description = err_code_mgr.get_error_msg(err_code_mgr.ER_CLUSTER_IS_DISABLE)
        else:
            rep.return_code, rep.description = cur_cluster.rmv_node(para.ip)

        # 发送应答
        self.get_worker().send_ack(frame,rep.serialize())
Ejemplo n.º 19
0
    def __send_ack(self, req_frame, ret, msg=None):
        """
        Method: __send_ack
        Description: 发送应答消息
        Parameter: 
            req_frame: 请求消息
            ret: 错误码
            msg: 错误信息
        Return: 
        Others: 
        """

        if msg is None:
            msg = err_code_mgr.get_error_msg(ret)
            
        rep = db_sync_base.SyncFullResponse()
        rep.ne_id = self.req.ne_id
        rep.return_code = ret        
        rep.description = msg

        frame_ack = bf.AppFrame()
        frame_ack.prepare_for_ack(req_frame)
        frame_ack.add_data(rep.serialize())
        frame_ack.set_receiver_pid(plt_const_def.IMC_PID)        
        frame_ack.set_next_pid(self.get_worker().get_pid("IMCGate"))
        self.get_worker().dispatch_frame_to_process_by_pid(plt_const_def.IMC_PID, frame_ack)
Ejemplo n.º 20
0
    def _on_round_over(self, round_id, r):        
        """
        Method: _on_round_over
        Description: 接收业务模块的响应,构造XML返回给微信
        Parameter: 
            round_id: 
            r: 
        Return: 
        Others: 
        """
        frame = r.get_response_frame()
        msg_type = frame.get_data()
        msg_buf = frame.get_data(1)

        wx_rpl_msg_proc_dict = {msg_params_def.WX_MSG_TYPE_TEXT: WXRplTextMsgProc,
                                msg_params_def.WX_MSG_TYPE_MUSIC: WXRplMusicMsgProc,
                                msg_params_def.WX_MSG_TYPE_NEWS: WXRplNewsMsgProc,
                                }        
        wx_rpl_msg_proc = wx_rpl_msg_proc_dict[msg_type]
        xml_msg = wx_rpl_msg_proc(msg_buf).gen_xml()
        
        reply = msg_params_def.CommonContentRsp()
        reply.init_all_attr()
        reply.return_code = err_code_mgr.ER_SUCCESS
        reply.description = err_code_mgr.get_error_msg(err_code_mgr.ER_SUCCESS)
        reply.prepare_for_ack(self._message, reply.return_code, reply.description)          
        reply.content = xml_msg

        tracelog.info('reply msg to WX: %s' % reply.content)
        
        self.get_worker().get_app().send_ack_dispatch(self._req_frame, (reply.serialize(), ))
Ejemplo n.º 21
0
    def rmv_node(self, ip):
        """
        Method: rmv_node
        Description: 删除指定的节点
        Parameter: 
            ip: 指定的节点的ip
        Return: 错误码,错误信息
        Others: 
        """

        online_err = (err_code_mgr.ER_CANNOT_RMV_ONLINE_CLUSTER_NODE
                        , err_code_mgr.get_error_msg(err_code_mgr.ER_CANNOT_RMV_ONLINE_CLUSTER_NODE))
                        
        with self.__lock:
            # 只允许删除离线的节点
            if ip == self.__cluster_cfg_info.my_inner_ip:
                return online_err

            for node in self.__other_nodes:
                if node.get_ip() == ip and node.is_online():
                    return online_err
            
            # 先删除mit中的信息
            ret_code, err_msg = self.__mit.rmv_node(ip)

            if ret_code == 0:
                # 删除内存中的信息
                self.__rmv_node(ip)
                
                tracelog.info("remvoe node %s." % ip)
            else:
                tracelog.error("remvoe node %s failed." % ip)

        return ret_code, err_msg
Ejemplo n.º 22
0
    def handle_cmd(self, frame):
        """
        Method: handle_cmd
        Description:调用事件导出管理器查询事件导出任务 
        Parameter: 
            frame: 请求消息,data中为ExportTaskRequest对象
        Return: 
        Others: 
        """

        buf = frame.get_data()
        try:
            req = message_across_app.ExportTaskRequest.deserialize(buf)
        except Exception:
            #
            result = message_across_app.ExportTaskResponse()
            result.init_all_attr()
            result.user_session = ''            
            result.return_code = err_code_mgr.ER_INVALID_DESERIALIZE_STRING_ERROR
            result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_INVALID_DESERIALIZE_STRING_ERROR
                                                            , cmd='EventExportTaskQuery'
                                                            , param_name='ExportTaskRequest')
            result.tasks = []            
            self.get_worker().get_app().send_ack(frame, (result.serialize(), ))            
            return        
        
        result = self.get_worker().get_event_export_manager().query_export_task(req)
        
        self.get_worker().get_app().send_ack(frame, (result.serialize(), ))                 
Ejemplo n.º 23
0
    def handle_cmd(self, frame):
        """
        Method: handle_cmd
        Description: 打包任务情况查询
        Parameter: 
            frame: 收到的处理消息
            data区1个参数:
            msg:PackageLogExportTaskRequest对象 
        Return: 无
        Others: 无
        """

        try:
            req = maintain_log_params.PackageLogExportTaskRequest().deserialize(frame.get_data())
        except Exception:
            result = maintain_log_params.PackageLogExportTaskResponse()
            result.init_all_attr()
            result.user_session = ''
            result.return_code = err_code_mgr.ER_MAINTAINLOG_INVALID_DESERIALIZE_ERROR
            result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_MAINTAINLOG_INVALID_DESERIALIZE_ERROR
                                                            , cmd='PackageLogExportTaskQueryHandler')
            result.tasks = []            
            self.get_worker().get_app().send_ack(frame, (result.serialize(), ))            
            return
        
        result = self.get_worker().get_maintain_log_manager().query_export_task(req)
        
        self.get_worker().get_app().send_ack(frame, (result.serialize(), ))
Ejemplo n.º 24
0
    def unregister_app(self, req):
        """
        Method: unregister_app
        Description: 提供从mit中注销名字信息的函数
        Parameter: 
            req: 注销名字请求
        Return: 注销名字的返回信息
        Others: 
        """

        with self.__mit_mutex:
            # 只有master才可以进行名字注销
            if not self.__is_master:
                result = bf.AppUnRegisterResponse()
                result.init_all_attr()
                result.return_code = err_code_mgr.ER_NAME_SERVER_IS_NOT_MASTER
                result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_NAME_SERVER_IS_NOT_MASTER
                                                                        , ip=self.__cluster_master_ip)    
                return result
                
            result = self.__name_mit_manager.unregister_app(req)
            if result.return_code==0:      
                self.broadcast_reg_names()    

            return result
Ejemplo n.º 25
0
    def handle_cmd(self, frame):
        """
        Method: handle_cmd
        Description: 请求处理函数,如果EventQueryRequest对象反序列化成功,进行必要的参数检查,
                                然后调用事件查询处理器,查询事件记录数,和指定分页的记录,返回给查询者。
        Parameter: 
            frame: 请求消息,data中为EventQueryRequest对象
        Return: 无
        Others: 
        """

        buf = frame.get_data()
        tracelog.info('EventQueryHandler data %s'%buf)
        result = message_across_app.EventQueryResponse()
        result.init_all_attr()
        result.count = 0
        result.event_query_result = []
            
        try:
            req = message_across_app.EventQueryRequest.deserialize(buf)
        except Exception, err:
            tracelog.error('EventQueryHandler deserialize exception: %s'%err)
            result.user_session = ''            
            result.return_code = err_code_mgr.ER_INVALID_DESERIALIZE_STRING_ERROR
            result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_INVALID_DESERIALIZE_STRING_ERROR
                                                            , cmd='EventQuery'
                                                            , param_name='EventQueryRequest')
            result.count = 0
            result.event_query_result = []
            self.send_ack(frame, (result.serialize(), ))            
            return
Ejemplo n.º 26
0
    def handle_cmd(self, frame):
        """
        Method: handle_cmd
        Description: 注册请求处理函数,调用name_mit_manager的相应函数进行处理,然后更新本地缓存,再广播到其他APP。
        Parameter: 
            frame: 注册请求,数据区为AppRegisterRequest
        Return: 
        Others: 
        """

        buf = frame.get_data()
        result = bf.AppRegisterResponse()
        result.init_all_attr()
        app = self.get_worker().get_app()
        try:
            reg_req = bf.AppRegisterRequest.deserialize(buf)            
        except Exception:            
            result.return_code = err_code_mgr.ER_INVALID_DESERIALIZE_STRING_ERROR
            result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_INVALID_DESERIALIZE_STRING_ERROR
                                                            , cmd='RegisterApp'
                                                            , param_name='AppRegisterRequest')            
            app.send_ack(frame, (result.serialize(), ))
            return
        
        result = self.get_worker().register_app(reg_req)       
        
        app.send_ack(frame, result.serialize())            
        return
Ejemplo n.º 27
0
    def handle_cmd(self, frame):
        """
        Method: handle_cmd
        Description: 提供FTP用户密码修改
        Parameter: 
            frame: 收到的处理消息
            data区1个参数:
            msg: FtpChangePassword对象 
        Return: 无
        Others: 无
        """

        try:
            msg = ftp_server_params.FtpChangePassword().deserialize(frame.get_data())
        except:
            result = ftp_server_params.GetFtpServerHandlerResult()
            result.return_code = err_code_mgr.ER_FTPSERVER_INVALID_DESERIALIZE_ERROR
            result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_FTPSERVER_INVALID_DESERIALIZE_ERROR)
            self.get_worker().send_ack(frame, (result.serialize(), ))
            return

        rdms = self.get_worker().get_app().get_mit_manager().rdm_find("FtpServerUserMOC",username=msg.username)
        if len(rdms)==0:
            result = ftp_server_params.GetFtpServerHandlerResult()
            result.return_code = err_code_mgr.ER_FTPSERVER_USER_NOT_EXISTS_ERROR
            result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_FTPSERVER_USER_NOT_EXISTS_ERROR)
            self.get_worker().send_ack(frame, (result.serialize(), ))
            return

        rdms[0].password = md5(msg.newpassword).hexdigest()
        ret = self.get_worker().get_app().get_mit_manager().rdm_mod(rdms[0])
        if ret.get_err_code()!=err_code_mgr.ER_SUCCESS:
            result = ftp_server_params.GetFtpServerHandlerResult()
            result.return_code = err_code_mgr.ER_FTPSERVER_DB_ERROR
            result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_FTPSERVER_DB_ERROR)
            self.get_worker().send_ack(frame, (result.serialize(), ))
            return 
        
        self.get_worker().get_app().get_ftp_server_manage().get_authorizer().change_password(msg.username
                                                                                             ,msg.newpassword)
        
        result = ftp_server_params.GetFtpServerHandlerResult()
        result.return_code = err_code_mgr.ER_SUCCESS
        result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_SUCCESS)
        self.get_worker().send_ack(frame, (result.serialize(), ))
Ejemplo n.º 28
0
    def query_export_task(self, export_task_request):
        """
        Method: query_export_task
        Description: log打包任务情况查询
        Parameter: 
            export_task_request: 查看任务情况参数,是个PackageLogExportTaskRequest对象
        Return: result(任务情况信息,是个PackageLogExportTaskResponse对象)
        Others: 无
        """

        result = maintain_log_params.PackageLogExportTaskResponse()
        result.init_all_attr()
        result.prepare_for_ack(export_task_request
                               , err_code_mgr.ER_SUCCESS
                               , err_code_mgr.get_error_msg(err_code_mgr.ER_SUCCESS))        
        result.tasks = []
        
        with self.__lock:
            #查询指定任务
            if isinstance(export_task_request.task_nos, list) and len(export_task_request.task_nos)>0:
                for task_no in export_task_request.task_nos:
                    if self.__task_info_map.has_key(task_no):
                        result.tasks.append(copy.copy(self.__task_info_map[task_no]))
                    else:
                        task_info = maintain_log_params.PackageLogExportTask()
                        task_info.init_all_attr()
                        task_info.task_no = task_no
                        task_info.status = 'unknown'
                        task_info.location = ''
                        result.tasks.append(task_info)
                        
            #查询全部任务,以及其他文件                
            else:
                locations = glob.glob(os.path.join(self.__export_log_path,'*.zip'))                
                locations_set = set(locations)
                
                for task_info in self.__task_info_map.itervalues():
                    result.tasks.append(copy.copy(task_info))                    
                    locations_set.discard(task_info.location)
                    
                for location in locations_set:
                    task_info = maintain_log_params.PackageLogExportTask()
                    task_info.init_all_attr()
                    task_info.task_no = 0
                    task_info.status = 'unknown'
                    task_info.location = location
                    result.tasks.append(task_info)

        # 查询结果中,需要将文件路径,修改为http的相对路径
        for task_info in result.tasks:
            file_name = os.path.basename(task_info.location)

            # 这里不使用os.path.join,因为web只认'/'
            new_path = "export_data/log/" + file_name
            task_info.location = new_path
        
        return result
Ejemplo n.º 29
0
    def query_export_task(self, export_task_request):
        """
        Method: query_export_task
        Description: 查询导出任务信息,可以查询指定task_no的任务,也可以查询所有任务,并且包含__task_info_map中已经不存在,但是导出目录中有文件的任务信息
        Parameter: 
            export_task_request: 查询参数
        Return: ExportTaskResponse对象
        Others: 
        """

        result = message_across_app.ExportTaskResponse()
        result.init_all_attr()
        result.user_session = export_task_request.user_session
        result.return_code = err_code_mgr.ER_SUCCESS
        result.description = err_code_mgr.get_error_msg(err_code_mgr.ER_SUCCESS)
        result.tasks = []
        
        with self.__lock:
            #查询指定任务
            if isinstance(export_task_request.task_nos, list) and len(export_task_request.task_nos)>0:
                for task_no in export_task_request.task_nos:
                    if self.__task_info_map.has_key(task_no):
                        result.tasks.append(copy.copy(self.__task_info_map[task_no]))
                    else:
                        task_info = message_across_app.ExportTask()
                        task_info.init_all_attr()
                        task_info.task_no = task_no
                        task_info.status = 'unknown'
                        task_info.location = ''
                        result.tasks.append(task_info)
                        
            #查询全部任务,以及其他文件                
            else:
                locations = glob.glob(os.path.join(self.__export_path,'export_event_*_task_*.csv'))                
                locations_set = set(locations)
                
                for task_info in self.__task_info_map.itervalues():
                    result.tasks.append(copy.copy(task_info))                    
                    locations_set.discard(task_info.location)
                    
                for location in locations_set:
                    task_info = message_across_app.ExportTask()
                    task_info.init_all_attr()
                    task_info.task_no = 0
                    task_info.status = 'unknown'
                    task_info.location = location
                    result.tasks.append(task_info)
                    
        # 查询结果中,需要将文件路径,修改为http的相对路径
        for task_info in result.tasks:
            file_name = os.path.basename(task_info.location)

            # 这里不使用os.path.join,因为web只认'/'
            new_path = "export_data/event/" + file_name
            task_info.location = new_path
        return result
Ejemplo n.º 30
0
def check_page(current_page, num_per_page, max_query_records_per_page):
    return_code = err_code_mgr.ER_SUCCESS
    description = err_code_mgr.get_error_msg(err_code_mgr.ER_SUCCESS)
    
    #current_page 参数检查
    if current_page is None:
        return_code = err_code_mgr.ER_NO_CURRENT_PAGE_PARAMETER
        description = err_code_mgr.get_error_msg(err_code_mgr.ER_NO_CURRENT_PAGE_PARAMETER)
    
    #num_per_page 参数检查
    elif num_per_page is None:
        return_code = err_code_mgr.ER_NO_NUM_PER_PAGE_PARAMETER
        description = err_code_mgr.get_error_msg(err_code_mgr.ER_NO_NUM_PER_PAGE_PARAMETER)
    
    elif num_per_page<=0 or num_per_page>max_query_records_per_page:
            return_code = err_code_mgr.ER_NUM_PER_PAGE_OUT_OF_SCOPE
            description = err_code_mgr.get_error_msg(err_code_mgr.ER_NUM_PER_PAGE_OUT_OF_SCOPE, value=num_per_page)
                        
    return return_code, description