
    lKjk                        d dl mZmZmZmZmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d dlZd dlZd dlZd dlZd dlZd dlZ ej.                  e      Zej5                  ej6                          ej8                         Z ej<                  d      ZejA                  e       ejC                  e        ed	      Z" G d
 de      Z# G d d      Z$de#dz  de%fdZ&y)    )DictAnyTypeVarCallableProtocol	Awaitable)TemporaryDirectory)uuid7str)Context)wraps)PathNz[%(levelname)s] %(message)sTc                   `    e Zd Zdedeeef   ddfdZdedeeef   ddfdZd	ede	fd
Z
ddZy)	Analytics	tool_nameresultreturnNc                    K   yw)zTracks the execution of a tool.N )selfr   r   s      s/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/macos_mcp/infrastructure/analytics.py
track_toolzAnalytics.track_tool   	        errorcontextc                    K   yw)z=Tracks an error that occurred during the execution of a tool.Nr   r   r   r   s      r   track_errorzAnalytics.track_error   r   r   featurec                    K   yw)z$Checks if a feature flag is enabled.Nr   r   r    s     r   is_feature_enabledzAnalytics.is_feature_enabled!   r   r   c                    K   yw)zCloses the analytics client.Nr   r   s    r   closezAnalytics.close%   r   r   r   N)__name__
__module____qualname__strr   r   r   	Exceptionr   boolr#   r&   r       r   r   r      s^    # tCH~ $ y 4S> d   r.   r   c                       e Zd Z e e       j
                        j                  ZdZdZ	d Z
