#!/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()