예제 #1
0
def components_run(request):
    """
	运行组件
	"""
    components = Machines.Machines(request.session["sys_uid"],
                                   request.session["sys_user"])
    context = {}

    POST = request.POST
    if POST.get("run", ""):
        componentType = int(POST.get("componentType", "0"))
        targetMachine = POST.get("targetMachine", "").strip()
        runNumber = int(POST.get("runNumber", "0"))
        kbe_root = request.session["kbe_root"]
        kbe_res_path = request.session["kbe_res_path"]
        kbe_bin_path = request.session["kbe_bin_path"]

        if componentType not in Define.VALID_COMPONENT_TYPE_FOR_RUN or \
         not machinesmgr.hasMachine( targetMachine ) or \
         runNumber <= 0:
            context = {"error": "invalid data!"}
        else:
            for e in range(runNumber):
                cid = machinesmgr.makeCID(componentType)
                gus = machinesmgr.makeGUS(componentType)
                print("cid: %s, gus: %s" % (cid, gus))
                components.startServer(componentType, cid, gus, targetMachine,
                                       kbe_root, kbe_res_path, kbe_bin_path)

            time.sleep(2)
            return HttpResponseRedirect("/wc/components/manage")

    context["machines"] = machinesmgr.machines

    return render(request, "WebConsole/components_run.html", context)
예제 #2
0
def show_components(request):
    """
	控制台可连接的组件显示页面
	"""
    VALID_CT = set([
        Define.DBMGR_TYPE,
        Define.LOGINAPP_TYPE,
        Define.CELLAPP_TYPE,
        Define.BASEAPP_TYPE,
        Define.INTERFACES_TYPE,
        Define.LOGGER_TYPE,
    ])

    html_template = "WebConsole/console_show_components.html"

    components = Machines.Machines(request.session["sys_uid"],
                                   request.session["sys_user"])
    components.queryAllInterfaces(timeout=0.5)

    # [(machine, [components, ...]), ...]
    kbeComps = []
    for mID, comps in components.interfaces_groups.items():
        for comp in comps:
            if comp.componentType in VALID_CT:
                kbeComps.append(comp)

    context = {
        "KBEComps": kbeComps,
    }
    return render(request, html_template, context)
예제 #3
0
파일: views.py 프로젝트: zmmbest/kbengine
def components_run(request):
    """
	运行组件
	"""
    components = Machines.Machines(request.session["sys_uid"],
                                   request.session["sys_user"])
    components.queryAllInterfaces(timeout=0.5)
    context = {}

    POST = request.POST
    if POST.get("run", ""):
        componentType = int(POST.get("componentType", "0"))
        targetMachine = POST.get("targetMachine", "").strip()
        runNumber = int(POST.get("runNumber", "0"))

        if componentType not in Define.VALID_COMPONENT_TYPE_FOR_RUN or \
         not components.hasMachine( targetMachine ) or \
         runNumber <= 0:
            context = {"error": "invalid data!"}
        else:
            for e in range(runNumber):
                cid = components.makeCID(componentType)
                gus = components.makeGUS(componentType)
                components.startServer(componentType, cid, gus, targetMachine)

            time.sleep(2)
            return HttpResponseRedirect("/wc/components/manage")

    context["machines"] = components.machines

    return render(request, "WebConsole/components_run.html", context)
예제 #4
0
파일: views.py 프로젝트: zmmbest/kbengine
def components_save_layout(request):
    """
	保存当前服务器运行状态
	"""
    layoutName = request.GET.get("name")
    if not layoutName:
        result = {"state": "fault", "message": "invalid layout name!!!"}
        return HttpResponse(json.dumps(result),
                            content_type="application/json")

    VALIDATE_CT = set([
        Define.DBMGR_TYPE,
        Define.LOGINAPP_TYPE,
        Define.BASEAPPMGR_TYPE,
        Define.CELLAPPMGR_TYPE,
        Define.CELLAPP_TYPE,
        Define.BASEAPP_TYPE,
        Define.INTERFACES_TYPE,
        Define.LOGGER_TYPE,
    ])

    components = Machines.Machines(request.session["sys_uid"],
                                   request.session["sys_user"])
    components.queryAllInterfaces(timeout=0.5)

    conf = {}

    for machineID, infos in components.interfaces_groups.items():
        for info in infos:
            if info.componentType not in VALIDATE_CT:
                continue

            compnentName = Define.COMPONENT_NAME[info.componentType]
            if compnentName not in conf:
                conf[compnentName] = []
            d = {
                "ip": info.intaddr,
                "cid": info.componentID,
                "gus": 0
            }  # 当前取不到gus参数,所以只是先写0
            conf[compnentName].append(d)

    if len(conf) == 0:
        result = {"state": "fault", "message": "当前没有服务器在运行!!!"}
        return HttpResponse(json.dumps(result),
                            content_type="application/json")

    try:
        m = ServerLayout.objects.get(name=layoutName)
    except ObjectDoesNotExist:
        m = ServerLayout()

    m.name = layoutName
    m.sys_user = request.session["sys_user"]
    m.config = json.dumps(conf)
    m.save()

    result = {"state": "success", "message": ""}
    return HttpResponse(json.dumps(result), content_type="application/json")
