def __init__(self, server, api_key, agent_version, quiet=False, request_deadline=60.0, ca_file=None): """Initializes the connection. This does not actually try to connect to the server. @param server: The URL for the server to send requests to, such as https://agent.scalyr.com @param api_key: The write logs key to use to authenticate all requests from this agent to scalyr. It both authenticates the requests and identifies which account it belongs to. @param agent_version: The agent version number, which is included in request headers sent to the server. @param quiet: If True, will not log non-error information. @param request_deadline: The maximum time to wait for all requests in seconds. @param ca_file: The path to the file containing the certificates for the trusted certificate authority roots. This is used for the SSL connections to verify the connection is to Scalyr. @type server: str @type api_key: str @type agent_version: str @type quiet: bool @type request_deadline: float @type ca_file: str """ if not quiet: log.info('Using "%s" as address for scalyr servers' % server) # Verify the server address looks right. parsed_server = re.match('^(http://|https://|)([^:]*)(:\d+|)$', server.lower()) if parsed_server is None: raise Exception('Could not parse server address "%s"' % server) # The full URL address self.__full_address = server # The host for the server. self.__host = parsed_server.group(2) # Whether or not the connection uses SSL. For production use, this should always be true. We only # use non-SSL when testing against development versions of the Scalyr server. self.__use_ssl = parsed_server.group(1) == 'https://' # Determine the port, defaulting to the right one based on protocol if not given. if parsed_server.group(3) != '': self.__port = int(parsed_server.group(3)[1:]) elif self.__use_ssl: self.__port = 443 else: self.__port = 80 # The HTTPConnection object that has been opened to the servers, if one has been opened. self.__connection = None self.__api_key = api_key self.__session_id = scalyr_util.create_unique_id() # The time of the last success. self.__last_success = None # The version number of the installed agent self.__agent_version = agent_version # The last time the connection was closed, if any. self.__last_connection_close = None # We create a few headers ahead of time so that we don't have to recreate them each time we need them. self.__standard_headers = { 'Connection': 'Keep-Alive', 'Accept': 'application/json', 'User-Agent': ScalyrClientSession.__get_user_agent(agent_version) } # The number of seconds to wait for a blocking operation on the connection before considering it to have # timed out. self.__request_deadline = request_deadline # The total number of RPC requests sent. self.total_requests_sent = 0 # The total number of RPC requests that failed. self.total_requests_failed = 0 # The total number of bytes sent over the network. self.total_request_bytes_sent = 0 # The total number of bytes received. self.total_response_bytes_received = 0 # The total number of secs spent waiting for a responses (so average latency can be calculated by dividing # this number by self.total_requests_sent). This includes connection establishment time. self.total_request_latency_secs = 0 # The total number of HTTP connections successfully created. self.total_connections_created = 0 # The path the file containing the certs for the root certificate authority to use for verifying the SSL # connection to Scalyr. If this is None, then server certificate verification is disabled, and we are # susceptible to man-in-the-middle attacks. self.__ca_file = ca_file
def test_uuid(self): first = scalyr_util.create_unique_id() second = scalyr_util.create_unique_id() self.assertTrue(len(first) > 0) self.assertTrue(len(second) > 0) self.assertNotEqual(first, second)
def test_uuid(self): first = scalyr_util.create_unique_id() second = scalyr_util.create_unique_id() self.assertTrue(len(first) > 0) self.assertTrue(len(second) > 0) self.assertNotEqual(first, second)
def __init__(self, server, api_key, agent_version, quiet=False, request_deadline=60.0, ca_file=None): """Initializes the connection. This does not actually try to connect to the server. @param server: The URL for the server to send requests to, such as https://agent.scalyr.com @param api_key: The write logs key to use to authenticate all requests from this agent to scalyr. It both authenticates the requests and identifies which account it belongs to. @param agent_version: The agent version number, which is included in request headers sent to the server. @param quiet: If True, will not log non-error information. @param request_deadline: The maximum time to wait for all requests in seconds. @param ca_file: The path to the file containing the certificates for the trusted certificate authority roots. This is used for the SSL connections to verify the connection is to Scalyr. @type server: str @type api_key: str @type agent_version: str @type quiet: bool @type request_deadline: float @type ca_file: str """ if not quiet: log.info('Using "%s" as address for scalyr servers' % server) # Verify the server address looks right. parsed_server = re.match('^(http://|https://|)([^:]*)(:\d+|)$', server.lower()) if parsed_server is None: raise Exception('Could not parse server address "%s"' % server) # The full URL address self.__full_address = server # The host for the server. self.__host = parsed_server.group(2) # Whether or not the connection uses SSL. For production use, this should always be true. We only # use non-SSL when testing against development versions of the Scalyr server. self.__use_ssl = parsed_server.group(1) == 'https://' # Determine the port, defaulting to the right one based on protocol if not given. if parsed_server.group(3) != '': self.__port = int(parsed_server.group(3)[1:]) elif self.__use_ssl: self.__port = 443 else: self.__port = 80 # The HTTPConnection object that has been opened to the servers, if one has been opened. self.__connection = None self.__api_key = api_key self.__session_id = scalyr_util.create_unique_id() # The time of the last success. self.__last_success = None # The last time the connection was closed, if any. self.__last_connection_close = None # We create a few headers ahead of time so that we don't have to recreate them each time we need them. self.__standard_headers = { 'Connection': 'Keep-Alive', 'Accept': 'application/json', 'User-Agent': ScalyrClientSession.__get_user_agent(agent_version) } # The number of seconds to wait for a blocking operation on the connection before considering it to have # timed out. self.__request_deadline = request_deadline # The total number of RPC requests sent. self.total_requests_sent = 0 # The total number of RPC requests that failed. self.total_requests_failed = 0 # The total number of bytes sent over the network. self.total_request_bytes_sent = 0 # The total number of bytes received. self.total_response_bytes_received = 0 # The total number of secs spent waiting for a responses (so average latency can be calculated by dividing # this number by self.total_requests_sent). This includes connection establishment time. self.total_request_latency_secs = 0 # The total number of HTTP connections successfully created. self.total_connections_created = 0 # The path the file containing the certs for the root certificate authority to use for verifying the SSL # connection to Scalyr. If this is None, then server certificate verification is disabled, and we are # susceptible to man-in-the-middle attacks. self.__ca_file = ca_file