# load_balancer.py import peer_discovery, requests, time, smart_tasks, psutil, socket from peer_discovery import PORT def send(peer, func, *args, **kw): try: r = requests.post(peer, json={"func": func, "args": list(args), "kwargs": kw}, timeout=12) return r.json() except Exception as e: return {"error": str(e)} def choose_peer(): """اختيار أفضل جهاز - أولوية LAN ثم WAN""" import socket lan_peers = [] wan_peers = [] # تصنيف الأجهزة for p in list(peer_discovery.PEERS): ip = p.split('//')[1].split(':')[0] if '//' in p else p.split(':')[0] if is_local_ip(ip): lan_peers.append(p) else: wan_peers.append(p) # أولاً: جرب الأجهزة المحلية (LAN) best_lan = find_best_peer(lan_peers) if best_lan: return best_lan # ثانياً: إذا لم تتوفر أجهزة محلية، جرب WAN if internet_available(): best_wan = find_best_peer(wan_peers) return best_wan return None def find_best_peer(peers): """العثور على أفضل جهاز من قائمة معينة""" best = None for p in peers: try: cpu = requests.get(p.replace("/run", "/cpu"), timeout=2).json()["usage"] best = (p, cpu) if best is None or cpu < best[1] else best except: continue return best[0] if best else None def is_local_ip(ip): """فحص إذا كان IP محلي""" return ( ip.startswith('192.168.') or ip.startswith('10.') or ip.startswith('172.') or ip == '127.0.0.1' ) def internet_available(): """فحص توفر الإنترنت""" try: socket.create_connection(("8.8.8.8", 53), timeout=3) return True except: return False while True: peer = choose_peer() if peer: print(f"\n🛰️ إرسال إلى {peer}") res = send(peer, "prime_calculation", 30000) else: print("\n⚙️ لا أقران؛ العمل محليّ على", socket.gethostname()) res = smart_tasks.prime_calculation(30000) print("🔹 النتيجة (جزئية):", str(res)[:120]) time.sleep(10)