예제 #5
0
def components_stop( request ):
	"""
	停止一个组件
	"""
	components = Machines.Machines( request.session["sys_uid"], request.session["sys_user"] )
	components.queryAllInterfaces(timeout = 0.5)
	context = {}
	
	POST = request.POST
예제 #6
0
파일: views.py 프로젝트: zmmbest/kbengine
def components_load_layout(request):
    """
	加载某个保存的服务器运行配置,并启动服务器
	"""
    VALIDATE_CT = set([
        Define.DBMGR_TYPE,
        Define.LOGINAPP_TYPE,
        Define.BASEAPPMGR_TYPE,
        Define.CELLAPPMGR_TYPE,
        Define.CELLAPP_TYPE,
        Define.BASEAPP_TYPE,
        Define.INTERFACES_TYPE,
        Define.LOGGER_TYPE,
    ])

    try:
        id = int(request.GET["id"])
    except:
        id = 0

    if not id:
        return render(request, "WebConsole/components_load_layout.html",
                      {"error": "无效的参数"})

    components = Machines.Machines(request.session["sys_uid"],
                                   request.session["sys_user"])
    components.queryAllInterfaces(timeout=0.5)

    for mID, comps in components.interfaces_groups.items():
        if len(comps) > 1:
            return render(request, "WebConsole/components_load_layout.html",
                          {"error": "服务器正在运行,不允许加载"})

    # 计数器
    t2c = [
        0,
    ] * len(Define.COMPONENT_NAME)

    ly = ServerLayout.objects.get(pk=id)
    layoutData = json.loads(ly.config)
    for ct in VALIDATE_CT:
        compnentName = Define.COMPONENT_NAME[ct]
        for comp in layoutData.get(compnentName, []):
            cid = comp["cid"]
            if cid <= 0:
                cid = components.makeCID(ct)

            gus = comp["gus"]
            if gus <= 0:
                gus = components.makeGUS(ct)
            t2c[ct] += 1
            components.startServer(ct, cid, gus, comp["ip"], 0)

    context = {"run_counter": str(t2c)}
    return render(request, "WebConsole/components_load_layout.html", context)
예제 #7
0
def components_group_shutdown(request, ct):
    """
	停止一组服务器组件
	"""
    ct = int(ct)

    components = Machines.Machines(request.session["sys_uid"],
                                   request.session["sys_user"])

    components.stopServer(ct, trycount=0)
    context = {"shutType": "group_ct", "ct": ct}
    return render(request, "WebConsole/components_shutdown.html", context)
예제 #8
0
def components_kill(request, ct, cid):
    """
	杀死一个组件进程
	"""
    ct = int(ct)
    cid = int(cid)

    components = Machines.Machines(request.session["sys_uid"],
                                   request.session["sys_user"])

    components.killServer(ct, componentID=cid, trycount=0)
    context = {"shutType": "kill_cid", "ct": ct, "cid": cid}
    return render(request, "WebConsole/components_kill.html", context)
예제 #9
0
def components_stop(request, ct, cid):
    """
	停止一个组件
	"""
    ct = int(ct)
    cid = int(cid)

    components = Machines.Machines(request.session["sys_uid"],
                                   request.session["sys_user"])

    components.stopServer(ct, componentID=cid, trycount=0)
    context = {"shutType": "stop_cid", "ct": ct, "cid": cid}
    return render(request, "WebConsole/components_shutdown.html", context)
예제 #10
0
파일: views.py 프로젝트: zmmbest/kbengine
def components_query_machines(request):
    """
	请求获取所有的machines
	"""
    components = Machines.Machines(0, "WebConsole")
    components.queryMachines()

    # [ machine, ...]
    kbeComps = []
    for machine in components.machines:
        d = {
            "ip": machine.intaddr,
            "uid": machine.uid,
            "pid": machine.pid,
        }
        kbeComps.append(d)

    return HttpResponse(json.dumps(kbeComps), content_type="application/json")
