From e477dd8f6df9ddb01a54df358efa6eab00bdc0b3 Mon Sep 17 00:00:00 2001 From: ywy Date: Tue, 7 Apr 2015 16:40:02 +0800 Subject: [PATCH 01/48] x --- alarm/bin/mana-monitor | 10 ++++ alarm/bin/mana.sh | 2 + alarm/mana_email.py | 49 ++++++++++++++++ alarm/mana_http.py | 29 ++++++++++ alarm/mana_log.py | 26 +++++++++ alarm/mana_monitor.py | 125 +++++++++++++++++++++++++++++++++++++++++ alarm/timer.py | 33 +++++++++++ 7 files changed, 274 insertions(+) create mode 100755 alarm/bin/mana-monitor create mode 100755 alarm/bin/mana.sh create mode 100644 alarm/mana_email.py create mode 100644 alarm/mana_http.py create mode 100644 alarm/mana_log.py create mode 100644 alarm/mana_monitor.py create mode 100644 alarm/timer.py diff --git a/alarm/bin/mana-monitor b/alarm/bin/mana-monitor new file mode 100755 index 0000000..90ca999 --- /dev/null +++ b/alarm/bin/mana-monitor @@ -0,0 +1,10 @@ +#!/usr/bin/python + +import daemon +import os +from monitor import run + +here = os.path.dirname(os.path.abspath(__file__)) + +with daemon.DaemonContext(working_directory=here): + run() diff --git a/alarm/bin/mana.sh b/alarm/bin/mana.sh new file mode 100755 index 0000000..0aae695 --- /dev/null +++ b/alarm/bin/mana.sh @@ -0,0 +1,2 @@ +start-stop-daemon --start --startas /usr/bin/python "/home/ywy/workspace/mana/alarm/monitor.py" --pidfile aaa & > /dev/null + diff --git a/alarm/mana_email.py b/alarm/mana_email.py new file mode 100644 index 0000000..4723ebb --- /dev/null +++ b/alarm/mana_email.py @@ -0,0 +1,49 @@ +import smtplib +from email.mime.text import MIMEText +from email.header import Header + +EMAIL_HOST = 'mail.ztgame.com' +EMAIL_PORT = 25 + +SENDER = 'yangwanyuan@ztgame.com' +SENDER_PW = 'ywy8861@000' + + +import mana_log +LOG = mana_log.GetLog(__name__) + +#import logging +#LOG = logging.getLogger(__name__) + +class Email(): + def __init__(self): + self.email_host = EMAIL_HOST + self.email_port = EMAIL_PORT + self.sender = SENDER + self.sender_pw = SENDER_PW + + + def sendmsg(self, receiver, subject, msg): + try: + self.handle = smtplib.SMTP(self.email_host, self.email_port) + self.handle.login(self.sender, self.sender_pw) + msgbody = MIMEText('

%s

'%msg, 'html', 'utf-8') + msgbody['Subject'] = Header(subject, 'utf-8') + self.handle.sendmail(self.sender, receiver, msgbody.as_string()) + LOG.info("send message to receiver success") + except Exception, e: + print e; + + def __del__(self): + if self.handle: + self.handle.close() + + + +if __name__ == "__main__": + emailclient = Email() + msg = 'msg: hello world!!!' + subject = 'subject: hello world!!' + receiver = SENDER + emailclient.sendmsg(receiver, subject, msg) + diff --git a/alarm/mana_http.py b/alarm/mana_http.py new file mode 100644 index 0000000..b8e043b --- /dev/null +++ b/alarm/mana_http.py @@ -0,0 +1,29 @@ +import httplib + +class HttpCon(): + def __init__(self, host, port, url, method): + self.host = host + self.port = port + self.url = url + self.method = method + self.timeout = 30 + + def get(self): + try: + self.con = httplib.HTTPConnection(self.host, self.port, self.timeout) + self.con.request(self.method, self.url) + response = self.con.getresponse() + status = response.status + if status != 200: + return NULL + return response.read() + except Exception, e: + print e + + def __del__(self): + if self.con: + self.con.close() + +if __name__ == "__main__": + a = HttpCon("www.baidu.com", 80, "/", "GET") + print a.get() diff --git a/alarm/mana_log.py b/alarm/mana_log.py new file mode 100644 index 0000000..39685e7 --- /dev/null +++ b/alarm/mana_log.py @@ -0,0 +1,26 @@ +import logging +import os + +#LOG_FILE = 'monitor.log' +LOG_FILE = '/var/log/mana/monitor.log' +#logging.basicConfig(filename = os.path.join(os.getcwd(), LOG_FILE), +logging.basicConfig(filename = LOG_FILE, + level = logging.DEBUG, + format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', + datefmt= '%m-%d %H:%M') + +console = logging.StreamHandler() +console.setLevel(logging.INFO) +logging.getLogger('').addHandler(console) + +def GetLog(name): + log = logging.getLogger(name) + return log + + +if __name__ == "__main__": + log = GetLog(__name__) + log.info("hello world!") + log.debug("hello python!") + log.warn("warn!!!!") + log.error("error!!") \ No newline at end of file diff --git a/alarm/mana_monitor.py b/alarm/mana_monitor.py new file mode 100644 index 0000000..a6b8b9c --- /dev/null +++ b/alarm/mana_monitor.py @@ -0,0 +1,125 @@ +#!/usr/bin/pyhon + +import os +import time + +#import httplib +import simplejson + +from mana_http import HttpCon +from mana_email import Email +#import timer + +import mana_log +LOG = mana_log.GetLog(__name__) + +#import logging + +#LOG_FILE = 'monitor.log' +#logging.basicConfig(filename = os.path.join(os.getcwd(), LOG_FILE), level = logging.DEBUG) +#LOG = logging.getLogger(__name__) + + +INTERVAL = 200 +THRESHOLD = 5 + +API_HOST = '127.0.0.1' +API_PORT = 8080 +GET_ALL_INSTANCE_URL = '/api/virs_list/' + +GET_METRIC = '/api/statics/' +ALARM_OBJ = 'network_incoming_bytes_rate/' +ALARM_TIME = '3h/' + +REGIONS = ['shanghai', 'beijing'] + +unit_map = {"B/s":1, + "KB/s":1024, + "MB/s":1024*1024, + "GB/s":1024*1024*1024 + } + +RECEIVER = 'yangwanyuan@ztgame.com' + +def run(): + interval = INTERVAL + threshold = THRESHOLD + LOG.info("begin to monitor,every %s seconds" %interval) + while True: + try: + time_pre = time.time() + monitor(threshold) + time_now = time.time() + time.sleep(interval + time_pre - time_now) + except Exception, e: + LOG.error(e) + + +def monitor(threshold): + for region in REGIONS: + instances = get_all_instance(region) + for instance in instances: + datas = get_network_flow(region, instance) + for data in datas: + alarm(instance, data, threshold) + +def get_all_instance(region): + url = GET_ALL_INSTANCE_URL + region + '/' + try: + #con = httplib.HTTPConnection(API_HOST, API_PORT, timeout=30) + #con.request('GET', url) + #response = con.getresponse() + #instances = simplejson.loads(response.read()).get('data') + httpclient = HttpCon(API_HOST, API_PORT, url, "GET") + body = httpclient.get() + if body: + instances = simplejson.loads(body).get('data') + except Exception, e: + LOG.error(e) + return instances + +def get_network_flow(region, instance): + url = GET_METRIC + region + '/' + ALARM_OBJ + instance + '/' + ALARM_TIME + try: + httpclient = HttpCon(API_HOST, API_PORT, url, "POST") + body = httpclient.get() + if body: + data = simplejson.loads(body) + except Exception, e: + LOG.error(e) + #print("get instance %s's network is %s "%(instance,data) ) + return data + + +def alarm(instance, data, threshold): + bodys = data.get('data') + name = data.get('name') + if bodys == []: + #print "%s's network %s: NO data" %(instance, name) + LOG.info("%s's network %s: NO data" %(instance, name)) + return False + #print data + for body in bodys: + unit = body.get('unit') + multiple = unit_map.get(unit) + max_data = body.get('max') + if max_data*multiple > threshold: + message = "%s's network %s: data is to high %s %s"%(instance, name, max_data, unit) + #print message + LOG.info(message) + send_message(instance, message) + return True + +def send_message(instance, message): + emailclient = Email() + msg = message + subject = 'network alarm!!!' + receiver = RECEIVER + emailclient.sendmsg(receiver, subject, msg) + + + + + +if __name__ == "__main__": + run() diff --git a/alarm/timer.py b/alarm/timer.py new file mode 100644 index 0000000..41f6691 --- /dev/null +++ b/alarm/timer.py @@ -0,0 +1,33 @@ +import time +import eventlet + + +class Timer(): + def __init__(self, interval, func, args): + self.interval = interval + self.func = func + self.args = args + #self.gt = eventlet.spawn(func, args) + + def start(self): + self.gt = eventlet.spawn(self._fun) + #while True: + # eventlet.greenthread.sleep(self.interval) + + def _fun(self): + while True: + self.func(self.args) + eventlet.greenthread.sleep(self.interval) + + + def stop(self): + self.gt.wait() + +def sayhello(args=[]): + print "hello" + print args + + +if __name__ == "__main__": + t = Timer(5, sayhello, ["this", "is", "timer"]) + t.start() From 95d2d5b49093bd990a9e6c8d48aea5586a061e51 Mon Sep 17 00:00:00 2001 From: ywy Date: Tue, 7 Apr 2015 17:06:28 +0800 Subject: [PATCH 02/48] modified api to increase mana_monitor interface --- alarm/bin/mana.sh | 2 +- api/eva.py | 9 +- api/ks_auth.py.bak | 193 +++++++++++++++++++++++++++++++++++++++++++ api/metric.py | 2 + api/urls.py | 29 +++---- mana/conf.py.bak | 102 +++++++++++++++++++++++ mana/settings.py | 19 +++-- mana/settings.py_bak | 120 +++++++++++++++++++++++++++ 8 files changed, 452 insertions(+), 24 deletions(-) create mode 100755 api/ks_auth.py.bak create mode 100644 mana/conf.py.bak create mode 100644 mana/settings.py_bak diff --git a/alarm/bin/mana.sh b/alarm/bin/mana.sh index 0aae695..fc451d3 100755 --- a/alarm/bin/mana.sh +++ b/alarm/bin/mana.sh @@ -1,2 +1,2 @@ -start-stop-daemon --start --startas /usr/bin/python "/home/ywy/workspace/mana/alarm/monitor.py" --pidfile aaa & > /dev/null +start-stop-daemon --start --startas /usr/bin/python "/home/ywy/workspace/mana/alarm/mana_monitor.py" --pidfile aaa & > /dev/null diff --git a/api/eva.py b/api/eva.py index f6df6e4..9295164 100755 --- a/api/eva.py +++ b/api/eva.py @@ -241,6 +241,13 @@ def getAvaNetworkId(nodes,tag): return v["network_id"] return 0 - +def virs_list(req,region): + REGION=region + virs=InstanceManager().getallActiveInstances(NOVA_DB(region)) + data = [] + for vir in virs: + data.append(vir.uuid) + body = json.dumps({"code":200,"message":"ok","data":data}) + return HttpResponse(body) diff --git a/api/ks_auth.py.bak b/api/ks_auth.py.bak new file mode 100755 index 0000000..a5d004e --- /dev/null +++ b/api/ks_auth.py.bak @@ -0,0 +1,193 @@ +#!/usr/bin/python +#coding=utf-8 + +import base64,urllib,httplib,json,os + +from urlparse import urlparse +from django.conf import settings +import json +from beans import KeyStoneManager +import public +from public import NOVA_DB,NEUTRON_DB,NOVA,NEUTRON +import utils + + +def getTokenFromKS(): + headers1 = {"Content-type":"application/json" } + KEYSTONE=settings.SYS_C2["KS_AUTH"] + conn1 = httplib.HTTPConnection(connUrl(KEYSTONE)) + params1 = '{"auth": {"tenantName":"%(KS_TENANT)s", "passwordCredentials": {"username": "%(KS_USER)s", "password": "%(KS_PWD)s"}}}' % settings.SYS_C2 + conn1.request("POST","%s/tokens" % KEYSTONE ,params1,headers1) + response1 = conn1.getresponse() + data1 = response1.read() + dd1 = json.loads(data1) + apitoken = dd1['access']['token']['id'] + expire=dd1['access']['token']['expires'] + public.TOKEN["id"]=apitoken + public.TOKEN["expire"]=utils.getNowAfterHours() + conn1.close() + return apitoken + +def getToken():#headers1 = { "X-Auth-Token":"422172848609489ea8126be290b4687f", "Content-type":"application/json" } + expire=public.TOKEN["expire"] + now=utils.getlocalstrtime() + if expire>now: + return public.TOKEN["id"] + else: + return getTokenFromKS() + + +def evacuate(apitoken,region,server_id,targetHost): + + Compute=KeyStoneManager().getServiceUrl("compute",region) + + headers1 = { "X-Auth-Token":apitoken, "Content-type":"application/json" } + conn1 = httplib.HTTPConnection(connUrl(Compute)) + + param=json.dumps({"evacuate": {"host":targetHost,"onSharedStorage": "False"}}) + print param + + conn1.request("POST","%s/servers/%s/action" % (Compute,server_id),param,headers1) + + response1 = conn1.getresponse() + + rtn = response1.read() + conn1.close() + #dd1 = json.loads(data1) + if rtn: + rtn = json.loads(rtn) + + print rtn + return rtn + +def getOsServices(apitoken,region): + Compute=KeyStoneManager().getServiceUrl("compute",region) + + headers1 = { "X-Auth-Token":apitoken, "Content-type":"application/json" } + + conn1 = httplib.HTTPConnection(connUrl(Compute)) + + conn1.request("GET","%s/os-services" % Compute,None,headers1) + + response1 = conn1.getresponse() + + rtn = response1.read() + + conn1.close() + + print "getOsServices:os-services->%s" % response1 + + #dd1 = json.loads(data1) + if not rtn: + return None + + + + rtn = json.loads(rtn) + services={} + + for service in rtn['services']: + if not service["binary"]=="nova-compute" or service["zone"]=="internal": + continue + services[service["host"]]=service["state"] + + print "----------------------------------------------------" + print services + return services + +def connUrl(url): + rtn=url.replace("http://","") + return rtn[:(rtn.index("/"))] if "/" in rtn else rtn + +def getAvaZones(apitoken,region): + Compute=KeyStoneManager().getServiceUrl("compute",region) + print "getAvaZones compute ->%s" % Compute + + headers1 = { "X-Auth-Token":apitoken, "Content-type":"application/json" } + + conn1 = httplib.HTTPConnection(connUrl(Compute)) + + conn1.request("GET","%s/os-availability-zone/detail" % Compute,None,headers1) + + response1 = conn1.getresponse() + + rtn = response1.read() + conn1.close() + + if not rtn: + return None + + rtn = json.loads(rtn) + zones={} + + print rtn + + for zone in rtn['availabilityZoneInfo']: + if zone["zoneName"]=="internal" or not zone["zoneState"]["available"]: + continue + zones[zone["zoneName"]]=[] + for k,v in zone["hosts"].items(): + if not v["nova-compute"]["available"] or not v["nova-compute"]["active"]: + continue + zones[zone["zoneName"]].append(k) + + print "----------------------------------------------------" + print zones + return zones + +def createNetwork(apitoken,region,segmentation_id,networkname,tenant_id): + Network=KeyStoneManager().getServiceUrl("network",region,{"tenant_id":tenant_id}) + headers1 = { "X-Auth-Token":apitoken, "Content-type":"application/json" } + conn1 = httplib.HTTPConnection(connUrl(Network)) + data={ + "network": { + "name": networkname, + "admin_state_up": True, + "provider:segmentation_id":segmentation_id, + "provider:network_type":"vlan", + "provider:physical_network":"vlannet", + "tenant_id":tenant_id, + "shared":False + } + } + param=json.dumps(data) + print param + print "%s/networks" % Network + conn1.request("POST","%s/v2.0/networks" % Network,param,headers1) + response1 = conn1.getresponse() + rtn = response1.read() + conn1.close() + if rtn: + rtn = json.loads(rtn) + print rtn + return rtn + +def createSubnet(apitoken,region,cidr,network_id,tenant_id): + Network=KeyStoneManager().getServiceUrl("network",region,{"tenant_id":tenant_id}) + headers1 = { "X-Auth-Token":apitoken, "Content-type":"application/json" } + conn1 = httplib.HTTPConnection(connUrl(Network)) + data={ + "subnet": { + "network_id": network_id, + "cidr": cidr, + "ip_version":4, + "tenant_id":tenant_id, + "enable_dhcp":True, + "name":"%s-net" % cidr.split("/")[0], + "gateway_ip":None + } + } + param=json.dumps(data) + print param + conn1.request("POST","%s/v2.0/subnets" % Network,param,headers1) + response1 = conn1.getresponse() + rtn = response1.read() + conn1.close() + #dd1 = json.loads(data1) + if rtn: + rtn = json.loads(rtn) + print rtn + return rtn + + + diff --git a/api/metric.py b/api/metric.py index 596600a..d59fa87 100644 --- a/api/metric.py +++ b/api/metric.py @@ -24,6 +24,8 @@ def m1(req): token=ks_auth.getToken() expire=public.TOKEN["expire"] li=json.dumps(public.TOKEN) + metricUrl = '1111' + expire = '22222' return render_to_response('m1.html',locals()) PERIOD={ diff --git a/api/urls.py b/api/urls.py index a803286..4e232ea 100755 --- a/api/urls.py +++ b/api/urls.py @@ -3,25 +3,26 @@ from su import chgPwd,getUserNetwork,getUserNetwork2,getMultiUserNetwork urlpatterns = patterns('', - url(r'index/$','api.views.index'), - url(r'virs/(?P[\w-]+)/$','api.views.virs'), - url(r'metric/(?P[\w-]+)/(?P[\w-]+)/$','api.metric.index'), - url(r'm1/$','api.metric.m1'), - url(r'statics/(?P[\w-]+)/(?P[\w-]+)/(?P[\w-]+)/(?P[\w-]+)/$','api.metric.statics'), - url(r'evacuate/(?P[\w-]+)/$','api.views.evacuate'), - url(r'face/$','api.views.face'), - url(r'eva/$','api.views.eva'), - url(r'chgPwd/(?P[\w-]+)/(?P[\w-]+)/$','api.views.chgPwd'), - url(r'free-res/$','api.eva.getFreeRes'), - url(r'free-res/(\w+)/$','api.eva.getFreeResByRegion'), + url(r'index/$','api.views.index'),#get use:index.html + url(r'virs/(?P[\w-]+)/$','api.views.virs'), #get use:virs.html + url(r'virs_list/(?P[\w-]+)/$','api.eva.virs_list'), + url(r'metric/(?P[\w-]+)/(?P[\w-]+)/$','api.metric.index'), #get use:metric.html + url(r'm1/$','api.metric.m1'), # nothing use:m1.html + url(r'statics/(?P[\w-]+)/(?P[\w-]+)/(?P[\w-]+)/(?P[\w-]+)/$','api.metric.statics'),# get ceilometer data + url(r'evacuate/(?P[\w-]+)/$','api.views.evacuate'), #nothing + url(r'face/$','api.views.face'),# nothing + url(r'eva/$','api.views.eva'), # nothing + url(r'chgPwd/(?P[\w-]+)/(?P[\w-]+)/$','api.views.chgPwd'), #get change keystone user's pwd? + url(r'free-res/$','api.eva.getFreeRes'), #get use:ip_list.html + url(r'free-res/(\w+)/$','api.eva.getFreeResByRegion'), #error??????? url(r'repair-eva/(?P[\w\.]+)/$','api.eva.controller'), url(r'repair-eva/(?P[\w\.]+)/(?P[\w-]+)/$','api.eva.controller'), url(r'machine/([\w\.]+)/$','api.eva.getMachineInfoByIp'), - url(r'service-status/$','api.eva.getServiceStatus'), + url(r'service-status/$','api.eva.getServiceStatus'), #get url(r'az-list/$','api.eva.az_list'), - url(r'free-ip-list/$','api.eva.ip_list'), + url(r'free-ip-list/$','api.eva.ip_list'), #get use:ip_list.html url(r'ava-network/(?P[\w-]+)/(?P[\w-]+)/$','api.eva.get_ava_network'), - url(r'free-ip/(?P[\w-]+)/$','api.eva.ip_list_region'), + url(r'free-ip/(?P[\w-]+)/$','api.eva.ip_list_region'), #get url(r'add-network-flow/(?P[\w-]+)/(?P[\w-]+)/(?P[\w-]+)/(?P[\w-]+)/$','api.su.limitSu'), url(r'su/relimit/(?P[\w-]+)/(?P[\w-]+)/(?P[\w-]+)/$','api.su.relimit'), url(r'chgPwd/(?P[\w-]+)/(?P[\w-]+)/(?P[\w-]+)/$',chgPwd), diff --git a/mana/conf.py.bak b/mana/conf.py.bak new file mode 100644 index 0000000..0f21c35 --- /dev/null +++ b/mana/conf.py.bak @@ -0,0 +1,102 @@ +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.mysql', + 'NAME': 'c2', + 'USER': 'ztgame_c2', + 'PASSWORD': 'ztgame_c2', + 'HOST': '172.30.250.21', + 'PORT': '', + }, + 'KEYSTONE': { + 'ENGINE': 'django.db.backends.mysql', + 'NAME': 'keystone', + 'USER': 'ztgame', + 'PASSWORD': 'ztgame0001', + 'HOST': '172.30.250.21', + 'PORT': '', + }, + 'KEYSTONE_Master': { + 'ENGINE': 'django.db.backends.mysql', + 'NAME': 'keystone', + 'USER': 'keystone_admin', + 'PASSWORD': 'NanHui_Cloud-DB@PWXkeystone', + 'HOST': '172.30.251.250', + 'PORT': '3306', + }, + 'Nanhui_nova': { + 'ENGINE': 'django.db.backends.mysql', + 'NAME': 'nova', + 'USER': 'ztgame', + 'PASSWORD': 'ztgame0001', + 'HOST': '172.30.250.21', + 'PORT': '', + }, + 'Nanhui_neutron': { + 'ENGINE': 'django.db.backends.mysql', + 'NAME': 'neutron_linux_bridge', + 'USER': 'ztgame', + 'PASSWORD': 'ztgame0001', + 'HOST': '172.30.250.21', + 'PORT': '', + }, + 'zhenru_nova': { + 'ENGINE': 'django.db.backends.mysql', + 'NAME': 'nova', + 'USER': 'ztgame', + 'PASSWORD': 'ztgame0001', + 'HOST': '172.29.203.252', + 'PORT': '', + }, + 'zhenru_neutron': { + 'ENGINE': 'django.db.backends.mysql', + 'NAME': 'neutron_linux_bridge', + 'USER': 'ztgame', + 'PASSWORD': 'ztgame0001', + 'HOST': '172.29.203.252', + 'PORT': '', + }, + 'beijing_nova': { + 'ENGINE': 'django.db.backends.mysql', + 'NAME': 'nova', + 'USER': 'ztgame', + 'PASSWORD': 'ztgame0001', + 'HOST': '172.28.0.252', + 'PORT': '', + }, + 'beijing_neutron': { + 'ENGINE': 'django.db.backends.mysql', + 'NAME': 'neutron_linux_bridge', + 'USER': 'ztgame', + 'PASSWORD': 'ztgame0001', + 'HOST': '172.28.0.252', + 'PORT': '', + }, +} + +REGIONS=( + "Nanhui", + "zhenru", + "beijing" +) + + +SYS_C2={ + "KS_USER":"admin", + "KS_PWD":"NanHui_Cloud@PWXadmin", + "tenant_id":"c635069eb367490fb7418bf961c9f0b0", + "KS_AUTH":"http://172.30.250.101:5000/v2.0", + "KS_TENANT":"admin" +} + +C2_AUTH_TOKEN={ + "168ba35f-f79e-4de7-876c-e58427d272ac":"admin", + "f2298a33-11c5-4ecc-b76c-8db74d2b207c":"monitor", + "c91f9406-de29-451c-92a8-7c9fd57443ee":"fengyu" +} + +STATIC={ + "Salt_master":"172\.30\.250\.22", + "Salt":"172.30.250.22", + "Regions":REGIONS, +} + diff --git a/mana/settings.py b/mana/settings.py index 8ae0d9e..e966ebe 100644 --- a/mana/settings.py +++ b/mana/settings.py @@ -23,12 +23,15 @@ import socket -if socket.gethostname()=="devstack": - DEBUG = True - TEMPLATE_DEBUG = True -else: - DEBUG = False - TEMPLATE_DEBUG = False +#if socket.gethostname()=="devstack": +# DEBUG = True +# TEMPLATE_DEBUG = True +#else: +# DEBUG = False +# TEMPLATE_DEBUG = False + +DEBUG = True +TEMPLATE_DEBUG = True ALLOWED_HOSTS = ["*"] @@ -96,14 +99,14 @@ # https://docs.djangoproject.com/en/1.6/howto/static-files/ STATICFILES_DIRS=( - os.path.join(BASE_DIR,"static"), + os.path.join(BASE_DIR,'static'), '/opt/projects/mana/static', ) STATIC_URL = '/static/' -#STATIC_ROOT = os.path.join(BASE_DIR, "static/") +#STATIC_ROOT = os.path.join(BASE_DIR, 'static/') #C2 CONF START diff --git a/mana/settings.py_bak b/mana/settings.py_bak new file mode 100644 index 0000000..41fd9a3 --- /dev/null +++ b/mana/settings.py_bak @@ -0,0 +1,120 @@ +""" +Django settings for mana project. + +For more information on this file, see +https://docs.djangoproject.com/en/1.6/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.6/ref/settings/ +""" + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +import os +BASE_DIR = os.path.dirname(os.path.dirname(__file__)) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/1.6/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '9fp*i*gp!lxi1k5c5zo4&^2&hie5+_guoyzze0q#0**(gb^3#%' + +# SECURITY WARNING: don't run with debug turned on in production! + +import socket + +#if socket.gethostname()=="devstack": +# DEBUG = True +# TEMPLATE_DEBUG = True +#else: +# DEBUG = False +# TEMPLATE_DEBUG = False + +DEBUG = True +TEMPLATE_DEBUG = True + + + + +ALLOWED_HOSTS = ["*"] + + +# Application definition + +INSTALLED_APPS = ( + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'api' +) + +MIDDLEWARE_CLASSES = ( + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + #'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +) + +ROOT_URLCONF = 'mana.urls' + +WSGI_APPLICATION = 'mana.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/1.6/ref/settings/#databases + +import conf + +DATABASES =conf.DATABASES + +""" + Config for mana project +""" +REGIONS=conf.REGIONS + +BACK_UP_AZ="BACKUP" + +SYS_C2=conf.SYS_C2 + + +# Internationalization +# https://docs.djangoproject.com/en/1.6/topics/i18n/ + +LANGUAGE_CODE = 'zh-cn' + +TIME_ZONE = 'Asia/Shanghai' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.6/howto/static-files/ + +STATICFILES_DIRS=( + os.path.join(BASE_DIR,"static"), + '/opt/projects/mana/static', +) + + +STATIC_URL = '/static/' + +#STATIC_ROOT = os.path.join(BASE_DIR, "static/") + +#C2 CONF START + +C2_AUTH_TOKEN=conf.C2_AUTH_TOKEN + +C2_LIMIT_NETWORK_FLOW_SCRIPT="sh /root/test.sh" + +C2_CHANGE_VIR_PWD_SCRIPT="python /opt/SYNC/chg_pwd.py" + +#C2 CONF END From 1a2736bf15e66d003476ce97d6e03675c7af3829 Mon Sep 17 00:00:00 2001 From: yangwanyuan Date: Tue, 7 Apr 2015 17:11:02 +0800 Subject: [PATCH 03/48] Delete conf.py.bak delete --- mana/conf.py.bak | 102 ----------------------------------------------- 1 file changed, 102 deletions(-) delete mode 100644 mana/conf.py.bak diff --git a/mana/conf.py.bak b/mana/conf.py.bak deleted file mode 100644 index 0f21c35..0000000 --- a/mana/conf.py.bak +++ /dev/null @@ -1,102 +0,0 @@ -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.mysql', - 'NAME': 'c2', - 'USER': 'ztgame_c2', - 'PASSWORD': 'ztgame_c2', - 'HOST': '172.30.250.21', - 'PORT': '', - }, - 'KEYSTONE': { - 'ENGINE': 'django.db.backends.mysql', - 'NAME': 'keystone', - 'USER': 'ztgame', - 'PASSWORD': 'ztgame0001', - 'HOST': '172.30.250.21', - 'PORT': '', - }, - 'KEYSTONE_Master': { - 'ENGINE': 'django.db.backends.mysql', - 'NAME': 'keystone', - 'USER': 'keystone_admin', - 'PASSWORD': 'NanHui_Cloud-DB@PWXkeystone', - 'HOST': '172.30.251.250', - 'PORT': '3306', - }, - 'Nanhui_nova': { - 'ENGINE': 'django.db.backends.mysql', - 'NAME': 'nova', - 'USER': 'ztgame', - 'PASSWORD': 'ztgame0001', - 'HOST': '172.30.250.21', - 'PORT': '', - }, - 'Nanhui_neutron': { - 'ENGINE': 'django.db.backends.mysql', - 'NAME': 'neutron_linux_bridge', - 'USER': 'ztgame', - 'PASSWORD': 'ztgame0001', - 'HOST': '172.30.250.21', - 'PORT': '', - }, - 'zhenru_nova': { - 'ENGINE': 'django.db.backends.mysql', - 'NAME': 'nova', - 'USER': 'ztgame', - 'PASSWORD': 'ztgame0001', - 'HOST': '172.29.203.252', - 'PORT': '', - }, - 'zhenru_neutron': { - 'ENGINE': 'django.db.backends.mysql', - 'NAME': 'neutron_linux_bridge', - 'USER': 'ztgame', - 'PASSWORD': 'ztgame0001', - 'HOST': '172.29.203.252', - 'PORT': '', - }, - 'beijing_nova': { - 'ENGINE': 'django.db.backends.mysql', - 'NAME': 'nova', - 'USER': 'ztgame', - 'PASSWORD': 'ztgame0001', - 'HOST': '172.28.0.252', - 'PORT': '', - }, - 'beijing_neutron': { - 'ENGINE': 'django.db.backends.mysql', - 'NAME': 'neutron_linux_bridge', - 'USER': 'ztgame', - 'PASSWORD': 'ztgame0001', - 'HOST': '172.28.0.252', - 'PORT': '', - }, -} - -REGIONS=( - "Nanhui", - "zhenru", - "beijing" -) - - -SYS_C2={ - "KS_USER":"admin", - "KS_PWD":"NanHui_Cloud@PWXadmin", - "tenant_id":"c635069eb367490fb7418bf961c9f0b0", - "KS_AUTH":"http://172.30.250.101:5000/v2.0", - "KS_TENANT":"admin" -} - -C2_AUTH_TOKEN={ - "168ba35f-f79e-4de7-876c-e58427d272ac":"admin", - "f2298a33-11c5-4ecc-b76c-8db74d2b207c":"monitor", - "c91f9406-de29-451c-92a8-7c9fd57443ee":"fengyu" -} - -STATIC={ - "Salt_master":"172\.30\.250\.22", - "Salt":"172.30.250.22", - "Regions":REGIONS, -} - From df617c623a09be74a4b0ba2452f0f755b71f5f78 Mon Sep 17 00:00:00 2001 From: yangwanyuan Date: Wed, 8 Apr 2015 17:43:36 +0800 Subject: [PATCH 04/48] commplete send mail to receivers --- alarm/data | 7 ++ alarm/etc/mana_monitor.conf | 34 ++++++++ alarm/mana_conf.py | 49 +++++++++++ alarm/mana_email.py | 35 +++++--- alarm/mana_monitor.py | 165 +++++++++++++++++++++++++----------- 5 files changed, 230 insertions(+), 60 deletions(-) create mode 100644 alarm/data create mode 100644 alarm/etc/mana_monitor.conf create mode 100644 alarm/mana_conf.py diff --git a/alarm/data b/alarm/data new file mode 100644 index 0000000..a6dc014 --- /dev/null +++ b/alarm/data @@ -0,0 +1,7 @@ +[global] +a = 1 +b = "bbb" +c = [1,2,3,4] +d = {"a":1, "b":2} +e = /aaa/%s/whater/ +f = aaa,bbb,ccc diff --git a/alarm/etc/mana_monitor.conf b/alarm/etc/mana_monitor.conf new file mode 100644 index 0000000..a24b667 --- /dev/null +++ b/alarm/etc/mana_monitor.conf @@ -0,0 +1,34 @@ +[global] +cycletime = 200 +api_host = 127.0.0.1 +api_port = 8080 +regions = shanghai,beijing + +[url] +get_all_instance_url = /api/virs_list/%s/ +get_metric = /api/statics/%s/%s/%s/3h/ + +[alarm] +cpu_util = 0.3 +network_incoming_bytes_rate = 30 +network_outgoing_bytes_rate = 5 +disk_write_bytes_rate = 2000 +disk_read_bytes_rate = 1 +network_incoming_bytes = 100000 +network_outgoing_bytes = 100000 + +[email] +email_host = mail.ztgame.com +email_port = 25 + +email_sender = autowork@ztgame.com +email_sender_pwd = ak123$%^ + +email_receiver = yangwanyuan@ztgame.com + + + + + + + diff --git a/alarm/mana_conf.py b/alarm/mana_conf.py new file mode 100644 index 0000000..aa8f8dc --- /dev/null +++ b/alarm/mana_conf.py @@ -0,0 +1,49 @@ +import ConfigParser +import os + + + +def Parser(config): + conf = {} + conf['cycletime'] = config.getint('global', 'cycletime') + conf['api_host'] = config.get('global', 'api_host') + conf['api_port'] = config.getint('global', 'api_port') + + regions_list = config.get('global', 'regions').split(',') + conf['regions'] = regions_list + + url_dict = {} + url_dict['get_all_instance_url'] = config.get('url', 'get_all_instance_url') + url_dict['get_metric'] = config.get('url', 'get_metric') + + conf['url'] = url_dict + + + conf['email_host'] = config.get('email', 'email_host') + conf['email_port'] = config.getint('email', 'email_port') + conf['email_sender'] = config.get('email', 'email_sender') + conf['email_sender_pwd'] = config.get('email', 'email_sender_pwd') + + email_reciver_list = config.get('email', 'email_receiver').split(',') + conf['email_receiver'] = email_reciver_list + + alarm_list = config.items('alarm') + conf['alarm_list'] = alarm_list + + return conf + +def GetConf(): + config = ConfigParser.ConfigParser() + config.read('/etc/mana/mana_monitor.conf') + conf = Parser(config) + return conf + + + + +if __name__ == '__main__': + con = GetConf() + print con + + + diff --git a/alarm/mana_email.py b/alarm/mana_email.py index 4723ebb..79dfdfb 100644 --- a/alarm/mana_email.py +++ b/alarm/mana_email.py @@ -2,11 +2,14 @@ from email.mime.text import MIMEText from email.header import Header -EMAIL_HOST = 'mail.ztgame.com' -EMAIL_PORT = 25 +#import mana_conf +#CONF = mana_conf.GetConf() -SENDER = 'yangwanyuan@ztgame.com' -SENDER_PW = 'ywy8861@000' +#EMAIL_HOST = 'mail.ztgame.com' +#EMAIL_PORT = 25 + +#SENDER = 'yangwanyuan@ztgame.com' +#SENDER_PW = 'ywy8861@000' import mana_log @@ -16,11 +19,11 @@ #LOG = logging.getLogger(__name__) class Email(): - def __init__(self): - self.email_host = EMAIL_HOST - self.email_port = EMAIL_PORT - self.sender = SENDER - self.sender_pw = SENDER_PW + def __init__(self, email_host, email_port, email_sender, email_sender_pwd): + self.email_host = email_host + self.email_port = email_port + self.sender = email_sender + self.sender_pw = email_sender_pwd def sendmsg(self, receiver, subject, msg): @@ -30,7 +33,7 @@ def sendmsg(self, receiver, subject, msg): msgbody = MIMEText('

