File size: 3,907 Bytes
f047b93
 
b3d1cab
f047b93
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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()

# إنشاء نسخة عامة من StateManager
state_manager = StateManager()