예제 #11
0
def machines_show_all(request):
    """
	忽略用户,显示所有的machine
	"""
    components = Machines.Machines(0, "WebConsole")
    components.queryAllInterfaces(timeout=0.5)

    targetIP = request.GET.get("target", None)

    kbeComps = []
    for mID, comps in components.interfaces_groups.items():
        if len(comps) > 1 and comps[0].intaddr == targetIP:
            kbeComps = comps[1:]
            break

    context = {
        "KBEMachines": components.machines,
        "KBEComps": kbeComps,
    }
    return render(request, "WebConsole/machines_show_all.html", context)
예제 #12
0
def components_manage( request ):
	"""
	组件管理主页面
	"""
	html_template = "WebConsole/components_manage.html"
	
	components = Machines.Machines( request.session["sys_uid"], request.session["sys_user"] )
	components.queryAllInterfaces(timeout = 0.5)

	# [(machine, [components, ...]), ...]
	kbeComps = []
	for mID, comps in components.interfaces_groups.items():
		if len( comps ) > 1:
			kbeComps.extend( comps[1:] )

	context = {
		"KBEComps" : kbeComps,
		"hasComponents" : len( kbeComps ) > 0,
		"hasMachines" : len( components.interfaces_groups ) > 0,
	}
	return render( request, html_template, context )
예제 #13
0
    def __init__(self):
        """
		"""
        print("MachinesMgr::__init__(), USE_MACHINES_BUFFER = %s" %
              settings.USE_MACHINES_BUFFER)
        if self.instance is not None:
            assert False

        self.instance = weakref.proxy(self)

        self.machineInst = Machines.Machines(0, "WebConsole")
        self.interfaces_groups = {}  # { machineID : [ComponentInfo, ...], ...}
        self.machines = []

        # 是否已经初始化过缓冲区
        # 用于当 settings.USE_MACHINES_BUFFER == True 时
        self.inited = False

        # 最后一次查询的时间
        # 在settings.USE_MACHINES_BUFFER == False时,用于避免外部代码在同一时间多次query all interfaces;
        # 在settings.USE_MACHINES_BUFFER == True时,用于子线程判断停止query all interfaces的时机。
        self.lastQueryTime = 0.0
예제 #14
0
def components_shutdown( request ):
	"""
	停止服务器
	"""
	COMPS_FOR_SHUTDOWN = [
		Define.BOTS_TYPE, 
		Define.LOGINAPP_TYPE, 
		Define.CELLAPP_TYPE, 
		Define.BASEAPP_TYPE, 
		Define.CELLAPPMGR_TYPE, 
		Define.BASEAPPMGR_TYPE, 
		Define.DBMGR_TYPE, 
		Define.INTERFACES_TYPE, 
		Define.LOGGER_TYPE, 
	]

	components = Machines.Machines( request.session["sys_uid"], request.session["sys_user"] )
	
	for ctid in COMPS_FOR_SHUTDOWN:
		components.stopServer( ctid, trycount = 0 )
	
	return render( request, "WebConsole/components_shutdown.html", {} )
예제 #15
0
def components_group_query(request, ct):
    """
	请求获取一组组件数据
	"""
    ct = int(ct)
    components = Machines.Machines(request.session["sys_uid"],
                                   request.session["sys_user"])
    components.queryAllInterfaces(timeout=0.5)

    # [ [machine, other-components, ...], ...]
    kbeComps = []
    for mID, comps in components.interfaces_groups.items():
        if len(comps) <= 1:
            continue

        dl = []
        kbeComps.append(dl)
        for comp in comps:
            if comp.componentType == ct or comp.componentType == 8:
                d = {
                    "ip": comp.intaddr,
                    "componentType": comp.componentType,
                    "componentName": comp.componentName,
                    "fullname": comp.fullname,
                    "uid": comp.uid,
                    "pid": comp.pid,
                    "componentID": comp.componentID,
                    "globalOrderID": comp.globalOrderID,
                    "cpu": comp.cpu,
                    "mem": comp.mem,
                    "usedmem": comp.usedmem,
                    "entities": comp.entities,
                    "proxies": comp.proxies,
                    "clients": comp.clients,
                    "consolePort": comp.consolePort,
                }
                dl.append(d)

    return HttpResponse(json.dumps(kbeComps), content_type="application/json")