%s

'%msg, 'html', 'utf-8') msgbody['Subject'] = Header(subject, 'utf-8') self.handle.sendmail(self.sender, receiver, msgbody.as_string()) - LOG.info("send message to receiver success") + LOG.info("send message %s to receiver %s success " %(subject, receiver)) except Exception, e: print e; @@ -41,9 +44,17 @@ def __del__(self): if __name__ == "__main__": - emailclient = Email() + EMAIL_HOST = 'mail.ztgame.com' + EMAIL_PORT = 25 + + #SENDER = 'yangwanyuan@ztgame.com' + #SENDER_PW = 'ywy8861@000' + + SENDER = 'autowork@ztgame.com' + SENDER_PW = 'ak123$%^' + emailclient = Email(EMAIL_HOST, EMAIL_PORT, SENDER, SENDER_PW) msg = 'msg: hello world!!!' subject = 'subject: hello world!!' - receiver = SENDER + receiver = 'yangwanyuan@ztgame.com' emailclient.sendmsg(receiver, subject, msg) diff --git a/alarm/mana_monitor.py b/alarm/mana_monitor.py index a6b8b9c..bd373e2 100644 --- a/alarm/mana_monitor.py +++ b/alarm/mana_monitor.py @@ -19,58 +19,117 @@ #logging.basicConfig(filename = os.path.join(os.getcwd(), LOG_FILE), level = logging.DEBUG) #LOG = logging.getLogger(__name__) - -INTERVAL = 200 -THRESHOLD = 5 - -API_HOST = '127.0.0.1' -API_PORT = 8080 -GET_ALL_INSTANCE_URL = '/api/virs_list/' - -GET_METRIC = '/api/statics/' -ALARM_OBJ = 'network_incoming_bytes_rate/' -ALARM_TIME = '3h/' - -REGIONS = ['shanghai', 'beijing'] - -unit_map = {"B/s":1, - "KB/s":1024, - "MB/s":1024*1024, - "GB/s":1024*1024*1024 - } - -RECEIVER = 'yangwanyuan@ztgame.com' +import mana_conf +CONF = mana_conf.GetConf() + + +#INTERVAL = 200 +#THRESHOLD = 5 + +#API_HOST = '127.0.0.1' +#API_PORT = 8080 +#GET_ALL_INSTANCE_URL = '/api/virs_list/' + +#GET_METRIC = '/api/statics/' +#ALARM_OBJ = 'network_incoming_bytes_rate/' +#ALARM_TIME = '3h/' + +#REGIONS = ['shanghai', 'beijing'] + +#unit_map = {"B/s":1, +# "KB/s":1024, +# "MB/s":1024*1024, +# "GB/s":1024*1024*1024 +# } + +#RECEIVER = 'yangwanyuan@ztgame.com' +unit_map = { + 'cpu_util':{"%":1}, + 'network_incoming_bytes_rate': { + "B/s":1, + "KB/s":1024, + "MB/s":1024*1024, + "GB/s":1024*1024*1024 + }, + 'network_outgoing_bytes_rate': { + "B/s":1, + "KB/s":1024, + "MB/s":1024*1024, + "GB/s":1024*1024*1024 + }, + 'disk_write_bytes_rate': { + "B/s":1, + "KB/s":1024, + "MB/s":1024*1024, + "GB/s":1024*1024*1024 + }, + 'disk_read_bytes_rate': { + "B/s":1, + "KB/s":1024, + "MB/s":1024*1024, + "GB/s":1024*1024*1024 + }, + 'network_incoming_bytes': { + "B":1, + "KB":1024, + "MB":1024*1024, + "GB":1024*1024*1024 + }, + 'network_outgoing_bytes': { + "B":1, + "KB":1024, + "MB":1024*1024, + "GB":1024*1024*1024 + }, +} def run(): - interval = INTERVAL - threshold = THRESHOLD + interval = CONF.get('cycletime') + #threshold = THRESHOLD LOG.info("begin to monitor,every %s seconds" %interval) while True: try: time_pre = time.time() - monitor(threshold) + monitor() time_now = time.time() time.sleep(interval + time_pre - time_now) except Exception, e: LOG.error(e) -def monitor(threshold): - for region in REGIONS: - instances = get_all_instance(region) +def monitor(): + regions = CONF.get('regions') + for region in regions: + instances = get_instances_from_api(region) for instance in instances: - datas = get_network_flow(region, instance) - for data in datas: - alarm(instance, data, threshold) - -def get_all_instance(region): - url = GET_ALL_INSTANCE_URL + region + '/' + _monitor(region, instance) + #datas = get_network_flow(region, instance) + #for data in datas: + # alarm(instance, data, threshold) + +def _monitor(region, instance): + for (alarm_obj, thd) in CONF.get('alarm_list'): + datas = get_datas_from_api(region, instance, alarm_obj) + #LOG.info("region:%s, instance:%s, alarm_obj:%s, datas:%s" %(region, instance, alarm_obj, datas)) + threshold = float(thd) + for data in datas: + alarm(instance, data, alarm_obj, threshold) + #LOG.info(data) + #alarm(instance, data, threshold) + + + +def get_instances_from_api(region): + url = CONF.get('url').get('get_all_instance_url') %region + api_host = CONF.get('api_host') + api_port = CONF.get('api_port') + #url = GET_ALL_INSTANCE_URL + region + '/' try: #con = httplib.HTTPConnection(API_HOST, API_PORT, timeout=30) #con.request('GET', url) #response = con.getresponse() #instances = simplejson.loads(response.read()).get('data') - httpclient = HttpCon(API_HOST, API_PORT, url, "GET") + httpclient = HttpCon(api_host, api_port, url, "GET") body = httpclient.get() if body: instances = simplejson.loads(body).get('data') @@ -78,10 +137,13 @@ def get_all_instance(region): LOG.error(e) return instances -def get_network_flow(region, instance): - url = GET_METRIC + region + '/' + ALARM_OBJ + instance + '/' + ALARM_TIME +def get_datas_from_api(region, instance, alarm_obj): + url = CONF.get('url').get('get_metric') %(region, alarm_obj, instance) + api_host = CONF.get('api_host') + api_port = CONF.get('api_port') + #url = GET_METRIC + region + '/' + ALARM_OBJ + instance + '/' + ALARM_TIME try: - httpclient = HttpCon(API_HOST, API_PORT, url, "POST") + httpclient = HttpCon(api_host, api_port, url, "POST") body = httpclient.get() if body: data = simplejson.loads(body) @@ -91,31 +153,38 @@ def get_network_flow(region, instance): return data -def alarm(instance, data, threshold): +def alarm(instance, data, alarm_obj, threshold): bodys = data.get('data') name = data.get('name') if bodys == []: #print "%s's network %s: NO data" %(instance, name) - LOG.info("%s's network %s: NO data" %(instance, name)) + #LOG.info("%s's %s is %s: NO data" %(instance, alarm_obj, name)) return False #print data for body in bodys: unit = body.get('unit') - multiple = unit_map.get(unit) + multiple = unit_map.get(alarm_obj).get(unit) + multiple = 1 max_data = body.get('max') if max_data*multiple > threshold: - message = "%s's network %s: data is to high %s %s"%(instance, name, max_data, unit) + message = "Instance %s's %s device is %s: data is to high %s %s"%(instance, alarm_obj, name, max_data, unit) #print message LOG.info(message) - send_message(instance, message) + send_message(instance, alarm_obj, message) return True -def send_message(instance, message): - emailclient = Email() - msg = message - subject = 'network alarm!!!' - receiver = RECEIVER - emailclient.sendmsg(receiver, subject, msg) +def send_message(instance, subject, message): + + email_host = CONF.get('email_host') + email_port = CONF.get('email_port') + sender = CONF.get('email_sender') + sender_pwd = CONF.get('email_sender_pwd') + receivers = CONF.get('email_receiver') + emailclient = Email(email_host, email_port, sender, sender_pwd) + for receiver in receivers: + msg = message + subject = subject + ' alarm!!!' + emailclient.sendmsg(receiver, subject, msg) From f8b019952e3dc57fd1fb07eabb47ac0881a7af1a Mon Sep 17 00:00:00 2001 From: yangwanyuan Date: Wed, 8 Apr 2015 17:47:58 +0800 Subject: [PATCH 05/48] Delete data nothing --- alarm/data | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 alarm/data diff --git a/alarm/data b/alarm/data deleted file mode 100644 index a6dc014..0000000 --- a/alarm/data +++ /dev/null @@ -1,7 +0,0 @@ -[global] -a = 1 -b = "bbb" -c = [1,2,3,4] -d = {"a":1, "b":2} -e = /aaa/%s/whater/ -f = aaa,bbb,ccc From 19294f4ea873449628b08e6471cd29e7dfaa1134 Mon Sep 17 00:00:00 2001 From: yangwanyuan Date: Thu, 9 Apr 2015 11:21:07 +0800 Subject: [PATCH 06/48] modify api interface to get instance --- api/eva.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/api/eva.py b/api/eva.py index 9295164..a6c4cf3 100755 --- a/api/eva.py +++ b/api/eva.py @@ -246,7 +246,12 @@ def virs_list(req,region): virs=InstanceManager().getallActiveInstances(NOVA_DB(region)) data = [] for vir in virs: - data.append(vir.uuid) + item= {} + item['instance_id']= vir.uuid + item['user_id'] = vir.user_id + item['project_id'] = vir.project_id + #data.append(vir.uuid) + data.append(item) body = json.dumps({"code":200,"message":"ok","data":data}) return HttpResponse(body) From 65612c8c1efd6ae329dd7234e45a81ed4feebc03 Mon Sep 17 00:00:00 2001 From: yangwanyuan Date: Thu, 9 Apr 2015 11:53:22 +0800 Subject: [PATCH 07/48] modify the monitor send messeges --- alarm/mana_monitor.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/alarm/mana_monitor.py b/alarm/mana_monitor.py index bd373e2..99405dd 100644 --- a/alarm/mana_monitor.py +++ b/alarm/mana_monitor.py @@ -109,7 +109,8 @@ def monitor(): def _monitor(region, instance): for (alarm_obj, thd) in CONF.get('alarm_list'): - datas = get_datas_from_api(region, instance, alarm_obj) + instance_id = instance.get('instance_id') + datas = get_datas_from_api(region, instance_id, alarm_obj) #LOG.info("region:%s, instance:%s, alarm_obj:%s, datas:%s" %(region, instance, alarm_obj, datas)) threshold = float(thd) for data in datas: @@ -156,6 +157,9 @@ def get_datas_from_api(region, instance, alarm_obj): def alarm(instance, data, alarm_obj, threshold): bodys = data.get('data') name = data.get('name') + instance_id =instance.get('instance_id') + project = instance.get('project_id') + user_id = instance.get('user_id') if bodys == []: #print "%s's network %s: NO data" %(instance, name) #LOG.info("%s's %s is %s: NO data" %(instance, alarm_obj, name)) @@ -167,13 +171,13 @@ def alarm(instance, data, alarm_obj, threshold): multiple = 1 max_data = body.get('max') if max_data*multiple > threshold: - message = "Instance %s's %s device is %s: data is to high %s %s"%(instance, alarm_obj, name, max_data, unit) + message = " Instance:%s\n Project:%s\n User:%s\n AlarmBody:%s\n Device:%s\n Message:data is to high %s %s\n"%(instance_id , project, user_id, alarm_obj, name, max_data, unit) #print message LOG.info(message) - send_message(instance, alarm_obj, message) + send_message(alarm_obj, message) return True -def send_message(instance, subject, message): +def send_message(subject, message): email_host = CONF.get('email_host') email_port = CONF.get('email_port') From 30d4aa876d41d32766d4e619db51353e0354dfc4 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 10 Apr 2015 11:00:14 +0800 Subject: [PATCH 08/48] modify the bin script --- alarm/bin/mana-before.sh | 6 ++++++ alarm/bin/mana-start-ubuntu.sh | 3 +++ alarm/bin/mana-stop-ubuntu.sh | 1 + alarm/mana_monitor.py | 10 ++++++---- 4 files changed, 16 insertions(+), 4 deletions(-) create mode 100755 alarm/bin/mana-before.sh create mode 100755 alarm/bin/mana-start-ubuntu.sh create mode 100755 alarm/bin/mana-stop-ubuntu.sh diff --git a/alarm/bin/mana-before.sh b/alarm/bin/mana-before.sh new file mode 100755 index 0000000..a5f117f --- /dev/null +++ b/alarm/bin/mana-before.sh @@ -0,0 +1,6 @@ +rm -fr /etc/mana +mkdir -p /etc/mana +cp ../etc/mana_monitor.conf /etc/mana + +rm -fr /var/log/mana +mkdir -p /var/log/mana diff --git a/alarm/bin/mana-start-ubuntu.sh b/alarm/bin/mana-start-ubuntu.sh new file mode 100755 index 0000000..1cdc132 --- /dev/null +++ b/alarm/bin/mana-start-ubuntu.sh @@ -0,0 +1,3 @@ +start-stop-daemon --start --startas /usr/bin/python "/home/ywy/sourcecode/mana/alarm/mana_monitor.py" --pidfile /var/run/mana/mana_monitor.pid --background > /dev/null +#start-stop-daemon --start --background /usr/bin/python /home/ywy/sourcecode/mana/alarm/mana_monitor.py > /dev/null + diff --git a/alarm/bin/mana-stop-ubuntu.sh b/alarm/bin/mana-stop-ubuntu.sh new file mode 100755 index 0000000..d1de1a2 --- /dev/null +++ b/alarm/bin/mana-stop-ubuntu.sh @@ -0,0 +1 @@ +start-stop-daemon --stop --name mana_monitor.py diff --git a/alarm/mana_monitor.py b/alarm/mana_monitor.py index 99405dd..47026e8 100644 --- a/alarm/mana_monitor.py +++ b/alarm/mana_monitor.py @@ -156,10 +156,11 @@ def get_datas_from_api(region, instance, alarm_obj): def alarm(instance, data, alarm_obj, threshold): bodys = data.get('data') - name = data.get('name') + device_name = data.get('name') instance_id =instance.get('instance_id') - project = instance.get('project_id') - user_id = instance.get('user_id') + project = instance.get('project') + user = instance.get('user') + instance_name = instance.get('instance_name') if bodys == []: #print "%s's network %s: NO data" %(instance, name) #LOG.info("%s's %s is %s: NO data" %(instance, alarm_obj, name)) @@ -171,7 +172,8 @@ def alarm(instance, data, alarm_obj, threshold): multiple = 1 max_data = body.get('max') if max_data*multiple > threshold: - message = " Instance:%s\n Project:%s\n User:%s\n AlarmBody:%s\n Device:%s\n Message:data is to high %s %s\n"%(instance_id , project, user_id, alarm_obj, name, max_data, unit) + message = " Instance_ID:%s\n Instance_Name:%s\n Project:%s\n User:%s\n AlarmBody:%s\n Device:%s\n Message:data is to high %s %s\n"\ + %(instance_id, instance_name, project, user, alarm_obj, device_name, max_data, unit) #print message LOG.info(message) send_message(alarm_obj, message) From 908ffdb119a2ffb5bf36c2e5f94ab80bfef703d9 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 10 Apr 2015 11:06:39 +0800 Subject: [PATCH 09/48] modify the api interface to get project and user --- api/beans.py | 27 ++++++++++++++++++++++++++- api/eva.py | 8 ++++++-- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/api/beans.py b/api/beans.py index cd37da2..77ed521 100755 --- a/api/beans.py +++ b/api/beans.py @@ -393,8 +393,12 @@ def getChildrens(self,nova_db,ip): return childs + 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) @@ -403,7 +407,28 @@ def getServiceUrl(self,service_name,region,tenant=settings.SYS_C2): 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() + cursor.execute(GET_USER_BY_USERID,[user_id]) + result = cursor.fetchone() + cursor.close() + keystone_db.close() + return None if not result else result[0] + + def getProjectByProjectID(self, project_id): + #keystone_db = KEYSTONE_DB + keystone_db = connections["KEYSTONE"] + cursor = keystone_db.cursor() + cursor.execute(GET_PROJECT_BY_PROJECTID,[project_id]) + result = cursor.fetchone() + cursor.close() + keystone_db.close() + return None if not result else result[0] 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`' diff --git a/api/eva.py b/api/eva.py index a6c4cf3..cb88fd1 100755 --- a/api/eva.py +++ b/api/eva.py @@ -248,11 +248,15 @@ def virs_list(req,region): for vir in virs: item= {} item['instance_id']= vir.uuid - item['user_id'] = vir.user_id - item['project_id'] = vir.project_id + item['user'] = KeyStoneManager().getUserByUserID(vir.user_id) + item['project'] = KeyStoneManager().getProjectByProjectID(vir.project_id) + item['instance_name'] = vir.hostname #data.append(vir.uuid) data.append(item) body = json.dumps({"code":200,"message":"ok","data":data}) return HttpResponse(body) + + + From c62fc573c5744a19e3ed1a4cdf32b8ab130e16b3 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 10 Apr 2015 11:09:41 +0800 Subject: [PATCH 10/48] modify the debug machine on ywy host --- mana/settings.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/mana/settings.py b/mana/settings.py index e966ebe..d63231c 100644 --- a/mana/settings.py +++ b/mana/settings.py @@ -23,15 +23,15 @@ import socket -#if socket.gethostname()=="devstack": -# DEBUG = True -# TEMPLATE_DEBUG = True -#else: -# DEBUG = False -# TEMPLATE_DEBUG = False - -DEBUG = True -TEMPLATE_DEBUG = True +if socket.gethostname()=="ywy": + DEBUG = True + TEMPLATE_DEBUG = True +else: + DEBUG = False + TEMPLATE_DEBUG = False + +#DEBUG = True +#TEMPLATE_DEBUG = True ALLOWED_HOSTS = ["*"] From f027105966978bac50e22d42ebb9972d8ebc7529 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 10 Apr 2015 11:19:00 +0800 Subject: [PATCH 11/48] modify add monitor time --- alarm/mana_monitor.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/alarm/mana_monitor.py b/alarm/mana_monitor.py index 47026e8..040d9d2 100644 --- a/alarm/mana_monitor.py +++ b/alarm/mana_monitor.py @@ -92,6 +92,8 @@ def run(): time_pre = time.time() monitor() time_now = time.time() + monitor_time = time_now - time_pre + LOG.info("this cycle monitor all instances use time: %ss" %monitor_time) time.sleep(interval + time_pre - time_now) except Exception, e: LOG.error(e) From 689b69e836314e82b17df3604d43c2c64637dd3a Mon Sep 17 00:00:00 2001 From: yangwanyuan Date: Fri, 10 Apr 2015 11:30:31 +0800 Subject: [PATCH 12/48] Delete mana.sh --- alarm/bin/mana.sh | 2 -- 1 file changed, 2 deletions(-) delete mode 100755 alarm/bin/mana.sh diff --git a/alarm/bin/mana.sh b/alarm/bin/mana.sh deleted file mode 100755 index fc451d3..0000000 --- a/alarm/bin/mana.sh +++ /dev/null @@ -1,2 +0,0 @@ -start-stop-daemon --start --startas /usr/bin/python "/home/ywy/workspace/mana/alarm/mana_monitor.py" --pidfile aaa & > /dev/null - From 6c6bdc160758fdae70d07c32a065b2b2eda17d43 Mon Sep 17 00:00:00 2001 From: yangwanyuan Date: Fri, 10 Apr 2015 11:30:42 +0800 Subject: [PATCH 13/48] Delete mana-monitor --- alarm/bin/mana-monitor | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100755 alarm/bin/mana-monitor diff --git a/alarm/bin/mana-monitor b/alarm/bin/mana-monitor deleted file mode 100755 index 90ca999..0000000 --- a/alarm/bin/mana-monitor +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/python - -import daemon -import os -from monitor import run - -here = os.path.dirname(os.path.abspath(__file__)) - -with daemon.DaemonContext(working_directory=here): - run() From 8ea42a89fd346cc2a653cf0f26d6658400ec8dbe Mon Sep 17 00:00:00 2001 From: root Date: Fri, 10 Apr 2015 11:32:36 +0800 Subject: [PATCH 14/48] fix etc --- alarm/etc/mana_monitor.conf | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/alarm/etc/mana_monitor.conf b/alarm/etc/mana_monitor.conf index a24b667..d877b86 100644 --- a/alarm/etc/mana_monitor.conf +++ b/alarm/etc/mana_monitor.conf @@ -9,13 +9,13 @@ get_all_instance_url = /api/virs_list/%s/ get_metric = /api/statics/%s/%s/%s/3h/ [alarm] -cpu_util = 0.3 -network_incoming_bytes_rate = 30 -network_outgoing_bytes_rate = 5 -disk_write_bytes_rate = 2000 -disk_read_bytes_rate = 1 -network_incoming_bytes = 100000 -network_outgoing_bytes = 100000 +cpu_util = 0.8 +network_incoming_bytes_rate = 50000000 +network_outgoing_bytes_rate = 50000000 +#disk_write_bytes_rate = 2000 +#disk_read_bytes_rate = 1 +#network_incoming_bytes = 100000 +#network_outgoing_bytes = 100000 [email] email_host = mail.ztgame.com From e13be7ce178fedac429f5f29cbd347ce3c14a123 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 10 Apr 2015 12:08:27 +0800 Subject: [PATCH 15/48] modified +x --- alarm/mana_monitor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 alarm/mana_monitor.py diff --git a/alarm/mana_monitor.py b/alarm/mana_monitor.py old mode 100644 new mode 100755 index 040d9d2..2544b36 --- a/alarm/mana_monitor.py +++ b/alarm/mana_monitor.py @@ -1,4 +1,4 @@ -#!/usr/bin/pyhon +#!/usr/bin/python import os import time From 257d302cb00c9c9c7dcf78356aeaf1c50d55e7be Mon Sep 17 00:00:00 2001 From: root Date: Fri, 10 Apr 2015 12:09:12 +0800 Subject: [PATCH 16/48] modify start stop script --- alarm/bin/mana-start-ubuntu.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/alarm/bin/mana-start-ubuntu.sh b/alarm/bin/mana-start-ubuntu.sh index 1cdc132..6979d10 100755 --- a/alarm/bin/mana-start-ubuntu.sh +++ b/alarm/bin/mana-start-ubuntu.sh @@ -1,3 +1,4 @@ -start-stop-daemon --start --startas /usr/bin/python "/home/ywy/sourcecode/mana/alarm/mana_monitor.py" --pidfile /var/run/mana/mana_monitor.pid --background > /dev/null +#start-stop-daemon --start --startas /usr/bin/python "/home/ywy/sourcecode/mana/alarm/mana_monitor.py" --pidfile /var/run/mana/mana_monitor.pid --background > /dev/null +start-stop-daemon --start --exec "/home/ywy/sourcecode/mana/alarm/mana_monitor.py" --pidfile /var/run/mana/mana_monitor.pid --background > /dev/null #start-stop-daemon --start --background /usr/bin/python /home/ywy/sourcecode/mana/alarm/mana_monitor.py > /dev/null From 478bfdda2bce41acf803c4fcfe369765bb14ddc9 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 10 Apr 2015 14:32:30 +0800 Subject: [PATCH 17/48] add centos script --- alarm/bin/mana-start-centos.sh | 6 ++++++ alarm/bin/mana-stop-centos.sh | 3 +++ 2 files changed, 9 insertions(+) create mode 100755 alarm/bin/mana-start-centos.sh create mode 100755 alarm/bin/mana-stop-centos.sh diff --git a/alarm/bin/mana-start-centos.sh b/alarm/bin/mana-start-centos.sh new file mode 100755 index 0000000..00c22b5 --- /dev/null +++ b/alarm/bin/mana-start-centos.sh @@ -0,0 +1,6 @@ +#!/bin/sh +#. /etc/rc.d/init.d/functions + +#daemon --user cinder --pidfile $pidfile "$exec --config-file $distconfig --config-file $config --logfile $logfile &>/dev/null & echo \$! > $pidfile" +#daemon --pidfile /tmp/mana_monitor.pid -- "/opt/projects/mana/alarm/mana_monitor.py &> /dev/null " +nohup /opt/projects/mana/alarm/mana_monitor.py > /dev/null 2>&1 & diff --git a/alarm/bin/mana-stop-centos.sh b/alarm/bin/mana-stop-centos.sh new file mode 100755 index 0000000..1ae4fbc --- /dev/null +++ b/alarm/bin/mana-stop-centos.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +pkill -9 mana_monitor.py From 7e203b046fe88c52eeb4fc44a71d1f759d02bf4d Mon Sep 17 00:00:00 2001 From: root Date: Fri, 10 Apr 2015 17:24:00 +0800 Subject: [PATCH 18/48] modify email chinese code --- alarm/mana_email.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/alarm/mana_email.py b/alarm/mana_email.py index 79dfdfb..f6764f6 100644 --- a/alarm/mana_email.py +++ b/alarm/mana_email.py @@ -1,3 +1,6 @@ +#! /usr/bin/python +#coding:utf-8 + import smtplib from email.mime.text import MIMEText from email.header import Header @@ -31,6 +34,8 @@ def sendmsg(self, receiver, subject, msg): self.handle = smtplib.SMTP(self.email_host, self.email_port) self.handle.login(self.sender, self.sender_pw) msgbody = MIMEText('

