AhmadA82 commited on
Commit
09e62e4
·
verified ·
1 Parent(s): e51c6d4
Files changed (1) hide show
  1. monitor.py +28 -9
monitor.py CHANGED
@@ -5,38 +5,55 @@ import logging
5
  from collections import deque
6
  import os
7
  import tracemalloc
 
 
8
 
9
- # إنشاء logger خاص لهذه الوحدة
10
  logger = logging.getLogger("monitor")
11
  logger.setLevel(logging.DEBUG)
12
 
13
- # إعداد ملف السجل
14
  base_dir = os.path.dirname(os.path.abspath(__file__))
15
  log_dir = os.path.join(base_dir, "data")
16
  os.makedirs(log_dir, exist_ok=True)
17
  log_path = os.path.join(log_dir, "monitor.log")
18
 
19
- # إعداد handler لملف السجل
20
  file_handler = logging.FileHandler(log_path)
21
  file_handler.setLevel(logging.DEBUG)
22
  formatter = logging.Formatter("📁 [%(asctime)s] [%(levelname)s] %(message)s")
23
  file_handler.setFormatter(formatter)
24
  logger.addHandler(file_handler)
25
 
26
- # إعداد handler للوحدة الأساسية (اختياري)
27
  stream_handler = logging.StreamHandler()
28
  stream_handler.setFormatter(logging.Formatter("🪵 [%(asctime)s] [%(levelname)s] %(message)s"))
29
  logger.addHandler(stream_handler)
30
 
31
- # تفعيل تتبع الذاكرة
32
  tracemalloc.start()
33
  logger.info("🔍 بدأ تتبع الذاكرة")
34
 
35
- # تخزين آخر 10 قياسات
36
  cpu_history = deque(maxlen=10)
37
  mem_history = deque(maxlen=10)
38
  current_metrics = {'cpu': 0, 'memory': 0}
39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  def monitor_resources():
41
  counter = 0
42
  logger.info("🔁 بدأ تشغيل مراقبة الموارد")
@@ -52,10 +69,11 @@ def monitor_resources():
52
  cpu_history.append(cpu_percent)
53
  mem_history.append(mem_percent)
54
 
55
- logger.info(f"🧠 الذاكرة - RSS: {mem_info.rss / 1024**2:.2f} MB | VMS: {mem_info.vms / 1024**2:.2f} MB")
56
  current, peak = tracemalloc.get_traced_memory()
57
- logger.info(f"📊 tracemalloc - الحالي: {current / 1024**2:.2f} MB | الأعلى: {peak / 1024**2:.2f} MB")
58
 
 
59
  counter += 1
60
  if counter % 12 == 0:
61
  snapshot = tracemalloc.take_snapshot()
@@ -63,6 +81,7 @@ def monitor_resources():
63
  logger.info("📌 أعلى 5 أسطر استهلاكًا للذاكرة:")
64
  for stat in top_stats[:5]:
65
  logger.info(f" {stat}")
 
66
 
67
  except Exception as e:
68
  logger.exception(f"❌ استثناء في مراقبة الموارد: {str(e)}")
@@ -80,4 +99,4 @@ def get_current_metrics():
80
  def start_monitoring_thread():
81
  thread = threading.Thread(target=monitor_resources, daemon=True)
82
  thread.start()
83
- logger.info("✅ تم بدء مراقبة الموارد في خيط منفصل")
 
5
  from collections import deque
6
  import os
7
  import tracemalloc
8
+ import gc
9
+ import sys
10
 
11
+ # إنشاء logger
12
  logger = logging.getLogger("monitor")
13
  logger.setLevel(logging.DEBUG)
14
 
 
15
  base_dir = os.path.dirname(os.path.abspath(__file__))
16
  log_dir = os.path.join(base_dir, "data")
17
  os.makedirs(log_dir, exist_ok=True)
18
  log_path = os.path.join(log_dir, "monitor.log")
19
 
 
20
  file_handler = logging.FileHandler(log_path)
21
  file_handler.setLevel(logging.DEBUG)
22
  formatter = logging.Formatter("📁 [%(asctime)s] [%(levelname)s] %(message)s")
23
  file_handler.setFormatter(formatter)
24
  logger.addHandler(file_handler)
25
 
 
26
  stream_handler = logging.StreamHandler()
27
  stream_handler.setFormatter(logging.Formatter("🪵 [%(asctime)s] [%(levelname)s] %(message)s"))
28
  logger.addHandler(stream_handler)
29
 
30
+ # تتبع الذاكرة
31
  tracemalloc.start()
32
  logger.info("🔍 بدأ تتبع الذاكرة")
33
 
 
34
  cpu_history = deque(maxlen=10)
35
  mem_history = deque(maxlen=10)
36
  current_metrics = {'cpu': 0, 'memory': 0}
37
 
38
+ def analyze_memory_objects():
39
+ try:
40
+ objects = gc.get_objects()
41
+ logger.info(f"📦 عدد كائنات بايثون: {len(objects)}")
42
+ sizes = {}
43
+ for obj in objects:
44
+ try:
45
+ key = type(obj).__name__
46
+ sizes[key] = sizes.get(key, 0) + sys.getsizeof(obj)
47
+ except Exception:
48
+ continue
49
+
50
+ top = sorted(sizes.items(), key=lambda x: x[1], reverse=True)[:10]
51
+ logger.info("🧮 أعلى 10 أنواع من الكائنات استهلاكًا:")
52
+ for name, size in top:
53
+ logger.info(f"🔹 {name}: {size / 1024 / 1024:.2f} MB")
54
+ except Exception as e:
55
+ logger.error(f"❌ خطأ أثناء تحليل كائنات الذاكرة: {str(e)}")
56
+
57
  def monitor_resources():
58
  counter = 0
59
  logger.info("🔁 بدأ تشغيل مراقبة الموارد")
 
69
  cpu_history.append(cpu_percent)
70
  mem_history.append(mem_percent)
71
 
72
+ logger.info(f"🧠 RSS: {mem_info.rss / 1024**2:.2f} MB | VMS: {mem_info.vms / 1024**2:.2f} MB")
73
  current, peak = tracemalloc.get_traced_memory()
74
+ logger.info(f"📊 tracemalloc: الحالي = {current / 1024**2:.2f} MB | الأعلى = {peak / 1024**2:.2f} MB")
75
 
76
+ # كل دقيقة: تحليل إضافي
77
  counter += 1
78
  if counter % 12 == 0:
79
  snapshot = tracemalloc.take_snapshot()
 
81
  logger.info("📌 أعلى 5 أسطر استهلاكًا للذاكرة:")
82
  for stat in top_stats[:5]:
83
  logger.info(f" {stat}")
84
+ analyze_memory_objects()
85
 
86
  except Exception as e:
87
  logger.exception(f"❌ استثناء في مراقبة الموارد: {str(e)}")
 
99
  def start_monitoring_thread():
100
  thread = threading.Thread(target=monitor_resources, daemon=True)
101
  thread.start()
102
+ logger.info("✅ تم بدء مراقبة الموارد في خيط منفصل")