예제 #16
0
def components_load_layout(request):
    """
	加载某个保存的服务器运行配置,并启动服务器
	"""
    VALID_CT = set([
        Define.DBMGR_TYPE,
        Define.LOGINAPP_TYPE,
        Define.BASEAPPMGR_TYPE,
        Define.CELLAPPMGR_TYPE,
        Define.CELLAPP_TYPE,
        Define.BASEAPP_TYPE,
        Define.INTERFACES_TYPE,
        Define.LOGGER_TYPE,
    ])
    kbe_root = request.session["kbe_root"]
    kbe_res_path = request.session["kbe_res_path"]
    kbe_bin_path = request.session["kbe_bin_path"]
    try:
        id = int(request.GET["id"])
    except:
        id = 0

    if not id:
        return render(request, "WebConsole/components_load_layout.html",
                      {"error": "无效的参数"})

    components = Machines.Machines(request.session["sys_uid"],
                                   request.session["sys_user"])
    interfaces_groups = machinesmgr.queryAllInterfaces(
        request.session["sys_uid"], request.session["sys_user"])

    for mID, comps in interfaces_groups.items():
        if len(comps) > 1:
            return render(request, "WebConsole/components_load_layout.html",
                          {"error": "服务器正在运行,不允许加载"})

    # 计数器
    t2c = [
        0,
    ] * len(Define.COMPONENT_NAME)
    components_ct = [
        0,
    ] * len(Define.COMPONENT_NAME)
    components_cid = [
        0,
    ] * len(Define.COMPONENT_NAME)
    components_gus = [
        0,
    ] * len(Define.COMPONENT_NAME)
    ly = ServerLayout.objects.get(pk=id)
    layoutData = json.loads(ly.config)
    for ct in VALID_CT:
        compnentName = Define.COMPONENT_NAME[ct]
        components_ct[ct] = ct
        for comp in layoutData.get(compnentName, []):
            print("components_load_layout(), component data: %s" % comp)
            cid = comp["cid"]
            if cid <= 0:
                cid = machinesmgr.makeCID(ct)
            components_cid[ct] = cid

            gus = comp["gus"]
            if gus <= 0:
                gus = machinesmgr.makeGUS(ct)
            components_gus[ct] = gus
            t2c[ct] += 1
            components.startServer(ct, cid, gus, comp["ip"], kbe_root,
                                   kbe_res_path, kbe_bin_path, 0)

    context = {
        "run_counter": str(t2c),
        "components_ct": json.dumps(components_ct),
        "components_cid": json.dumps(components_cid),
        "components_gus": json.dumps(components_gus),
        "components_ip": comp["ip"]
    }
    return render(request, "WebConsole/components_load_layout.html", context)
