def post(self, *args, **kwargs): try: new_grp_data_ls = ServiceMgr().web_unpick(kwargs['js_data']) grp = kwargs['grp'] assert grp except: logger.warn( "SaveServiceData::post error!!!, js_data:%s traceback:%s" % (kwargs['js_data'], traceback.format_exc())) return old_all_data_ls = ServiceMgr().get_init_data_ls() old_not_grp_data_ls = [] old_grp_data_ls = [] for service_dic in old_all_data_ls: if service_dic['service_group'] != grp: old_not_grp_data_ls.append(service_dic) else: old_grp_data_ls.append(service_dic) new_all_data_ls = new_grp_data_ls + old_not_grp_data_ls try: ServiceMgr().init(new_all_data_ls) except: logger.warn( "SaveServiceData::post error!!!, data_ls:%s traceback:%s" % (new_grp_data_ls, traceback.format_exc())) ServiceMgr().init(old_all_data_ls)
def handle(self, data, address): service_id, process_name,service_version, port, current_load, running = ujson.loads(data) service_obj = ServiceMgr().get_service_by_id(int(service_id)) if not service_obj: logger.warn("HeartbeatApp:handle invalid service_id:%s" % service_id) return service_obj.heart_beat(process_name,service_version, port, int(current_load), bool(running))
def handle(self, data, address): service_group, ip, port, jid, service_version, current_load, stat = ujson.loads(data) ServiceGrpMgr().add_grp_id(service_group) service_id = Service.make_id(service_group, ip, port) service_obj = ServiceMgr().get_service_by_id(service_id) if not service_obj: service_obj = ServiceMgr().new_service(service_group, ip, port, jid) service_obj.find_cp(ServiceHeartBeat.name()).heart_beat(service_version, current_load, stat)
def get(self, *args, **kwargs): grp_services, grp_counts = ServiceMgr().web_pick() render_data = { 'grp_service_dic': grp_services, 'grp_count_dic': grp_counts } self.render('service/view_all_service.html', **render_data)
def get(self, *args, **kwargs): service = kwargs['service'] grp_services, grp_counts = ServiceMgr().web_pick(service) render_data = {'grp_service_dic': grp_services, 'grp_count_dic': grp_counts, "grp": service} self.render('service/view_service.html', **render_data)
def find_services(self, service_type, rdm_type=RT_CPU_USAGE_RDM, rdm_param=1): """ 查找服务列表 :param service_type:服务类型 :param rdm_type:随机类型,0选择cpu使用率最低的;1一致性hash选择 :param rdm_param:如果随机类型是0,参数整形,表示随机个数 如果随机类型是1,list形式,hash key 列表 :return: """ if rdm_type == RT_HASH_RING and not isinstance(rdm_param, list): rdm_param = [rdm_param] if not ServiceGrpMgr().get_service_grp(service_type): logger.error( "TcpHandler::find_service Failed!!!, ERROR_PARAMS_ERROR, service_type:%s" % service_type) return {} service_obj_ls = ServiceMgr().get_run_services(service_type, rdm_type, rdm_param) if not service_obj_ls: return {} result = {} for idx, service_obj in enumerate(service_obj_ls): result_key = idx if rdm_type == RT_CPU_USAGE_RDM else rdm_param[idx] result[result_key] = { "ip": service_obj.ip, "port": service_obj.port, "jid": service_obj.jid } return result
def view_logic_services(self, viewer, state=None): """ 获取所有的服务,以group分组 :param viewer: 请求者 :param state: 需要的服务状态 :return: {"grp":[service,,,,,],,,,} """ return ServiceMgr().filter_services(FilterServiceDicKeyGrpResult, ServiceGrpMgr().get_service_grps(), None, state)
def stop_service(self, service_id): """ 停止服务 :param service_id:服务ID :param sign: 请求服务器的签名 :return: """ service_obj = ServiceMgr().get_service_by_id(service_id) if not service_obj: logger.error( "TcpHandler::stop_service Failed!!!, ERROR_SERVICE_START_ERROR, service_id:%s" % (service_id)) return {"result": error_code.ERROR_PARAMS_ERROR} if not service_obj.stop(): return {"result": error_code.ERROR_SERVICE_STOP_ERROR} logger.error("TcpHandler::stop_service success!!!, service_id:%s" % service_id) return {"result": error_code.ERROR_SUCCESS, "sign": TCP_SIGN}
def start_service(self, service_type, ip): """ 启动服务 :param service_type:服务类型 :param ip:IP :return: """ if not ServiceGrpMgr().get_service_grp(service_type)\ or not GrantMachineMgr().get_machine(ip): logger.error( "TcpHandler::start_service Failed!!!, ERROR_PARAMS_ERROR, service_type:%s ip:%s" % (service_type, ip)) return {"result": error_code.ERROR_PARAMS_ERROR} service_obj_ls = ServiceMgr().filter_services( FilterServiceObjNotKeyResult, service_type, ip, SS_FREE) # windows 系统特殊处理,由于windows无法接收进程退出事件,一台windows只能启动一个进程 if not service_obj_ls and platform.system() != 'Linux': service_obj_ls = [ServiceMgr().free_a_service(ip, service_type)] if not service_obj_ls: logger.error( "TcpHandler::start_service Failed!!!, not free services, service_type:%s ip:%s" % (service_type, ip)) return {"result": error_code.ERROR_SERVICE_START_ERROR} select_service_obj = random.choice(service_obj_ls) if not select_service_obj.start(): logger.error( "TcpHandler::start_service Failed!!!, ERROR_SERVICE_START_ERROR, service_type:%s ip:%s" % (service_type, ip)) return {"result": error_code.ERROR_SERVICE_START_ERROR} return { "result": error_code.ERROR_SUCCESS, "service_info": select_service_obj.get_info_dic(), "sign": TCP_SIGN }
def handle(self, data, address): service_group, ip, port, jid, service_version, current_load, stat = ujson.loads( data) ServiceGrpMgr().add_grp_id(service_group) service_id = Service.make_id(service_group, ip, port) service_obj = ServiceMgr().get_service_by_id(service_id) if not service_obj: service_obj = ServiceMgr().new_service(service_group, ip, port, jid) service_obj.find_cp(ServiceHeartBeat.name()).heart_beat( service_version, current_load, stat)
def find_service(self, service_type, rdm_type=RT_CPU_USAGE_RDM, rdm_param=1): """ 查找对应一个服务 :param service_type:服务类型 :param rdm_type:随机类型,0选择cpu使用率最低的;1一致性hash选择 :param rdm_param:如果随机类型是0,参数整形,表示随机个数 如果随机类型是1,list形式,hash key 列表 :return: """ if rdm_type == RT_HASH_RING and not isinstance(rdm_param, list): rdm_param = [rdm_param] if not ServiceGrpMgr().get_service_grp(service_type): logger.error( "TcpHandler::find_service Failed!!!, ERROR_PARAMS_ERROR, service_type:%s" % service_type) return {} service_obj_ls = ServiceMgr().get_run_services(service_type, rdm_type, rdm_param) if not service_obj_ls: return {} select_service_obj = service_obj_ls[0] if not select_service_obj: return {} return { "ip": select_service_obj.ip, "port": select_service_obj.get_port(), "jid": select_service_obj.params.get("JID", ""), "jid_pwd": select_service_obj.params.get("JID_PWD", "") }