diff --git a/api/alarm.py b/api/alarm.py
new file mode 100644
index 0000000..35590ff
--- /dev/null
+++ b/api/alarm.py
@@ -0,0 +1,99 @@
+from django.http import HttpResponse
+from public import NOVA_DB,NEUTRON_DB,NOVA,NEUTRON,RTN_200,RTN_500,getConnIp
+import ks_auth
+import time
+import utils
+import base64,urllib,httplib,json,os
+from beans import InstanceManager,KeyStoneManager,NetworkFlowManager,AlarmManager
+
+
+
+def connUrl(url):
+ rtn=url.replace("http://","")
+ return rtn[:(rtn.index("/"))] if "/" in rtn else rtn
+
+def ifaceID(uuid,portid,instid):
+ vir="instance-%s" % hex(instid)[2:].zfill(8)
+ return "%s-%s-%s" % (vir,uuid,"tap"+portid[:11])
+
+def virs_list(req,region):
+ REGION=region
+ virs=InstanceManager().getallActiveInstances(NOVA_DB(region))
+ data = []
+ for vir in virs:
+ item= {}
+ item['instance_id']= vir.uuid
+ item['user'] = KeyStoneManager().getUserByUserID(vir.user_id)
+ item['project'] = KeyStoneManager().getProjectByProjectID(vir.project_id)
+ item['instance_name'] = vir.hostname
+ data.append(item)
+ body = json.dumps({"code":200,"message":"ok","data":data},ensure_ascii=False, indent=2)
+ return HttpResponse(body)
+
+####same wit statics, need fix later
+def alarm_statics(req,Meteric,UUID,time,region):
+ vir=InstanceManager().getInstanceByID(NOVA_DB(region),UUID)
+ if not vir:
+ return None
+ RTN=[]
+ if "network" in Meteric:
+ ports=NetworkFlowManager().getNetInfoByUUID(UUID,NEUTRON_DB(region))
+ print ports
+ for port in ports:
+ obj={}
+ obj["name"]=port["ip_address"]
+ ifaceId=ifaceID(UUID,port["id"],int(vir.id))
+ print "ifaceid:",ifaceId
+ obj["data"]=alarm_statistics(region,Meteric.replace("_","."),time,ifaceId)
+ RTN.append(obj)
+ elif "disk" in Meteric:
+ obj={}
+ obj["name"]=vir.hostname
+ obj["data"]=alarm_statistics(region,Meteric.replace("_","."),time,UUID)
+ RTN.append(obj)
+ elif "cpu_util"==Meteric:
+ obj={}
+ obj["name"]=vir.hostname
+ obj["data"]=alarm_statistics(region,Meteric,time,UUID)
+ RTN.append(obj)
+ return HttpResponse(json.dumps(RTN))
+
+
+def alarm_statistics(region,Meteric,duration,RES_ID):
+ metricUrl=KeyStoneManager().getServiceUrl("metering",region)
+ token=ks_auth.getToken()
+ print "token:",token
+ headers1 = { "X-Auth-Token":token, "Content-type":"application/json" }
+ now=int(time.time())
+ duration_sec=int(duration)
+ period_start=utils.msecs2utc(now-8*3600-duration_sec)
+ data1={
+ "Meteric":Meteric,
+ "RES_ID":RES_ID,
+ "period":1,
+ "period_start":urllib.quote(period_start,''),
+ }
+ print "metricUrl:",metricUrl
+ print "->:",connUrl(metricUrl)
+ conn1 = httplib.HTTPConnection(connUrl(metricUrl))
+ m_url="/v2/meters/%(Meteric)s/statistics?q.field=resource_id&q.field=timestamp&q.op=eq&q.op=gt&q.type=&q.type=&q.value=%(RES_ID)s&q.value=%(period_start)s&period=%(period)s" % data1
+ print "m_url:",m_url
+ conn1.request("GET",m_url,None,headers1)
+ response1 = conn1.getresponse()
+ rtn = response1.read()
+ conn1.close()
+ if rtn:
+ rtn = json.loads(rtn)
+ print "rtn:",rtn
+ return rtn
+
+def getAlarmTask(req, region, time):
+ time = int(time)
+ data=AlarmManager().getAlarmFromCycletime(region, time)
+ #for line in data:
+ # instance_id = line.get('instance').get('instance_id')
+ # vir = InstanceManager().getInstanceByID(NOVA_DB(region),instance_id)
+ # line.get('instance')['user'] = KeyStoneManager().getUserByUserID(vir.user_id)
+ # line.get('instance')['project'] = KeyStoneManager().getProjectByProjectID(vir.project_id)
+ # line.get('instance')['instance_name'] = vir.hostname
+ return HttpResponse(json.dumps({"code":200,"message":"ok","data":data},ensure_ascii=False, indent=2))
diff --git a/api/beans.py b/api/beans.py
index cd37da2..8b50a8a 100755
--- a/api/beans.py
+++ b/api/beans.py
@@ -1,7 +1,7 @@
from django.conf import settings
from django.db import connections
from django.db import connection
-from public import NOVA_DB,NEUTRON_DB,NOVA,NEUTRON
+from public import NOVA_DB, NEUTRON_DB, NOVA, NEUTRON
UPDATE_USER_PWD="""
@@ -10,40 +10,41 @@
class C2Keystone:
def chgPwd(self,userid,pwd):
- try:
- conn=connections["KEYSTONE_Master"]
- cursor=conn.cursor()
+ try:
+ conn=connections["KEYSTONE_Master"]
+ cursor=conn.cursor()
cursor.execute(UPDATE_USER_PWD,(pwd,userid))
- conn.commit()
+ conn.commit()
except Exception,ex:
print Exception,":",ex
return False
- finally:
- conn.close()
+ finally:
+ conn.close()
cursor.close()
- return True
+ return True
class ComputeNode:
- def __init__(self,vcpus,memory_mb,vcpus_used,memory_mb_used,hypervisor_hostname,running_vms,deleted=0,host_ip=None,id=None):
- self.vcpus=vcpus
- self.memory_mb=memory_mb
- self.vcpus_used=vcpus_used
- self.memory_mb_used=memory_mb_used
- self.hypervisor_hostname=hypervisor_hostname
- self.running_vms=running_vms
- self.rest_vcpus=vcpus*4-vcpus_used
- self.rest_memory_mb=memory_mb-memory_mb_used
- self.deleted=deleted
- self.host_ip=host_ip
- self.id=id
- def __str__(self):
- return "--host:%s,rest_vcpus:%s,rest_mem:%s-- " % (self.hypervisor_hostname,self.rest_vcpus,self.rest_memory_mb)
-
- def __repr__(self):
- return "--host:%s,rest_vcpus:%s,rest_mem:%s-- " % (self.hypervisor_hostname,self.rest_vcpus,self.rest_memory_mb)
-
- def availability(self,cpu,mem):
- return self.rest_vcpus>cpu and self.rest_memory_mb>mem
+ def __init__(self,vcpus,memory_mb,vcpus_used,memory_mb_used,hypervisor_hostname,running_vms,deleted=0,host_ip=None,id=None):
+ self.vcpus=vcpus
+ self.memory_mb=memory_mb
+ self.vcpus_used=vcpus_used
+ self.memory_mb_used=memory_mb_used
+ self.hypervisor_hostname=hypervisor_hostname
+ self.running_vms=running_vms
+ self.rest_vcpus=vcpus*4-vcpus_used
+ self.rest_memory_mb=memory_mb-memory_mb_used
+ self.deleted=deleted
+ self.host_ip=host_ip
+ self.id=id
+
+ def __str__(self):
+ return "--host:%s,rest_vcpus:%s,rest_mem:%s-- " % (self.hypervisor_hostname,self.rest_vcpus,self.rest_memory_mb)
+
+ def __repr__(self):
+ return "--host:%s,rest_vcpus:%s,rest_mem:%s-- " % (self.hypervisor_hostname,self.rest_vcpus,self.rest_memory_mb)
+
+ def availability(self,cpu,mem):
+ return self.rest_vcpus>cpu and self.rest_memory_mb>mem
GET_PHYSICAL="SELECT vcpus,memory_mb,vcpus_used,memory_mb_used,hypervisor_hostname,running_vms FROM compute_nodes WHERE deleted=0 AND host_ip=%s"
@@ -72,126 +73,126 @@ def availability(self,cpu,mem):
"""
class ComputeNodeMana:
-
+
def getComputeNodeByIp(self,ip,db):
- cursor=db.cursor()
- cursor.execute(GET_PHYSICAL,ip)
- result=cursor.fetchone()
- cursor.close()
- if not result:
- print "Can't find physical machine by ip(%s)" % ip
- return None
- vcpus=result[0]
- memory_mb=result[1]
- vcpus_used=result[2]
- memory_mb_used=result[3]
- hypervisor_hostname=result[4]
- running_vms=result[5]
- computeNode=ComputeNode(vcpus,memory_mb,vcpus_used,memory_mb_used,hypervisor_hostname,running_vms)
- return computeNode
+ cursor=db.cursor()
+ cursor.execute(GET_PHYSICAL,ip)
+ result=cursor.fetchone()
+ cursor.close()
+ if not result:
+ print "Can't find physical machine by ip(%s)" % ip
+ return None
+ vcpus=result[0]
+ memory_mb=result[1]
+ vcpus_used=result[2]
+ memory_mb_used=result[3]
+ hypervisor_hostname=result[4]
+ running_vms=result[5]
+ computeNode=ComputeNode(vcpus,memory_mb,vcpus_used,memory_mb_used,hypervisor_hostname,running_vms)
+ return computeNode
def updateMinion(self,vms,deleted,_id,region):
- cursor=connection.cursor()
- cursor.execute(UPDATE_MINION_VMS,(vms,deleted,_id,region))
- cursor.close()
+ cursor=connection.cursor()
+ cursor.execute(UPDATE_MINION_VMS,(vms,deleted,_id,region))
+ cursor.close()
def updateMinionState(self,state,_id,region):
- cursor=connection.cursor()
- cursor.execute(UPDATE_MINION_STATE,(state,_id,region))
- cursor.close()
+ cursor=connection.cursor()
+ cursor.execute(UPDATE_MINION_STATE,(state,_id,region))
+ cursor.close()
def addMinion(self,n,region):
- cursor=connection.cursor()
- try:
- cursor.execute(ADD_Minion,(n.id,n.host_ip,n.hypervisor_hostname,region,n.running_vms,n.deleted))
- except Exception,ex:
- print Exception,":",ex
- return False
- finally:
- cursor.close()
- return True
+ cursor=connection.cursor()
+ try:
+ cursor.execute(ADD_Minion,(n.id,n.host_ip,n.hypervisor_hostname,region,n.running_vms,n.deleted))
+ except Exception,ex:
+ print Exception,":",ex
+ return False
+ finally:
+ cursor.close()
+ return True
def addSaltLog(self,log,Type):
- cursor=connection.cursor()
- try:
- cursor.execute(SALT_LOG,(log,Type,))
- except Exception,ex:
- print Exception,":",ex
- return False
- finally:
- cursor.close()
- return True
+ cursor=connection.cursor()
+ try:
+ cursor.execute(SALT_LOG,(log,Type,))
+ except Exception,ex:
+ print Exception,":",ex
+ return False
+ finally:
+ cursor.close()
+ return True
def getComputeNodes(self,db):
- cursor=db.cursor()
- cursor.execute(GET_ALL_PHYSICAL)
- results=cursor.fetchall()
- nodes=[]
- for line in results:
- vcpus=line[0]
- memory_mb=line[1]
- vcpus_used=line[2]
- memory_mb_used=line[3]
- hypervisor_hostname=line[4]
- running_vms=line[5]
- nodes.append(ComputeNode(vcpus,memory_mb,vcpus_used,memory_mb_used,hypervisor_hostname,running_vms))
- cursor.close()
- return nodes
+ cursor=db.cursor()
+ cursor.execute(GET_ALL_PHYSICAL)
+ results=cursor.fetchall()
+ nodes=[]
+ for line in results:
+ vcpus=line[0]
+ memory_mb=line[1]
+ vcpus_used=line[2]
+ memory_mb_used=line[3]
+ hypervisor_hostname=line[4]
+ running_vms=line[5]
+ nodes.append(ComputeNode(vcpus,memory_mb,vcpus_used,memory_mb_used,hypervisor_hostname,running_vms))
+ cursor.close()
+ return nodes
def getAllComputeNodes(self,db):
- cursor=db.cursor()
- cursor.execute(ALL_PHYSICAL)
- results=cursor.fetchall()
- nodes=[]
- for line in results:
- vcpus=line[0]
- memory_mb=line[1]
- vcpus_used=line[2]
- memory_mb_used=line[3]
- hypervisor_hostname=line[4]
- running_vms=line[5]
- deleted=line[6]
- host_ip=line[7]
- _id=line[8]
- nodes.append(ComputeNode(vcpus,memory_mb,vcpus_used,memory_mb_used,hypervisor_hostname,running_vms,deleted,host_ip,_id))
- cursor.close()
- return nodes
+ cursor=db.cursor()
+ cursor.execute(ALL_PHYSICAL)
+ results=cursor.fetchall()
+ nodes=[]
+ for line in results:
+ vcpus=line[0]
+ memory_mb=line[1]
+ vcpus_used=line[2]
+ memory_mb_used=line[3]
+ hypervisor_hostname=line[4]
+ running_vms=line[5]
+ deleted=line[6]
+ host_ip=line[7]
+ _id=line[8]
+ nodes.append(ComputeNode(vcpus,memory_mb,vcpus_used,memory_mb_used,hypervisor_hostname,running_vms,deleted,host_ip,_id))
+ cursor.close()
+ return nodes
def getSaltComputeNodes(self,region):
- cursor=connection.cursor()
- cursor.execute(GET_SALT_PHYSICAL,(region,))
- results=cursor.fetchall()
- cursor.close()
- nodes={}
- for line in results:
- minion={}
- minion["compute_node_ip"]=line[0]
- minion["compute_node_host"]=line[1]
- minion["region"]=line[2]
- minion["running_vms"]=line[3]
- minion["node_deleted"]=line[4]
- minion["id"]=line[5]
- nodes["%s_%d" % (line[1],minion["id"])]=minion
- return nodes
+ cursor=connection.cursor()
+ cursor.execute(GET_SALT_PHYSICAL,(region,))
+ results=cursor.fetchall()
+ cursor.close()
+ nodes={}
+ for line in results:
+ minion={}
+ minion["compute_node_ip"]=line[0]
+ minion["compute_node_host"]=line[1]
+ minion["region"]=line[2]
+ minion["running_vms"]=line[3]
+ minion["node_deleted"]=line[4]
+ minion["id"]=line[5]
+ nodes["%s_%d" % (line[1],minion["id"])]=minion
+ return nodes
def getFilterComputeNodes(self,db,filters):
- cursor=db.cursor()
- in_p=', '.join(list(map(lambda x: '%s', filters)))
- sql=GET_FILTER_PHYSICAL % in_p
- cursor.execute(sql,filters)
- results=cursor.fetchall()
- nodes=[]
- for line in results:
- vcpus=line[0]
- memory_mb=line[1]
- vcpus_used=line[2]
- memory_mb_used=line[3]
- hypervisor_hostname=line[4]
- running_vms=line[5]
- nodes.append(ComputeNode(vcpus,memory_mb,vcpus_used,memory_mb_used,hypervisor_hostname,running_vms))
- cursor.close()
- return nodes
+ cursor=db.cursor()
+ in_p=', '.join(list(map(lambda x: '%s', filters)))
+ sql=GET_FILTER_PHYSICAL % in_p
+ cursor.execute(sql,filters)
+ results=cursor.fetchall()
+ nodes=[]
+ for line in results:
+ vcpus=line[0]
+ memory_mb=line[1]
+ vcpus_used=line[2]
+ memory_mb_used=line[3]
+ hypervisor_hostname=line[4]
+ running_vms=line[5]
+ nodes.append(ComputeNode(vcpus,memory_mb,vcpus_used,memory_mb_used,hypervisor_hostname,running_vms))
+ cursor.close()
+ return nodes
@@ -222,188 +223,271 @@ def getFilterComputeNodes(self,db,filters):
SELECT count(ports.id) FROM ports,nova.instances WHERE ports.`status`="ACTIVE" AND ports.tenant_id=%s AND ports.network_id IN (SELECT id FROM networks WHERE `name` REGEXP 'WT|DX|BGP' AND admin_state_up=1 AND shared=1) AND ports.device_id=nova.instances.uuid AND nova.instances.user_id=%s
"""
+GET_INSTANCE_STAT = """SELECT power_state FROM nova.instances WHERE uuid=%s"""
+
class InstanceBean:
- def __init__(self,uuid,memory_mb,vcpus,vm_state,host,user_id,project_id,hostname,id_):
- self.uuid=uuid
- self.memory_mb=memory_mb
- self.vcpus=vcpus
- self.vm_state=vm_state
- self.host=host
- self.user_id=user_id
- self.project_id=project_id
- self.hostname=hostname
- self.id=id_
+ def __init__(self,uuid,memory_mb,vcpus,vm_state,host,user_id,project_id,hostname,id_):
+ self.uuid=uuid
+ self.memory_mb=memory_mb
+ self.vcpus=vcpus
+ self.vm_state=vm_state
+ self.host=host
+ self.user_id=user_id
+ self.project_id=project_id
+ self.hostname=hostname
+ self.id=id_
def __repr__(self):
return "--id,%s,uuid:%s,hostname:%s,vcpus:%s,mem:%s-- " % (self.id,self.uuid,self.hostname,self.vcpus,self.memory_mb)
class InstanceManager:
- def getIpsByTenant(self,neutron_db,userid,tenanted):
- cursor=neutron_db.cursor()
- cursor.execute(COUNT_USER_IPS,(tenanted,userid))
- result=cursor.fetchone()
- cursor.close()
- if not result:
- print "Can't find instances by userid(%s)" % userid
- return 0
- return int(result[0])
-
- def getUserInstCountByTenant(self,nova_db,userid,tenanted):
- cursor=nova_db.cursor()
- cursor.execute(COUNT_USER_INST_TENANT,(userid,tenanted))
- result=cursor.fetchone()
- cursor.close()
- if not result:
- print "Can't find instances by userid(%s)" % userid
- return 0
- return int(result[0])
-
- def getUserInstCount(self,nova_db,userid):
- cursor=nova_db.cursor()
- cursor.execute(COUNT_USER_INST,(userid,))
- result=cursor.fetchone()
- cursor.close()
- if not result:
- print "Can't find instances by userid(%s)" % userid
- return 0
- return int(result[0])
-
- def getHostIp(self,nova_db,uuid):
- cursor=nova_db.cursor()
- cursor.execute(GET_HOST_IP,(uuid,))
- result=cursor.fetchone()
- cursor.close()
- obj={}
- if not result:
- print "Can't find host ip by uuid(%s)" % uuid
- return None
- obj["host"]=result[0]
- obj["host_ip"]=result[1]
- obj["id"]=result[2]
- return obj
-
- def findPortIdByDevid(self,neutron_db,device_id):
- cursor=neutron_db.cursor()
- cursor.execute(GET_PORTID_BY_DEVICEID,device_id)
- result=cursor.fetchone()
- cursor.close()
- return None if not result else result[0]
-
- def findInstanceIdByIp(self,neutron_db,nova_db,ip):
- cursor=neutron_db.cursor()
- cursor.execute(VIR_PORT,ip)
- result=cursor.fetchone()
-
- size=0 if not result else len(result)
- if size>0:
- print "GET PORT_ID %s" % result[0]
- cursor.execute(VIR_UUID,result[0])
- result=cursor.fetchone()
- size=0 if not result else len(result)
- else:
- print "Can't find port_id by ip(%s),break!" % ip
- cursor.close()
- if size==0:
- print "Can't find device_id by ip(%s),break!" % ip
- return None
- uuid=result[0]
- print "GET UUID %s" % uuid
- cur=nova_db.cursor()
- cur.execute(GET_INSTANCE,uuid)
- result=cur.fetchone()
- cur.close()
- if not result:
- print "Can't find instance by device_id(%s),break!" % uuid
- return None
- uuid=result[0]
- memory_mb=result[1]
- vcpus=result[2]
- vm_state=result[3]
- host=result[4]
- user_id=result[5]
- project_id=result[6]
- hostname=result[7]
- id_=result[8]
- instanceBean=InstanceBean(uuid,memory_mb,vcpus,vm_state,host,user_id,project_id,hostname,id_)
- return instanceBean
-
- def getInstanceByID(self,nova_db,uuid):
- cur=nova_db.cursor()
- cur.execute(GET_INSTANCE,(uuid,))
- result=cur.fetchone()
- cur.close()
- if not result:
- print "Can't find instance by uuid(%s),break!" % uuid
- return None
- uuid=result[0]
- memory_mb=result[1]
- vcpus=result[2]
- vm_state=result[3]
- host=result[4]
- user_id=result[5]
- project_id=result[6]
- hostname=result[7]
- id_=result[8]
- instanceBean=InstanceBean(uuid,memory_mb,vcpus,vm_state,host,user_id,project_id,hostname,id_)
- return instanceBean
-
- def getallActiveInstances(self,nova_db):
- cursor=nova_db.cursor()
- cursor.execute(GET_ACTIVE_INSTANCE)
- childs=[]
- results=cursor.fetchall()
- for result in results:
- uuid=result[0]
- memory_mb=result[1]
- vcpus=result[2]
- vm_state=result[3]
- host=result[4]
- user_id=result[5]
- project_id=result[6]
- hostname=result[7]
- id_=result[8]
- instanceBean=InstanceBean(uuid,memory_mb,vcpus,vm_state,host,user_id,project_id,hostname,id_)
- childs.append(instanceBean)
- cursor.close()
- return childs
-
- def getChildrens(self,nova_db,ip):
- node=ComputeNodeMana().getComputeNodeByIp(ip,nova_db)
- if not node:
- return None
- host=node.hypervisor_hostname
- cursor=nova_db.cursor()
- cursor.execute(PHY_CHILDS,host)
- childs=[]
- results=cursor.fetchall()
- for result in results:
- uuid=result[0]
- memory_mb=result[1]
- vcpus=result[2]
- vm_state=result[3]
- host=result[4]
- user_id=result[5]
- project_id=result[6]
- hostname=result[7]
- id_=result[8]
- instanceBean=InstanceBean(uuid,memory_mb,vcpus,vm_state,host,user_id,project_id,hostname,id_)
- childs.append(instanceBean)
- cursor.close()
- return childs
-
+ def getIpsByTenant(self,neutron_db,userid,tenanted):
+ cursor=neutron_db.cursor()
+ cursor.execute(COUNT_USER_IPS,(tenanted,userid))
+ result=cursor.fetchone()
+ cursor.close()
+ if not result:
+ print "Can't find instances by userid(%s)" % userid
+ return 0
+ return int(result[0])
+
+ def getUserInstCountByTenant(self,nova_db,userid,tenanted):
+ cursor=nova_db.cursor()
+ cursor.execute(COUNT_USER_INST_TENANT,(userid,tenanted))
+ result=cursor.fetchone()
+ cursor.close()
+ if not result:
+ print "Can't find instances by userid(%s)" % userid
+ return 0
+ return int(result[0])
+
+ def getUserInstCount(self,nova_db,userid):
+ cursor=nova_db.cursor()
+ cursor.execute(COUNT_USER_INST,(userid,))
+ result=cursor.fetchone()
+ cursor.close()
+ if not result:
+ print "Can't find instances by userid(%s)" % userid
+ return 0
+ return int(result[0])
+
+ def getHostIp(self,nova_db,uuid):
+ cursor=nova_db.cursor()
+ cursor.execute(GET_HOST_IP,(uuid,))
+ result=cursor.fetchone()
+ cursor.close()
+ obj={}
+ if not result:
+ print "Can't find host ip by uuid(%s)" % uuid
+ return None
+ obj["host"]=result[0]
+ obj["host_ip"]=result[1]
+ obj["id"]=result[2]
+ return obj
+
+ def findPortIdByDevid(self,neutron_db,device_id):
+ cursor=neutron_db.cursor()
+ cursor.execute(GET_PORTID_BY_DEVICEID,device_id)
+ result=cursor.fetchone()
+ cursor.close()
+ return None if not result else result[0]
+
+ def findInstanceIdByIp(self,neutron_db,nova_db,ip):
+ cursor=neutron_db.cursor()
+ cursor.execute(VIR_PORT,ip)
+ result=cursor.fetchone()
+
+ size=0 if not result else len(result)
+ if size>0:
+ print "GET PORT_ID %s" % result[0]
+ cursor.execute(VIR_UUID,result[0])
+ result=cursor.fetchone()
+ size=0 if not result else len(result)
+ else:
+ print "Can't find port_id by ip(%s),break!" % ip
+ cursor.close()
+ if size==0:
+ print "Can't find device_id by ip(%s),break!" % ip
+ return None
+ uuid=result[0]
+ print "GET UUID %s" % uuid
+ cur=nova_db.cursor()
+ cur.execute(GET_INSTANCE,uuid)
+ result=cur.fetchone()
+ cur.close()
+ if not result:
+ print "Can't find instance by device_id(%s),break!" % uuid
+ return None
+ uuid=result[0]
+ memory_mb=result[1]
+ vcpus=result[2]
+ vm_state=result[3]
+ host=result[4]
+ user_id=result[5]
+ project_id=result[6]
+ hostname=result[7]
+ id_=result[8]
+ instanceBean=InstanceBean(uuid,memory_mb,vcpus,vm_state,host,user_id,project_id,hostname,id_)
+ return instanceBean
+
+ def getInstanceByID(self,nova_db,uuid):
+ cur=nova_db.cursor()
+ cur.execute(GET_INSTANCE,(uuid,))
+ result=cur.fetchone()
+ cur.close()
+ if not result:
+ print "Can't find instance by uuid(%s),break!" % uuid
+ return None
+ uuid=result[0]
+ memory_mb=result[1]
+ vcpus=result[2]
+ vm_state=result[3]
+ host=result[4]
+ user_id=result[5]
+ project_id=result[6]
+ hostname=result[7]
+ id_=result[8]
+ instanceBean=InstanceBean(uuid,memory_mb,vcpus,vm_state,host,user_id,project_id,hostname,id_)
+ return instanceBean
+
+ def getallActiveInstances(self,nova_db):
+ cursor=nova_db.cursor()
+ cursor.execute(GET_ACTIVE_INSTANCE)
+ childs=[]
+ results=cursor.fetchall()
+ for result in results:
+ uuid=result[0]
+ memory_mb=result[1]
+ vcpus=result[2]
+ vm_state=result[3]
+ host=result[4]
+ user_id=result[5]
+ project_id=result[6]
+ hostname=result[7]
+ id_=result[8]
+ instanceBean=InstanceBean(uuid,memory_mb,vcpus,vm_state,host,user_id,project_id,hostname,id_)
+ childs.append(instanceBean)
+ cursor.close()
+ return childs
+
+ def getChildrens(self,nova_db,ip):
+ node=ComputeNodeMana().getComputeNodeByIp(ip,nova_db)
+ if not node:
+ return None
+ host=node.hypervisor_hostname
+ cursor=nova_db.cursor()
+ cursor.execute(PHY_CHILDS,host)
+ childs=[]
+ results=cursor.fetchall()
+ for result in results:
+ uuid=result[0]
+ memory_mb=result[1]
+ vcpus=result[2]
+ vm_state=result[3]
+ host=result[4]
+ user_id=result[5]
+ project_id=result[6]
+ hostname=result[7]
+ id_=result[8]
+ instanceBean=InstanceBean(uuid,memory_mb,vcpus,vm_state,host,user_id,project_id,hostname,id_)
+ childs.append(instanceBean)
+ cursor.close()
+ return childs
+
+ def getInstanceStat(self, nova_db, uuid):
+ power_stat = {
+ 0:'pending',
+ 1:'running',
+ 2:'paused',
+ 3:'shutdown',
+ 4:'crashed',
+ 5:'suspended',
+ 6:'building'
+ }
+ cur=nova_db.cursor()
+ cur.execute(GET_INSTANCE_STAT,(uuid,))
+ result=cur.fetchone()
+ cur.close()
+ if not result:
+ print "Can't find instance state by uuid(%s),break!" % uuid
+ return None
+ stat = power_stat.get(result[0])
+ return stat
+
GET_SERVICE_URL='SELECT url FROM endpoint WHERE interface="public" AND region=%s AND service_id =(SELECT id FROM service WHERE type=%s)'
-
+#GET_USER_BY_USERID = 'SELECT name FROM user WHERE id=%s'
+GET_USER_BY_USERID = "SELECT name FROM user WHERE id='%s'"
+GET_PROJECT_BY_PROJECTID = "SELECT name FROM project WHERE id='%s'"
+
class KeyStoneManager:
def getServiceUrl(self,service_name,region,tenant=settings.SYS_C2):
- print "getServiceUrl: region:%s,service_name:%s" % (region,service_name)
- db_region=connections["KEYSTONE"]
- cursor=db_region.cursor()
- cursor.execute(GET_SERVICE_URL,(region,service_name))
- result=cursor.fetchone()
- cursor.close()
- return None if not result else result[0] % tenant
+ print "getServiceUrl: region:%s,service_name:%s" % (region,service_name)
+ db_region=connections["KEYSTONE"]
+ cursor=db_region.cursor()
+ cursor.execute(GET_SERVICE_URL,(region,service_name))
+ result=cursor.fetchone()
+ cursor.close()
+ db_region.close()
+ return None if not result else result[0] % tenant
+
+ def getUserByUserID(self, user_id):
+ ##keystone_db = KEYSTONE_DB
+ #keystone_db = connections["KEYSTONE"]
+ #cursor = keystone_db.cursor()
+ #sql = GET_USER_BY_USERID %user_id
+ ##cursor.execute(GET_USER_BY_USERID,[user_id])
+ #cursor.execute(sql)
+ #result = cursor.fetchone()
+ #cursor.close()
+ #keystone_db.close()
+ #return None if not result else result[0]
+
+ from mana.conf import DATABASES
+ import MySQLdb
+ v_host = DATABASES.get('KEYSTONE').get('HOST')
+ v_user = DATABASES.get('KEYSTONE').get('USER')
+ v_passwd = DATABASES.get('KEYSTONE').get('PASSWORD')
+ v_db = DATABASES.get('KEYSTONE').get('NAME')
+ v_charset = 'latin1'
+ con = MySQLdb.connect(host=v_host, user=v_user, passwd=v_passwd, db=v_db, charset=v_charset)
+ cur = con.cursor()
+ sql_query = GET_USER_BY_USERID %user_id
+ cur.execute(sql_query)
+ result = cur.fetchone()
+ cur.close()
+ con.close()
+ return None if not result else result[0].encode('latin-1').decode('utf-8')
+
+ def getProjectByProjectID(self, project_id):
+ ##keystone_db = KEYSTONE_DB
+ #keystone_db = connections["KEYSTONE"]
+ #cursor = keystone_db.cursor()
+ ##cursor.execute('set names ')
+ ##cursor.execute(GET_PROJECT_BY_PROJECTID,[project_id])
+ #sql = GET_PROJECT_BY_PROJECTID %project_id
+ #cursor.execute(sql)
+ #result = cursor.fetchone()
+ #cursor.close()
+ #keystone_db.close()
+ #return None if not result else result[0]
+
+ from mana.conf import DATABASES
+ import MySQLdb
+ v_host = DATABASES.get('KEYSTONE').get('HOST')
+ v_user = DATABASES.get('KEYSTONE').get('USER')
+ v_passwd = DATABASES.get('KEYSTONE').get('PASSWORD')
+ v_db = DATABASES.get('KEYSTONE').get('NAME')
+ v_charset = 'latin1'
+ con = MySQLdb.connect(host=v_host, user=v_user, passwd=v_passwd, db=v_db, charset=v_charset)
+ cur = con.cursor()
+ sql_query = GET_PROJECT_BY_PROJECTID %project_id
+ cur.execute(sql_query)
+ result = cur.fetchone()
+ cur.close()
+ con.close()
+ return None if not result else result[0].encode('latin-1').decode('utf-8')
GET_FREE_IP='SELECT networks.`name`,networks.`status`,subnets.id,ipavailabilityranges.first_ip,ipavailabilityranges.last_ip,networks.id,subnets.`name` as "subnet_name" FROM ipavailabilityranges,ipallocationpools,subnets,networks WHERE ipavailabilityranges.allocation_pool_id=ipallocationpools.id AND ipallocationpools.subnet_id=subnets.id AND subnets.network_id=networks.id AND networks.`status`="ACTIVE" AND networks.admin_state_up=1 AND networks.shared=1 ORDER BY networks.`name`,subnets.`name`'
@@ -411,76 +495,75 @@ def getServiceUrl(self,service_name,region,tenant=settings.SYS_C2):
class NetWork:
- def __init__(self,id_,name,status,subnet=None,subnet_id=None,first_ip="",last_ip=""):
- self.name=name
- self.status=status
- self.subnet=subnet
- self.subnet_id=subnet_id
- self.first_ip=first_ip
- self.last_ip=last_ip
- self.id=id_
- if subnet:
- self.freeNumber=self.freeNum()
-
- def freeNum(self):
- index=self.first_ip.rindex(".")+1
- first_num=int(self.first_ip[index:])
- index=self.last_ip.rindex(".")+1
- last_num=int(self.last_ip[index:])
- return last_num-first_num+1
+ def __init__(self,id_,name,status,subnet=None,subnet_id=None,first_ip="",last_ip=""):
+ self.name=name
+ self.status=status
+ self.subnet=subnet
+ self.subnet_id=subnet_id
+ self.first_ip=first_ip
+ self.last_ip=last_ip
+ self.id=id_
+ if subnet:
+ self.freeNumber=self.freeNum()
+
+ def freeNum(self):
+ index=self.first_ip.rindex(".")+1
+ first_num=int(self.first_ip[index:])
+ index=self.last_ip.rindex(".")+1
+ last_num=int(self.last_ip[index:])
+ return last_num-first_num+1
class NetWorkManager:
-
def getFreeIp(self,db):
- cursor=db.cursor()
- cursor.execute(GET_FREE_IP)
- results=cursor.fetchall()
- cursor.close()
- nodes=[]
- for line in results:
- name=line[0]
- status=line[1]
- subnet_id=line[2]
- first_ip=line[3]
- last_ip=line[4]
- id_=line[5]
- subnet=line[6]
- nodes.append(NetWork(id_,name,status,subnet,subnet_id,first_ip,last_ip))
- return nodes
+ cursor=db.cursor()
+ cursor.execute(GET_FREE_IP)
+ results=cursor.fetchall()
+ cursor.close()
+ nodes=[]
+ for line in results:
+ name=line[0]
+ status=line[1]
+ subnet_id=line[2]
+ first_ip=line[3]
+ last_ip=line[4]
+ id_=line[5]
+ subnet=line[6]
+ nodes.append(NetWork(id_,name,status,subnet,subnet_id,first_ip,last_ip))
+ return nodes
def getTotalNum(self,nodes):
- display={}
- rtn={}
- for node in nodes:
- if display.has_key(node.name):
- total=display.get(node.name)
- total+=node.freeNum()
- display[node.name]=total
- else:
- display[node.name]=node.freeNum()
- rtn[node.name]={"freeNum":display[node.name],"network_id":node.id}
- return rtn
+ display={}
+ rtn={}
+ for node in nodes:
+ if display.has_key(node.name):
+ total=display.get(node.name)
+ total+=node.freeNum()
+ display[node.name]=total
+ else:
+ display[node.name]=node.freeNum()
+ rtn[node.name]={"freeNum":display[node.name],"network_id":node.id}
+ return rtn
def getAllNetWorks(self,db):
- cursor=db.cursor()
- cursor.execute(GET_ALL_NETWORKS)
- results=cursor.fetchall()
- cursor.close()
- nodes=[]
- for line in results:
- id_=line[0]
- name=line[1]
- status=line[2]
- nodes.append(NetWork(id_,name,status))
- return nodes
+ cursor=db.cursor()
+ cursor.execute(GET_ALL_NETWORKS)
+ results=cursor.fetchall()
+ cursor.close()
+ nodes=[]
+ for line in results:
+ id_=line[0]
+ name=line[1]
+ status=line[2]
+ nodes.append(NetWork(id_,name,status))
+ return nodes
def getAllTotalNum(self,nodes,db):
- freeNodes=self.getTotalNum(nodes)
- networks=self.getAllNetWorks(db)
- for network in networks:
- if not freeNodes.has_key(network.name):
- freeNodes[network.name]={"freeNum":0,"network_id":network.id}
- return freeNodes
+ freeNodes=self.getTotalNum(nodes)
+ networks=self.getAllNetWorks(db)
+ for network in networks:
+ if not freeNodes.has_key(network.name):
+ freeNodes[network.name]={"freeNum":0,"network_id":network.id}
+ return freeNodes
GET_IP_BY_UUID="""
SELECT ports.id,ipallocations.ip_address,ipallocations.network_id,networks.`name`
@@ -498,34 +581,34 @@ def getAllTotalNum(self,nodes,db):
class NetworkFlowManager:
def getNetInfoByUUID(self,uuid,db_region):
- cursor=db_region.cursor()
- cursor.execute(GET_IP_BY_UUID,(uuid,))
- results=cursor.fetchall()
- cursor.close()
- nodes=[]
- for line in results:
- obj={}
- obj["id"]=line[0]
- obj["ip_address"]=line[1]
- obj["network_id"]=line[2]
- obj["network_name"]=line[3]
- nodes.append(obj)
- return nodes
+ cursor=db_region.cursor()
+ cursor.execute(GET_IP_BY_UUID,(uuid,))
+ results=cursor.fetchall()
+ cursor.close()
+ nodes=[]
+ for line in results:
+ obj={}
+ obj["id"]=line[0]
+ obj["ip_address"]=line[1]
+ obj["network_id"]=line[2]
+ obj["network_name"]=line[3]
+ nodes.append(obj)
+ return nodes
def getNetInfoByUUIDAndNetId(self,db_region,uuid,network_id):
- cursor=db_region.cursor()
- cursor.execute(GET_IP_BY_UUID_NETID,(uuid,network_id))
- result=cursor.fetchone()
- cursor.close()
- if not result:
- print "Can't find network info by device_id(%s),break!" % uuid
- return None
- obj={}
- obj["id"]=result[0]
- obj["ip_address"]=result[1]
- obj["network_id"]=result[2]
- obj["network_name"]=result[3]
- return obj
+ cursor=db_region.cursor()
+ cursor.execute(GET_IP_BY_UUID_NETID,(uuid,network_id))
+ result=cursor.fetchone()
+ cursor.close()
+ if not result:
+ print "Can't find network info by device_id(%s),break!" % uuid
+ return None
+ obj={}
+ obj["id"]=result[0]
+ obj["ip_address"]=result[1]
+ obj["network_id"]=result[2]
+ obj["network_name"]=result[3]
+ return obj
ADD_EVA_LOG="""
@@ -534,15 +617,15 @@ def getNetInfoByUUIDAndNetId(self,db_region,uuid,network_id):
class EvaLog:
def addLog(self,user,eva_ip,output,remote_ip):
- cursor=connection.cursor()
- try:
- cursor.execute(ADD_EVA_LOG,(user,eva_ip,output,remote_ip))
- except Exception,ex:
- print Exception,"ADD_EVA_LOG:",ex
- return False
- finally:
- cursor.close()
- return True
+ cursor=connection.cursor()
+ try:
+ cursor.execute(ADD_EVA_LOG,(user,eva_ip,output,remote_ip))
+ except Exception,ex:
+ print Exception,"ADD_EVA_LOG:",ex
+ return False
+ finally:
+ cursor.close()
+ return True
ADD_NET_FLOW="""
INSERT INTO c2_network_flow(`uuid`,`network_flow`,`region`,`network_id`) VALUES (%s,%s,%s,%s)
@@ -558,44 +641,44 @@ def addLog(self,user,eva_ip,output,remote_ip):
class NetWorkFlow:
def addNetWorkFlow(self,uuid,network_flow,region,network_id):
- cursor=connection.cursor()
- try:
- cursor.execute(ADD_NET_FLOW,(uuid,network_flow,region,network_id))
- except Exception,ex:
- print Exception,":",ex
- return False
- finally:
- cursor.close()
- return True
+ cursor=connection.cursor()
+ try:
+ cursor.execute(ADD_NET_FLOW,(uuid,network_flow,region,network_id))
+ except Exception,ex:
+ print Exception,":",ex
+ return False
+ finally:
+ cursor.close()
+ return True
def getNetWorkFlows(self,uuid,region):
- cursor=connection.cursor()
- cursor.execute(GET_NET_FLOWS,(uuid,region))
- results=cursor.fetchall()
- cursor.close()
- nodes=[]
- for line in results:
- obj={}
- obj["network_flow"]=line[0]
- obj["network_id"]=line[1]
- obj["uuid"]=uuid
- obj["region"]=region
- nodes.append(obj)
- return nodes
+ cursor=connection.cursor()
+ cursor.execute(GET_NET_FLOWS,(uuid,region))
+ results=cursor.fetchall()
+ cursor.close()
+ nodes=[]
+ for line in results:
+ obj={}
+ obj["network_flow"]=line[0]
+ obj["network_id"]=line[1]
+ obj["uuid"]=uuid
+ obj["region"]=region
+ nodes.append(obj)
+ return nodes
def addLog(self,uuid,region,network_id,network_name,log,action):
- cursor=connection.cursor()
- log="_%s_" % log
- try:
- cursor.execute(ADD_SU_LOG,(uuid,region,network_id,network_name,action,log))
- except Exception,ex:
- print Exception,"ADD_SU_LOG:",ex
- return False
- finally:
- cursor.close()
- return True
-
-
+ cursor=connection.cursor()
+ log="_%s_" % log
+ try:
+ cursor.execute(ADD_SU_LOG,(uuid,region,network_id,network_name,action,log))
+ except Exception,ex:
+ print Exception,"ADD_SU_LOG:",ex
+ return False
+ finally:
+ cursor.close()
+ return True
+
+
C2_CIDR_GET="""
SELECT id,cidr,tenant_id,network_id,region FROM c2_cidr_allocation WHERE tenant_id=%s AND region=%s OR tenant_id is NULL AND region =%s ORDER BY tenant_id DESC,id ASC limit 1
"""
@@ -611,20 +694,20 @@ def addLog(self,uuid,region,network_id,network_name,log,action):
class C2cidrManager:
def getFreecidr(self,tenant_id,region):
- cursor=connection.cursor()
- cursor.execute(C2_CIDR_GET,(tenant_id,region,region))
- result=cursor.fetchone()
- cursor.close()
- if not result:
- print "Can't find cidr "
- return None
- obj={}
- obj["id"]=result[0]
- obj["cidr"]=result[1]
- obj["tenantid"]=result[2]
- obj["network_id"]=result[3]
- obj["region"]=result[4]
- return obj
+ cursor=connection.cursor()
+ cursor.execute(C2_CIDR_GET,(tenant_id,region,region))
+ result=cursor.fetchone()
+ cursor.close()
+ if not result:
+ print "Can't find cidr "
+ return None
+ obj={}
+ obj["id"]=result[0]
+ obj["cidr"]=result[1]
+ obj["tenantid"]=result[2]
+ obj["network_id"]=result[3]
+ obj["region"]=result[4]
+ return obj
def getMultiFreecidr(self,tenant_id,region):
cursor=connection.cursor()
@@ -643,30 +726,90 @@ def getMultiFreecidr(self,tenant_id,region):
return obj
def useCidr(self,id_,tenantid,network_id,region):
- cursor=connection.cursor()
- try:
- cursor.execute(C2_CIDR_UPDATE,(tenantid,network_id,id_,region))
- except Exception,ex:
- print Exception,":",ex
- return False
- finally:
- cursor.close()
- return True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ cursor=connection.cursor()
+ try:
+ cursor.execute(C2_CIDR_UPDATE,(tenantid,network_id,id_,region))
+ except Exception,ex:
+ print Exception,":",ex
+ return False
+ finally:
+ cursor.close()
+ return True
+ALARM_ITEM_GET = """SELECT * FROM alarm WHERE disable='0' AND region=%s AND cycletime=%s"""
+ALARM_CONTACTS_GET = """SELECT terminal FROM contacts WHERE list_id=%s AND type=%s"""
+"""
+alarm_item= [{
+ 'instance':'***',
+ 'alarm_obj':'***',
+ 'threshold':'***',
+ 'region':'***',
+ 'contacts':{
+ 'email':['*','*'],
+ 'sms':['*','*']
+ }
+ },
+ ]
+"""
+class AlarmManager:
+ def getAlarmFromCycletime(self, region, time):
+ result = self._getAlarmItemsFromCycletime(region, time)
+ alarm_items = []
+ for line in result:
+ instance_id = line[9]
+ alarm_obj = line[3]
+ threshold = line[4]
+ region = line[11]
+ contact_list = line[8]
+ instance = self._getInstancedetail(instance_id, region)
+ sms_list = self._getAlarmContacts(contact_list, 'SMS')
+ email_list = self._getAlarmContacts(contact_list, 'EMAIL')
+ contacts = {'sms':sms_list, 'email':email_list}
+ alarm_item = {'instance':instance,
+ 'alarm_obj':alarm_obj,
+ 'threshold':threshold,
+ 'region':region,
+ 'contacts':contacts
+ }
+ alarm_items.append(alarm_item)
+ return alarm_items
+
+ def _getAlarmItemsFromCycletime(self, region, cycletime):
+ cursor=connection.cursor()
+ try:
+ cursor.execute(ALARM_ITEM_GET, (region, cycletime))
+ result = cursor.fetchall()
+ except Exception,ex:
+ print Exception,":",ex
+ return []
+ finally:
+ cursor.close()
+ return result
+
+ def _getAlarmContacts(self, list_id, type):
+ cursor=connection.cursor()
+ contacts_list = []
+ try:
+ cursor.execute(ALARM_CONTACTS_GET, (list_id, type))
+ result = cursor.fetchall()
+ for line in result:
+ contacts_list.append(line[0])
+ except Exception,ex:
+ print Exception,":",ex
+ return []
+ finally:
+ cursor.close()
+ return contacts_list
+
+ def _getInstancedetail(self, instance_id, region):
+ item= {}
+ try:
+ vir = InstanceManager().getInstanceByID(NOVA_DB(region),instance_id)
+ item['instance_id']= instance_id
+ item['user'] = KeyStoneManager().getUserByUserID(vir.user_id)
+ item['project'] = KeyStoneManager().getProjectByProjectID(vir.project_id)
+ item['instance_name'] = vir.hostname
+ except Exception,ex:
+ print Exception,":",ex
+ return item
diff --git a/api/c2_ssh.py b/api/c2_ssh.py
index 64331cd..59a96b1 100644
--- a/api/c2_ssh.py
+++ b/api/c2_ssh.py
@@ -3,38 +3,38 @@
import json
import os
-def conn(host,command,user="root",pwd=None,port=22):
- ssh=paramiko.SSHClient()
- ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
- print "host:%s,command:%s,user:%s,pwd:%s,port:%s" % (host,command,user,pwd,port)
- PRIVATE_KEY='/root/.ssh/id_rsa'
- ssh.connect(host,port,user,pwd,key_filename=PRIVATE_KEY)
- stdin,stdout,stderr=ssh.exec_command(command)
- error=stderr.readlines()
- output=stdout.readlines()
- ssh.close()
- if not error:
- return output
- else:
- errot_list=json.dumps(error)
- print "An error happened by:%s" % errot_list
- return error
+def conn(host,command,user="root",pwd=None,port=22):
+ ssh=paramiko.SSHClient()
+ ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+ print "host:%s,command:%s,user:%s,pwd:%s,port:%s" % (host,command,user,pwd,port)
+ PRIVATE_KEY='/root/.ssh/id_rsa'
+ ssh.connect(host,port,user,pwd,key_filename=PRIVATE_KEY)
+ stdin,stdout,stderr=ssh.exec_command(command)
+ error=stderr.readlines()
+ output=stdout.readlines()
+ ssh.close()
+ if not error:
+ return output
+ else:
+ errot_list=json.dumps(error)
+ print "An error happened by:%s" % errot_list
+ return error
-def conn2(host,command,user="root",pwd=None,port=22):
- ssh=paramiko.SSHClient()
- ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
- PRIVATE_KEY='/root/.ssh/id_rsa'
- ssh.connect(host,port,user,pwd,key_filename=PRIVATE_KEY)
-#,timeout=300
- stdin,stdout,stderr=ssh.exec_command(command)
- error=stderr.readlines()
- output=stdout.readlines()
- ssh.close()
- if not error:
- return output
- else:
- return "An _error_ happened by:%s" % error
+def conn2(host,command,user="root",pwd=None,port=22):
+ ssh=paramiko.SSHClient()
+ ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+ PRIVATE_KEY='/root/.ssh/id_rsa'
+ ssh.connect(host,port,user,pwd,key_filename=PRIVATE_KEY)
+ #,timeout=300
+ stdin,stdout,stderr=ssh.exec_command(command)
+ error=stderr.readlines()
+ output=stdout.readlines()
+ ssh.close()
+ if not error:
+ return output
+ else:
+ return "An _error_ happened by:%s" % error
diff --git a/api/checker.py b/api/checker.py
index 2df5d62..d88ea5e 100755
--- a/api/checker.py
+++ b/api/checker.py
@@ -9,12 +9,10 @@
#判断是否为整数 15
def IsNumber(varObj):
-
return type(varObj) is types.IntType
#判断是否为字符串 string
def IsString(varObj):
-
return type(varObj) is types.StringType
#判断是否为浮点数 1.324
@@ -23,27 +21,22 @@ def IsFloat(varObj):
#判断是否为字典 {'a1':'1','a2':'2'}
def IsDict(varObj):
-
return type(varObj) is types.DictType
#判断是否为tuple [1,2,3]
def IsTuple(varObj):
-
return type(varObj) is types.TupleType
#判断是否为List [1,3,4]
def IsList(varObj):
-
return type(varObj) is types.ListType
#判断是否为布尔值 True
def IsBoolean(varObj):
-
return type(varObj) is types.BooleanType
#判断是否为货币型 1.32
def IsCurrency(varObj):
-
#数字是否为整数或浮点数
if IsFloat(varObj) and IsNumber(varObj):
#数字不能为负数
@@ -54,19 +47,16 @@ def IsCurrency(varObj):
#判断某个变量是否为空 x
def IsEmpty(varObj):
-
if len(varObj) == 0:
return True
return False
#判断变量是否为None None
def IsNone(varObj):
-
return type(varObj) is types.NoneType# == "None" or varObj == "none":
#判断是否为日期格式,并且是否符合日历规则 2010-01-31
def IsDate(varObj):
-
if len(varObj) == 10:
rule = '(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)$/'
match = re.match( rule , varObj )
@@ -77,17 +67,14 @@ def IsDate(varObj):
#判断是否为邮件地址
def IsEmail(varObj):
-
rule = '[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$'
match = re.match( rule , varObj )
-
if match:
return True
return False
#判断是否为中文字符串
def IsChineseCharString(varObj):
-
for x in varObj:
if (x >= u"\u4e00" and x<=u"\u9fa5") or (x >= u'\u0041' and x<=u'\u005a') or (x >= u'\u0061' and x<=u'\u007a'):
continue
@@ -98,27 +85,22 @@ def IsChineseCharString(varObj):
#判断是否为中文字符
def IsChineseChar(varObj):
-
if varObj[0] > chr(127):
return True
return False
#判断帐号是否合法 字母开头,允许4-16字节,允许字母数字下划线
def IsLegalAccounts(varObj):
-
rule = '[a-zA-Z][a-zA-Z0-9_]{3,15}$'
match = re.match( rule , varObj )
-
if match:
return True
return False
#匹配IP地址
def IsIpAddr(varObj):
-
rule = '\d+\.\d+\.\d+\.\d+'
match = re.match( rule , varObj )
-
if match:
return True
return False
diff --git a/api/eva.py b/api/eva.py
index f6df6e4..8008cf3 100755
--- a/api/eva.py
+++ b/api/eva.py
@@ -10,6 +10,8 @@
from public import NOVA_DB,NEUTRON_DB,NOVA,NEUTRON,RTN_200,RTN_500
import framework
+from django.utils.encoding import smart_text
+
DATABASES=settings.DATABASES
REGIONS=settings.REGIONS
@@ -18,117 +20,113 @@
def controller(req,ip,region=settings.REGIONS):
if not checker.IsIpAddr(ip):
- rtn="check ip(%s) address failed" % ip
+ rtn="check ip(%s) address failed" % ip
else:
- ip_addr=req.META.get("REMOTE_ADDR",None)
- user=framework.getApiUserByToken(req)
- if not user:
- return HttpResponse(RTN_500 % "Unknow auth token request." )
- regions=[]
- if not region ==settings.REGIONS:
- regions.append(region)
- else:
- regions=region
- rtn=eva(ip,regions)
- EvaLog().addLog(user,ip,rtn,ip_addr)
+ ip_addr=req.META.get("REMOTE_ADDR",None)
+ user=framework.getApiUserByToken(req)
+ if not user:
+ return HttpResponse(RTN_500 % "Unknow auth token request." )
+ regions=[]
+ if not region ==settings.REGIONS:
+ regions.append(region)
+ else:
+ regions=region
+ rtn=eva(ip,regions)
+ EvaLog().addLog(user,ip,rtn,ip_addr)
return HttpResponse(rtn)
def eva(ip,regions):
apitoken=ks_auth.getToken()
if not apitoken:
- return RTN_500 % "Can't get token from keystone"
+ return RTN_500 % "Can't get token from keystone"
for region in regions:
- if not NOVA(region) in nova_list:
- print "DB %s_nova doesn't configure." % region
- continue
- if not NEUTRON(region) in neutron_list:
- print "DB %s_neutron doesn't configure." % region
- continue
- print "---------Start to query instanceId from db(%s)-------------" % region
- instanceBean=InstanceManager().findInstanceIdByIp(NEUTRON_DB(region),NOVA_DB(region),ip)
- if not instanceBean:
- print "can't find instance in db(%s) by vir" % region
- print "------- check if it's a physical machine --------"
- childs=InstanceManager().getChildrens(NOVA_DB(region),ip)
-
- print childs
-
- if not childs:
- if isinstance(childs,list):
- return RTN_500 % ("[] instance find in nova.instances by physical machine(%s) in Region(%s)" % (ip,region))
- print "can't find it as a physical machine in db(%s)" % region
- continue
- msg={}
- for child in childs:
- msg["uuid_%s" % child.uuid]=evacuate(apitoken,child,region,child.host)
- return RTN_200 % msg
- else:
- mess=evacuate(apitoken,instanceBean,region,instanceBean.host)
- return RTN_200 % mess
+ if not NOVA(region) in nova_list:
+ print "DB %s_nova doesn't configure." % region
+ continue
+ if not NEUTRON(region) in neutron_list:
+ print "DB %s_neutron doesn't configure." % region
+ continue
+ print "---------Start to query instanceId from db(%s)-------------" % region
+ instanceBean=InstanceManager().findInstanceIdByIp(NEUTRON_DB(region),NOVA_DB(region),ip)
+ if not instanceBean:
+ print "can't find instance in db(%s) by vir" % region
+ print "------- check if it's a physical machine --------"
+ childs=InstanceManager().getChildrens(NOVA_DB(region),ip)
+
+ print childs
+
+ if not childs:
+ if isinstance(childs,list):
+ return RTN_500 % ("[] instance find in nova.instances by physical machine(%s) in Region(%s)" % (ip,region))
+ print "can't find it as a physical machine in db(%s)" % region
+ continue
+ msg={}
+ for child in childs:
+ msg["uuid_%s" % child.uuid]=evacuate(apitoken,child,region,child.host)
+ return RTN_200 % msg
+ else:
+ mess=evacuate(apitoken,instanceBean,region,instanceBean.host)
+ return RTN_200 % mess
return RTN_500 % ("Can't find machine|virtual by ip (%s)" % ip)
from su import runScript
def evacuate(apitoken,instanceBean,region,filterHost=None):
- node=getFilterAvailabilityHost(region,instanceBean.vcpus,instanceBean.memory_mb,filterHost,apitoken)
- if not node:
- node=getAvailabilityHost(region,instanceBean.vcpus,instanceBean.memory_mb,filterHost,apitoken)
- else:
- print "find filter node %s" % node
- if not node:
- return "no compute node match"
- else:
- rtn=ks_auth.evacuate(apitoken,region,instanceBean.uuid,node.hypervisor_hostname)
- print "%s
adapt by
%s
%s" % (instanceBean,node,rtn)
- if rtn.has_key("evacuate"):
- runScript(region,instanceBean.uuid,"EVACUATE")
- return rtn
+ node=getFilterAvailabilityHost(region,instanceBean.vcpus,instanceBean.memory_mb,filterHost,apitoken)
+ if not node:
+ node=getAvailabilityHost(region,instanceBean.vcpus,instanceBean.memory_mb,filterHost,apitoken)
+ else:
+ print "find filter node %s" % node
+ if not node:
+ return "no compute node match"
+ else:
+ rtn=ks_auth.evacuate(apitoken,region,instanceBean.uuid,node.hypervisor_hostname)
+ print "%s
adapt by
%s
%s" % (instanceBean,node,rtn)
+ if rtn.has_key("evacuate"):
+ runScript(region,instanceBean.uuid,"EVACUATE")
+ return rtn
def getFreeResByRegion(req,region=None):
if not region or not region in nova_list:
- return HttpResponse("region(%s) doesn't exist." % region)
+ return HttpResponse("region(%s) doesn't exist." % region)
nodes=ComputeNodeMana().getComputeNodes(NOVA_DB(region))
#return HttpResponse(json.dumps(nodes), content_type="application/json")
return HttpResponse(nodes)
def getAvailabilityHost(region,cpu,mem,filterHost=None,apitoken=None):
print "cpu %s mem %s" % (cpu,mem)
-
+
nodes=ComputeNodeMana().getComputeNodes(NOVA_DB(region))
print "nodes %s " % nodes
service=ks_auth.getOsServices(apitoken,region)
if not service:
- return HttpResponse("Can't get service status.")
+ return HttpResponse("Can't get service status.")
for node in nodes:
- if filterHost and filterHost==node.hypervisor_hostname:
- continue
- if not service.has_key(node.hypervisor_hostname) or service[node.hypervisor_hostname]=="down":
- continue
- if node.availability(cpu,mem):
- return node
+ if filterHost and filterHost==node.hypervisor_hostname:
+ continue
+ if not service.has_key(node.hypervisor_hostname) or service[node.hypervisor_hostname]=="down":
+ continue
+ if node.availability(cpu,mem):
+ return node
return None
def getFilterAvailabilityHost(region,cpu,mem,filterHost=None,apitoken=None):
-
zones=ks_auth.getAvaZones(apitoken,region)
-
if not zones.has_key(settings.BACK_UP_AZ) or not zones[settings.BACK_UP_AZ]:
- print "Can't find backupAZ compute nodes"
- return None
+ print "Can't find backupAZ compute nodes"
+ return None
backupAZ=zones[settings.BACK_UP_AZ]
-
#filters=",".join(backupAZ)
-
nodes=ComputeNodeMana().getFilterComputeNodes(NOVA_DB(region),backupAZ)
for node in nodes:
- if node.availability(cpu,mem):
- return node
+ if node.availability(cpu,mem):
+ return node
return None
def test(req):
@@ -138,64 +136,63 @@ def test(req):
def getMachineInfoByIp(req,ip):
apitoken=ks_auth.getToken()
if not apitoken:
- return HttpResponse("Can't get token from keystone")
+ return HttpResponse("Can't get token from keystone")
for region in REGIONS:
- if not NOVA(region) in nova_list:
- print "DB %s_nova doesn't configure." % region
- continue
- if not NEUTRON(region) in neutron_list:
- print "DB %s_neutron doesn't configure." % region
- continue
- print "---------Start to query instanceId from db(%s)-------------" % region
- instanceBean=InstanceManager().findInstanceIdByIp(connections[NEUTRON(region)],connections[NOVA(region)],ip)
- if not instanceBean:
- print "can't find instance in db(%s) by vir" % region
- print "------- check if it's a physical machine --------"
- cnode=ComputeNodeMana().getComputeNodeByIp(ip,connections[NOVA(region)])
-
- if cnode:
- return HttpResponse("Region(%s),physical machine info:%s" % (region,cnode))
- else:
- return HttpResponse("Region(%s),virtual instance info:%s" % (region,instanceBean))
+ if not NOVA(region) in nova_list:
+ print "DB %s_nova doesn't configure." % region
+ continue
+ if not NEUTRON(region) in neutron_list:
+ print "DB %s_neutron doesn't configure." % region
+ continue
+ print "---------Start to query instanceId from db(%s)-------------" % region
+ instanceBean=InstanceManager().findInstanceIdByIp(connections[NEUTRON(region)],connections[NOVA(region)],ip)
+ if not instanceBean:
+ print "can't find instance in db(%s) by vir" % region
+ print "------- check if it's a physical machine --------"
+ cnode=ComputeNodeMana().getComputeNodeByIp(ip,connections[NOVA(region)])
+
+ if cnode:
+ return HttpResponse("Region(%s),physical machine info:%s" % (region,cnode))
+ else:
+ return HttpResponse("Region(%s),virtual instance info:%s" % (region,instanceBean))
return HttpResponse("Can't get machine info.")
def getServiceStatus(req):
apitoken=ks_auth.getToken()
if not apitoken:
- return HttpResponse("Can't get token from keystone")
+ return HttpResponse("Can't get token from keystone")
response=""
for region in REGIONS:
service=ks_auth.getOsServices(apitoken,region)
if not service:
- return HttpResponse("Can't get service status from Region %s" % region)
+ return HttpResponse("Can't get service status from Region %s" % region)
else:
- response+="