rabbitmq implemented and tested
This commit is contained in:
@@ -37,14 +37,14 @@ def initialize_service():
|
||||
# Create singleton instances directly
|
||||
logger.info("Creating Redis handler singleton")
|
||||
redis_handler = MailReaderService()
|
||||
|
||||
|
||||
logger.info("Creating EmailReaderService")
|
||||
email_service = EmailReaderService(IsBankConfig())
|
||||
|
||||
|
||||
# Initialize email service and connect
|
||||
logger.info("Connecting to email service")
|
||||
email_service.login_and_connect()
|
||||
|
||||
|
||||
# Create email service runner with the singletons
|
||||
logger.info("Creating EmailServiceRunner")
|
||||
runner = EmailServiceRunner(redis_handler=redis_handler, email_service=email_service)
|
||||
@@ -66,14 +66,12 @@ def initialize_service():
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
logger.info("Starting IsBank Email Service")
|
||||
print(f"Starting Service Mail Reader.")
|
||||
runner = initialize_service()
|
||||
normal_sleep_time = 10
|
||||
error_sleep_time = 30
|
||||
max_consecutive_errors = 5
|
||||
extended_error_sleep = 120
|
||||
consecutive_errors = 0
|
||||
consecutive_errors, normal_sleep_time, error_sleep_time = 0, 10, 30
|
||||
max_consecutive_errors, extended_error_sleep = 5, 120
|
||||
|
||||
while True:
|
||||
try:
|
||||
@@ -96,6 +94,7 @@ if __name__ == "__main__":
|
||||
sleep(extended_error_sleep)
|
||||
else:
|
||||
sleep(error_sleep_time)
|
||||
|
||||
except socket.error as e:
|
||||
consecutive_errors += 1
|
||||
logger.error(f"Email connection error (attempt {consecutive_errors}): {str(e)}")
|
||||
@@ -108,12 +107,13 @@ if __name__ == "__main__":
|
||||
logger.info("Successfully re-established email connection")
|
||||
except Exception as email_retry_error:
|
||||
logger.error(f"Failed to re-establish email connection: {str(email_retry_error)}")
|
||||
|
||||
|
||||
if consecutive_errors >= max_consecutive_errors:
|
||||
logger.warning(f"Hit {max_consecutive_errors} consecutive email errors, taking longer pause")
|
||||
sleep(extended_error_sleep)
|
||||
else:
|
||||
sleep(error_sleep_time)
|
||||
|
||||
except Exception as e:
|
||||
consecutive_errors += 1
|
||||
logger.error(f"Unexpected error (attempt {consecutive_errors}): {str(e)}")
|
||||
|
||||
@@ -455,7 +455,6 @@ class EmailServiceRunner:
|
||||
redis_handler: Redis handler for Redis operations
|
||||
email_service: Email service for email operations
|
||||
"""
|
||||
# Use MailReaderService singleton for Redis operations
|
||||
self.redis_handler = redis_handler
|
||||
self.email_service = email_service
|
||||
self.mails = None
|
||||
@@ -543,7 +542,7 @@ class EmailServiceRunner:
|
||||
except Exception as e:
|
||||
logger.error(f"Error processing email {mail_id}: {str(e)}")
|
||||
continue
|
||||
|
||||
|
||||
try:
|
||||
self.email_service.commit()
|
||||
except Exception as e:
|
||||
|
||||
@@ -84,6 +84,11 @@ class PrismaService:
|
||||
while self._loop is None:
|
||||
time.sleep(0.005)
|
||||
|
||||
async def _lock(self):
|
||||
lock = asyncio.Lock()
|
||||
async with lock:
|
||||
return
|
||||
|
||||
async def _connect(self) -> Prisma:
|
||||
if self._client is not None:
|
||||
return self._client
|
||||
@@ -167,7 +172,7 @@ class PrismaService:
|
||||
result = await table_selected.create(data=data, include=include)
|
||||
# print(f"[{datetime.now()}] Create operation completed in {time.time() - start:.2f}s")
|
||||
return result
|
||||
|
||||
|
||||
async def _a_update(self, table: str, where: dict, data: dict, include: Optional[dict] = None) -> Any:
|
||||
start = time.time()
|
||||
async with self._asession() as db:
|
||||
@@ -207,7 +212,7 @@ class PrismaService:
|
||||
result = await table_selected.find_unique(where=query, include=include)
|
||||
# print(f"[{datetime.now()}] Find unique query completed in {time.time() - start:.2f}s")
|
||||
return result
|
||||
|
||||
|
||||
async def _a_find_unique_or_throw(self, table: str, query: dict, include: Optional[dict] = None) -> Any:
|
||||
start = time.time()
|
||||
async with self._asession() as db:
|
||||
@@ -229,7 +234,7 @@ class PrismaService:
|
||||
if select and result:
|
||||
result = {k: v for k, v in result if k in select}
|
||||
return result
|
||||
|
||||
|
||||
def find_many(
|
||||
self, table: str, query: Optional[dict] = None, take: int = None, skip: int = None,
|
||||
order: Optional[list[dict]] = None, select: Optional[dict] = None, include: Optional[dict] = None
|
||||
|
||||
Reference in New Issue
Block a user