• # From http://stackoverflow.com/questions/92438/stripping-non-printable-characters-from-a-string-in-python
    control_chars = ''.join(map(unichr, range(0, 32) + range(127, 160)))
    control_char_re = re.compile('[%s]' % re.escape(control_chars))


    def remove_control_chars(s):
    return control_char_re.sub('', s)

    # coding: utf-8
    import sys
    import time
    
    # emitter 发射
    '''
    异步封装
    
    def on_response(self, response):
        dosomething()
    
    http = tornado.httpclient.AsyncHTTPClient()
    http.fetch(req, callback=self.on_response)
    
    '''
    def main():
    
        def sigterm_handler(signum, frame):
            print 'stop...'
            return -1
    
        import signal
        signal.signal(signal.SIGTERM, sigterm_handler)
        signal.signal(signal.SIGINT, sigterm_handler)
    
        count = 10
        while count:
            print 'hello'
            time.sleep(1)
            count -= 1
    
    
        return 0
    
    if __name__ == '__main__':
    
        import uuid
        import platform
        print platform.uname()
        print platform.node()
    
        hostid = uuid.uuid5(uuid.NAMESPACE_DNS, platform.node() + str(uuid.getnode())).hex
    
        print hostid
    
        import socket
    
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('www.baidu.com', 0))
        ip = s.getsockname()[0]
        print ip

            s = socket.socket()
            s.connect(('114.114.114.114', 53))
            addr, port = s.getsockname()
            s.close()
            print addr

        import requests
    
        try:
            bad_r = requests.get('http://httpbin.org/status/404')
    
            print bad_r.status_code
    
            bad_r.raise_for_status()
    
            if bad_r.status_code >= 200 and bad_r.status_code < 205:
                print "success ooh! to log"
    
    
        except Exception:
            print 'bad_r raise to log %s'%bad_r.status_code
    
        sys.exit(main())
    
    
    class EmitterThread(threading.Thread):
    
        def __init__(self, *args, **kwargs):
            self.__name = kwargs['name']
            self.__emitter = kwargs.pop('emitter')()
            self.__logger = kwargs.pop('logger')
            self.__config = kwargs.pop('config')
            self.__max_queue_size = kwargs.pop('max_queue_size', 100)
            self.__queue = Queue(self.__max_queue_size)
            threading.Thread.__init__(self, *args, **kwargs)
            self.daemon = True
    
        def run(self):
            while True:
                (data, headers) = self.__queue.get()
                try:
                    self.__logger.debug('Emitter %r handling a packet', self.__name)
                    self.__emitter(data, self.__logger, self.__config)
                except Exception:
                    self.__logger.error('Failure during operation of emitter %r', self.__name, exc_info=True)
    
        def enqueue(self, data, headers):
            try:
                self.__queue.put((data, headers), block=False)
            except Full:
                self.__logger.warn('Dropping packet for %r due to backlog', self.__name)
    
    
    class EmitterManager(object):
        """Track custom emitters"""
    
        def __init__(self, config):
            self.agentConfig = config
            self.emitterThreads = []
            for emitter_spec in [s.strip() for s in self.agentConfig.get('custom_emitters', '').split(',')]:
                if len(emitter_spec) == 0:
                    continue
                logging.info('Setting up custom emitter %r', emitter_spec)
                try:
                    thread = EmitterThread(
                        name=emitter_spec,
                        emitter=modules.load(emitter_spec, 'emitter'),
                        logger=logging,
                        config=config,
                    )
                    thread.start()
                    self.emitterThreads.append(thread)
                except Exception:
                    logging.error('Unable to start thread for emitter: %r', emitter_spec, exc_info=True)
            logging.info('Done with custom emitters')
    
        def send(self, data, headers=None):
            if not self.emitterThreads:
                return  # bypass decompression/decoding
            if headers and headers.get('Content-Encoding') == 'deflate':
                data = zlib.decompress(data)
            data = json_decode(data)
            for emitterThread in self.emitterThreads:
                logging.info('Queueing for emitter %r', emitterThread.name)
                emitterThread.enqueue(data, headers)
    

      

  • 相关阅读:
    故障-因为MAC地址冲突造成的故障
    MySQL安全审计(init_connect)
    GLIBC升级
    HTTPS优化与证书
    封装打包Python脚本
    fiddler进行弱网测试的坑
    Jmeter的安装
    win10安装Mysql
    linux常用命令(五)
    linux常用命令(四)
  • 原文地址:https://www.cnblogs.com/newpython/p/6421341.html
Copyright © 2020-2023  润新知