Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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))
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
 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)
Ejemplo n.º 6
0
    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
Ejemplo n.º 7
0
 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)
Ejemplo n.º 8
0
    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}
Ejemplo n.º 9
0
    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
        }
Ejemplo n.º 10
0
    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)
Ejemplo n.º 11
0
    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", "")
        }