mirror of
https://github.com/varun-r-mallya/py-libp2p.git
synced 2026-02-12 16:10:57 +00:00
feat: add logging for mDNS peer discovery and update dependencies
This commit is contained in:
@ -1,3 +1,4 @@
|
|||||||
|
import logging
|
||||||
import secrets
|
import secrets
|
||||||
|
|
||||||
import multiaddr
|
import multiaddr
|
||||||
@ -12,9 +13,17 @@ from libp2p.crypto.secp256k1 import (
|
|||||||
)
|
)
|
||||||
from libp2p.discovery.events.peerDiscovery import peerDiscovery
|
from libp2p.discovery.events.peerDiscovery import peerDiscovery
|
||||||
|
|
||||||
|
logger = logging.getLogger("libp2p.example.discovery.mdns")
|
||||||
|
logger.setLevel(logging.INFO)
|
||||||
|
handler = logging.StreamHandler()
|
||||||
|
handler.setFormatter(
|
||||||
|
logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
|
||||||
|
)
|
||||||
|
logger.addHandler(handler)
|
||||||
|
|
||||||
def customFunctoion(peerinfo: PeerInfo):
|
|
||||||
print("Printing peer info from demo file", repr(peerinfo))
|
def onPeerDiscovery(peerinfo: PeerInfo):
|
||||||
|
logger.info(f"Discovered: {peerinfo.peer_id}")
|
||||||
|
|
||||||
|
|
||||||
async def main():
|
async def main():
|
||||||
@ -24,17 +33,17 @@ async def main():
|
|||||||
|
|
||||||
# Listen on a random TCP port
|
# Listen on a random TCP port
|
||||||
listen_addr = multiaddr.Multiaddr("/ip4/0.0.0.0/tcp/0")
|
listen_addr = multiaddr.Multiaddr("/ip4/0.0.0.0/tcp/0")
|
||||||
peerDiscovery.register_peer_discovered_handler(customFunctoion)
|
peerDiscovery.register_peer_discovered_handler(onPeerDiscovery)
|
||||||
# Enable mDNS discovery
|
# Enable mDNS discovery
|
||||||
|
logger.info("Starting peer Discovery")
|
||||||
host = new_host(key_pair=key_pair, enable_mDNS=True)
|
host = new_host(key_pair=key_pair, enable_mDNS=True)
|
||||||
|
await trio.sleep(5)
|
||||||
async with host.run(listen_addrs=[listen_addr]):
|
async with host.run(listen_addrs=[listen_addr]):
|
||||||
# Print discovered peers via mDNS
|
|
||||||
try:
|
try:
|
||||||
while True:
|
while True:
|
||||||
await trio.sleep(100)
|
await trio.sleep(100)
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
print("Exiting...")
|
logger.info("Exiting...")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
@ -24,11 +24,3 @@ class PeerDiscovery:
|
|||||||
|
|
||||||
|
|
||||||
peerDiscovery = PeerDiscovery()
|
peerDiscovery = PeerDiscovery()
|
||||||
|
|
||||||
|
|
||||||
# async def peerDiscoveryHandler(peerInfo: PeerInfo) -> None:
|
|
||||||
# await trio.sleep(5) # Simulate some processing delay
|
|
||||||
# # print("Discovered peer is", peerInfo.peer_id)
|
|
||||||
|
|
||||||
|
|
||||||
# peerDiscovery.register_peer_discovered_handler(peerDiscoveryHandler)
|
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import logging
|
||||||
import socket
|
import socket
|
||||||
|
|
||||||
from zeroconf import (
|
from zeroconf import (
|
||||||
@ -5,6 +6,8 @@ from zeroconf import (
|
|||||||
Zeroconf,
|
Zeroconf,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
logger = logging.getLogger("libp2p.discovery.mdns.broadcaster")
|
||||||
|
|
||||||
|
|
||||||
class PeerBroadcaster:
|
class PeerBroadcaster:
|
||||||
"""
|
"""
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import logging
|
||||||
import socket
|
import socket
|
||||||
|
|
||||||
from zeroconf import (
|
from zeroconf import (
|
||||||
@ -12,6 +13,8 @@ from libp2p.discovery.events.peerDiscovery import peerDiscovery
|
|||||||
from libp2p.peer.id import ID
|
from libp2p.peer.id import ID
|
||||||
from libp2p.peer.peerinfo import PeerInfo
|
from libp2p.peer.peerinfo import PeerInfo
|
||||||
|
|
||||||
|
logger = logging.getLogger("libp2p.discovery.mdns.listner")
|
||||||
|
|
||||||
|
|
||||||
class PeerListener(ServiceListener):
|
class PeerListener(ServiceListener):
|
||||||
"""mDNS listener — now a true ServiceListener subclass."""
|
"""mDNS listener — now a true ServiceListener subclass."""
|
||||||
@ -41,12 +44,12 @@ class PeerListener(ServiceListener):
|
|||||||
self.discovered_services[name] = peer_info.peer_id
|
self.discovered_services[name] = peer_info.peer_id
|
||||||
self.peerstore.add_addrs(peer_info.peer_id, peer_info.addrs, 10)
|
self.peerstore.add_addrs(peer_info.peer_id, peer_info.addrs, 10)
|
||||||
peerDiscovery.emit_peer_discovered(peer_info)
|
peerDiscovery.emit_peer_discovered(peer_info)
|
||||||
print("Discovered Peer:", peer_info.peer_id)
|
logger.debug("Discovered Peer:", peer_info.peer_id)
|
||||||
|
|
||||||
def remove_service(self, zc: Zeroconf, type_: str, name: str) -> None:
|
def remove_service(self, zc: Zeroconf, type_: str, name: str) -> None:
|
||||||
peer_id = self.discovered_services.pop(name)
|
peer_id = self.discovered_services.pop(name)
|
||||||
self.peerstore.clear_addrs(peer_id)
|
self.peerstore.clear_addrs(peer_id)
|
||||||
print(f"Removed Peer: {peer_id}")
|
logger.debug(f"Removed Peer: {peer_id}")
|
||||||
|
|
||||||
def update_service(self, zc: Zeroconf, type_: str, name: str) -> None:
|
def update_service(self, zc: Zeroconf, type_: str, name: str) -> None:
|
||||||
info = zc.get_service_info(type_, name, timeout=5000)
|
info = zc.get_service_info(type_, name, timeout=5000)
|
||||||
@ -56,7 +59,7 @@ class PeerListener(ServiceListener):
|
|||||||
if peer_info:
|
if peer_info:
|
||||||
self.peerstore.clear_addrs(peer_info.peer_id)
|
self.peerstore.clear_addrs(peer_info.peer_id)
|
||||||
self.peerstore.add_addrs(peer_info.peer_id, peer_info.addrs, 10)
|
self.peerstore.add_addrs(peer_info.peer_id, peer_info.addrs, 10)
|
||||||
print("Updated Peer", peer_info.peer_id)
|
logger.debug("Updated Peer", peer_info.peer_id)
|
||||||
|
|
||||||
def _process_discovered_service(
|
def _process_discovered_service(
|
||||||
self, zeroconf: Zeroconf, type_: str, name: str
|
self, zeroconf: Zeroconf, type_: str, name: str
|
||||||
@ -67,7 +70,7 @@ class PeerListener(ServiceListener):
|
|||||||
peer_info = self._extract_peer_info(info)
|
peer_info = self._extract_peer_info(info)
|
||||||
if peer_info:
|
if peer_info:
|
||||||
self.peerstore.add_addrs(peer_info.peer_id, peer_info.addrs, 10)
|
self.peerstore.add_addrs(peer_info.peer_id, peer_info.addrs, 10)
|
||||||
print("Discovered:", peer_info.peer_id)
|
logger.debug("Discovered:", peer_info.peer_id)
|
||||||
|
|
||||||
def _extract_peer_info(self, info: ServiceInfo) -> PeerInfo | None:
|
def _extract_peer_info(self, info: ServiceInfo) -> PeerInfo | None:
|
||||||
try:
|
try:
|
||||||
|
|||||||
@ -4,6 +4,8 @@ Conforms to https://github.com/libp2p/specs/blob/master/discovery/mdns.md
|
|||||||
Uses zeroconf for mDNS broadcast/listen. Async operations use trio.
|
Uses zeroconf for mDNS broadcast/listen. Async operations use trio.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
from zeroconf import (
|
from zeroconf import (
|
||||||
Zeroconf,
|
Zeroconf,
|
||||||
)
|
)
|
||||||
@ -22,6 +24,8 @@ from .utils import (
|
|||||||
stringGen,
|
stringGen,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
logger = logging.getLogger("libp2p.discovery.mdns")
|
||||||
|
|
||||||
SERVICE_TYPE = "_p2p._udp.local."
|
SERVICE_TYPE = "_p2p._udp.local."
|
||||||
MCAST_PORT = 5353
|
MCAST_PORT = 5353
|
||||||
MCAST_ADDR = "224.0.0.251"
|
MCAST_ADDR = "224.0.0.251"
|
||||||
@ -56,7 +60,9 @@ class MDNSDiscovery:
|
|||||||
|
|
||||||
def start(self) -> None:
|
def start(self) -> None:
|
||||||
"""Register this peer and start listening for others."""
|
"""Register this peer and start listening for others."""
|
||||||
print(f"Starting mDNS discovery for peer {self.peer_id} on port {self.port}")
|
logger.debug(
|
||||||
|
f"Starting mDNS discovery for peer {self.peer_id} on port {self.port}"
|
||||||
|
)
|
||||||
self.broadcaster.register()
|
self.broadcaster.register()
|
||||||
# Listener is started in constructor
|
# Listener is started in constructor
|
||||||
|
|
||||||
|
|||||||
@ -31,6 +31,7 @@ dependencies = [
|
|||||||
"trio-typing>=0.0.4",
|
"trio-typing>=0.0.4",
|
||||||
"trio>=0.26.0",
|
"trio>=0.26.0",
|
||||||
"fastecdsa==2.3.2; sys_platform != 'win32'",
|
"fastecdsa==2.3.2; sys_platform != 'win32'",
|
||||||
|
"zeroconf (>=0.147.0,<0.148.0)",
|
||||||
]
|
]
|
||||||
classifiers = [
|
classifiers = [
|
||||||
"Development Status :: 4 - Beta",
|
"Development Status :: 4 - Beta",
|
||||||
|
|||||||
Reference in New Issue
Block a user