HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux WebLive 5.15.0-79-generic #86-Ubuntu SMP Mon Jul 10 16:07:21 UTC 2023 x86_64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //usr/local/qcloud/monitor/barad/plugin/dispatcher/cfs_tcloud_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 datetime
from plugin_base import BaseSender
import cutils
from cutils import CommUtils
import time

class CfsTcloudSender(BaseSender):
    def init(self):
        self.url = cutils.get_url('CfsTcloudSender','new_cfs_url','cfs_url')
        self.timeout = float(self.get_config('cfs_timeout'))/1000
        self.is_compress = int(self.get_config('is_compress'))
        self.newurl = self.url
        self.dnstime = 0
        self.dnscachetime = 300
        self.max_retries = 3
        self.retry_delay = 1

    def send_data(self, json_data):
        try:
            curtime = datetime.datetime.now()
            if(self.dnstime ==0 or (curtime - self.dnstime).seconds > self.dnscachetime):
                tempurl = CommUtils.dns_parse(self.url)
                if cutils.check_net(tempurl, self.timeout):
                    self.newurl = tempurl
                self.dnstime = curtime
                self.logger().info("get CFSSender dns ipurl  : %s" % self.newurl)

            req = urllib2.Request(self.newurl)
            req.add_header('Content-Type', 'application/json')
            timeout = self.timeout
            data = json.dumps(json_data).lower()
            if self.is_compress == 1:
                try:
                    in_data = data
                    out = StringIO.StringIO()
                    f = gzip.GzipFile(fileobj=out, mode="wb")
                    f.write(in_data)
                    f.close()
                    data = out.getvalue()
                    req.add_header('Content-Encoding', 'gzip')
                    req.add_header('Content-Length', len(data))
                    self.logger().info("gzip compress before %d, after %d", len(in_data), len(data))
                except Exception as e:
                    self.logger().error(
                        "compress data error, error: %s, original data: %s", str(e), str(in_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["returnCode"])
                if retcode != 0:
                    self.logger().error("cfs send error, retcode : %d, msg : %s, data : %s" %
                                        (retcode, json_resp["msg"], data))
                else:
                    self.logger().info("cfs send succ, data : %s" % str(data))
            except ValueError as e:
                self.logger().error("cfs send error, got a invalid json response : %s" % response)
        except urllib2.URLError as e:
            self.logger().error("send data error , error :%s, data : %s", str(e), data)