o
    ZhI                     @   sL   d dl m Z mZ d dlmZmZ d dlmZ d dlmZ G dd deZ	dS )    )datetime	timedelta)ListOptional)Document)
BaseLoaderc                   @   sj   e Zd ZdZ			ddedededee dee d	ed
dfddZded
e	fddZ
d
ee	 fddZdS )DatadogLogsLoaderz`Load `Datadog` logs.

    Logs are written into the `page_content` and into the `metadata`.
    Nd   queryapi_keyapp_key	from_timeto_timelimitreturnc           
   
   C   sp   zddl m} W n ty } ztd|d}~ww || _| }	||	jd< ||	jd< |	| _|| _|| _|| _dS )a(  Initialize Datadog document loader.

        Requirements:
            - Must have datadog_api_client installed. Install with `pip install datadog_api_client`.

        Args:
            query: The query to run in Datadog.
            api_key: The Datadog API key.
            app_key: The Datadog APP key.
            from_time: Optional. The start of the time range to query.
                Supports date math and regular timestamps (milliseconds) like '1688732708951'
                Defaults to 20 minutes ago.
            to_time: Optional. The end of the time range to query.
                Supports date math and regular timestamps (milliseconds) like '1688732708951'
                Defaults to now.
            limit: The maximum number of logs to return.
                Defaults to 100.
        r   )ConfigurationlCould not import datadog_api_client python package. Please install it with `pip install datadog_api_client`.NZ
apiKeyAuthZ
appKeyAuth)	datadog_api_clientr   ImportErrorr
   r   configurationr   r   r   )
selfr
   r   r   r   r   r   r   exr    r   h/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/document_loaders/datadog_logs.py__init__   s$   


zDatadogLogsLoader.__init__logc                 C   s   | di }| dd| d| dd| dg | ddd}| d	d}| di }i |d	|i}d
dd | D }t||dS )zA
        Create Document objects from Datadog log items.
        
attributesid statusservicetags	timestamp)r   r   r    r!   r"   messagez, c                 s   s"    | ]\}}| d | V  qdS )z: Nr   ).0kvr   r   r   	<genexpr>K   s     z.DatadogLogsLoader.parse_log.<locals>.<genexpr>)Zpage_contentmetadata)getjoinitemsr   )r   r   r   r(   r#   Zinside_attributesZcontent_dictcontentr   r   r   	parse_log;   s   



zDatadogLogsLoader.parse_logc              
   C   sZ  z&ddl m} ddlm} ddlm} ddlm} ddlm	} ddl
m} W n ty7 } ztd|d	}~ww t }|td
d }	t| d }
t|	 d }| jd	ur[| jn|}||| j|| jd	urj| jn|
 d|j|| jdd}|| jd}||}|j|d }W d	   n1 sw   Y  g }|d D ]
}|| | q|S )a+  
        Get logs from Datadog.

        Returns:
            A list of Document objects.
                - page_content
                - metadata
                    - id
                    - service
                    - status
                    - tags
                    - timestamp
        r   )	ApiClient)LogsApi)LogsListRequest)LogsListRequestPage)LogsQueryFilter)LogsSortr   N   )minutesi  )r
   _fromto)r   )filtersortpage)r   )bodydata)r   r.   Z"datadog_api_client.v2.api.logs_apir/   Z-datadog_api_client.v2.model.logs_list_requestr0   Z2datadog_api_client.v2.model.logs_list_request_pager1   Z-datadog_api_client.v2.model.logs_query_filterr2   Z%datadog_api_client.v2.model.logs_sortr3   r   r   nowr   intr"   r   r
   r   ZTIMESTAMP_ASCENDINGr   r   Z	list_logsto_dictappendr-   )r   r.   r/   r0   r1   r2   r3   r   r=   Ztwenty_minutes_beforeZnow_timestampZtwenty_minutes_before_timestampr6   r;   Z
api_clientZapi_instanceresponsedocsrowr   r   r   loadN   sT   
zDatadogLogsLoader.load)NNr	   )__name__
__module____qualname____doc__strr   r>   r   dictr   r-   r   rD   r   r   r   r   r   	   s,    

,r   N)
r   r   typingr   r   Zlangchain_core.documentsr   Z)langchain_community.document_loaders.baser   r   r   r   r   r   <module>   s
    