|
|
import asyncio |
|
|
import time |
|
|
|
|
|
|
|
|
MARKET_STATE_OK = True |
|
|
|
|
|
class StateManager: |
|
|
def __init__(self): |
|
|
self.market_analysis_lock = asyncio.Lock() |
|
|
self.trade_analysis_lock = asyncio.Lock() |
|
|
self.data_processing_lock = asyncio.Lock() |
|
|
self.initialization_complete = False |
|
|
self.services_initialized = { |
|
|
'r2_service': False, |
|
|
'data_manager': False, |
|
|
'llm_service': False, |
|
|
'learning_engine': False, |
|
|
'trade_manager': False, |
|
|
'sentiment_analyzer': False |
|
|
} |
|
|
self.service_errors = {} |
|
|
self.last_health_check = time.time() |
|
|
|
|
|
async def wait_for_initialization(self, timeout=30): |
|
|
"""انتظار اكتمال تهيئة الخدمات""" |
|
|
start_time = time.time() |
|
|
while not self.initialization_complete and (time.time() - start_time) < timeout: |
|
|
await asyncio.sleep(1) |
|
|
return self.initialization_complete |
|
|
|
|
|
def set_service_initialized(self, service_name): |
|
|
"""تعيين خدمة كمهيأة""" |
|
|
self.services_initialized[service_name] = True |
|
|
if all(self.services_initialized.values()): |
|
|
self.initialization_complete = True |
|
|
print("🎯 جميع الخدمات مهيأة بالكامل") |
|
|
|
|
|
def set_service_error(self, service_name, error): |
|
|
"""تسجيل خطأ في الخدمة""" |
|
|
self.service_errors[service_name] = { |
|
|
'error': error, |
|
|
'timestamp': time.time() |
|
|
} |
|
|
print(f"❌ خطأ في الخدمة {service_name}: {error}") |
|
|
|
|
|
def get_service_health(self, service_name): |
|
|
"""الحصول على صحة الخدمة""" |
|
|
if service_name not in self.services_initialized: |
|
|
return {'status': 'unknown', 'initialized': False} |
|
|
|
|
|
return { |
|
|
'status': 'healthy' if service_name not in self.service_errors else 'error', |
|
|
'initialized': self.services_initialized[service_name], |
|
|
'last_error': self.service_errors.get(service_name) |
|
|
} |
|
|
|
|
|
def get_overall_health(self): |
|
|
"""الحصول على الصحة العامة للنظام""" |
|
|
initialized_services = sum(self.services_initialized.values()) |
|
|
total_services = len(self.services_initialized) |
|
|
error_services = len(self.service_errors) |
|
|
|
|
|
return { |
|
|
'initialization_complete': self.initialization_complete, |
|
|
'initialized_services': f"{initialized_services}/{total_services}", |
|
|
'services_with_errors': error_services, |
|
|
'all_services_healthy': self.initialization_complete and error_services == 0, |
|
|
'last_health_check': self.last_health_check |
|
|
} |
|
|
|
|
|
async def acquire_market_lock(self): |
|
|
"""الحصول على قفل تحليل السوق""" |
|
|
return await self.market_analysis_lock.acquire() |
|
|
|
|
|
def release_market_lock(self): |
|
|
"""تحرير قفل تحليل السوق""" |
|
|
if self.market_analysis_lock.locked(): |
|
|
self.market_analysis_lock.release() |
|
|
|
|
|
async def acquire_trade_lock(self): |
|
|
"""الحصول على قفل تحليل الصفقات""" |
|
|
return await self.trade_analysis_lock.acquire() |
|
|
|
|
|
def release_trade_lock(self): |
|
|
"""تحرير قفل تحليل الصفقات""" |
|
|
if self.trade_analysis_lock.locked(): |
|
|
self.trade_analysis_lock.release() |
|
|
|
|
|
async def acquire_data_lock(self): |
|
|
"""الحصول على قفل معالجة البيانات""" |
|
|
return await self.data_processing_lock.acquire() |
|
|
|
|
|
def release_data_lock(self): |
|
|
"""تحرير قفل معالجة البيانات""" |
|
|
if self.data_processing_lock.locked(): |
|
|
self.data_processing_lock.release() |
|
|
|
|
|
|
|
|
state_manager = StateManager() |