
    uYf                         d dl Z d dl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
mZ  e j                  e      Zej                   G d d	ej                                Zej                   G d
 de             Zy)    N)compat)periodic)ddup)
_traceback)exporter)configc                   |    e Zd ZdZ ej
                         Z ej
                         Z ej
                  dd      Z ej
                  e	e
j                        Z ej
                  d      Z ej
                  ddd      Z ej
                  ee
j                   j"                        Zd Z fd	Zd
 Zd Z xZS )	Schedulerz!Schedule export of recorded data.NF)defaulteq)typer   )init)r   r   r   c                 &    | j                   | _        y )N)interval_configured_interval)selfs    [/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/ddtrace/profiling/scheduler.py__attrs_post_init__zScheduler.__attrs_post_init__   s    $(MM!    c                     | j                   rt        j                  sd| _         t        j	                  d       t
        t        |           t        j                         | _
        t        j	                  d       y)zStart the scheduler.FzStarting schedulerzScheduler startedN)_export_libdd_enabledr   is_availableLOGdebugsuperr
   _start_servicer   time_ns_last_exportr   	__class__s    r   r   zScheduler._start_service!   sT     %%d.?.?).D&		&'i-/"NN,		%&r   c                    t         j                  d       | j                  r:t        j                          | j
                  }t        j                         | _        y| j                  	 | j                          | j                  j                         }| j
                  }t        j                         | _        | j                  D ]   }	 |j                  ||| j
                         " y# t        $ r t         j                  dd       Y w xY w# t        j                   $ r3}t         j#                  dt%        j&                  |             Y d}~d}~wt        $ r t         j)                  d       Y w xY w)z(Flush events from recorder to exporters.zFlushing eventsNz"Scheduler before_flush hook failedT)exc_infoz'Unable to export profile: %s. Ignoring.zpUnexpected error while exporting events. Please report this bug to https://github.com/DataDog/dd-trace-py/issues)r   r   r   r   uploadr   r   r   before_flush	Exceptionerrorrecorderreset	exportersexportr   ExportErrorwarningr   format_exception	exception)r   starteventsexpes        r   flushzScheduler.flush+   s.   		#$%%KKM %%E & 0D(O!!# $$&!!"NN,>> 		C

65$*;*;<		  O		>	NO '' gEzGbGbcdGeff ^s0   )C( D( D
DE3!)E!E32E3c                 $   t        j                         }	 | j                          t        d| j                  t        j                         |z
  z
        | _        y # t        d| j                  t        j                         |z
  z
        | _        w xY w)Nr   )r   	monotonicr3   maxr   r   )r   
start_times     r   r   zScheduler.periodicJ   sp    %%'
	bJJL4#<#<@P@P@RU_@_#`aDMC4#<#<@P@P@RU_@_#`aDMs   A 5B)__name__
__module____qualname____doc__attribr'   r)   r$   floatr   upload_interval	_intervalr   r   boolr*   libdd_enabledr   r   r   r3   r   __classcell__r    s   @r   r
   r
      s    +twwyH	I4774E2LUF,B,BCI"477.477t>L#DGGv}}7R7RS2'>br   r
   c                   z     e Zd ZdZdZdZ ej                  ee      Z	 ej                  dd      Z
 fdZ xZS )	ServerlessSchedulerub  Serverless scheduler that works on, e.g., AWS Lambda.

    The idea with this scheduler is to not sleep 60s, but to sleep 1s and flush out profiles after 60 sleeping period.
    As the service can be frozen a few seconds after flushing out a profile, we want to make sure the next flush is not
    > 60s later, but after at least 60 periods of 1s.

    g      ?g      N@)r   r   Fr   )r   r   c                 j   | j                   | j                  k\  rgt        j                         | j                  z
  | j
                  | j                  z  k\  r,	 t        t        | #          | j
                  | _	        d| _         y | xj                   dz  c_         y # | j
                  | _	        d| _         w xY w)Nr      )
_profiled_intervalsFLUSH_AFTER_INTERVALSr   r   r   FORCED_INTERVALr   rF   r   r   r   s    r   r   zServerlessScheduler.periodicc   s    ##t'A'AAv~~GWZ^ZkZkGk  4#=#==G
-)49; !% 4 4+,($$)$ !% 4 4+,(s   B B2)r8   r9   r:   r;   rK   rJ   r<   r=   r>   r@   rI   r   rC   rD   s   @r   rF   rF   R   sD     O e<I!$''ua8* *r   rF   )loggingr<   ddtrace.internalr   r   "ddtrace.internal.datadog.profilingr   ddtrace.profilingr   r   ddtrace.settings.profilingr   	getLoggerr8   r   sPeriodicServicer
   rF    r   r   <module>rU      sy      # % 3 ( & - g! =b(( =b =b@ *) * *r   