예제 #17
0
def pull_log(request):
    VALID_CT = set([
        Define.LOGGER_TYPE,
    ])
    components = Machines.Machines(request.session["sys_uid"],
                                   request.session["sys_user"])
    components.queryAllInterfaces(timeout=0.5)

    # [(machine, [components, ...]), ...]
    kbeComps = []
    for mID, comps in components.interfaces_groups.items():
        for comp in comps:
            if comp.componentType in VALID_CT:
                kbeComps.append(comp)
    POST = request.POST
    try:
        intaddr = kbeComps[0].intaddr
        intport = kbeComps[0].intport
        extaddr = kbeComps[0].extaddr
        extport = kbeComps[0].extport
        # host = kbeComps[0].extaddr
        # port = kbeComps[0].consolePort
        uid = request.session["sys_uid"]
    except:
        message = {"unlogger": "logger进程未运行"}
        return HttpResponse(json.dumps(message))
        # return render(request, html_template, context)

    #获取进程选中状态
    components_checks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    components_checks2 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    baseapp_check = POST.get("baseapp_check")
    baseappmgr_check = POST.get("baseappmgr_check")
    cellapp_check = POST.get("cellapp_check")
    dbmgr_check = POST.get("dbmgr_check")
    loginapp_check = POST.get("loginapp_check")
    pull_state = POST.get("pull_state")

    if pull_state == 0:
        pull_state = 1

    if baseapp_check: components_checks[6] = Define.BASEAPP_TYPE
    if baseappmgr_check: components_checks[3] = Define.BASEAPPMGR_TYPE
    if cellapp_check: components_checks[5] = Define.CELLAPP_TYPE
    if dbmgr_check: components_checks[1] = Define.DBMGR_TYPE
    if loginapp_check: components_checks[2] = Define.LOGINAPP_TYPE
    if components_checks[6] == 0 \
    and components_checks[3] == 0 \
    and components_checks[5] == 0 \
    and components_checks[1] == 0 \
    and components_checks[2] == 0 :
        components_checks[6] = Define.BASEAPP_TYPE
        components_checks[3] = Define.BASEAPPMGR_TYPE
        components_checks[5] = Define.CELLAPP_TYPE
        components_checks[1] = Define.DBMGR_TYPE
        components_checks[2] = Define.LOGINAPP_TYPE
        baseapp_check = 1
        baseappmgr_check = 1
        cellapp_check = 1
        dbmgr_check = 1
        loginapp_check = 1

    # if len(components_checks)<=1:components_checks[].append(Define.COMPONENT_END_TYPE)

    #获取log类型
    CRITICAL_check = 0
    DEBUG_check = 0
    ERROR_check = 0
    INFO_check = 0
    PRINT_check = 0
    S_DBG_check = 0
    S_ERR_check = 0
    S_INFO_check = 0
    S_NORM_check = 0
    S_WARN_check = 0
    WARNING_check = 0
    logtype = 0x00000000
    CRITICAL = POST.get("CRITICAL")
    DEBUG = POST.get("DEBUG")
    ERROR = POST.get("ERROR")
    INFO = POST.get("INFO")
    PRINT = POST.get("PRINT")
    S_DBG = POST.get("S_DBG")
    S_ERR = POST.get("S_ERR")
    S_INFO = POST.get("S_INFO")
    S_NORM = POST.get("S_NORM")
    S_WARN = POST.get("S_WARN")
    WARNING = POST.get("WARNING")

    if CRITICAL:
        logtype |= logName2type["CRITICAL"]
        CRITICAL_check = 1
    if DEBUG:
        logtype |= logName2type["DEBUG"]
        DEBUG_check = 1
    if ERROR:
        logtype |= logName2type["ERROR"]
        ERROR_check = 1
    if INFO:
        logtype |= logName2type["INFO"]
        INFO_check = 1
    if PRINT:
        logtype |= logName2type["PRINT"]
        PRINT_check = 1
    if S_DBG:
        logtype |= logName2type["S_DBG"]
        S_DBG_check = 1
    if S_ERR:
        logtype |= logName2type["S_ERR"]
        S_ERR_check = 1
    if S_INFO:
        logtype |= logName2type["S_INFO"]
        S_INFO_check = 1
    if S_NORM:
        logtype |= logName2type["S_NORM"]
        S_NORM_check = 1
    if S_WARN:
        logtype |= logName2type["S_WARN"]
        S_WARN_check = 1
    if WARNING:
        logtype |= logName2type["S_WARN"]
        WARNING_check = 1
    if logtype == 0x00000000:
        logtype = 0xffffffff
        CRITICAL_check = 1
        DEBUG_check = 1
        ERROR_check = 1
        INFO_check = 1
        PRINT_check = 1
        S_DBG_check = 1
        S_ERR_check = 1
        S_INFO_check = 1
        S_NORM_check = 1
        S_WARN_check = 1
        WARNING_check = 1

    #自定义搜索
    globalOrder = POST.get("globalOrder")
    groupOrder = POST.get("groupOrder")
    searchDate = POST.get("searchDate")
    keystr = POST.get("keystr")
    if globalOrder == None: globalOrder = ""
    if groupOrder == None: groupOrder = ""
    if searchDate == None: searchDate = ""
    if keystr == None: keystr = ""
    message = {
        "ws_url": ws_url,
        "baseapp_check": components_checks[6],
        "baseappmgr_check": components_checks[3],
        "cellapp_check": components_checks[5],
        "dbmgr_check": components_checks[1],
        "loginapp_check": components_checks[2],
        "CRITICAL_check": CRITICAL_check,
        "DEBUG_check": DEBUG_check,
        "ERROR_check": ERROR_check,
        "INFO_check": INFO_check,
        "PRINT_check": PRINT_check,
        "S_DBG_check": S_DBG_check,
        "S_ERR_check": S_ERR_check,
        "S_INFO_check": S_ERR_check,
        "S_NORM_check": S_NORM_check,
        "S_WARN_check": S_WARN_check,
        "WARNING_check": WARNING_check,
        "globalOrder": globalOrder,
        "groupOrder": groupOrder,
        "searchDate": searchDate,
        "keystr": keystr,
        "components_checks": components_checks,
    }

    return HttpResponse(json.dumps(message), content_type='application/json')