rabbitmq implemented and tested

This commit is contained in:
2025-08-17 21:14:46 +03:00
parent 9543d136aa
commit 61529f7d94
43 changed files with 5433 additions and 315 deletions

View File

@@ -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)}")

View File

@@ -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:

View File

@@ -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