syncmaster3 / diagnose_summary.py
aseelflihan's picture
move actual project files into root folder
1138072
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
ملف تشخيص مشكلة زر التلخيص - معالجة شاملة
"""
import subprocess
import sys
import json
import requests
import time
import os
def check_server_process():
"""التحقق من عملية الخادم"""
print("🔍 البحث عن عملية الخادم...")
try:
# البحث في العمليات الجارية
result = subprocess.run(
['tasklist', '/FI', 'IMAGENAME eq python.exe'],
capture_output=True, text=True, shell=True
)
python_processes = []
for line in result.stdout.split('\n'):
if 'python.exe' in line:
python_processes.append(line.strip())
print(f"عدد العمليات Python الجارية: {len(python_processes)}")
if python_processes:
print("✅ العمليات الموجودة:")
for proc in python_processes[:5]: # أول 5 فقط
print(f" {proc}")
return len(python_processes) > 0
except Exception as e:
print(f"❌ خطأ في فحص العمليات: {e}")
return False
def check_port_status():
"""فحص حالة المنافذ"""
print("\n🌐 فحص حالة المنافذ...")
ports_to_check = [5001, 5054, 8501]
port_status = {}
for port in ports_to_check:
try:
result = subprocess.run(
['netstat', '-an'],
capture_output=True, text=True, shell=True
)
is_listening = f':{port}' in result.stdout and 'LISTENING' in result.stdout
port_status[port] = is_listening
status_emoji = "✅" if is_listening else "❌"
print(f" {status_emoji} Port {port}: {'LISTENING' if is_listening else 'NOT LISTENING'}")
except Exception as e:
print(f" ❌ Port {port}: خطأ في الفحص - {e}")
port_status[port] = False
return port_status
def test_cors_issue():
"""اختبار مشكلة CORS"""
print("\n🔧 اختبار مشكلة CORS...")
try:
# طلب OPTIONS
response = requests.options(
'http://localhost:5001/summarize',
timeout=5
)
print(f"Status Code: {response.status_code}")
# فحص CORS headers
headers = dict(response.headers)
cors_origin = headers.get('Access-Control-Allow-Origin', 'غير موجود')
print(f"CORS Origin: '{cors_origin}'")
# تحقق من المشكلة
if ',' in cors_origin:
print("❌ مشكلة CORS: القيمة تحتوي على فواصل متعددة!")
print(" هذا يسبب الخطأ: 'multiple values *, *'")
return False
elif cors_origin == '*':
print("✅ CORS header صحيح")
return True
else:
print(f"⚠️ CORS header غير متوقع: {cors_origin}")
return False
except requests.exceptions.ConnectionError:
print("❌ لا يمكن الاتصال بالخادم - الخادم غير مشتغل")
return False
except Exception as e:
print(f"❌ خطأ في اختبار CORS: {e}")
return False
def test_summarize_functionality():
"""اختبار وظيفة التلخيص"""
print("\n🤖 اختبار وظيفة التلخيص...")
test_data = {
"text": "Hello, how are you? What are you doing today? Tell me about your work.",
"language": "arabic",
"type": "full"
}
try:
response = requests.post(
'http://localhost:5001/summarize',
json=test_data,
headers={'Content-Type': 'application/json'},
timeout=30
)
print(f"Status Code: {response.status_code}")
if response.status_code == 200:
data = response.json()
print(f"Response Keys: {list(data.keys())}")
if data.get('success'):
print("✅ التلخيص نجح!")
print(f"Summary Type: {data.get('type', 'غير محدد')}")
if 'summary' in data:
summary_preview = str(data['summary'])[:100] + "..."
print(f"Summary Preview: {summary_preview}")
return True
else:
print("⚠️ لا يوجد ملخص في الاستجابة")
return False
else:
print(f"❌ فشل التلخيص: {data.get('error', 'خطأ غير معروف')}")
return False
else:
error_text = response.text[:200]
print(f"❌ خطأ HTTP {response.status_code}: {error_text}")
return False
except requests.exceptions.Timeout:
print("❌ انتهت مهلة الطلب - الخادم بطيء أو لا يستجيب")
return False
except Exception as e:
print(f"❌ خطأ في اختبار التلخيص: {e}")
return False
def check_dependencies():
"""فحص المكتبات المطلوبة"""
print("\n📦 فحص المكتبات المطلوبة...")
required_packages = [
'flask', 'flask-cors', 'requests',
'google-generativeai', 'librosa', 'soundfile'
]
missing_packages = []
for package in required_packages:
try:
result = subprocess.run(
[sys.executable, '-c', f'import {package.replace("-", "_")}'],
capture_output=True, text=True
)
if result.returncode == 0:
print(f" ✅ {package}")
else:
print(f" ❌ {package} - غير مثبت")
missing_packages.append(package)
except Exception as e:
print(f" ❌ {package} - خطأ في الفحص: {e}")
missing_packages.append(package)
if missing_packages:
print(f"\n⚠️ المكتبات المفقودة: {', '.join(missing_packages)}")
print("تشغيل الأمر: pip install " + " ".join(missing_packages))
return False
else:
print("\n✅ جميع المكتبات مثبتة")
return True
def restart_server_suggestion():
"""اقتراحات لإعادة تشغيل الخادم"""
print("\n🔄 اقتراحات الإصلاح:")
print("1. إيقاف الخادم الحالي (Ctrl+C في التيرمينال)")
print("2. تشغيل الخادم مرة أخرى:")
print(" python recorder_server.py")
print("\n3. أو استخدام ملف البدء:")
print(" python start_debug.py")
print("\n4. التحقق من تشغيل الخادم:")
print(" curl http://localhost:5001/record")
def main():
"""الدالة الرئيسية للتشخيص"""
print("=" * 60)
print("🚀 تشخيص شامل لمشكلة زر التلخيص")
print("=" * 60)
# فحص العمليات
has_python_process = check_server_process()
# فحص المنافذ
port_status = check_port_status()
# فحص المكتبات
dependencies_ok = check_dependencies()
# إذا كان المنفذ مفتوح، اختبر CORS والتلخيص
if port_status.get(5001, False):
cors_ok = test_cors_issue()
if cors_ok:
summarize_ok = test_summarize_functionality()
else:
summarize_ok = False
print("\n❌ لا يمكن اختبار التلخيص بسبب مشكلة CORS")
else:
cors_ok = False
summarize_ok = False
print("\n❌ لا يمكن اختبار CORS/التلخيص - الخادم غير مشتغل")
# النتيجة النهائية
print("\n" + "=" * 60)
print("📊 ملخص التشخيص:")
print("=" * 60)
print(f" 📦 المكتبات: {'✅ موجودة' if dependencies_ok else '❌ مفقودة'}")
print(f" 🔧 عملية Python: {'✅ تعمل' if has_python_process else '❌ لا تعمل'}")
print(f" 🌐 المنفذ 5001: {'✅ مفتوح' if port_status.get(5001) else '❌ مغلق'}")
print(f" 🔧 CORS: {'✅ صحيح' if cors_ok else '❌ مشكلة'}")
print(f" 🤖 التلخيص: {'✅ يعمل' if summarize_ok else '❌ لا يعمل'}")
if summarize_ok:
print("\n🎉 جميع الاختبارات نجحت! المشكلة محلولة.")
elif not port_status.get(5001):
print("\n🔄 يجب تشغيل الخادم أولاً")
restart_server_suggestion()
elif not cors_ok:
print("\n🔄 مشكلة CORS - يجب إعادة تشغيل الخادم")
restart_server_suggestion()
else:
print("\n🔍 هناك مشكلة أخرى تحتاج لمزيد من التحقق")
print("=" * 60)
if __name__ == "__main__":
main()