77import logging
88
99from ..exceptions import SniTunChallengeError , SniTunInvalidPeer
10+ from ..metrics .base import MetricsCollector
1011from ..utils .asyncio import asyncio_timeout
1112from .peer_manager import PeerManager
1213
@@ -23,11 +24,13 @@ def __init__(
2324 peer_manager : PeerManager ,
2425 host : str | None = None ,
2526 port : int | None = None ,
27+ metrics : MetricsCollector | None = None ,
2628 ) -> None :
2729 """Initialize SNI Proxy interface."""
2830 self ._peer_manager = peer_manager
2931 self ._host = host
3032 self ._port = port or 8080
33+ self ._metrics = metrics
3134 self ._server : asyncio .Server | None = None
3235
3336 async def start (self ) -> None :
@@ -69,11 +72,26 @@ async def handle_connection(
6972 # Connection closed before data received
7073 if not fernet_data :
7174 return
75+
76+ # Track authentication attempt
77+ if self ._metrics :
78+ self ._metrics .increment (
79+ "snitun.auth.attempts" ,
80+ tags = {"result" : "started" },
81+ )
82+
7283 peer = self ._peer_manager .create_peer (fernet_data )
7384
7485 # Start multiplexer
7586 await peer .init_multiplexer_challenge (reader , writer )
7687
88+ # Authentication successful
89+ if self ._metrics :
90+ self ._metrics .increment (
91+ "snitun.auth.attempts" ,
92+ tags = {"result" : "success" },
93+ )
94+
7795 self ._peer_manager .add_peer (peer )
7896 while peer .is_connected :
7997 try :
@@ -85,9 +103,19 @@ async def handle_connection(
85103
86104 except SniTunInvalidPeer :
87105 _LOGGER .debug ("Close because invalid fernet data" )
106+ if self ._metrics :
107+ self ._metrics .increment (
108+ "snitun.auth.failures" ,
109+ tags = {"reason" : "invalid_token" },
110+ )
88111
89112 except SniTunChallengeError :
90113 _LOGGER .debug ("Close because challenge was wrong" )
114+ if self ._metrics :
115+ self ._metrics .increment (
116+ "snitun.auth.failures" ,
117+ tags = {"reason" : "challenge_failed" },
118+ )
91119
92120 finally :
93121 if peer :
0 commit comments