Example #1
0
    def head_request(self):
        # for keep alive, not work now.
        self.accept_task = False
        self.request_onway = True
        self.record_active("head")
        start_time = time.time()
        # xlog.debug("head request %s", self.ip)
        request_data = 'GET / HTTP/1.1\r\nHost: %s\r\n\r\n' % self.ssl_sock.host

        try:
            data = request_data.encode()
            ret = self.ssl_sock.send(data)
            if ret != len(data):
                xlog.warn("h1 head send len:%r %d %s", ret, len(data), self.ip)
                xlog.warn('%s trace:%s', self.ip, self.get_trace())
                return False
            response = simple_http_client.Response(self.ssl_sock)
            response.begin(timeout=30)

            status = response.status
            if status != 200:
                xlog.warn("%s host:%s head fail status:%d", self.ip,
                          self.ssl_sock.host, status)
                return False

            content = response.readall(timeout=5)

            time_now = time.time()
            self.record_active("head end")
            self.rtt = (time_now - start_time) * 1000
            self.last_active_time = start_time
            ip_manager.update_ip(self.ip, self.rtt)
            self.accept_task = True
            return True
        except httplib.BadStatusLine as e:
            time_now = time.time()
            inactive_time = time_now - self.last_active_time
            head_timeout = time_now - start_time
            xlog.warn("%s keep alive fail, inactive_time:%d head_timeout:%d",
                      self.ssl_sock.ip, inactive_time, head_timeout)
            xlog.warn('%s trace:%s', self.ip, self.get_trace())
            ip_manager.report_connect_closed(self.ip, "down fail")
            self.close("head fail")
        except Exception as e:
            xlog.warn("h1 %s HEAD keep alive request fail:%r",
                      self.ssl_sock.ip, e)
            xlog.warn('%s trace:%s', self.ip, self.get_trace())
            ip_manager.report_connect_closed(self.ip, "down fail")
            self.close("head fail")
        finally:
            self.request_onway = False
Example #2
0
    def head_request(self):
        # for keep alive, not work now.
        self.accept_task = False
        self.request_onway = True
        self.record_active("head")
        start_time = time.time()
        # xlog.debug("head request %s", self.ip)
        request_data = 'GET / HTTP/1.1\r\nHost: %s\r\n\r\n' % self.ssl_sock.host

        try:
            data = request_data.encode()
            ret = self.ssl_sock.send(data)
            if ret != len(data):
                xlog.warn("h1 head send len:%r %d %s", ret, len(data), self.ip)
                xlog.warn('%s trace:%s', self.ip, self.get_trace())
                return False
            response = simple_http_client.Response(self.ssl_sock)
            response.begin(timeout=30)

            status = response.status
            if status != 200:
                xlog.warn("%s host:%s head fail status:%d", self.ip, self.ssl_sock.host, status)
                return False

            content = response.readall(timeout=5)

            time_now = time.time()
            self.record_active("head end")
            self.rtt = (time_now - start_time) * 1000
            self.last_active_time = start_time
            ip_manager.update_ip(self.ip, self.rtt)
            self.accept_task = True
            return True
        except httplib.BadStatusLine as e:
            time_now = time.time()
            inactive_time = time_now - self.last_active_time
            head_timeout = time_now - start_time
            xlog.warn("%s keep alive fail, inactive_time:%d head_timeout:%d",
                       self.ssl_sock.ip, inactive_time, head_timeout)
            xlog.warn('%s trace:%s', self.ip, self.get_trace())
            ip_manager.report_connect_closed(self.ip, "down fail")
            self.close("head fail")
        except Exception as e:
            xlog.warn("h1 %s HEAD keep alive request fail:%r", self.ssl_sock.ip, e)
            xlog.warn('%s trace:%s', self.ip, self.get_trace())
            ip_manager.report_connect_closed(self.ip, "down fail")
            self.close("head fail")
        finally:
            self.request_onway = False
Example #3
0
    def _create_ssl_connection(self, ip_port):
        if not connect_control.allow_connect():
            time.sleep(10)
            return False

        ip = ip_port[0]
        port = ip_port[1]
        connect_control.start_connect_register(high_prior=True)

        time_begin = time.time()
        try:
            xlog.debug("try connect %s", ip)
            ssl_sock = check_ip.connect_ssl(ip,
                                            port=port,
                                            timeout=self.connect_timeout,
                                            on_close=ip_manager.ssl_closed)
            ip_manager.update_ip(ip, ssl_sock.handshake_time)
            xlog.debug("create_ssl update ip:%s time:%d h2:%d sni:%s top:%s",
                       ip, ssl_sock.handshake_time, ssl_sock.h2, ssl_sock.sni,
                       ssl_sock.top_domain)
            ssl_sock.last_use_time = ssl_sock.create_time
            ssl_sock.received_size = 0
            ssl_sock.load = 0
            ssl_sock.host = self.sub + "." + ssl_sock.top_domain

            connect_control.report_connect_success()
            return ssl_sock
        except Exception as e:
            time_cost = time.time() - time_begin
            if time_cost < self.connect_timeout - 1:
                xlog.debug("connect %s fail:%s cost:%d ", ip, e,
                           time_cost * 1000)
            else:
                xlog.debug("%s fail:%r", ip, e)

            ip_manager.report_connect_fail(ip)
            connect_control.report_connect_fail()
            if not check_local_network.is_ok():
                time.sleep(10)
            else:
                time.sleep(1)

            return False
        finally:
            connect_control.end_connect_register(high_prior=True)
Example #4
0
    def _create_ssl_connection(self, ip_port):
        if not connect_control.allow_connect():
            time.sleep(10)
            return False

        ip = ip_port[0]
        port = ip_port[1]
        connect_control.start_connect_register(high_prior=True)

        time_begin = time.time()
        try:
            xlog.debug("try connect %s", ip)
            ssl_sock = check_ip.connect_ssl(ip, port=port, timeout=self.connect_timeout, on_close=ip_manager.ssl_closed)
            ip_manager.update_ip(ip, ssl_sock.handshake_time)
            xlog.debug("create_ssl update ip:%s time:%d h2:%d sni:%s top:%s",
                       ip, ssl_sock.handshake_time, ssl_sock.h2, ssl_sock.sni, ssl_sock.top_domain)
            ssl_sock.last_use_time = ssl_sock.create_time
            ssl_sock.received_size = 0
            ssl_sock.load = 0
            ssl_sock.host = self.sub + "." + ssl_sock.top_domain

            connect_control.report_connect_success()
            return ssl_sock
        except Exception as e:
            time_cost = time.time() - time_begin
            if time_cost < self.connect_timeout - 1:
                xlog.debug("connect %s fail:%s cost:%d ", ip, e, time_cost * 1000)
            else:
                xlog.debug("%s fail:%r", ip, e)

            ip_manager.report_connect_fail(ip)
            connect_control.report_connect_fail()
            if not check_local_network.is_ok():
                time.sleep(10)
            else:
                time.sleep(1)

            return False
        finally:
            connect_control.end_connect_register(high_prior=True)