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)
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
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(), ))
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(), ))
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(), ))
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
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(), ))
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(), ))
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(), ))
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(), ))
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
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(), ))
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(), ))
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(), ))
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
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
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
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())
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)
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(), ))
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
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(), ))
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(), ))
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
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
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
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(), ))
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
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
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