Revert "fix: roll back to unique session per request"

This reverts commit 5a78ca97bd1eeeb8de6d96a18aa9f1a2d51869b6.
This commit is contained in:
bennykok 2024-09-17 20:26:39 -07:00
parent 4927d81e73
commit b8dded1535

View File

@ -28,27 +28,27 @@ from aiohttp import web, ClientSession, ClientError, ClientTimeout
import atexit import atexit
# Global session # Global session
# client_session = None client_session = None
# def create_client_session(): # def create_client_session():
# global client_session # global client_session
# if client_session is None: # if client_session is None:
# client_session = aiohttp.ClientSession() # client_session = aiohttp.ClientSession()
# async def ensure_client_session(): async def ensure_client_session():
# global client_session global client_session
# if client_session is None: if client_session is None:
# client_session = aiohttp.ClientSession() client_session = aiohttp.ClientSession()
# async def cleanup(): async def cleanup():
# global client_session global client_session
# if client_session: if client_session:
# await client_session.close() await client_session.close()
def exit_handler(): def exit_handler():
print("Exiting the application. Initiating cleanup...") print("Exiting the application. Initiating cleanup...")
# loop = asyncio.get_event_loop() loop = asyncio.get_event_loop()
# loop.run_until_complete(cleanup()) loop.run_until_complete(cleanup())
atexit.register(exit_handler) atexit.register(exit_handler)
@ -60,63 +60,62 @@ print(f"max_retries: {max_retries}, retry_delay_multiplier: {retry_delay_multipl
import time import time
async def async_request_with_retry(method, url, disable_timeout=False, token=None, **kwargs): async def async_request_with_retry(method, url, disable_timeout=False, token=None, **kwargs):
# global client_session global client_session
# await ensure_client_session() await ensure_client_session()
async with aiohttp.ClientSession() as client_session: retry_delay = 1 # Start with 1 second delay
retry_delay = 1 # Start with 1 second delay initial_timeout = 5 # 5 seconds timeout for the initial connection
initial_timeout = 5 # 5 seconds timeout for the initial connection
start_time = time.time() start_time = time.time()
for attempt in range(max_retries): for attempt in range(max_retries):
try: try:
if not disable_timeout: if not disable_timeout:
timeout = ClientTimeout(total=None, connect=initial_timeout) timeout = ClientTimeout(total=None, connect=initial_timeout)
kwargs['timeout'] = timeout kwargs['timeout'] = timeout
if token is not None: if token is not None:
if 'headers' not in kwargs: if 'headers' not in kwargs:
kwargs['headers'] = {} kwargs['headers'] = {}
kwargs['headers']['Authorization'] = f"Bearer {token}" kwargs['headers']['Authorization'] = f"Bearer {token}"
request_start = time.time() request_start = time.time()
async with client_session.request(method, url, **kwargs) as response: async with client_session.request(method, url, **kwargs) as response:
request_end = time.time() request_end = time.time()
logger.info(f"Request attempt {attempt + 1} took {request_end - request_start:.2f} seconds") logger.info(f"Request attempt {attempt + 1} took {request_end - request_start:.2f} seconds")
if response.status != 200: if response.status != 200:
error_body = await response.text() error_body = await response.text()
logger.error(f"Request failed with status {response.status} and body {error_body}") logger.error(f"Request failed with status {response.status} and body {error_body}")
# raise Exception(f"Request failed with status {response.status}") # raise Exception(f"Request failed with status {response.status}")
response.raise_for_status() response.raise_for_status()
if method.upper() == 'GET': if method.upper() == 'GET':
await response.read() await response.read()
total_time = time.time() - start_time total_time = time.time() - start_time
logger.info(f"Request succeeded after {total_time:.2f} seconds (attempt {attempt + 1}/{max_retries})") logger.info(f"Request succeeded after {total_time:.2f} seconds (attempt {attempt + 1}/{max_retries})")
return response return response
except asyncio.TimeoutError: except asyncio.TimeoutError:
logger.warning(f"Request timed out after {initial_timeout} seconds (attempt {attempt + 1}/{max_retries})") logger.warning(f"Request timed out after {initial_timeout} seconds (attempt {attempt + 1}/{max_retries})")
except ClientError as e: except ClientError as e:
end_time = time.time() end_time = time.time()
logger.error(f"Request failed (attempt {attempt + 1}/{max_retries}): {e}") logger.error(f"Request failed (attempt {attempt + 1}/{max_retries}): {e}")
logger.error(f"Time taken for failed attempt: {end_time - request_start:.2f} seconds") logger.error(f"Time taken for failed attempt: {end_time - request_start:.2f} seconds")
logger.error(f"Total time elapsed: {end_time - start_time:.2f} seconds") logger.error(f"Total time elapsed: {end_time - start_time:.2f} seconds")
# Log the response body for ClientError as well # Log the response body for ClientError as well
if hasattr(e, 'response') and e.response is not None: if hasattr(e, 'response') and e.response is not None:
error_body = await e.response.text() error_body = await e.response.text()
logger.error(f"Error response body: {error_body}") logger.error(f"Error response body: {error_body}")
if attempt == max_retries - 1: if attempt == max_retries - 1:
logger.error(f"Request failed after {max_retries} attempts: {e}") logger.error(f"Request failed after {max_retries} attempts: {e}")
raise raise
await asyncio.sleep(retry_delay) await asyncio.sleep(retry_delay)
retry_delay *= retry_delay_multiplier retry_delay *= retry_delay_multiplier
total_time = time.time() - start_time total_time = time.time() - start_time
raise Exception(f"Request failed after {max_retries} attempts and {total_time:.2f} seconds") raise Exception(f"Request failed after {max_retries} attempts and {total_time:.2f} seconds")
from logging import basicConfig, getLogger from logging import basicConfig, getLogger