
    yjI                         d Z ddlZddlmZmZmZmZmZmZ ddl	m
Z
mZmZ ddlmZmZ ddlmZ ddlmZ ddlmZmZ dd	lmZmZmZmZ dd
lmZmZ ddlm Z   ej!        e"          Z#g dZ$deddfdZ%ddZ&ddZ'dS )a  
CloudEvents telemetry event system for Honcho.

This module provides:
- emit(): Queue an event for emission to the telemetry backend
- BaseEvent: Base class for all event types
- Concrete event types for all Honcho operations

Event Categories:
    representation: Message processing and conclusion extraction
    - RepresentationCompletedEvent: Message batch processed, conclusions extracted

    dream: Memory consolidation operations
    - DreamRunEvent: Full dream orchestration completed
    - DreamSpecialistEvent: Individual specialist (deduction/induction) completed

    dialectic: User-initiated queries
    - DialecticCompletedEvent: Chat query completed

    agent: Agentic loop tracking (correlates via run_id)
    - AgentIterationEvent: Per-LLM-call metrics
    - AgentToolConclusionsCreatedEvent: Conclusions created by agent
    - AgentToolConclusionsDeletedEvent: Conclusions deleted by agent
    - AgentToolPeerCardUpdatedEvent: Peer card updated by agent
    - AgentToolSummaryCreatedEvent: Summary created

    api: User-facing API operations
    - MessageCreatedEvent: Message batch created
    - FileUploadedEvent: File converted into messages
    - GetContextEvent: Context retrieved for a session or peer

    deletion: Resource removal
    - DeletionCompletedEvent: Resource deletion completed (with cascade counts)

    reconciliation: Maintenance operations
    - SyncVectorsCompletedEvent: Vector store sync completed
    - CleanupStaleItemsCompletedEvent: Stale items cleanup completed

Usage:
    from src.telemetry.events import emit, RepresentationCompletedEvent

    emit(RepresentationCompletedEvent(
        workspace_name="my_workspace",
        session_name="my_session",
        observed="assistant_peer",
        queue_items_processed=3,
        earliest_message_id="msg_001",
        latest_message_id="msg_010",
        message_count=10,
        explicit_conclusion_count=5,
        context_preparation_ms=50.0,
        llm_call_ms=1200.0,
        total_duration_ms=1300.0,
        input_tokens=5000,
        output_tokens=500,
    ))
    N)AgentIterationEventAgentToolCallCompletedEvent AgentToolConclusionsCreatedEvent AgentToolConclusionsDeletedEventAgentToolPeerCardUpdatedEventAgentToolSummaryCreatedEvent)FileUploadedEventGetContextEventMessageCreatedEvent)	BaseEventgenerate_event_id)DeletionCompletedEvent)DialecticCompletedEvent)DreamRunEventDreamSpecialistEvent)CallPurposeEmbeddingCallCompletedEventEmbeddingCallPurposeLLMCallCompletedEvent)CleanupStaleItemsCompletedEventSyncVectorsCompletedEvent)RepresentationCompletedEvent)emitr   r   r   r   r   r   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   initialize_telemetry_eventsshutdown_telemetry_eventseventreturnc                 f   	 ddl m}  |            }|t                              d           dS |                    |            dS # t
          $ r_}ddl}|                    |           t                              dt          |           j
        t          |                     Y d}~dS d}~ww xY w)aD  Queue an event for emission to the telemetry backend.

    This is the main entry point for emitting telemetry events.
    Events are buffered and sent asynchronously to the configured endpoint.

    If telemetry is disabled or not initialized, this is a no-op.
    Telemetry failures are caught and logged to Sentry to avoid blocking operations.

    Args:
        event: The event to emit (must be a BaseEvent subclass instance)

    Example:
        from src.telemetry.events import emit

        emit(MyEvent(
            my_field="some_value",
            ...
        ))
    r   )get_emitterNz1Telemetry emitter not initialized, dropping eventz%Failed to emit telemetry event %s: %s)src.telemetry.emitterr   loggerdebugr   	Exception
sentry_sdkcapture_exceptionwarningtype__name__str)r   r   emitterer$   s        E/DATA/AppData/hermes/projects/honcho/src/telemetry/events/__init__.pyr   r      s    (
555555+--?LLLMMMFU 	
 	
 	
$$Q'''3KK FF	
 	
 	
 	
 	
 	
 	
 	
 	
	
s   ,A A 
B0AB++B0c            
      z  K   ddl m}  ddlm} | j        j        st                              d           dS  || j        j        | j        j	        | j        j
        | j        j        | j        j        | j        j        | j        j        d           d{V  t                              d| j        j                   dS )	a)  Initialize the telemetry events system based on configuration.

    This should be called once at application startup. It reads
    configuration from settings and initializes the CloudEvents emitter.

    This is typically called from initialize_telemetry() in the main
    telemetry module.
    r   )settings)initialize_emitterzCloudEvents telemetry disabledNT)endpointheaders
batch_sizeflush_interval_secondsflush_thresholdmax_retriesmax_buffer_sizeenabledz/CloudEvents telemetry initialized, endpoint: %s)
src.configr.   r    r/   	TELEMETRYENABLEDr!   infoENDPOINTHEADERS
BATCH_SIZEFLUSH_INTERVAL_SECONDSFLUSH_THRESHOLDMAX_RETRIESMAX_BUFFER_SIZE)r.   r/   s     r,   r   r      s       $#####888888% 4555

#,"*%0'1H *:&2 *:	 	 	 	 	 	 	 	 	 	 KK98;M;V        c                  j   K   ddl m}   |              d{V  t                              d           dS )zShutdown the telemetry events system.

    This should be called during application shutdown to ensure
    all buffered events are flushed before exit.
    r   shutdown_emitterNz'CloudEvents telemetry shutdown complete)r    rF   r!   r;   rE   s    r,   r   r      sT       766666




KK9:::::rC   )r   N)(__doc__loggingsrc.telemetry.events.agentr   r   r   r   r   r   src.telemetry.events.apir	   r
   r   src.telemetry.events.baser   r   src.telemetry.events.deletionr   src.telemetry.events.dialecticr   src.telemetry.events.dreamr   r   src.telemetry.events.llmr   r   r   r   #src.telemetry.events.reconciliationr   r   #src.telemetry.events.representationr   	getLoggerr(   r!   __all__r   r   r    rC   r,   <module>rU      s  8 8t                         
 C B B B B B B B @ @ @ @ @ @ B B B B B B                          M L L L L L		8	$	$$ $ $N&
	 &
d &
 &
 &
 &
R   @	; 	; 	; 	; 	; 	;rC   