def getServerListInService(request, service_id): """ 해당 서비스의 서버 리스트 :param request: :param service_id: :return: """ control = ControlEngine(request.session.get("ctrl_header")) # control = ControllerEngine() # TODO: debugging 용 vm_list = control.get_service_vm(service_id) if vm_list.get("success"): auth_url = request.session.get("auth_url") token = request.session.get("passToken") stack_id = vm_list.get("success").get("stack_id") # stack_name = vm_list.get("success").get("service_detail").get("name") nova = NovaRestAPI(auth_url, token) result_servers = nova.get_server_detail_list( fields=["id", "name", "metadata"]) if result_servers.get("success"): servers = [ result_server for result_server in result_servers["success"].get("servers") if result_server.get("metadata") and result_server["metadata"].get("metering.stack") == stack_id ] for temp_server in servers: server = { "vm_name": temp_server.get("name"), "vm_id": temp_server.get("id"), "addresses": [], } for network_name, network in temp_server.get( "addresses").items(): for address in network: server["addresses"].append(address.get("addr")) vm_list["success"]["vm_list"].append(server) else: vm_list = result_servers # heat = HeatRestAPI(auth_url, token) # result = heat.get_resource_in_stack(stack_name, stack_id, {"type": "OS::Heat::AutoScalingGroup"}) # if result.get("success"): # as_groups = result["success"].get("resources") # nova = NovaRestAPI(auth_url, token) # for as_group in as_groups: # asg_stack_id = as_group.get("physical_resource_id") # result = heat.find_server_in_autoscaling(asg_stack_id) # if result.get("success"): # asg_stack_resources = result["success"]["resources"] # for asg_stack_resource in asg_stack_resources: # server_name = "." + asg_stack_resource.get("logical_resource_id") + "." # result_servers = nova.get_server_detail_list({"name": server_name}) # if result_servers.get("success"): # servers = result_servers["success"].get("servers") # for temp_server in servers: # server = { # "vm_name": temp_server.get("name"), # "vm_id": temp_server.get("id"), # "addresses": [], # } # for network_name, network in temp_server.get("addresses").items(): # for address in network: # server["addresses"].append(address.get("addr")) # vm_list["success"]["vm_list"].append(server) return JsonResponse(vm_list, safe=False)
def get_alarm_list(request): """ :param request: :return: { u'alarm_actions': [ u'http://192.168.10.25:8080/alarm' ], u'project_id': u'227c72fcda1241b59b1241548649700c', u'ok_actions': [], u'이름 name': u'InstanceStatusAlarm', u'생성일 - 9시간 timestamp': u'2017-07-20T04:17:29.392703', u'설명 description': u'An event alarm kkkk', u'time_constraints': [], u'enabled': True, u'state_timestamp': u'2017-07-20T04:17:29.392703', u'이름에 링크 주소 alarm_id': u'0f276622-a037-4b9d-b7af-3014b52352f2', u'state': u'ok', u'insufficient_data_actions': [u'http://192.168.10.25:8080/nodata'], u'repeat_actions': False, u'user_id': u'f266e9e2e0fe43dfb2f9492851d470cd', u'event_rule': { u'query': [ { u'field': u'traits.instance_id', u'type': u'string', u'value': u'9d3f7a1a-fd78-43d3-8294-5ae0789bf76e', u'op': u'eq' }, { u'field': u'traits.state', u'type': u'string', u'임계값1 value': u'error', u'임계값2 op': u'eq' } ], u'타입1 event_type': u'compute.instance.update' }, u'type': u'event', u'severity': u'moderate' } """ domain_name = request.session.get("domain_name") description = request.session.get("description") token = request.session.get('passToken') project_id = request.session.get('project_id') auth_url = request.session.get("auth_url") ctrl_header = request.session.get("ctrl_header") control = ControlEngine(ctrl_header) aodh = AodhRestAPI(auth_url, token) query = { "query": [ { "field": "project", "op": "eq", "value": project_id }, ] } if request.method == 'GET': service_id = request.GET.get("service_id") else: service_id = request.POST.get("service_id") result_vms = control.get_service_vm(service_id) result_alarms = aodh.get_alarm_list(query) alarm_list = [] if result_vms.get("success") and result_alarms.get("success"): for alarm in result_alarms["success"]: for vm in result_vms["success"].get("vm_list"): if vm.get("vm_id") in alarm["threshold_rule"]["query"][0]["value"] or "image" in alarm["threshold_rule"]["meter_name"]: alarm_list.append(alarm) # try: # pass # for alarm in alarmList: # queryList = alarm.event_rule.get("query") # alarm.event_rule["target"] = filter(lambda x: x.get("field") in targetList, queryList)[0] # TODO: 우선 instance만 # threshold = filter(lambda x: x.get("field") in meterNameList, queryList)[0] # alarm.event_rule["target"]["meter_name"] = threshold.get("field") # TODO: 전부 넣어야함 memory등등 # alarm.event_rule["target"]["op"] = threshold.get("op") # alarm.event_rule["target"]["threshold"] = threshold.get("value") # del alarm.event_rule["target"]["type"] # del alarm.event_rule["query"] # except Unauthorized as e: # request.session["error"] = {"title":e.message, "message":e.details} # if request.method == 'POST': # return JsonResponse({"error":{"title":e.message, "message":e.details}}) # else: # request.session["error"] = {"title": e.message, "message": e.details, "code":401} # return redirect("/dashboard/login/?auth_url=" + auth_url + "&domain_name=" + domain_name + "&description=" + description) if request.method == 'POST': return JsonResponse({"success": {'alarmList': alarm_list}}) else: token = request.session.get('passToken') if not token: return redirect("/dashboard/domains/?next=/dashboard/telemeter/alarms") return render(request, 'telemeter/alarms/index.html', {"alarmList": alarm_list})
def get_security_group_info(request): token = request.session.get("passToken") domain_name = request.session.get("domain_name") project_name = request.session.get("project_name") user_name = request.session.get("user_name") if request.method == "POST": data = request.POST.get("data") control = ControlEngine(request.session.get("ctrl_header")) data = json.loads(data) service_id = data.get("service_id") server_id = data.get("server_id") service_info = control.get_service_vm( service_id) # service_id 에 해당하는 서비스에 속한 서버 리스트 반환 if service_info.get("success"): # print "=============success보안장비정보==================" # print "service_id: ", service_id, "server_id: ", server_id # print "data", data vmList = service_info["success"].get("vm_list") vm_name_list = [ vm.get("vm_name") for vm in vmList if vm.get("vm_id") == server_id ] if len(vm_name_list) != 0: searchVmName = vm_name_list[0] smap_data = control.get_map(service_id) if smap_data.get("success"): map_data = smap_data.get("success").get("map_data") used_security_group_list = map_data.get( "used_security_group_list" ) # service_id에 해당하는 맵데이터에서 사용한 보안장비찾기 if used_security_group_list: print "used_security_group_list: ", used_security_group_list used_security_group_id_list = [] for used_security_group in used_security_group_list: if used_security_group.get( "vm_name" ) == searchVmName: # 사용된 보안장비의 가상서버 목록중 같은 이름이 있는지 확인 used_security_group_id_list.append( used_security_group["security_id"] ) # 위조건에 만족한 보안장비 id저장 # print "used_security_group_id_list: ", used_security_group_id_list if len(used_security_group_id_list) > 0: used_security_group_id = used_security_group_id_list[ 0] # 저장된 보안장비 ID로 db에서 정보찾기 db_nm = request.session.get("domain_db_nm") db_user = request.session.get("domain_db_user") db_pass = request.session.get("domain_db_pass") db_ip = request.session.get("domain_db_ip") db_port = request.session.get("domain_db_port") conn = SOAControlDomainDBConnector(db_nm=db_nm, db_user=db_user, db_pass=db_pass, db_ip=db_ip, db_port=db_port) params = (used_security_group_id) try: select_security_resource = conn.select( SELECT_SECURITY_RESOURCE_GROUP, params) if len(select_security_resource) > 0: security_resource = select_security_resource[ 0] security_resource["data"] = { "nodes": security_resource.get("topology_json"), "links": security_resource.get("link_json"), "security_types": security_resource.get("security_json") } result = { "success": { "security_resource": security_resource } } else: raise Exception(used_security_group_id + _(u"은 존재하지 않습니다.")) except Exception as e: result = { "error": { "message": str(e), "title": "error" } } else: result = { "error": { "message": _("해당 서버에는 보안정보가 없습니다."), "title": "error" } } else: result = { "error": { "message": _("해당 서비스에는 보안정보가 없습니다."), "title": "error" } } else: result = { "error": { "message": _("해당 서버가 없습니다."), "title": "error" } } elif service_info.get("error"): result = service_info.get("error") else: # print "=============error보안장비정보==================" result = {"error": {"message": _(u"잘못된 아이디"), "title": "error"}} return JsonResponse(result) else: response = render('404.html', {}) response.status_code = 404 return response