%s

'%msg, 'html', 'utf-8') + msgbody["Accept-Language"]= "zh-CN" + msgbody["Accept-Charset"]= "ISO-8859-1,utf-8" msgbody['Subject'] = Header(subject, 'utf-8') self.handle.sendmail(self.sender, receiver, msgbody.as_string()) LOG.info("send message %s to receiver %s success " %(subject, receiver)) @@ -53,8 +58,8 @@ def __del__(self): SENDER = 'autowork@ztgame.com' SENDER_PW = 'ak123$%^' emailclient = Email(EMAIL_HOST, EMAIL_PORT, SENDER, SENDER_PW) - msg = 'msg: hello world!!!' - subject = 'subject: hello world!!' + msg = u'msg:你好啊 !!!' + subject = u'subject: hello world!!' receiver = 'yangwanyuan@ztgame.com' emailclient.sendmsg(receiver, subject, msg) From d3deaa78322757c86a70dbec123267f5087fe3bb Mon Sep 17 00:00:00 2001 From: root Date: Fri, 10 Apr 2015 19:09:35 +0800 Subject: [PATCH 19/48] modify code utf-8 --- api/eva.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api/eva.py b/api/eva.py index cb88fd1..07b5fd7 100755 --- a/api/eva.py +++ b/api/eva.py @@ -248,12 +248,12 @@ def virs_list(req,region): 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['user'] = KeyStoneManager().getUserByUserID(vir.user_id).encode('latin-1').decode('utf-8') + item['project'] = KeyStoneManager().getProjectByProjectID(vir.project_id).encode('latin-1').decode('utf-8') item['instance_name'] = vir.hostname #data.append(vir.uuid) data.append(item) - body = json.dumps({"code":200,"message":"ok","data":data}) + body = json.dumps({"code":200,"message":"ok","data":data},ensure_ascii=False, indent=2) return HttpResponse(body) From 2623f8b2e7f69cc6627d978db27f959f6420b2b7 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 13 Apr 2015 10:58:48 +0800 Subject: [PATCH 20/48] fix project and user in chinese --- alarm/mana_monitor.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/alarm/mana_monitor.py b/alarm/mana_monitor.py index 2544b36..9e665ba 100755 --- a/alarm/mana_monitor.py +++ b/alarm/mana_monitor.py @@ -1,4 +1,6 @@ #!/usr/bin/python +#coding:utf-8 + import os import time @@ -160,8 +162,8 @@ def alarm(instance, data, alarm_obj, threshold): bodys = data.get('data') device_name = data.get('name') instance_id =instance.get('instance_id') - project = instance.get('project') - user = instance.get('user') + project = instance.get('project').encode('latin-1') + user = instance.get('user').encode('latin-1') instance_name = instance.get('instance_name') if bodys == []: #print "%s's network %s: NO data" %(instance, name) From 383c3cc340bbcf4e1b9cbbd8fe66f3c113062a2b Mon Sep 17 00:00:00 2001 From: root Date: Mon, 13 Apr 2015 11:10:55 +0800 Subject: [PATCH 21/48] fix --- api/eva.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/eva.py b/api/eva.py index 07b5fd7..5b64460 100755 --- a/api/eva.py +++ b/api/eva.py @@ -248,8 +248,8 @@ def virs_list(req,region): for vir in virs: item= {} item['instance_id']= vir.uuid - item['user'] = KeyStoneManager().getUserByUserID(vir.user_id).encode('latin-1').decode('utf-8') - item['project'] = KeyStoneManager().getProjectByProjectID(vir.project_id).encode('latin-1').decode('utf-8') + item['user'] = KeyStoneManager().getUserByUserID(vir.user_id) + item['project'] = KeyStoneManager().getProjectByProjectID(vir.project_id) item['instance_name'] = vir.hostname #data.append(vir.uuid) data.append(item) From 5a3f91fc3b29eed7d45c7a4dfb371c43b1114303 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 13 Apr 2015 15:27:38 +0800 Subject: [PATCH 22/48] add try --- alarm/etc/mana_monitor.conf | 8 +- alarm/etc/mana_monitor.conf.bakkkk | 34 +++++++++ alarm/mana_conf.py | 51 +++++++------ alarm/mana_http.py | 5 ++ alarm/mana_log.py | 3 + alarm/mana_monitor.py | 114 ++++++++++++++++------------- 6 files changed, 138 insertions(+), 77 deletions(-) create mode 100644 alarm/etc/mana_monitor.conf.bakkkk diff --git a/alarm/etc/mana_monitor.conf b/alarm/etc/mana_monitor.conf index d877b86..02e685c 100644 --- a/alarm/etc/mana_monitor.conf +++ b/alarm/etc/mana_monitor.conf @@ -2,16 +2,16 @@ cycletime = 200 api_host = 127.0.0.1 api_port = 8080 -regions = shanghai,beijing +regions = beijing [url] get_all_instance_url = /api/virs_list/%s/ get_metric = /api/statics/%s/%s/%s/3h/ [alarm] -cpu_util = 0.8 -network_incoming_bytes_rate = 50000000 -network_outgoing_bytes_rate = 50000000 +cpu_util = 0.1 +#network_incoming_bytes_rate = 50000000 +#network_outgoing_bytes_rate = 50000000 #disk_write_bytes_rate = 2000 #disk_read_bytes_rate = 1 #network_incoming_bytes = 100000 diff --git a/alarm/etc/mana_monitor.conf.bakkkk b/alarm/etc/mana_monitor.conf.bakkkk new file mode 100644 index 0000000..5446f3f --- /dev/null +++ b/alarm/etc/mana_monitor.conf.bakkkk @@ -0,0 +1,34 @@ +[global] +cycletime = 1800 +api_host = 222.73.196.30 +api_port = 80 +regions = beijing,zhenru,Nanhui + +[url] +get_all_instance_url = /api/virs_list/%s/ +get_metric = /api/statics/%s/%s/%s/3h/ + +[alarm] +cpu_util = 10 +#network_incoming_bytes_rate = 50000000 +#network_outgoing_bytes_rate = 50000000 +#disk_write_bytes_rate = 2000 +#disk_read_bytes_rate = 1 +#network_incoming_bytes = 100000 +#network_outgoing_bytes = 100000 + +[email] +email_host = mail.ztgame.com +email_port = 25 + +email_sender = autowork@ztgame.com +email_sender_pwd = ak123$%^ + +email_receiver = yangwanyuan@ztgame.com + + + + + + + diff --git a/alarm/mana_conf.py b/alarm/mana_conf.py index aa8f8dc..0defddf 100644 --- a/alarm/mana_conf.py +++ b/alarm/mana_conf.py @@ -1,41 +1,50 @@ +#!/usr/bin/python +#coding:utf-8 + import ConfigParser import os def Parser(config): - conf = {} - conf['cycletime'] = config.getint('global', 'cycletime') - conf['api_host'] = config.get('global', 'api_host') - conf['api_port'] = config.getint('global', 'api_port') + try: + conf = {} + conf['cycletime'] = config.getint('global', 'cycletime') + conf['api_host'] = config.get('global', 'api_host') + conf['api_port'] = config.getint('global', 'api_port') - regions_list = config.get('global', 'regions').split(',') - conf['regions'] = regions_list + regions_list = config.get('global', 'regions').split(',') + conf['regions'] = regions_list - url_dict = {} - url_dict['get_all_instance_url'] = config.get('url', 'get_all_instance_url') - url_dict['get_metric'] = config.get('url', 'get_metric') + url_dict = {} + url_dict['get_all_instance_url'] = config.get('url', 'get_all_instance_url') + url_dict['get_metric'] = config.get('url', 'get_metric') - conf['url'] = url_dict + conf['url'] = url_dict - conf['email_host'] = config.get('email', 'email_host') - conf['email_port'] = config.getint('email', 'email_port') - conf['email_sender'] = config.get('email', 'email_sender') - conf['email_sender_pwd'] = config.get('email', 'email_sender_pwd') + conf['email_host'] = config.get('email', 'email_host') + conf['email_port'] = config.getint('email', 'email_port') + conf['email_sender'] = config.get('email', 'email_sender') + conf['email_sender_pwd'] = config.get('email', 'email_sender_pwd') - email_reciver_list = config.get('email', 'email_receiver').split(',') - conf['email_receiver'] = email_reciver_list + email_reciver_list = config.get('email', 'email_receiver').split(',') + conf['email_receiver'] = email_reciver_list - alarm_list = config.items('alarm') - conf['alarm_list'] = alarm_list + alarm_list = config.items('alarm') + conf['alarm_list'] = alarm_list + except Exception, e: + print e return conf def GetConf(): - config = ConfigParser.ConfigParser() - config.read('/etc/mana/mana_monitor.conf') - conf = Parser(config) + try: + config = ConfigParser.ConfigParser() + config.read('/etc/mana/mana_monitor.conf') + conf = Parser(config) + except Exception, e; + print e return conf diff --git a/alarm/mana_http.py b/alarm/mana_http.py index b8e043b..76fe639 100644 --- a/alarm/mana_http.py +++ b/alarm/mana_http.py @@ -1,3 +1,6 @@ +#!/usr/bin/python +#coding:utf-8 + import httplib class HttpCon(): @@ -27,3 +30,5 @@ def __del__(self): if __name__ == "__main__": a = HttpCon("www.baidu.com", 80, "/", "GET") print a.get() + + diff --git a/alarm/mana_log.py b/alarm/mana_log.py index 39685e7..d49b319 100644 --- a/alarm/mana_log.py +++ b/alarm/mana_log.py @@ -1,3 +1,6 @@ +#!/usr/bin/python +#coding:utf-8 + import logging import os diff --git a/alarm/mana_monitor.py b/alarm/mana_monitor.py index 9e665ba..38c9b20 100755 --- a/alarm/mana_monitor.py +++ b/alarm/mana_monitor.py @@ -102,26 +102,31 @@ def run(): def monitor(): - regions = CONF.get('regions') - for region in regions: - instances = get_instances_from_api(region) - for instance in instances: - _monitor(region, instance) - #datas = get_network_flow(region, instance) - #for data in datas: - # alarm(instance, data, threshold) + try: + regions = CONF.get('regions') + for region in regions: + instances = get_instances_from_api(region) + for instance in instances: + _monitor(region, instance) + #datas = get_network_flow(region, instance) + #for data in datas: + # alarm(instance, data, threshold) + except Exception, e: + LOG.error(e) def _monitor(region, instance): - for (alarm_obj, thd) in CONF.get('alarm_list'): - instance_id = instance.get('instance_id') - datas = get_datas_from_api(region, instance_id, alarm_obj) - #LOG.info("region:%s, instance:%s, alarm_obj:%s, datas:%s" %(region, instance, alarm_obj, datas)) - threshold = float(thd) - for data in datas: - alarm(instance, data, alarm_obj, threshold) - #LOG.info(data) - #alarm(instance, data, threshold) - + try: + for (alarm_obj, thd) in CONF.get('alarm_list'): + instance_id = instance.get('instance_id') + datas = get_datas_from_api(region, instance_id, alarm_obj) + #LOG.info("region:%s, instance:%s, alarm_obj:%s, datas:%s" %(region, instance, alarm_obj, datas)) + threshold = float(thd) + for data in datas: + alarm(instance, data, alarm_obj, threshold) + #LOG.info(data) + #alarm(instance, data, threshold) + except Exception, e: + LOG.error(e) def get_instances_from_api(region): @@ -159,42 +164,47 @@ def get_datas_from_api(region, instance, alarm_obj): def alarm(instance, data, alarm_obj, threshold): - bodys = data.get('data') - device_name = data.get('name') - instance_id =instance.get('instance_id') - project = instance.get('project').encode('latin-1') - user = instance.get('user').encode('latin-1') - instance_name = instance.get('instance_name') - if bodys == []: - #print "%s's network %s: NO data" %(instance, name) - #LOG.info("%s's %s is %s: NO data" %(instance, alarm_obj, name)) - return False - #print data - for body in bodys: - unit = body.get('unit') - multiple = unit_map.get(alarm_obj).get(unit) - multiple = 1 - max_data = body.get('max') - if max_data*multiple > threshold: - message = " Instance_ID:%s\n Instance_Name:%s\n Project:%s\n User:%s\n AlarmBody:%s\n Device:%s\n Message:data is to high %s %s\n"\ - %(instance_id, instance_name, project, user, alarm_obj, device_name, max_data, unit) - #print message - LOG.info(message) - send_message(alarm_obj, message) - return True + try: + bodys = data.get('data') + device_name = data.get('name') + instance_id =instance.get('instance_id') + project = instance.get('project').encode('latin-1') + user = instance.get('user').encode('latin-1') + instance_name = instance.get('instance_name') + if bodys == []: + #print "%s's network %s: NO data" %(instance, name) + #LOG.info("%s's %s is %s: NO data" %(instance, alarm_obj, name)) + return False + #print data + for body in bodys: + unit = body.get('unit') + multiple = unit_map.get(alarm_obj).get(unit) + multiple = 1 + max_data = body.get('max') + if max_data*multiple > threshold: + message = " Instance_ID:%s\n Instance_Name:%s\n Project:%s\n User:%s\n AlarmBody:%s\n Device:%s\n Message:data is to high %s %s\n"\ + %(instance_id, instance_name, project, user, alarm_obj, device_name, max_data, unit) + #print message + LOG.info(message) + send_message(alarm_obj, message) + return True + except Exception, e: + LOG.error(e) def send_message(subject, message): - - email_host = CONF.get('email_host') - email_port = CONF.get('email_port') - sender = CONF.get('email_sender') - sender_pwd = CONF.get('email_sender_pwd') - receivers = CONF.get('email_receiver') - emailclient = Email(email_host, email_port, sender, sender_pwd) - for receiver in receivers: - msg = message - subject = subject + ' alarm!!!' - emailclient.sendmsg(receiver, subject, msg) + try: + email_host = CONF.get('email_host') + email_port = CONF.get('email_port') + sender = CONF.get('email_sender') + sender_pwd = CONF.get('email_sender_pwd') + receivers = CONF.get('email_receiver') + emailclient = Email(email_host, email_port, sender, sender_pwd) + for receiver in receivers: + msg = message + subject = subject + ' alarm!!!' + emailclient.sendmsg(receiver, subject, msg) + except Exception,e: + LOG.error(e) From e05235935eca1c3c39ee66509b54097092fbb72c Mon Sep 17 00:00:00 2001 From: root Date: Mon, 13 Apr 2015 15:31:18 +0800 Subject: [PATCH 23/48] fix --- alarm/mana_conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/alarm/mana_conf.py b/alarm/mana_conf.py index 0defddf..cf2fb27 100644 --- a/alarm/mana_conf.py +++ b/alarm/mana_conf.py @@ -43,7 +43,7 @@ def GetConf(): config = ConfigParser.ConfigParser() config.read('/etc/mana/mana_monitor.conf') conf = Parser(config) - except Exception, e; + except Exception, e: print e return conf From f3820e1f7f7ac38b07563f71330573cf28cf72e2 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 14 Apr 2015 12:20:15 +0800 Subject: [PATCH 24/48] fix encode latin-1 from mysql , abandon django_db --- api/beans.py | 73 +++++++++++++++++++++++++++++++++++++++------------- api/eva.py | 6 +++++ 2 files changed, 61 insertions(+), 18 deletions(-) diff --git a/api/beans.py b/api/beans.py index 77ed521..e6ca132 100755 --- a/api/beans.py +++ b/api/beans.py @@ -396,8 +396,8 @@ def getChildrens(self,nova_db,ip): 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' +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): @@ -411,24 +411,61 @@ def getServiceUrl(self,service_name,region,tenant=settings.SYS_C2): 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() - cursor.execute(GET_USER_BY_USERID,[user_id]) - result = cursor.fetchone() - cursor.close() - keystone_db.close() - return None if not result else result[0] + ##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(GET_PROJECT_BY_PROJECTID,[project_id]) - result = cursor.fetchone() - cursor.close() - keystone_db.close() - return None if not result else result[0] + ##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`' diff --git a/api/eva.py b/api/eva.py index 5b64460..3d9e594 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 @@ -248,8 +250,12 @@ def virs_list(req,region): for vir in virs: item= {} item['instance_id']= vir.uuid + #item['user'] = KeyStoneManager().getUserByUserID(vir.user_id).encode('latin-1').decode('utf-8') + #item['project'] = KeyStoneManager().getProjectByProjectID(vir.project_id).encode('latin-1').decode('utf-8') item['user'] = KeyStoneManager().getUserByUserID(vir.user_id) item['project'] = KeyStoneManager().getProjectByProjectID(vir.project_id) + #smart_text(item['user'], encoding='latin-1', strings_onliy=False, error='strict') + #smart_text(item['project'], encoding='latin-1', strings_onliy=False, error='strict')l item['instance_name'] = vir.hostname #data.append(vir.uuid) data.append(item) From 81d9c795e999f50c2f6d0b28f7c21e14ed251ef2 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 14 Apr 2015 12:30:25 +0800 Subject: [PATCH 25/48] fix mana_monitor.py use utf-8 --- alarm/mana_monitor.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/alarm/mana_monitor.py b/alarm/mana_monitor.py index 38c9b20..cd316d1 100755 --- a/alarm/mana_monitor.py +++ b/alarm/mana_monitor.py @@ -168,8 +168,8 @@ def alarm(instance, data, alarm_obj, threshold): bodys = data.get('data') device_name = data.get('name') instance_id =instance.get('instance_id') - project = instance.get('project').encode('latin-1') - user = instance.get('user').encode('latin-1') + project = instance.get('project').encode('utf-8') + user = instance.get('user').encode('utf-8') instance_name = instance.get('instance_name') if bodys == []: #print "%s's network %s: NO data" %(instance, name) From f60fe25f98e63c3338156b26e604a2bacfab417b Mon Sep 17 00:00:00 2001 From: root Date: Tue, 14 Apr 2015 15:20:21 +0800 Subject: [PATCH 26/48] fix some bug --- alarm/mana_monitor.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/alarm/mana_monitor.py b/alarm/mana_monitor.py index cd316d1..77da5cb 100755 --- a/alarm/mana_monitor.py +++ b/alarm/mana_monitor.py @@ -1,6 +1,10 @@ #!/usr/bin/python #coding:utf-8 - +import sys +default_encoding = 'utf-8' +if sys.getdefaultencoding() != default_encoding: + reload(sys) + sys.setdefaultencoding(default_encoding) import os import time @@ -168,8 +172,14 @@ def alarm(instance, data, alarm_obj, threshold): bodys = data.get('data') device_name = data.get('name') instance_id =instance.get('instance_id') - project = instance.get('project').encode('utf-8') - user = instance.get('user').encode('utf-8') + try: + project = instance.get('project').encode('utf-8') + except Exception: + project = instance.get('project') + try: + user = instance.get('user').encode('utf-8') + except Exception: + user = instance.get('user') instance_name = instance.get('instance_name') if bodys == []: #print "%s's network %s: NO data" %(instance, name) From b9eb1189cf8a223ae8dec5b23a2f49907aad5bf0 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 14 Apr 2015 18:04:27 +0800 Subject: [PATCH 27/48] 126 user and password --- alarm/etc/mana_monitor.conf | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/alarm/etc/mana_monitor.conf b/alarm/etc/mana_monitor.conf index 02e685c..42456a7 100644 --- a/alarm/etc/mana_monitor.conf +++ b/alarm/etc/mana_monitor.conf @@ -26,7 +26,13 @@ email_sender_pwd = ak123$%^ email_receiver = yangwanyuan@ztgame.com +#email_host = smtp.126.com +#email_port = 25 +#email_sender = ztgame_work@126.com +#email_sender_pwd = wppxvrsclvgblnye + +#email_receiver = ztgame_work@126.com From be09c4d389eb0964c0ae5eb42c07fcf288cbc937 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 14 Apr 2015 18:09:21 +0800 Subject: [PATCH 28/48] add ztgame_work@126.com --- alarm/etc/mana_monitor.conf.bakkkk | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/alarm/etc/mana_monitor.conf.bakkkk b/alarm/etc/mana_monitor.conf.bakkkk index 5446f3f..c602fe2 100644 --- a/alarm/etc/mana_monitor.conf.bakkkk +++ b/alarm/etc/mana_monitor.conf.bakkkk @@ -9,22 +9,22 @@ get_all_instance_url = /api/virs_list/%s/ get_metric = /api/statics/%s/%s/%s/3h/ [alarm] -cpu_util = 10 -#network_incoming_bytes_rate = 50000000 -#network_outgoing_bytes_rate = 50000000 +#cpu_util = 10 +network_incoming_bytes_rate = 50000000 +network_outgoing_bytes_rate = 50000000 #disk_write_bytes_rate = 2000 #disk_read_bytes_rate = 1 #network_incoming_bytes = 100000 #network_outgoing_bytes = 100000 [email] -email_host = mail.ztgame.com +email_host = smtp.126.com email_port = 25 -email_sender = autowork@ztgame.com -email_sender_pwd = ak123$%^ +email_sender = ztgame_work@126.com +email_sender_pwd = wppxvrsclvgblnye -email_receiver = yangwanyuan@ztgame.com +email_receiver = ztgame_work@126.com From 4c009158c7499a8e59aeb144ffedf5f5e2029dc7 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 15 Apr 2015 18:38:17 +0800 Subject: [PATCH 29/48] add SMS and modify some code archite --- alarm/etc/mana_monitor.conf | 11 ++- alarm/etc/mana_monitor.conf.bakkkk | 8 +- alarm/mana_conf.py | 15 +++- alarm/mana_http.py | 34 ++++++- alarm/mana_message.py | 78 ++++++++++++++++ alarm/mana_monitor.py | 137 ++++++++++++++--------------- 6 files changed, 200 insertions(+), 83 deletions(-) create mode 100644 alarm/mana_message.py diff --git a/alarm/etc/mana_monitor.conf b/alarm/etc/mana_monitor.conf index 42456a7..878100c 100644 --- a/alarm/etc/mana_monitor.conf +++ b/alarm/etc/mana_monitor.conf @@ -20,20 +20,23 @@ cpu_util = 0.1 [email] email_host = mail.ztgame.com email_port = 25 - email_sender = autowork@ztgame.com email_sender_pwd = ak123$%^ - email_receiver = yangwanyuan@ztgame.com #email_host = smtp.126.com #email_port = 25 - #email_sender = ztgame_work@126.com #email_sender_pwd = wppxvrsclvgblnye - #email_receiver = ztgame_work@126.com +[phone] +phone_host = 192.168.39.120 +phone_port = 29997 +phone_gametype = 2 +phone_priority = 5 +phone_acttype = 89 +phone_receiver = 18505532175 diff --git a/alarm/etc/mana_monitor.conf.bakkkk b/alarm/etc/mana_monitor.conf.bakkkk index c602fe2..c59df21 100644 --- a/alarm/etc/mana_monitor.conf.bakkkk +++ b/alarm/etc/mana_monitor.conf.bakkkk @@ -27,7 +27,13 @@ email_sender_pwd = wppxvrsclvgblnye email_receiver = ztgame_work@126.com - +[phone] +phone_host = 222.73.30.20 +phone_port = 29997 +phone_gametype = 2 +phone_priority = 5 +phone_acttype = 89 +phone_receiver = 18505532175 diff --git a/alarm/mana_conf.py b/alarm/mana_conf.py index cf2fb27..9a6439d 100644 --- a/alarm/mana_conf.py +++ b/alarm/mana_conf.py @@ -19,7 +19,6 @@ def Parser(config): url_dict = {} url_dict['get_all_instance_url'] = config.get('url', 'get_all_instance_url') url_dict['get_metric'] = config.get('url', 'get_metric') - conf['url'] = url_dict @@ -28,11 +27,21 @@ def Parser(config): conf['email_sender'] = config.get('email', 'email_sender') conf['email_sender_pwd'] = config.get('email', 'email_sender_pwd') - email_reciver_list = config.get('email', 'email_receiver').split(',') - conf['email_receiver'] = email_reciver_list + email_receiver_list = config.get('email', 'email_receiver').split(',') + conf['email_receiver'] = email_receiver_list alarm_list = config.items('alarm') conf['alarm_list'] = alarm_list + + conf['phone_host'] = config.get('phone', 'phone_host') + conf['phone_port'] = config.getint('phone', 'phone_port') + conf['phone_gametype'] = config.get('phone', 'phone_gametype') + conf['phone_priority'] = config.get('phone', 'phone_priority') + conf['phone_acttype'] = config.get('phone', 'phone_acttype') + + phone_receiver_list = config.get('phone', 'phone_receiver').split(',') + conf['phone_receiver'] = phone_receiver_list + except Exception, e: print e diff --git a/alarm/mana_http.py b/alarm/mana_http.py index 76fe639..57d941e 100644 --- a/alarm/mana_http.py +++ b/alarm/mana_http.py @@ -2,9 +2,11 @@ #coding:utf-8 import httplib +import urllib2 +#the httpclient use for RESTful API class HttpCon(): - def __init__(self, host, port, url, method): + def __init__(self, host = None, port = None, url = None, method = None, timeout = 30): self.host = host self.port = port self.url = url @@ -27,8 +29,32 @@ def __del__(self): if self.con: self.con.close() -if __name__ == "__main__": - a = HttpCon("www.baidu.com", 80, "/", "GET") - print a.get() +#the urlclient use for url +class UrlCon(): + def __init__(self, host = None, port = None, url = None, method = None, timeout = 30): + self.host = host + self.port = port + self.url = url + self.method = method + self.timeout = 30 + def get(self): + try: + full_url = 'http://' + self.host +':' + str(self.port) + self.url + response = urllib2.urlopen(full_url) + result = response.read() + return result + except Exception, e: + print e + def __del__(self): + pass + + + +if __name__ == "__main__": + #httpclient = HttpCon("www.baidu.com", 80, "/", "GET") + #print httpclient.get() + + urlclient = UrlCon("192.168.39.120", 29997, "/emaysendMsg?dest_mobile=18505532175&msg_content=%B6%CC%D0%C5%B2%E2%CA%D4%A1%BE%BE%DE%C8%CB%CD%F8%C2%E7%A1%BF&priority=5&gametype=2&acttype=89", "GET") + print urlclient.get() diff --git a/alarm/mana_message.py b/alarm/mana_message.py new file mode 100644 index 0000000..dcfa9f6 --- /dev/null +++ b/alarm/mana_message.py @@ -0,0 +1,78 @@ +#! /usr/bin/python +#coding:utf-8 + +import smtplib +from email.mime.text import MIMEText +from email.header import Header + + +from mana_http import UrlCon +import mana_log +LOG = mana_log.GetLog(__name__) + + +class Email(): + def __init__(self, email_host, email_port, email_sender, email_sender_pwd): + self.email_host = email_host + self.email_port = email_port + self.sender = email_sender + self.sender_pw = email_sender_pwd + + + def sendmsg(self, receiver, subject, msg): + try: + self.handle = smtplib.SMTP(self.email_host, self.email_port) + self.handle.login(self.sender, self.sender_pw) + msgbody = MIMEText('