edefd       Zdedeeef   ddfd	Zd
edeeef   ddfdZdedefdZddZy)PostHogAnalytics/phc_uxdCItyVTjXNU0sMPr97dq3tcz39scQNt3qjTYw5vLVzhttps://us.i.posthog.comc                 j   t        j                  | j                  | j                  ddd      | _        d | _        dt        t        j                         dz         dt        j                          | _
        | j                  r0t        j                  d| j                   d| j                          y y )	NFT)hostdisable_geoipenable_exception_autocapturedebugmcp_  _zInitialized with user ID: z and session ID: )posthogPosthogAPI_KEYHOSTclient_user_idinttimeosgetpidmcp_interaction_idloggerr6   user_idr%   s    r   __init__zPostHogAnalytics.__init__/   s    ooLL)-
 $(TYY[4-?)@(A299;-"P;;LL,T\\N:KDLcLcKde r.   r   c                    | j                   r| j                   S | j                  dz  }|j                         r1|j                  d      j	                         | _         | j                   S t               | _         	 |j                  | j                   d       | j                   S # t        $ r-}t        j                  d|        Y d }~| j                   S d }~ww xY w)Nz.macos-mcp-user-idzutf-8)encodingzCould not persist user ID: )
r?   TEMP_FOLDERexists	read_textstripr
   
write_textr,   rE   warning)r   user_id_filees      r   rF   zPostHogAnalytics.user_id?   s    ==== ''*>> (22G2DJJLDM }} %JDMB'''H }}  B!<QC@AA}}Bs   9B" "	C+CCr   r   Nc           	      H  K   | j                   r8| j                   j                  | j                  d|| j                  dd|       |j	                  dd      }|j	                  d      rdnd	}t        d
| d| d| d       t        j                  | d| d| d       y w)Ntool_executedT)r   
session_idprocess_person_profiledistinct_idevent
propertiesduration_msr   successSUCCESSFAILEDz[Analytics] : z (zms))r>   capturerF   rD   getprintrE   info)r   r   r   durationsuccess_marks        r   r   zPostHogAnalytics.track_toolP   s     ;;KK LL%!*"&"9"9.2 	   	 ::mQ/$*JJy$9yxYKr,r(3GHykL>H:SABs   B B"r   r   c           	      <  K   | j                   rb| j                   j                  | j                  dt        |      t	        |d      st        |      n
t        |      | j
                  dd|       t        j                  d|j                  d       d|        y w)	N	exception__traceback__T)rf   	tracebackrT   rU   rV   z	ERROR in r   r^   )	r>   r_   rF   r+   hasattrrD   rE   r   r`   r   s      r   r   zPostHogAnalytics.track_errorb   s     ;;KK LL!!$U3:5/3RUX[\aXb"&"9"9.2	
    
 	y[!9 :"UGDEs   BBr    c                 p   K   | j                   sy| j                   j                  || j                        S w)NF)r>   r#   rF   r"   s     r   r#   z#PostHogAnalytics.is_feature_enabledr   s+     {{{{--gt||DDs   46c                    K   | j                   r0| j                   j                          t        j                  d       y y w)NzClosed analytics)r>   shutdownrE   r6   r%   s    r   r&   zPostHogAnalytics.closew   s/     ;;KK  "LL+, s   >A r'   )r(   r)   r*   r   r	   nameparentrJ   r<   r=   rG   propertyr+   rF   r   r   r   r,   r   r-   r#   r&   r   r.   r   r0   r0   *   s    )+00188K?G%D     C# CtCH~ C$ C$Fy F4S> Fd F E E E
-r.   r0   analytics_instancer   c                 p     dt         dt        t           f   dt         dt        t           f   f fd}|S )z9Decorator to wrap tool functions with analytics tracking.func.r   c                 B     t               dt        f fd       }|S )Nr   c                    K   t        j                          }i }	 t        d | D        d       }|s!t        d |j                         D        d       }|r|j                  rt|j                  j                  r^|j                  j                  j
                  r>|j                  j                  j
                  }|j                  |d<   |j                  |d<   	 t        j                  
      r 
| i | d {   }n!t        j                  
g| i | d {   }t        t        j                          |z
  dz        }	r	j                  |dd|       d {    |S # t        $ r Y w xY w7 {7 [7 # t        $ rL}t        t        j                          |z
  dz        }	r 	j                  ||d|       d {  7   |d }~ww xY ww)	Nc              3   B   K   | ]  }t        |t              s|  y wN
isinstancer   ).0args     r   	<genexpr>zEwith_analytics.<locals>.decorator.<locals>.wrapper.<locals>.<genexpr>   s     L4C:c73KC4   c              3   B   K   | ]  }t        |t              s|  y wrv   rw   )ry   vals     r   r{   zEwith_analytics.<locals>.decorator.<locals>.wrapper.<locals>.<genexpr>   s     T:c7;Sr|   client_nameclient_versionr8   T)rZ   r[   )r   rZ   )rA   nextvaluessessionclient_params
clientInform   versionr,   inspectiscoroutinefunctionasyncio	to_threadr@   r   r   )argskwargsstartclient_datactxrb   r   rZ   r   rp   rr   r   s            r   wrapperz2with_analytics.<locals>.decorator.<locals>.wrapper   s    IIKEKL4LdSTTC 1111<<;;44??D15K.48LLK 01..t4#'#8#88F#*#4#4T#KD#KF#KKF!499;#6$">?%,77!(3TT  
 #  
 9K
  !499;#6$">?%,88)2+6 *   s   GB8E!  E6 4E05!E6 E2AE6 E4E6  G!	E-*G,E--G0E6 2E6 4E6 6	G??G>G?GGG)r   r   )rr   r   rp   r   s   ` r   	decoratorz!with_analytics.<locals>.decorator   s(    	t2	a 2	 
2	h r.   )r   r   r   )rp   r   r   s   `` r   with_analyticsr   }   s<    6il!23 6iPQlAR8S 6p r.   )'typingr   r   r   r   r   r   tempfiler	   uuid_extensionsr
   fastmcpr   	functoolsr   pathlibr   r   r:   r   loggingrA   rB   	getLoggerr(   rE   setLevelINFOStreamHandlerhandler	Formatter	formattersetFormatter
addHandlerr   r   r0   r+   r   r   r.   r   <module>r      s    D D ' $         				8	$  
'


!G;<	   Y    ' CL $P- P-f;y4'7 ;C ;r.   