a
    bgI                     @   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                	   @   sV   e Zd ZdZdeeeee ee eddddZee	ddd	Z
ee	 d
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   s|   zddl m} W n. ty> } ztd|W Y d}~n
d}~0 0 || _| }	||	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   /var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/document_loaders/datadog_logs.py__init__   s     

zDatadogLogsLoader.__init__)logr   c                 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       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_log)r   c              
   C   sj  zLd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yz } ztd|W Y d	}~n
d	}~0 0 t }|td
d }	t| d }
t|	 d }| jd	ur| jn|}||| j|| jd	ur| jn|
 d|j|| jdd}|| jd(}||}|j|d }W d	   n1 s80    Y  g }|d D ]}|| | qN|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_apir0   Z-datadog_api_client.v2.model.logs_list_requestr1   Z2datadog_api_client.v2.model.logs_list_request_pager2   Z-datadog_api_client.v2.model.logs_query_filterr3   Z%datadog_api_client.v2.model.logs_sortr4   r   r   nowr   intr"   r   r
   r   ZTIMESTAMP_ASCENDINGr   r   Z	list_logsto_dictappendr.   )r   r/   r0   r1   r2   r3   r4   r   r>   Ztwenty_minutes_beforeZnow_timestampZtwenty_minutes_before_timestampr7   r<   Z
api_clientZapi_instanceresponsedocsrowr   r   r   loadN   sN    0zDatadogLogsLoader.load)NNr	   )__name__
__module____qualname____doc__strr   r?   r   dictr   r.   r   rE   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   