%s

'%msg, 'html', 'utf-8') + msgbody["Accept-Language"]= "zh-CN" + msgbody["Accept-Charset"]= "ISO-8859-1,utf-8" + msgbody['Subject'] = Header(subject, 'utf-8') + self.handle.sendmail(self.sender, receiver, msgbody.as_string()) + LOG.info("send email %s to receiver %s success " %(subject, receiver)) + except Exception, e: + print e; + + def __del__(self): + if self.handle: + self.handle.close() + + +class SMS(): + def __init__(self, phone_host, phone_port, gametype, priority, acttype): + self.phone_host = phone_host + self.phone_port = phone_port + self.gametype = gametype + self.priority = priority + self.acttype = acttype + pass + + def sendmsg(self, receiver, message): + url = "/emaysendMsg?dest_mobile=%s&msg_content=%s&priority=%s&gametype=%s&acttype=%s" %(receiver, message, self.priority, self.gametype, self.acttype) + urlclient = UrlCon(self.phone_host, self.phone_port, url, "GET") + body = urlclient.get() + if body == '0|': + LOG.info("send short message to receiver %s success "%receiver) + else: + LOG.error("send short message to receiver %s failed! return code is %s" %(receiver, body)) + + def __del__(self): + pass + + + + +if __name__ == "__main__": + EMAIL_HOST = 'mail.ztgame.com' + EMAIL_PORT = 25 + + #SENDER = 'yangwanyuan@ztgame.com' + #SENDER_PW = 'ywy8861@000' + + SENDER = 'autowork@ztgame.com' + SENDER_PW = 'ak123$%^' + emailclient = Email(EMAIL_HOST, EMAIL_PORT, SENDER, SENDER_PW) + msg = u'msg:你好啊 !!!' + subject = u'subject: hello world!!' + receiver = 'yangwanyuan@ztgame.com' + emailclient.sendmsg(receiver, subject, msg) + diff --git a/alarm/mana_monitor.py b/alarm/mana_monitor.py index 77da5cb..5fb03fc 100755 --- a/alarm/mana_monitor.py +++ b/alarm/mana_monitor.py @@ -1,5 +1,6 @@ #!/usr/bin/python #coding:utf-8 + import sys default_encoding = 'utf-8' if sys.getdefaultencoding() != default_encoding: @@ -9,46 +10,17 @@ import os import time -#import httplib import simplejson -from mana_http import HttpCon -from mana_email import Email -#import timer +from mana_http import HttpCon, UrlCon +from mana_message import Email, SMS import mana_log LOG = mana_log.GetLog(__name__) -#import logging - -#LOG_FILE = 'monitor.log' -#logging.basicConfig(filename = os.path.join(os.getcwd(), LOG_FILE), level = logging.DEBUG) -#LOG = logging.getLogger(__name__) - import mana_conf CONF = mana_conf.GetConf() - -#INTERVAL = 200 -#THRESHOLD = 5 - -#API_HOST = '127.0.0.1' -#API_PORT = 8080 -#GET_ALL_INSTANCE_URL = '/api/virs_list/' - -#GET_METRIC = '/api/statics/' -#ALARM_OBJ = 'network_incoming_bytes_rate/' -#ALARM_TIME = '3h/' - -#REGIONS = ['shanghai', 'beijing'] - -#unit_map = {"B/s":1, -# "KB/s":1024, -# "MB/s":1024*1024, -# "GB/s":1024*1024*1024 -# } - -#RECEIVER = 'yangwanyuan@ztgame.com' unit_map = { 'cpu_util':{"%":1}, 'network_incoming_bytes_rate': { @@ -89,9 +61,23 @@ }, } +class msg_item: + def __init__(self, alarm_obj = None, instance_id = None, instance_name = None,\ + project = None, user = None, device_name = None, max_data = None, \ + unit = None, region = None): + self.alarm_obj = alarm_obj + self.instance_id = instance_id + self.instance_name = instance_name + self.project = project + self.user = user + self.device_name = device_name + self.max_data = max_data + self.unit = unit + self.region = region + + def run(): interval = CONF.get('cycletime') - #threshold = THRESHOLD LOG.info("begin to monitor,every %s seconds" %interval) while True: try: @@ -103,7 +89,6 @@ def run(): time.sleep(interval + time_pre - time_now) except Exception, e: LOG.error(e) - def monitor(): try: @@ -112,9 +97,6 @@ def monitor(): instances = get_instances_from_api(region) for instance in instances: _monitor(region, instance) - #datas = get_network_flow(region, instance) - #for data in datas: - # alarm(instance, data, threshold) except Exception, e: LOG.error(e) @@ -123,39 +105,30 @@ def _monitor(region, instance): for (alarm_obj, thd) in CONF.get('alarm_list'): instance_id = instance.get('instance_id') datas = get_datas_from_api(region, instance_id, alarm_obj) - #LOG.info("region:%s, instance:%s, alarm_obj:%s, datas:%s" %(region, instance, alarm_obj, datas)) threshold = float(thd) for data in datas: - alarm(instance, data, alarm_obj, threshold) - #LOG.info(data) - #alarm(instance, data, threshold) + alarm(instance, data, alarm_obj, threshold, region) except Exception, e: LOG.error(e) - def get_instances_from_api(region): url = CONF.get('url').get('get_all_instance_url') %region api_host = CONF.get('api_host') api_port = CONF.get('api_port') - #url = GET_ALL_INSTANCE_URL + region + '/' try: - #con = httplib.HTTPConnection(API_HOST, API_PORT, timeout=30) - #con.request('GET', url) - #response = con.getresponse() - #instances = simplejson.loads(response.read()).get('data') httpclient = HttpCon(api_host, api_port, url, "GET") body = httpclient.get() if body: instances = simplejson.loads(body).get('data') except Exception, e: LOG.error(e) + return NULL return instances def get_datas_from_api(region, instance, alarm_obj): url = CONF.get('url').get('get_metric') %(region, alarm_obj, instance) api_host = CONF.get('api_host') api_port = CONF.get('api_port') - #url = GET_METRIC + region + '/' + ALARM_OBJ + instance + '/' + ALARM_TIME try: httpclient = HttpCon(api_host, api_port, url, "POST") body = httpclient.get() @@ -163,15 +136,19 @@ def get_datas_from_api(region, instance, alarm_obj): data = simplejson.loads(body) except Exception, e: LOG.error(e) - #print("get instance %s's network is %s "%(instance,data) ) + return NULL return data -def alarm(instance, data, alarm_obj, threshold): +def alarm(instance, data, alarm_obj, threshold, region): try: bodys = data.get('data') + if bodys == []: + return False + device_name = data.get('name') instance_id =instance.get('instance_id') + instance_name = instance.get('instance_name') try: project = instance.get('project').encode('utf-8') except Exception: @@ -179,44 +156,62 @@ def alarm(instance, data, alarm_obj, threshold): try: user = instance.get('user').encode('utf-8') except Exception: - user = instance.get('user') - instance_name = instance.get('instance_name') - if bodys == []: - #print "%s's network %s: NO data" %(instance, name) - #LOG.info("%s's %s is %s: NO data" %(instance, alarm_obj, name)) - return False - #print data + user = instance.get('user') + for body in bodys: unit = body.get('unit') - multiple = unit_map.get(alarm_obj).get(unit) + #multiple = unit_map.get(alarm_obj).get(unit) multiple = 1 max_data = body.get('max') if max_data*multiple > threshold: - message = " Instance_ID:%s\n Instance_Name:%s\n Project:%s\n User:%s\n AlarmBody:%s\n Device:%s\n Message:data is to high %s %s\n"\ - %(instance_id, instance_name, project, user, alarm_obj, device_name, max_data, unit) - #print message - LOG.info(message) - send_message(alarm_obj, message) + msg_body = msg_item(alarm_obj, instance_id, instance_name, project, user, device_name, max_data, unit, region) + _alarm(msg_body) return True except Exception, e: LOG.error(e) -def send_message(subject, message): +def _alarm(msg_body): try: - email_host = CONF.get('email_host') - email_port = CONF.get('email_port') - sender = CONF.get('email_sender') - sender_pwd = CONF.get('email_sender_pwd') - receivers = CONF.get('email_receiver') + message = 'Region:%s\n Instance_ID:%s\n Instance_Name:%s\n Project:%s\n User:%s\n AlarmBody:%s\n Device:%s\n Message:data is to high %s %s\n'\ + %(msg_body.region, msg_body.instance_id, msg_body.instance_name, msg_body.project, msg_body.user, msg_body.alarm_obj,\ + msg_body.device_name, msg_body.max_data, msg_body.unit) + LOG.info(message) + send_email(msg_body) + send_phone_message(msg_body) + except Exception,e: + LOG.error(e) + +def send_email(msg_body): + email_host = CONF.get('email_host') + email_port = CONF.get('email_port') + sender = CONF.get('email_sender') + sender_pwd = CONF.get('email_sender_pwd') + receivers = CONF.get('email_receiver') + try: + msg = ' Region:%s\n Instance_ID:%s\n Instance_Name:%s\n Project:%s\n User:%s\n AlarmBody:%s\n Device:%s\n Message:data is to high %s %s\n'\ + %(msg_body.region, msg_body.instance_id, msg_body.instance_name, msg_body.project, msg_body.user, msg_body.alarm_obj,\ + msg_body.device_name, msg_body.max_data, msg_body.unit) + subject = msg_body.alarm_obj + ' alarm!!!' emailclient = Email(email_host, email_port, sender, sender_pwd) for receiver in receivers: - msg = message - subject = subject + ' alarm!!!' emailclient.sendmsg(receiver, subject, msg) except Exception,e: LOG.error(e) - +def send_phone_message(msg_body): + phone_host = CONF.get('phone_host') + phone_port = CONF.get('phone_port') + gametype=CONF.get('phone_gametype') + priority=CONF.get('phone_priority') + acttype=CONF.get('phone_acttype') + receivers=CONF.get('phone_receiver') + try: + msg = "%B6%CC%D0%C5%B2%E2%CA%D4%A1%BE%BE%DE%C8%CB%CD%F8%C2%E7%A1%BF" + for receiver in receivers: + smsclient = SMS(phone_host, phone_port, gametype, priority, acttype) + smsclient.sendmsg(receiver, msg) + except Exception,e: + LOG.error(e) From d158a9714ab77ed301d73dabcd2ec932343aa65e Mon Sep 17 00:00:00 2001 From: root Date: Thu, 16 Apr 2015 11:57:28 +0800 Subject: [PATCH 30/48] complete sms --- alarm/mana_message.py | 37 ++++++++++++++++++++++++------------- alarm/mana_monitor.py | 2 +- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/alarm/mana_message.py b/alarm/mana_message.py index dcfa9f6..75b55d7 100644 --- a/alarm/mana_message.py +++ b/alarm/mana_message.py @@ -7,12 +7,14 @@ from mana_http import UrlCon +import urllib + import mana_log LOG = mana_log.GetLog(__name__) class Email(): - def __init__(self, email_host, email_port, email_sender, email_sender_pwd): + def __init__(self, email_host = None, email_port = None, email_sender = None, email_sender_pwd = None): self.email_host = email_host self.email_port = email_port self.sender = email_sender @@ -38,16 +40,20 @@ def __del__(self): class SMS(): - def __init__(self, phone_host, phone_port, gametype, priority, acttype): + def __init__(self, phone_host = None, phone_port = None, gametype = None, priority = None, acttype = None): self.phone_host = phone_host self.phone_port = phone_port self.gametype = gametype self.priority = priority self.acttype = acttype - pass def sendmsg(self, receiver, message): - url = "/emaysendMsg?dest_mobile=%s&msg_content=%s&priority=%s&gametype=%s&acttype=%s" %(receiver, message, self.priority, self.gametype, self.acttype) + message = message.decode('utf-8').encode('gbk') + #msg_postfix = "%A1%BE%BE%DE%C8%CB%CD%F8%C2%E7%A1%BF" + msg_postfix = '【巨人网络】' + msg_postfix = msg_postfix.decode('utf-8').encode('gbk') + msg = urllib.quote(message + msg_postfix) + url = "/emaysendMsg?dest_mobile=%s&msg_content=%s&priority=%s&gametype=%s&acttype=%s" %(receiver, msg, self.priority, self.gametype, self.acttype) urlclient = UrlCon(self.phone_host, self.phone_port, url, "GET") body = urlclient.get() if body == '0|': @@ -64,15 +70,20 @@ def __del__(self): if __name__ == "__main__": EMAIL_HOST = 'mail.ztgame.com' EMAIL_PORT = 25 - - #SENDER = 'yangwanyuan@ztgame.com' - #SENDER_PW = 'ywy8861@000' - SENDER = 'autowork@ztgame.com' SENDER_PW = 'ak123$%^' - emailclient = Email(EMAIL_HOST, EMAIL_PORT, SENDER, SENDER_PW) - msg = u'msg:你好啊 !!!' + email_receiver = 'yangwanyuan@ztgame.com' subject = u'subject: hello world!!' - receiver = 'yangwanyuan@ztgame.com' - emailclient.sendmsg(receiver, subject, msg) - + msg = u'msg:你好啊 !!!' + emailclient = Email(EMAIL_HOST, EMAIL_PORT, SENDER, SENDER_PW) + emailclient.sendmsg(email_receiver, subject, msg) + + PHONE_HOST = '192.168.39.120' + PHONE_PORT = 29997 + GAMETYPE = '2' + PRIORITY = '5' + ACTTYPE = '89' + sms_receiver = '18505532175' + msg = "报警模块:network,区域:beijing,名称:aaa,项目:大主宰,用户:admin" + smsclient = SMS(PHONE_HOST, PHONE_PORT, GAMETYPE, PRIORITY, ACTTYPE) + smsclient.sendmsg(sms_receiver, msg) \ No newline at end of file diff --git a/alarm/mana_monitor.py b/alarm/mana_monitor.py index 5fb03fc..b79da63 100755 --- a/alarm/mana_monitor.py +++ b/alarm/mana_monitor.py @@ -206,7 +206,7 @@ def send_phone_message(msg_body): acttype=CONF.get('phone_acttype') receivers=CONF.get('phone_receiver') try: - msg = "%B6%CC%D0%C5%B2%E2%CA%D4%A1%BE%BE%DE%C8%CB%CD%F8%C2%E7%A1%BF" + msg = "报警模块:%s,区域:%s,名称:%s,项目:%s,用户:%s" %(msg_body.alarm_obj, msg_body.region, msg_body.device_name, msg_body.project, msg_body.user) for receiver in receivers: smsclient = SMS(phone_host, phone_port, gametype, priority, acttype) smsclient.sendmsg(receiver, msg) From c175d76719d950f3d6c2eb345d6c2e7cb4be3118 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 16 Apr 2015 15:18:19 +0800 Subject: [PATCH 31/48] fix sms data and network unit --- alarm/mana_monitor.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/alarm/mana_monitor.py b/alarm/mana_monitor.py index b79da63..5a388d3 100755 --- a/alarm/mana_monitor.py +++ b/alarm/mana_monitor.py @@ -162,8 +162,11 @@ def alarm(instance, data, alarm_obj, threshold, region): unit = body.get('unit') #multiple = unit_map.get(alarm_obj).get(unit) multiple = 1 - max_data = body.get('max') - if max_data*multiple > threshold: + max_data = body.get('max') * multiple + if max_data > threshold: + if unit == 'B/s': + max_data = max_data / (1024 * 1024) + unit = 'MB/s' msg_body = msg_item(alarm_obj, instance_id, instance_name, project, user, device_name, max_data, unit, region) _alarm(msg_body) return True @@ -206,7 +209,7 @@ def send_phone_message(msg_body): acttype=CONF.get('phone_acttype') receivers=CONF.get('phone_receiver') try: - msg = "报警模块:%s,区域:%s,名称:%s,项目:%s,用户:%s" %(msg_body.alarm_obj, msg_body.region, msg_body.device_name, msg_body.project, msg_body.user) + msg = "报警模块:%s,区域:%s,名称:%s,项目:%s,数据:%s%s" %(msg_body.alarm_obj, msg_body.region, msg_body.device_name, msg_body.project, msg_body.max_data, msg_body.unit) for receiver in receivers: smsclient = SMS(phone_host, phone_port, gametype, priority, acttype) smsclient.sendmsg(receiver, msg) From e609f3fcb5cfcbabc16ce6e4f84246e7cab953ea Mon Sep 17 00:00:00 2001 From: root Date: Thu, 16 Apr 2015 16:13:40 +0800 Subject: [PATCH 32/48] fix network sms bug --- alarm/mana_monitor.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/alarm/mana_monitor.py b/alarm/mana_monitor.py index 5a388d3..a1952df 100755 --- a/alarm/mana_monitor.py +++ b/alarm/mana_monitor.py @@ -165,8 +165,8 @@ def alarm(instance, data, alarm_obj, threshold, region): max_data = body.get('max') * multiple if max_data > threshold: if unit == 'B/s': - max_data = max_data / (1024 * 1024) - unit = 'MB/s' + max_data = round((max_data / (1024 * 1024)), 2) + unit = 'MB|s' msg_body = msg_item(alarm_obj, instance_id, instance_name, project, user, device_name, max_data, unit, region) _alarm(msg_body) return True @@ -209,7 +209,7 @@ def send_phone_message(msg_body): acttype=CONF.get('phone_acttype') receivers=CONF.get('phone_receiver') try: - msg = "报警模块:%s,区域:%s,名称:%s,项目:%s,数据:%s%s" %(msg_body.alarm_obj, msg_body.region, msg_body.device_name, msg_body.project, msg_body.max_data, msg_body.unit) + msg = "报警模块:%s,区域:%s,项目:%s,名称:%s,数据:%s%s" %(msg_body.alarm_obj, msg_body.region, msg_body.device_name, msg_body.project, msg_body.max_data, msg_body.unit) for receiver in receivers: smsclient = SMS(phone_host, phone_port, gametype, priority, acttype) smsclient.sendmsg(receiver, msg) From 849429a0fafc59ac7aafd37d3c7a1a294f91fb21 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 16 Apr 2015 17:29:16 +0800 Subject: [PATCH 33/48] fix some bug --- alarm/mana_message.py | 20 ++++++++++---------- alarm/mana_monitor.py | 10 +++++----- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/alarm/mana_message.py b/alarm/mana_message.py index 75b55d7..28b2af9 100644 --- a/alarm/mana_message.py +++ b/alarm/mana_message.py @@ -25,7 +25,7 @@ def sendmsg(self, receiver, subject, msg): try: self.handle = smtplib.SMTP(self.email_host, self.email_port) self.handle.login(self.sender, self.sender_pw) - msgbody = MIMEText('

