File: //usr/local/qcloud/monitor/barad/plugin/dispatcher/alarmproxy_sender.py
#!/usr/bin/env python
import sys
import os
import urllib2
import json
sys.path.append(os.getcwd() + '/../../comm/')
import gzip
import StringIO
import constant
from plugin_base import BaseSender
import cutils
from cutils import CommUtils
import datetime
import time
class AlarmProxySender(BaseSender):
def init(self):
self.url = self.get_config('alarmproxy_url')
self.timeout = float(self.get_config('alarmproxy_timeout'))/1000
self.newurl = self.url
self.dnstime = 0
self.max_retries = 3
self.retry_delay = 1
def send_data(self, json_data):
if len(json_data) == 0:
self.logger().info("alarmproxysender empty json data, ignored : %s" % json_data)
return
try:
if not cutils.check_net(self.newurl, self.timeout):
self.newurl = self.get_config('alarmproxy_url')
req = urllib2.Request(self.newurl)
req.add_header('Content-Type', 'application/json')
req.add_header('Host', 'cloud.iaas.alarmproxy.woa.com')
timeout = self.timeout
data = json.dumps(json_data)
for attempt in range(self.max_retries):
try:
http_ret = urllib2.urlopen(req, data, timeout)
response = http_ret.read()
break
except urllib2.URLError,e:
if attempt < (self.max_retries - 1):
self.logger().info("send data error: %s sleep 1s and retry %d/%d" % (str(e),attempt + 1, self.max_retries))
time.sleep(self.retry_delay)
else:
self.logger().error("send data error max_retries , error :%s, data : %s", str(e), data)
return
try:
json_resp = json.loads(response)
retcode = int(json_resp["ErrorCode"])
if retcode != 0:
self.logger().error(
"alarmproxy send error, retcode : %d, ErrorMsg : %s, data : %s" % (retcode, json_resp["ErrorMsg"], data))
else:
self.logger().info("alarmproxy send succ, data : %s" % str(data))
except ValueError as e:
self.logger().error("alarmproxy send error, got a invalid json response : %s" % response)
except urllib2.URLError as e:
self.logger().error("alarmproxy send data error , error :%s, data : %s", str(e), data)
def main():
pass
if __name__ == '__main__':
main()