%s

'%msg, 'html', 'utf-8') + msgbody = MIMEText("%s"%msg, 'html', 'utf-8') msgbody["Accept-Language"]= "zh-CN" msgbody["Accept-Charset"]= "ISO-8859-1,utf-8" msgbody['Subject'] = Header(subject, 'utf-8') @@ -78,12 +78,12 @@ def __del__(self): emailclient = Email(EMAIL_HOST, EMAIL_PORT, SENDER, SENDER_PW) emailclient.sendmsg(email_receiver, subject, msg) - PHONE_HOST = '192.168.39.120' - PHONE_PORT = 29997 - GAMETYPE = '2' - PRIORITY = '5' - ACTTYPE = '89' - sms_receiver = '18505532175' - msg = "报警模块:network,区域:beijing,名称:aaa,项目:大主宰,用户:admin" - smsclient = SMS(PHONE_HOST, PHONE_PORT, GAMETYPE, PRIORITY, ACTTYPE) - smsclient.sendmsg(sms_receiver, msg) \ No newline at end of file + #PHONE_HOST = '192.168.39.120' + #PHONE_PORT = 29997 + #GAMETYPE = '2' + #PRIORITY = '5' + #ACTTYPE = '89' + #sms_receiver = '18505532175' + #msg = "报警模块:network,区域:beijing,名称:aaa,项目:大主宰,用户:admin" + #smsclient = SMS(PHONE_HOST, PHONE_PORT, GAMETYPE, PRIORITY, ACTTYPE) + #smsclient.sendmsg(sms_receiver, msg) \ No newline at end of file diff --git a/alarm/mana_monitor.py b/alarm/mana_monitor.py index a1952df..5f64fba 100755 --- a/alarm/mana_monitor.py +++ b/alarm/mana_monitor.py @@ -191,10 +191,10 @@ def send_email(msg_body): sender_pwd = CONF.get('email_sender_pwd') receivers = CONF.get('email_receiver') try: - msg = ' Region:%s\n Instance_ID:%s\n Instance_Name:%s\n Project:%s\n User:%s\n AlarmBody:%s\n Device:%s\n Message:data is to high %s %s\n'\ - %(msg_body.region, msg_body.instance_id, msg_body.instance_name, msg_body.project, msg_body.user, msg_body.alarm_obj,\ - msg_body.device_name, msg_body.max_data, msg_body.unit) - subject = msg_body.alarm_obj + ' alarm!!!' + msg = "报警模块:%s
异常数据值:%s%s
报警区域:%s
主机名:%s
主机id:%s
所属项目:%s
所属用户:%s
设备名称:%s
"\ + %(msg_body.alarm_obj, msg_body.max_data, msg_body.unit, msg_body.region, msg_body.instance_name,\ + msg_body.instance_id, msg_body.project, msg_body.user, msg_body.device_name) + subject = '星云监控报警' emailclient = Email(email_host, email_port, sender, sender_pwd) for receiver in receivers: emailclient.sendmsg(receiver, subject, msg) @@ -209,7 +209,7 @@ def send_phone_message(msg_body): acttype=CONF.get('phone_acttype') receivers=CONF.get('phone_receiver') try: - msg = "报警模块:%s,区域:%s,项目:%s,名称:%s,数据:%s%s" %(msg_body.alarm_obj, msg_body.region, msg_body.device_name, msg_body.project, msg_body.max_data, msg_body.unit) + msg = "报警模块:%s,区域:%s,项目:%s,名称:%s,数据:%s%s" %(msg_body.alarm_obj, msg_body.region, msg_body.project, msg_body.device_name, msg_body.max_data, msg_body.unit) for receiver in receivers: smsclient = SMS(phone_host, phone_port, gametype, priority, acttype) smsclient.sendmsg(receiver, msg) From 3b4716c2c686e1361d222d0b09aeefbd6f8fef27 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 16 Apr 2015 17:48:40 +0800 Subject: [PATCH 34/48] fix some too long code --- alarm/mana_monitor.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/alarm/mana_monitor.py b/alarm/mana_monitor.py index 5f64fba..ffe0852 100755 --- a/alarm/mana_monitor.py +++ b/alarm/mana_monitor.py @@ -175,9 +175,9 @@ def alarm(instance, data, alarm_obj, threshold, region): def _alarm(msg_body): try: - message = 'Region:%s\n Instance_ID:%s\n Instance_Name:%s\n Project:%s\n User:%s\n AlarmBody:%s\n Device:%s\n Message:data is to high %s %s\n'\ - %(msg_body.region, msg_body.instance_id, msg_body.instance_name, msg_body.project, msg_body.user, msg_body.alarm_obj,\ - msg_body.device_name, msg_body.max_data, msg_body.unit) + message = 'Region:%s\nInstance_ID:%s\nInstance_Name:%s\nProject:%s\nUser:%s\nAlarmBody:%s\nDevice:%s\ndata:%s%s\n'\ + %(msg_body.region, msg_body.instance_id, msg_body.instance_name, msg_body.project, msg_body.user, \ + msg_body.alarm_obj, msg_body.device_name, msg_body.max_data, msg_body.unit) LOG.info(message) send_email(msg_body) send_phone_message(msg_body) @@ -191,7 +191,7 @@ def send_email(msg_body): sender_pwd = CONF.get('email_sender_pwd') receivers = CONF.get('email_receiver') try: - msg = "报警模块:%s
异常数据值:%s%s
报警区域:%s
主机名:%s
主机id:%s
所属项目:%s
所属用户:%s
设备名称:%s
"\ + msg = "报警模块:%s
异常数据值:%s%s
报警区域:%s
主机名:%s
主机id:%s
所属项目:%s
所属用户:%s
设备名称:%s
"\ %(msg_body.alarm_obj, msg_body.max_data, msg_body.unit, msg_body.region, msg_body.instance_name,\ msg_body.instance_id, msg_body.project, msg_body.user, msg_body.device_name) subject = '星云监控报警' @@ -209,7 +209,8 @@ def send_phone_message(msg_body): acttype=CONF.get('phone_acttype') receivers=CONF.get('phone_receiver') try: - msg = "报警模块:%s,区域:%s,项目:%s,名称:%s,数据:%s%s" %(msg_body.alarm_obj, msg_body.region, msg_body.project, msg_body.device_name, msg_body.max_data, msg_body.unit) + msg = "报警模块:%s,区域:%s,项目:%s,名称:%s,数据:%s%s"%(msg_body.alarm_obj, msg_body.region,\ + msg_body.project, msg_body.device_name, msg_body.max_data, msg_body.unit) for receiver in receivers: smsclient = SMS(phone_host, phone_port, gametype, priority, acttype) smsclient.sendmsg(receiver, msg) From fe03f9b23a4282ff717d15782eec1363e0ccda18 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 16 Apr 2015 18:00:06 +0800 Subject: [PATCH 35/48] fix long code --- alarm/mana_message.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/alarm/mana_message.py b/alarm/mana_message.py index 28b2af9..7fd5570 100644 --- a/alarm/mana_message.py +++ b/alarm/mana_message.py @@ -53,7 +53,8 @@ def sendmsg(self, receiver, message): msg_postfix = '【巨人网络】' msg_postfix = msg_postfix.decode('utf-8').encode('gbk') msg = urllib.quote(message + msg_postfix) - url = "/emaysendMsg?dest_mobile=%s&msg_content=%s&priority=%s&gametype=%s&acttype=%s" %(receiver, msg, self.priority, self.gametype, self.acttype) + url = "/emaysendMsg?dest_mobile=%s&msg_content=%s&priority=%s&gametype=%s&acttype=%s" \ + %(receiver, msg, self.priority, self.gametype, self.acttype) urlclient = UrlCon(self.phone_host, self.phone_port, url, "GET") body = urlclient.get() if body == '0|': From 22eecbb7bbf906d9a64b0a4e667313fd258d58ec Mon Sep 17 00:00:00 2001 From: root Date: Thu, 16 Apr 2015 19:10:49 +0800 Subject: [PATCH 36/48] fix Mbits --- alarm/mana_monitor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/alarm/mana_monitor.py b/alarm/mana_monitor.py index ffe0852..1757428 100755 --- a/alarm/mana_monitor.py +++ b/alarm/mana_monitor.py @@ -166,7 +166,7 @@ def alarm(instance, data, alarm_obj, threshold, region): if max_data > threshold: if unit == 'B/s': max_data = round((max_data / (1024 * 1024)), 2) - unit = 'MB|s' + unit = 'Mbits' msg_body = msg_item(alarm_obj, instance_id, instance_name, project, user, device_name, max_data, unit, region) _alarm(msg_body) return True From 757af02191ab9fa159c29456badf21a430c6f54f Mon Sep 17 00:00:00 2001 From: root Date: Thu, 16 Apr 2015 19:13:23 +0800 Subject: [PATCH 37/48] fix B to bit --- alarm/mana_monitor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/alarm/mana_monitor.py b/alarm/mana_monitor.py index 1757428..df78a54 100755 --- a/alarm/mana_monitor.py +++ b/alarm/mana_monitor.py @@ -165,7 +165,7 @@ def alarm(instance, data, alarm_obj, threshold, region): max_data = body.get('max') * multiple if max_data > threshold: if unit == 'B/s': - max_data = round((max_data / (1024 * 1024)), 2) + max_data = round((max_data * 8 / (1024 * 1024)), 2) unit = 'Mbits' msg_body = msg_item(alarm_obj, instance_id, instance_name, project, user, device_name, max_data, unit, region) _alarm(msg_body) From d352cf93708707b39cea2ad05dae4653a3873f69 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 20 Apr 2015 19:07:44 +0800 Subject: [PATCH 38/48] set the program use muti-thread --- alarm/bin/mana-start-centos.sh | 2 +- alarm/bin/mana-start-ubuntu.sh | 2 +- alarm/bin/mana-stop-centos.sh | 2 +- alarm/bin/mana-stop-ubuntu.sh | 2 +- alarm/mana_alarm.py | 69 ++++++++++++ alarm/mana_collection.py | 88 ++++++++++++++++ alarm/mana_global.py | 30 ++++++ alarm/mana_http.py | 2 +- alarm/mana_monitor.py | 187 +++------------------------------ alarm/mana_public.py | 30 ++++++ alarm/mana_run.py | 34 ++++++ 11 files changed, 270 insertions(+), 178 deletions(-) create mode 100644 alarm/mana_alarm.py create mode 100644 alarm/mana_collection.py create mode 100644 alarm/mana_global.py mode change 100755 => 100644 alarm/mana_monitor.py create mode 100644 alarm/mana_public.py create mode 100755 alarm/mana_run.py diff --git a/alarm/bin/mana-start-centos.sh b/alarm/bin/mana-start-centos.sh index 00c22b5..f8dc7aa 100755 --- a/alarm/bin/mana-start-centos.sh +++ b/alarm/bin/mana-start-centos.sh @@ -3,4 +3,4 @@ #daemon --user cinder --pidfile $pidfile "$exec --config-file $distconfig --config-file $config --logfile $logfile &>/dev/null & echo \$! > $pidfile" #daemon --pidfile /tmp/mana_monitor.pid -- "/opt/projects/mana/alarm/mana_monitor.py &> /dev/null " -nohup /opt/projects/mana/alarm/mana_monitor.py > /dev/null 2>&1 & +nohup /opt/projects/mana/alarm/mana_run.py > /dev/null 2>&1 & diff --git a/alarm/bin/mana-start-ubuntu.sh b/alarm/bin/mana-start-ubuntu.sh index 6979d10..b1a0cab 100755 --- a/alarm/bin/mana-start-ubuntu.sh +++ b/alarm/bin/mana-start-ubuntu.sh @@ -1,4 +1,4 @@ #start-stop-daemon --start --startas /usr/bin/python "/home/ywy/sourcecode/mana/alarm/mana_monitor.py" --pidfile /var/run/mana/mana_monitor.pid --background > /dev/null -start-stop-daemon --start --exec "/home/ywy/sourcecode/mana/alarm/mana_monitor.py" --pidfile /var/run/mana/mana_monitor.pid --background > /dev/null +start-stop-daemon --start --exec "/home/ywy/sourcecode/mana/alarm/mana_run.py" --pidfile /var/run/mana/mana_monitor.pid --background > /dev/null #start-stop-daemon --start --background /usr/bin/python /home/ywy/sourcecode/mana/alarm/mana_monitor.py > /dev/null diff --git a/alarm/bin/mana-stop-centos.sh b/alarm/bin/mana-stop-centos.sh index 1ae4fbc..4a300a2 100755 --- a/alarm/bin/mana-stop-centos.sh +++ b/alarm/bin/mana-stop-centos.sh @@ -1,3 +1,3 @@ #!/bin/bash -pkill -9 mana_monitor.py +pkill -9 mana_run.py diff --git a/alarm/bin/mana-stop-ubuntu.sh b/alarm/bin/mana-stop-ubuntu.sh index d1de1a2..52f1e51 100755 --- a/alarm/bin/mana-stop-ubuntu.sh +++ b/alarm/bin/mana-stop-ubuntu.sh @@ -1 +1 @@ -start-stop-daemon --stop --name mana_monitor.py +start-stop-daemon --stop --name mana_run.py diff --git a/alarm/mana_alarm.py b/alarm/mana_alarm.py new file mode 100644 index 0000000..62b7427 --- /dev/null +++ b/alarm/mana_alarm.py @@ -0,0 +1,69 @@ +#!/usr/bin/python +#coding:utf-8 + + +from mana_message import Email, SMS + +import mana_log +LOG = mana_log.GetLog(__name__) + +import mana_conf +CONF = mana_conf.GetConf() + +from mana_public import ALARM_QUEUE + +def alarm(): + LOG.info("Begin to alarm thread") + while True: + if not ALARM_QUEUE.empty(): + msg_body = ALARM_QUEUE.get() + _alarm(msg_body) + + +def _alarm(msg_body): + try: + message = 'Region:%s,Instance_ID:%s,Instance_Name:%s,Project:%s,User:%s,AlarmBody:%s,Device:%s,data:%s%s'\ + %(msg_body.region, msg_body.instance_id, msg_body.instance_name, msg_body.project, msg_body.user, \ + msg_body.alarm_obj, msg_body.device_name, msg_body.max_data, msg_body.unit) + LOG.info(message) + send_email(msg_body) + send_phone_message(msg_body) + except Exception,e: + LOG.error(e) + +def send_email(msg_body): + email_host = CONF.get('email_host') + email_port = CONF.get('email_port') + sender = CONF.get('email_sender') + sender_pwd = CONF.get('email_sender_pwd') + receivers = CONF.get('email_receiver') + try: + msg = "报警模块:%s
异常数据值:%s%s
报警区域:%s
主机名:%s
主机id:%s
所属项目:%s
所属用户:%s
设备名称:%s
"\ + %(msg_body.alarm_obj, msg_body.max_data, msg_body.unit, msg_body.region, msg_body.instance_name,\ + msg_body.instance_id, msg_body.project, msg_body.user, msg_body.device_name) + subject = '星云监控报警' + emailclient = Email(email_host, email_port, sender, sender_pwd) + for receiver in receivers: + emailclient.sendmsg(receiver, subject, msg) + except Exception,e: + LOG.error(e) + +def send_phone_message(msg_body): + phone_host = CONF.get('phone_host') + phone_port = CONF.get('phone_port') + gametype=CONF.get('phone_gametype') + priority=CONF.get('phone_priority') + acttype=CONF.get('phone_acttype') + receivers=CONF.get('phone_receiver') + try: + msg = "报警模块:%s,区域:%s,项目:%s,名称:%s,数据:%s%s"%(msg_body.alarm_obj, msg_body.region,\ + msg_body.project, msg_body.device_name, msg_body.max_data, msg_body.unit) + for receiver in receivers: + smsclient = SMS(phone_host, phone_port, gametype, priority, acttype) + smsclient.sendmsg(receiver, msg) + except Exception,e: + LOG.error(e) + + +if __name__ == "__main__": + alarm() diff --git a/alarm/mana_collection.py b/alarm/mana_collection.py new file mode 100644 index 0000000..0038824 --- /dev/null +++ b/alarm/mana_collection.py @@ -0,0 +1,88 @@ +#!/usr/bin/python +#coding:utf-8 + +import time +import simplejson + +from mana_http import HttpCon +import mana_log +LOG = mana_log.GetLog(__name__) + +import mana_conf +CONF = mana_conf.GetConf() + +from mana_public import DATA_QUEUE +from mana_public import data_item + + +def collection(): + interval = CONF.get('cycletime') + LOG.info("Begin to get collection data thread,cycletime is %ss" %interval) + while True: + try: + time_pre = time.time() + _collection() + time_now = time.time() + monitor_time = time_now - time_pre + if monitor_time < interval: + LOG.info("Get data time = %ss, DATA_QUEUE's size = %s" %(monitor_time,DATA_QUEUE.qsize())) + time.sleep(interval + time_pre - time_now) + else: + LOG.warn("Get data use too long time = %ss, DATA_QUEUE's size = %s" %(monitor_time,DATA_QUEUE.qsize())) + except Exception, e: + LOG.error(e) + + +def _collection(): + try: + regions = CONF.get('regions') + for region in regions: + instances = get_instances_from_api(region) + for instance in instances: + get_datas(region, instance) + except Exception, e: + LOG.error(e) + +def get_datas(region, instance): + try: + for (alarm_obj, thd) in CONF.get('alarm_list'): + instance_id = instance.get('instance_id') + datas = get_datas_from_api(region, instance_id, alarm_obj) + threshold = float(thd) + item = data_item(instance, alarm_obj , threshold, region, datas) + DATA_QUEUE.put(item) + except Exception, e: + LOG.error(e) + +def get_instances_from_api(region): + url = CONF.get('url').get('get_all_instance_url') %region + api_host = CONF.get('api_host') + api_port = CONF.get('api_port') + try: + httpclient = HttpCon(api_host, api_port, url, "GET") + body = httpclient.get() + if body: + instances = simplejson.loads(body).get('data') + except Exception, e: + LOG.error(e) + return NULL + return instances + +def get_datas_from_api(region, instance, alarm_obj): + url = CONF.get('url').get('get_metric') %(region, alarm_obj, instance) + api_host = CONF.get('api_host') + api_port = CONF.get('api_port') + try: + httpclient = HttpCon(api_host, api_port, url, "POST") + body = httpclient.get() + if body: + data = simplejson.loads(body) + except Exception, e: + LOG.error(e) + return NULL + return data + + +if __name__ == "__main__": + collection() + diff --git a/alarm/mana_global.py b/alarm/mana_global.py new file mode 100644 index 0000000..2acd0f7 --- /dev/null +++ b/alarm/mana_global.py @@ -0,0 +1,30 @@ +#!/usr/bin/python +#coding:utf-8 + +import Queue + +DATA_QUEUE = Queue.Queue() +ALARM_QUEUE = Queue.Queue() + + +class msg_item: + def __init__(self, alarm_obj = None, instance_id = None, instance_name = None,\ + project = None, user = None, device_name = None, max_data = None, \ + unit = None, region = None): + self.alarm_obj = alarm_obj + self.instance_id = instance_id + self.instance_name = instance_name + self.project = project + self.user = user + self.device_name = device_name + self.max_data = max_data + self.unit = unit + self.region = region + +class data_item: + def __init__(self, instance = None, alarm_obj = None, threshold = None, region = None, data = None): + self.instance = instance + self.alarm_obj = alarm_obj + self.threshold = threshold + self.region = region + self.data = data \ No newline at end of file diff --git a/alarm/mana_http.py b/alarm/mana_http.py index 57d941e..1f0f1bd 100644 --- a/alarm/mana_http.py +++ b/alarm/mana_http.py @@ -20,7 +20,7 @@ def get(self): response = self.con.getresponse() status = response.status if status != 200: - return NULL + return None return response.read() except Exception, e: print e diff --git a/alarm/mana_monitor.py b/alarm/mana_monitor.py old mode 100755 new mode 100644 index df78a54..c989a59 --- a/alarm/mana_monitor.py +++ b/alarm/mana_monitor.py @@ -1,19 +1,6 @@ #!/usr/bin/python #coding:utf-8 -import sys -default_encoding = 'utf-8' -if sys.getdefaultencoding() != default_encoding: - reload(sys) - sys.setdefaultencoding(default_encoding) - -import os -import time - -import simplejson - -from mana_http import HttpCon, UrlCon -from mana_message import Email, SMS import mana_log LOG = mana_log.GetLog(__name__) @@ -21,126 +8,24 @@ import mana_conf CONF = mana_conf.GetConf() -unit_map = { - 'cpu_util':{"%":1}, - 'network_incoming_bytes_rate': { - "B/s":1, - "KB/s":1024, - "MB/s":1024*1024, - "GB/s":1024*1024*1024 - }, - 'network_outgoing_bytes_rate': { - "B/s":1, - "KB/s":1024, - "MB/s":1024*1024, - "GB/s":1024*1024*1024 - }, - 'disk_write_bytes_rate': { - "B/s":1, - "KB/s":1024, - "MB/s":1024*1024, - "GB/s":1024*1024*1024 - }, - 'disk_read_bytes_rate': { - "B/s":1, - "KB/s":1024, - "MB/s":1024*1024, - "GB/s":1024*1024*1024 - }, - 'network_incoming_bytes': { - "B":1, - "KB":1024, - "MB":1024*1024, - "GB":1024*1024*1024 - }, - 'network_outgoing_bytes': { - "B":1, - "KB":1024, - "MB":1024*1024, - "GB":1024*1024*1024 - }, -} - -class msg_item: - def __init__(self, alarm_obj = None, instance_id = None, instance_name = None,\ - project = None, user = None, device_name = None, max_data = None, \ - unit = None, region = None): - self.alarm_obj = alarm_obj - self.instance_id = instance_id - self.instance_name = instance_name - self.project = project - self.user = user - self.device_name = device_name - self.max_data = max_data - self.unit = unit - self.region = region +from mana_public import DATA_QUEUE,ALARM_QUEUE +from mana_public import data_item, msg_item -def run(): - interval = CONF.get('cycletime') - LOG.info("begin to monitor,every %s seconds" %interval) - while True: - try: - time_pre = time.time() - monitor() - time_now = time.time() - monitor_time = time_now - time_pre - LOG.info("this cycle monitor all instances use time: %ss" %monitor_time) - time.sleep(interval + time_pre - time_now) - except Exception, e: - LOG.error(e) - def monitor(): - try: - regions = CONF.get('regions') - for region in regions: - instances = get_instances_from_api(region) - for instance in instances: - _monitor(region, instance) - except Exception, e: - LOG.error(e) - -def _monitor(region, instance): - try: - for (alarm_obj, thd) in CONF.get('alarm_list'): - instance_id = instance.get('instance_id') - datas = get_datas_from_api(region, instance_id, alarm_obj) - threshold = float(thd) - for data in datas: - alarm(instance, data, alarm_obj, threshold, region) - except Exception, e: - LOG.error(e) - -def get_instances_from_api(region): - url = CONF.get('url').get('get_all_instance_url') %region - api_host = CONF.get('api_host') - api_port = CONF.get('api_port') - try: - httpclient = HttpCon(api_host, api_port, url, "GET") - body = httpclient.get() - if body: - instances = simplejson.loads(body).get('data') - except Exception, e: - LOG.error(e) - return NULL - return instances + LOG.info("Begin to monitor thread") + while True: + if not DATA_QUEUE.empty(): + item= DATA_QUEUE.get() + _monitor(item) -def get_datas_from_api(region, instance, alarm_obj): - url = CONF.get('url').get('get_metric') %(region, alarm_obj, instance) - api_host = CONF.get('api_host') - api_port = CONF.get('api_port') - try: - httpclient = HttpCon(api_host, api_port, url, "POST") - body = httpclient.get() - if body: - data = simplejson.loads(body) - except Exception, e: - LOG.error(e) - return NULL - return data +def _monitor(data_item): + datas = data_item.data + for data in datas: + check_data(data_item.instance, data, data_item.alarm_obj, data_item.threshold, data_item.region) -def alarm(instance, data, alarm_obj, threshold, region): +def check_data(instance, data, alarm_obj, threshold, region): try: bodys = data.get('data') if bodys == []: @@ -168,56 +53,12 @@ def alarm(instance, data, alarm_obj, threshold, region): max_data = round((max_data * 8 / (1024 * 1024)), 2) unit = 'Mbits' msg_body = msg_item(alarm_obj, instance_id, instance_name, project, user, device_name, max_data, unit, region) - _alarm(msg_body) + ALARM_QUEUE.put(msg_body) return True except Exception, e: LOG.error(e) -def _alarm(msg_body): - try: - message = 'Region:%s\nInstance_ID:%s\nInstance_Name:%s\nProject:%s\nUser:%s\nAlarmBody:%s\nDevice:%s\ndata:%s%s\n'\ - %(msg_body.region, msg_body.instance_id, msg_body.instance_name, msg_body.project, msg_body.user, \ - msg_body.alarm_obj, msg_body.device_name, msg_body.max_data, msg_body.unit) - LOG.info(message) - send_email(msg_body) - send_phone_message(msg_body) - except Exception,e: - LOG.error(e) - -def send_email(msg_body): - email_host = CONF.get('email_host') - email_port = CONF.get('email_port') - sender = CONF.get('email_sender') - sender_pwd = CONF.get('email_sender_pwd') - receivers = CONF.get('email_receiver') - try: - msg = "报警模块:%s
异常数据值:%s%s
报警区域:%s
主机名:%s
主机id:%s
所属项目:%s
所属用户:%s
设备名称:%s
"\ - %(msg_body.alarm_obj, msg_body.max_data, msg_body.unit, msg_body.region, msg_body.instance_name,\ - msg_body.instance_id, msg_body.project, msg_body.user, msg_body.device_name) - subject = '星云监控报警' - emailclient = Email(email_host, email_port, sender, sender_pwd) - for receiver in receivers: - emailclient.sendmsg(receiver, subject, msg) - except Exception,e: - LOG.error(e) - -def send_phone_message(msg_body): - phone_host = CONF.get('phone_host') - phone_port = CONF.get('phone_port') - gametype=CONF.get('phone_gametype') - priority=CONF.get('phone_priority') - acttype=CONF.get('phone_acttype') - receivers=CONF.get('phone_receiver') - try: - msg = "报警模块:%s,区域:%s,项目:%s,名称:%s,数据:%s%s"%(msg_body.alarm_obj, msg_body.region,\ - msg_body.project, msg_body.device_name, msg_body.max_data, msg_body.unit) - for receiver in receivers: - smsclient = SMS(phone_host, phone_port, gametype, priority, acttype) - smsclient.sendmsg(receiver, msg) - except Exception,e: - LOG.error(e) - if __name__ == "__main__": - run() + monitor() \ No newline at end of file diff --git a/alarm/mana_public.py b/alarm/mana_public.py new file mode 100644 index 0000000..2acd0f7 --- /dev/null +++ b/alarm/mana_public.py @@ -0,0 +1,30 @@ +#!/usr/bin/python +#coding:utf-8 + +import Queue + +DATA_QUEUE = Queue.Queue() +ALARM_QUEUE = Queue.Queue() + + +class msg_item: + def __init__(self, alarm_obj = None, instance_id = None, instance_name = None,\ + project = None, user = None, device_name = None, max_data = None, \ + unit = None, region = None): + self.alarm_obj = alarm_obj + self.instance_id = instance_id + self.instance_name = instance_name + self.project = project + self.user = user + self.device_name = device_name + self.max_data = max_data + self.unit = unit + self.region = region + +class data_item: + def __init__(self, instance = None, alarm_obj = None, threshold = None, region = None, data = None): + self.instance = instance + self.alarm_obj = alarm_obj + self.threshold = threshold + self.region = region + self.data = data \ No newline at end of file diff --git a/alarm/mana_run.py b/alarm/mana_run.py new file mode 100755 index 0000000..17878ce --- /dev/null +++ b/alarm/mana_run.py @@ -0,0 +1,34 @@ +#!/usr/bin/python +#coding:utf-8 + +import sys +default_encoding = 'utf-8' +if sys.getdefaultencoding() != default_encoding: + reload(sys) + sys.setdefaultencoding(default_encoding) + +import threading +import time + +from mana_collection import collection +from mana_monitor import monitor +from mana_alarm import alarm + +def start(): + DataCollection = threading.Thread(target = collection, name = "DataCollection") + Monitor = threading.Thread(target = monitor, name = "Monitor") + Alarm = threading.Thread(target = alarm, name = "Alarm") + + DataCollection.setDaemon(True) + Monitor.setDaemon(True) + Alarm.setDaemon(True) + + DataCollection.start() + Monitor.start() + Alarm.start() + + while True: + time.sleep(1) + +if __name__ == "__main__": + start() \ No newline at end of file From 7ce5590369c61c9974df13de558d5ec6df07371f Mon Sep 17 00:00:00 2001 From: yangwanyuan Date: Mon, 20 Apr 2015 19:11:33 +0800 Subject: [PATCH 39/48] Delete mana_email.py --- alarm/mana_email.py | 65 --------------------------------------------- 1 file changed, 65 deletions(-) delete mode 100644 alarm/mana_email.py diff --git a/alarm/mana_email.py b/alarm/mana_email.py deleted file mode 100644 index f6764f6..0000000 --- a/alarm/mana_email.py +++ /dev/null @@ -1,65 +0,0 @@ -#! /usr/bin/python -#coding:utf-8 - -import smtplib -from email.mime.text import MIMEText -from email.header import Header - -#import mana_conf -#CONF = mana_conf.GetConf() - -#EMAIL_HOST = 'mail.ztgame.com' -#EMAIL_PORT = 25 - -#SENDER = 'yangwanyuan@ztgame.com' -#SENDER_PW = 'ywy8861@000' - - -import mana_log -LOG = mana_log.GetLog(__name__) - -#import logging -#LOG = logging.getLogger(__name__) - -class Email(): - def __init__(self, email_host, email_port, email_sender, email_sender_pwd): - self.email_host = email_host - self.email_port = email_port - self.sender = email_sender - self.sender_pw = email_sender_pwd - - - def sendmsg(self, receiver, subject, msg): - try: - self.handle = smtplib.SMTP(self.email_host, self.email_port) - self.handle.login(self.sender, self.sender_pw) - msgbody = MIMEText('

%s

'%msg, 'html', 'utf-8') - msgbody["Accept-Language"]= "zh-CN" - msgbody["Accept-Charset"]= "ISO-8859-1,utf-8" - msgbody['Subject'] = Header(subject, 'utf-8') - self.handle.sendmail(self.sender, receiver, msgbody.as_string()) - LOG.info("send message %s to receiver %s success " %(subject, receiver)) - except Exception, e: - print e; - - def __del__(self): - if self.handle: - self.handle.close() - - - -if __name__ == "__main__": - EMAIL_HOST = 'mail.ztgame.com' - EMAIL_PORT = 25 - - #SENDER = 'yangwanyuan@ztgame.com' - #SENDER_PW = 'ywy8861@000' - - SENDER = 'autowork@ztgame.com' - SENDER_PW = 'ak123$%^' - emailclient = Email(EMAIL_HOST, EMAIL_PORT, SENDER, SENDER_PW) - msg = u'msg:你好啊 !!!' - subject = u'subject: hello world!!' - receiver = 'yangwanyuan@ztgame.com' - emailclient.sendmsg(receiver, subject, msg) - From 89b9400edb8a92b6097479347781a866cf931a74 Mon Sep 17 00:00:00 2001 From: yangwanyuan Date: Mon, 20 Apr 2015 19:13:29 +0800 Subject: [PATCH 40/48] Delete mana_global.py --- alarm/mana_global.py | 30 ------------------------------ 1 file changed, 30 deletions(-) delete mode 100644 alarm/mana_global.py diff --git a/alarm/mana_global.py b/alarm/mana_global.py deleted file mode 100644 index 2acd0f7..0000000 --- a/alarm/mana_global.py +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/python -#coding:utf-8 - -import Queue - -DATA_QUEUE = Queue.Queue() -ALARM_QUEUE = Queue.Queue() - - -class msg_item: - def __init__(self, alarm_obj = None, instance_id = None, instance_name = None,\ - project = None, user = None, device_name = None, max_data = None, \ - unit = None, region = None): - self.alarm_obj = alarm_obj - self.instance_id = instance_id - self.instance_name = instance_name - self.project = project - self.user = user - self.device_name = device_name - self.max_data = max_data - self.unit = unit - self.region = region - -class data_item: - def __init__(self, instance = None, alarm_obj = None, threshold = None, region = None, data = None): - self.instance = instance - self.alarm_obj = alarm_obj - self.threshold = threshold - self.region = region - self.data = data \ No newline at end of file From 22c1050bc6a899a2a3457da90b46dbb81d1c20d6 Mon Sep 17 00:00:00 2001 From: yangwanyuan Date: Mon, 20 Apr 2015 19:13:59 +0800 Subject: [PATCH 41/48] Delete timer.py --- alarm/timer.py | 33 --------------------------------- 1 file changed, 33 deletions(-) delete mode 100644 alarm/timer.py diff --git a/alarm/timer.py b/alarm/timer.py deleted file mode 100644 index 41f6691..0000000 --- a/alarm/timer.py +++ /dev/null @@ -1,33 +0,0 @@ -import time -import eventlet - - -class Timer(): - def __init__(self, interval, func, args): - self.interval = interval - self.func = func - self.args = args - #self.gt = eventlet.spawn(func, args) - - def start(self): - self.gt = eventlet.spawn(self._fun) - #while True: - # eventlet.greenthread.sleep(self.interval) - - def _fun(self): - while True: - self.func(self.args) - eventlet.greenthread.sleep(self.interval) - - - def stop(self): - self.gt.wait() - -def sayhello(args=[]): - print "hello" - print args - - -if __name__ == "__main__": - t = Timer(5, sayhello, ["this", "is", "timer"]) - t.start() From 06bf1e8a21136eb88788c44c1f1d23320c5e7386 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 29 Apr 2015 16:15:41 +0800 Subject: [PATCH 42/48] delete alarm --- alarm/bin/mana-before.sh | 6 -- alarm/bin/mana-start-centos.sh | 6 -- alarm/bin/mana-start-ubuntu.sh | 4 -- alarm/bin/mana-stop-centos.sh | 3 - alarm/bin/mana-stop-ubuntu.sh | 1 - alarm/etc/mana_monitor.conf | 43 -------------- alarm/etc/mana_monitor.conf.bakkkk | 40 ------------- alarm/mana_alarm.py | 69 ----------------------- alarm/mana_collection.py | 88 ----------------------------- alarm/mana_conf.py | 67 ---------------------- alarm/mana_http.py | 60 -------------------- alarm/mana_log.py | 29 ---------- alarm/mana_message.py | 90 ------------------------------ alarm/mana_monitor.py | 64 --------------------- alarm/mana_public.py | 30 ---------- alarm/mana_run.py | 34 ----------- 16 files changed, 634 deletions(-) delete mode 100755 alarm/bin/mana-before.sh delete mode 100755 alarm/bin/mana-start-centos.sh delete mode 100755 alarm/bin/mana-start-ubuntu.sh delete mode 100755 alarm/bin/mana-stop-centos.sh delete mode 100755 alarm/bin/mana-stop-ubuntu.sh delete mode 100644 alarm/etc/mana_monitor.conf delete mode 100644 alarm/etc/mana_monitor.conf.bakkkk delete mode 100644 alarm/mana_alarm.py delete mode 100644 alarm/mana_collection.py delete mode 100644 alarm/mana_conf.py delete mode 100644 alarm/mana_http.py delete mode 100644 alarm/mana_log.py delete mode 100644 alarm/mana_message.py delete mode 100644 alarm/mana_monitor.py delete mode 100644 alarm/mana_public.py delete mode 100755 alarm/mana_run.py diff --git a/alarm/bin/mana-before.sh b/alarm/bin/mana-before.sh deleted file mode 100755 index a5f117f..0000000 --- a/alarm/bin/mana-before.sh +++ /dev/null @@ -1,6 +0,0 @@ -rm -fr /etc/mana -mkdir -p /etc/mana -cp ../etc/mana_monitor.conf /etc/mana - -rm -fr /var/log/mana -mkdir -p /var/log/mana diff --git a/alarm/bin/mana-start-centos.sh b/alarm/bin/mana-start-centos.sh deleted file mode 100755 index f8dc7aa..0000000 --- a/alarm/bin/mana-start-centos.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -#. /etc/rc.d/init.d/functions - -#daemon --user cinder --pidfile $pidfile "$exec --config-file $distconfig --config-file $config --logfile $logfile &>/dev/null & echo \$! > $pidfile" -#daemon --pidfile /tmp/mana_monitor.pid -- "/opt/projects/mana/alarm/mana_monitor.py &> /dev/null " -nohup /opt/projects/mana/alarm/mana_run.py > /dev/null 2>&1 & diff --git a/alarm/bin/mana-start-ubuntu.sh b/alarm/bin/mana-start-ubuntu.sh deleted file mode 100755 index b1a0cab..0000000 --- a/alarm/bin/mana-start-ubuntu.sh +++ /dev/null @@ -1,4 +0,0 @@ -#start-stop-daemon --start --startas /usr/bin/python "/home/ywy/sourcecode/mana/alarm/mana_monitor.py" --pidfile /var/run/mana/mana_monitor.pid --background > /dev/null -start-stop-daemon --start --exec "/home/ywy/sourcecode/mana/alarm/mana_run.py" --pidfile /var/run/mana/mana_monitor.pid --background > /dev/null -#start-stop-daemon --start --background /usr/bin/python /home/ywy/sourcecode/mana/alarm/mana_monitor.py > /dev/null - diff --git a/alarm/bin/mana-stop-centos.sh b/alarm/bin/mana-stop-centos.sh deleted file mode 100755 index 4a300a2..0000000 --- a/alarm/bin/mana-stop-centos.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -pkill -9 mana_run.py diff --git a/alarm/bin/mana-stop-ubuntu.sh b/alarm/bin/mana-stop-ubuntu.sh deleted file mode 100755 index 52f1e51..0000000 --- a/alarm/bin/mana-stop-ubuntu.sh +++ /dev/null @@ -1 +0,0 @@ -start-stop-daemon --stop --name mana_run.py diff --git a/alarm/etc/mana_monitor.conf b/alarm/etc/mana_monitor.conf deleted file mode 100644 index 878100c..0000000 --- a/alarm/etc/mana_monitor.conf +++ /dev/null @@ -1,43 +0,0 @@ -[global] -cycletime = 200 -api_host = 127.0.0.1 -api_port = 8080 -regions = beijing - -[url] -get_all_instance_url = /api/virs_list/%s/ -get_metric = /api/statics/%s/%s/%s/3h/ - -[alarm] -cpu_util = 0.1 -#network_incoming_bytes_rate = 50000000 -#network_outgoing_bytes_rate = 50000000 -#disk_write_bytes_rate = 2000 -#disk_read_bytes_rate = 1 -#network_incoming_bytes = 100000 -#network_outgoing_bytes = 100000 - -[email] -email_host = mail.ztgame.com -email_port = 25 -email_sender = autowork@ztgame.com -email_sender_pwd = ak123$%^ -email_receiver = yangwanyuan@ztgame.com - -#email_host = smtp.126.com -#email_port = 25 -#email_sender = ztgame_work@126.com -#email_sender_pwd = wppxvrsclvgblnye -#email_receiver = ztgame_work@126.com - -[phone] -phone_host = 192.168.39.120 -phone_port = 29997 -phone_gametype = 2 -phone_priority = 5 -phone_acttype = 89 -phone_receiver = 18505532175 - - - - diff --git a/alarm/etc/mana_monitor.conf.bakkkk b/alarm/etc/mana_monitor.conf.bakkkk deleted file mode 100644 index c59df21..0000000 --- a/alarm/etc/mana_monitor.conf.bakkkk +++ /dev/null @@ -1,40 +0,0 @@ -[global] -cycletime = 1800 -api_host = 222.73.196.30 -api_port = 80 -regions = beijing,zhenru,Nanhui - -[url] -get_all_instance_url = /api/virs_list/%s/ -get_metric = /api/statics/%s/%s/%s/3h/ - -[alarm] -#cpu_util = 10 -network_incoming_bytes_rate = 50000000 -network_outgoing_bytes_rate = 50000000 -#disk_write_bytes_rate = 2000 -#disk_read_bytes_rate = 1 -#network_incoming_bytes = 100000 -#network_outgoing_bytes = 100000 - -[email] -email_host = smtp.126.com -email_port = 25 - -email_sender = ztgame_work@126.com -email_sender_pwd = wppxvrsclvgblnye - -email_receiver = ztgame_work@126.com - - -[phone] -phone_host = 222.73.30.20 -phone_port = 29997 -phone_gametype = 2 -phone_priority = 5 -phone_acttype = 89 -phone_receiver = 18505532175 - - - - diff --git a/alarm/mana_alarm.py b/alarm/mana_alarm.py deleted file mode 100644 index 62b7427..0000000 --- a/alarm/mana_alarm.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/python -#coding:utf-8 - - -from mana_message import Email, SMS - -import mana_log -LOG = mana_log.GetLog(__name__) - -import mana_conf -CONF = mana_conf.GetConf() - -from mana_public import ALARM_QUEUE - -def alarm(): - LOG.info("Begin to alarm thread") - while True: - if not ALARM_QUEUE.empty(): - msg_body = ALARM_QUEUE.get() - _alarm(msg_body) - - -def _alarm(msg_body): - try: - message = 'Region:%s,Instance_ID:%s,Instance_Name:%s,Project:%s,User:%s,AlarmBody:%s,Device:%s,data:%s%s'\ - %(msg_body.region, msg_body.instance_id, msg_body.instance_name, msg_body.project, msg_body.user, \ - msg_body.alarm_obj, msg_body.device_name, msg_body.max_data, msg_body.unit) - LOG.info(message) - send_email(msg_body) - send_phone_message(msg_body) - except Exception,e: - LOG.error(e) - -def send_email(msg_body): - email_host = CONF.get('email_host') - email_port = CONF.get('email_port') - sender = CONF.get('email_sender') - sender_pwd = CONF.get('email_sender_pwd') - receivers = CONF.get('email_receiver') - try: - msg = "报警模块:%s
异常数据值:%s%s
报警区域:%s
主机名:%s
主机id:%s
所属项目:%s
所属用户:%s
设备名称:%s
"\ - %(msg_body.alarm_obj, msg_body.max_data, msg_body.unit, msg_body.region, msg_body.instance_name,\ - msg_body.instance_id, msg_body.project, msg_body.user, msg_body.device_name) - subject = '星云监控报警' - emailclient = Email(email_host, email_port, sender, sender_pwd) - for receiver in receivers: - emailclient.sendmsg(receiver, subject, msg) - except Exception,e: - LOG.error(e) - -def send_phone_message(msg_body): - phone_host = CONF.get('phone_host') - phone_port = CONF.get('phone_port') - gametype=CONF.get('phone_gametype') - priority=CONF.get('phone_priority') - acttype=CONF.get('phone_acttype') - receivers=CONF.get('phone_receiver') - try: - msg = "报警模块:%s,区域:%s,项目:%s,名称:%s,数据:%s%s"%(msg_body.alarm_obj, msg_body.region,\ - msg_body.project, msg_body.device_name, msg_body.max_data, msg_body.unit) - for receiver in receivers: - smsclient = SMS(phone_host, phone_port, gametype, priority, acttype) - smsclient.sendmsg(receiver, msg) - except Exception,e: - LOG.error(e) - - -if __name__ == "__main__": - alarm() diff --git a/alarm/mana_collection.py b/alarm/mana_collection.py deleted file mode 100644 index 0038824..0000000 --- a/alarm/mana_collection.py +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/python -#coding:utf-8 - -import time -import simplejson - -from mana_http import HttpCon -import mana_log -LOG = mana_log.GetLog(__name__) - -import mana_conf -CONF = mana_conf.GetConf() - -from mana_public import DATA_QUEUE -from mana_public import data_item - - -def collection(): - interval = CONF.get('cycletime') - LOG.info("Begin to get collection data thread,cycletime is %ss" %interval) - while True: - try: - time_pre = time.time() - _collection() - time_now = time.time() - monitor_time = time_now - time_pre - if monitor_time < interval: - LOG.info("Get data time = %ss, DATA_QUEUE's size = %s" %(monitor_time,DATA_QUEUE.qsize())) - time.sleep(interval + time_pre - time_now) - else: - LOG.warn("Get data use too long time = %ss, DATA_QUEUE's size = %s" %(monitor_time,DATA_QUEUE.qsize())) - except Exception, e: - LOG.error(e) - - -def _collection(): - try: - regions = CONF.get('regions') - for region in regions: - instances = get_instances_from_api(region) - for instance in instances: - get_datas(region, instance) - except Exception, e: - LOG.error(e) - -def get_datas(region, instance): - try: - for (alarm_obj, thd) in CONF.get('alarm_list'): - instance_id = instance.get('instance_id') - datas = get_datas_from_api(region, instance_id, alarm_obj) - threshold = float(thd) - item = data_item(instance, alarm_obj , threshold, region, datas) - DATA_QUEUE.put(item) - except Exception, e: - LOG.error(e) - -def get_instances_from_api(region): - url = CONF.get('url').get('get_all_instance_url') %region - api_host = CONF.get('api_host') - api_port = CONF.get('api_port') - try: - httpclient = HttpCon(api_host, api_port, url, "GET") - body = httpclient.get() - if body: - instances = simplejson.loads(body).get('data') - except Exception, e: - LOG.error(e) - return NULL - return instances - -def get_datas_from_api(region, instance, alarm_obj): - url = CONF.get('url').get('get_metric') %(region, alarm_obj, instance) - api_host = CONF.get('api_host') - api_port = CONF.get('api_port') - try: - httpclient = HttpCon(api_host, api_port, url, "POST") - body = httpclient.get() - if body: - data = simplejson.loads(body) - except Exception, e: - LOG.error(e) - return NULL - return data - - -if __name__ == "__main__": - collection() - diff --git a/alarm/mana_conf.py b/alarm/mana_conf.py deleted file mode 100644 index 9a6439d..0000000 --- a/alarm/mana_conf.py +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/python -#coding:utf-8 - -import ConfigParser -import os - - - -def Parser(config): - try: - conf = {} - conf['cycletime'] = config.getint('global', 'cycletime') - conf['api_host'] = config.get('global', 'api_host') - conf['api_port'] = config.getint('global', 'api_port') - - regions_list = config.get('global', 'regions').split(',') - conf['regions'] = regions_list - - url_dict = {} - url_dict['get_all_instance_url'] = config.get('url', 'get_all_instance_url') - url_dict['get_metric'] = config.get('url', 'get_metric') - conf['url'] = url_dict - - - conf['email_host'] = config.get('email', 'email_host') - conf['email_port'] = config.getint('email', 'email_port') - conf['email_sender'] = config.get('email', 'email_sender') - conf['email_sender_pwd'] = config.get('email', 'email_sender_pwd') - - email_receiver_list = config.get('email', 'email_receiver').split(',') - conf['email_receiver'] = email_receiver_list - - alarm_list = config.items('alarm') - conf['alarm_list'] = alarm_list - - conf['phone_host'] = config.get('phone', 'phone_host') - conf['phone_port'] = config.getint('phone', 'phone_port') - conf['phone_gametype'] = config.get('phone', 'phone_gametype') - conf['phone_priority'] = config.get('phone', 'phone_priority') - conf['phone_acttype'] = config.get('phone', 'phone_acttype') - - phone_receiver_list = config.get('phone', 'phone_receiver').split(',') - conf['phone_receiver'] = phone_receiver_list - - except Exception, e: - print e - - return conf - -def GetConf(): - try: - config = ConfigParser.ConfigParser() - config.read('/etc/mana/mana_monitor.conf') - conf = Parser(config) - except Exception, e: - print e - return conf - - - - -if __name__ == '__main__': - con = GetConf() - print con - - - diff --git a/alarm/mana_http.py b/alarm/mana_http.py deleted file mode 100644 index 1f0f1bd..0000000 --- a/alarm/mana_http.py +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/python -#coding:utf-8 - -import httplib -import urllib2 - -#the httpclient use for RESTful API -class HttpCon(): - def __init__(self, host = None, port = None, url = None, method = None, timeout = 30): - self.host = host - self.port = port - self.url = url - self.method = method - self.timeout = 30 - - def get(self): - try: - self.con = httplib.HTTPConnection(self.host, self.port, self.timeout) - self.con.request(self.method, self.url) - response = self.con.getresponse() - status = response.status - if status != 200: - return None - return response.read() - except Exception, e: - print e - - def __del__(self): - if self.con: - self.con.close() - -#the urlclient use for url -class UrlCon(): - def __init__(self, host = None, port = None, url = None, method = None, timeout = 30): - self.host = host - self.port = port - self.url = url - self.method = method - self.timeout = 30 - - def get(self): - try: - full_url = 'http://' + self.host +':' + str(self.port) + self.url - response = urllib2.urlopen(full_url) - result = response.read() - return result - except Exception, e: - print e - - def __del__(self): - pass - - - -if __name__ == "__main__": - #httpclient = HttpCon("www.baidu.com", 80, "/", "GET") - #print httpclient.get() - - urlclient = UrlCon("192.168.39.120", 29997, "/emaysendMsg?dest_mobile=18505532175&msg_content=%B6%CC%D0%C5%B2%E2%CA%D4%A1%BE%BE%DE%C8%CB%CD%F8%C2%E7%A1%BF&priority=5&gametype=2&acttype=89", "GET") - print urlclient.get() diff --git a/alarm/mana_log.py b/alarm/mana_log.py deleted file mode 100644 index d49b319..0000000 --- a/alarm/mana_log.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/python -#coding:utf-8 - -import logging -import os - -#LOG_FILE = 'monitor.log' -LOG_FILE = '/var/log/mana/monitor.log' -#logging.basicConfig(filename = os.path.join(os.getcwd(), LOG_FILE), -logging.basicConfig(filename = LOG_FILE, - level = logging.DEBUG, - format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', - datefmt= '%m-%d %H:%M') - -console = logging.StreamHandler() -console.setLevel(logging.INFO) -logging.getLogger('').addHandler(console) - -def GetLog(name): - log = logging.getLogger(name) - return log - - -if __name__ == "__main__": - log = GetLog(__name__) - log.info("hello world!") - log.debug("hello python!") - log.warn("warn!!!!") - log.error("error!!") \ No newline at end of file diff --git a/alarm/mana_message.py b/alarm/mana_message.py deleted file mode 100644 index 7fd5570..0000000 --- a/alarm/mana_message.py +++ /dev/null @@ -1,90 +0,0 @@ -#! /usr/bin/python -#coding:utf-8 - -import smtplib -from email.mime.text import MIMEText -from email.header import Header - - -from mana_http import UrlCon -import urllib - -import mana_log -LOG = mana_log.GetLog(__name__) - - -class Email(): - def __init__(self, email_host = None, email_port = None, email_sender = None, email_sender_pwd = None): - self.email_host = email_host - self.email_port = email_port - self.sender = email_sender - self.sender_pw = email_sender_pwd - - - def sendmsg(self, receiver, subject, msg): - try: - self.handle = smtplib.SMTP(self.email_host, self.email_port) - self.handle.login(self.sender, self.sender_pw) - msgbody = MIMEText("%s"%msg, 'html', 'utf-8') - msgbody["Accept-Language"]= "zh-CN" - msgbody["Accept-Charset"]= "ISO-8859-1,utf-8" - msgbody['Subject'] = Header(subject, 'utf-8') - self.handle.sendmail(self.sender, receiver, msgbody.as_string()) - LOG.info("send email %s to receiver %s success " %(subject, receiver)) - except Exception, e: - print e; - - def __del__(self): - if self.handle: - self.handle.close() - - -class SMS(): - def __init__(self, phone_host = None, phone_port = None, gametype = None, priority = None, acttype = None): - self.phone_host = phone_host - self.phone_port = phone_port - self.gametype = gametype - self.priority = priority - self.acttype = acttype - - def sendmsg(self, receiver, message): - message = message.decode('utf-8').encode('gbk') - #msg_postfix = "%A1%BE%BE%DE%C8%CB%CD%F8%C2%E7%A1%BF" - msg_postfix = '【巨人网络】' - msg_postfix = msg_postfix.decode('utf-8').encode('gbk') - msg = urllib.quote(message + msg_postfix) - url = "/emaysendMsg?dest_mobile=%s&msg_content=%s&priority=%s&gametype=%s&acttype=%s" \ - %(receiver, msg, self.priority, self.gametype, self.acttype) - urlclient = UrlCon(self.phone_host, self.phone_port, url, "GET") - body = urlclient.get() - if body == '0|': - LOG.info("send short message to receiver %s success "%receiver) - else: - LOG.error("send short message to receiver %s failed! return code is %s" %(receiver, body)) - - def __del__(self): - pass - - - - -if __name__ == "__main__": - EMAIL_HOST = 'mail.ztgame.com' - EMAIL_PORT = 25 - SENDER = 'autowork@ztgame.com' - SENDER_PW = 'ak123$%^' - email_receiver = 'yangwanyuan@ztgame.com' - subject = u'subject: hello world!!' - msg = u'msg:你好啊 !!!' - emailclient = Email(EMAIL_HOST, EMAIL_PORT, SENDER, SENDER_PW) - emailclient.sendmsg(email_receiver, subject, msg) - - #PHONE_HOST = '192.168.39.120' - #PHONE_PORT = 29997 - #GAMETYPE = '2' - #PRIORITY = '5' - #ACTTYPE = '89' - #sms_receiver = '18505532175' - #msg = "报警模块:network,区域:beijing,名称:aaa,项目:大主宰,用户:admin" - #smsclient = SMS(PHONE_HOST, PHONE_PORT, GAMETYPE, PRIORITY, ACTTYPE) - #smsclient.sendmsg(sms_receiver, msg) \ No newline at end of file diff --git a/alarm/mana_monitor.py b/alarm/mana_monitor.py deleted file mode 100644 index c989a59..0000000 --- a/alarm/mana_monitor.py +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/python -#coding:utf-8 - - -import mana_log -LOG = mana_log.GetLog(__name__) - -import mana_conf -CONF = mana_conf.GetConf() - -from mana_public import DATA_QUEUE,ALARM_QUEUE -from mana_public import data_item, msg_item - - -def monitor(): - LOG.info("Begin to monitor thread") - while True: - if not DATA_QUEUE.empty(): - item= DATA_QUEUE.get() - _monitor(item) - - -def _monitor(data_item): - datas = data_item.data - for data in datas: - check_data(data_item.instance, data, data_item.alarm_obj, data_item.threshold, data_item.region) - -def check_data(instance, data, alarm_obj, threshold, region): - try: - bodys = data.get('data') - if bodys == []: - return False - - device_name = data.get('name') - instance_id =instance.get('instance_id') - instance_name = instance.get('instance_name') - try: - project = instance.get('project').encode('utf-8') - except Exception: - project = instance.get('project') - try: - user = instance.get('user').encode('utf-8') - except Exception: - user = instance.get('user') - - for body in bodys: - unit = body.get('unit') - #multiple = unit_map.get(alarm_obj).get(unit) - multiple = 1 - max_data = body.get('max') * multiple - if max_data > threshold: - if unit == 'B/s': - max_data = round((max_data * 8 / (1024 * 1024)), 2) - unit = 'Mbits' - msg_body = msg_item(alarm_obj, instance_id, instance_name, project, user, device_name, max_data, unit, region) - ALARM_QUEUE.put(msg_body) - return True - except Exception, e: - LOG.error(e) - - - -if __name__ == "__main__": - monitor() \ No newline at end of file diff --git a/alarm/mana_public.py b/alarm/mana_public.py deleted file mode 100644 index 2acd0f7..0000000 --- a/alarm/mana_public.py +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/python -#coding:utf-8 - -import Queue - -DATA_QUEUE = Queue.Queue() -ALARM_QUEUE = Queue.Queue() - - -class msg_item: - def __init__(self, alarm_obj = None, instance_id = None, instance_name = None,\ - project = None, user = None, device_name = None, max_data = None, \ - unit = None, region = None): - self.alarm_obj = alarm_obj - self.instance_id = instance_id - self.instance_name = instance_name - self.project = project - self.user = user - self.device_name = device_name - self.max_data = max_data - self.unit = unit - self.region = region - -class data_item: - def __init__(self, instance = None, alarm_obj = None, threshold = None, region = None, data = None): - self.instance = instance - self.alarm_obj = alarm_obj - self.threshold = threshold - self.region = region - self.data = data \ No newline at end of file diff --git a/alarm/mana_run.py b/alarm/mana_run.py deleted file mode 100755 index 17878ce..0000000 --- a/alarm/mana_run.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/python -#coding:utf-8 - -import sys -default_encoding = 'utf-8' -if sys.getdefaultencoding() != default_encoding: - reload(sys) - sys.setdefaultencoding(default_encoding) - -import threading -import time - -from mana_collection import collection -from mana_monitor import monitor -from mana_alarm import alarm - -def start(): - DataCollection = threading.Thread(target = collection, name = "DataCollection") - Monitor = threading.Thread(target = monitor, name = "Monitor") - Alarm = threading.Thread(target = alarm, name = "Alarm") - - DataCollection.setDaemon(True) - Monitor.setDaemon(True) - Alarm.setDaemon(True) - - DataCollection.start() - Monitor.start() - Alarm.start() - - while True: - time.sleep(1) - -if __name__ == "__main__": - start() \ No newline at end of file From 535dd7da0f314c8405bfd12f25d8a1eeae428ec2 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 29 Apr 2015 16:32:04 +0800 Subject: [PATCH 43/48] add api url:/api/statics////seconds/