
    tni"                        d dl Z d dlmZmZ d dlmZ d dlmZmZ d dl	m
Z
mZ d dlmZ er1d dlmZ d dlmZmZmZmZ d d	lmZmZmZ  ed
edef                   Z	 d dlmZmZ d dlmZ d dlmZm Z  d dl!m"Z"m#Z#m$Z$ n# e%$ r  ed          w xY w	 d dl&m'Z' n# e%$ r dZ'Y nw xY wd1dZ(ddddde)ddfdZ*	 	 	 	 	 	 	 	 d2d#Z+	 	 	 	 d3d&Z,d4d'Z-d4d(Z.d)e/ddfd*Z0d5d.Z1d5d/Z2d5d0Z3dS )6    N)capture_checkinMonitorStatus)DidNotEnable)_get_humanized_interval_now_seconds_since_epoch)loggermatch_regex_list)TYPE_CHECKING)Callable)AnyOptionalTypeVarUnion)MonitorConfigMonitorConfigScheduleTypeMonitorConfigScheduleUnitF.)bound)TaskCelery)	Scheduler)crontabschedule)task_failuretask_success
task_retryzCelery not installed)RedBeatSchedulertaskr   returndict[str, Any]c                     | j                             d          pi }d|v r|                    |d                    |d= |                    | j                             d          pi            |S )Nheaders
properties)requestgetupdate)r   r"   s     `/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/sentry_sdk/integrations/celery/beat.py_get_headersr(   -   st    ly))/RG Gwy)***INN4<##L117R888N    celery_scheduler   appr   monitor_namer   c                    i }d }d }d }t          | t                    rd}d                    |           }nqt          | t                    r8d}t	          | j                  \  }}|dk    rt          j        d||           i S n$t          j        dt          |                      i S i |d<   ||d         d<   ||d         d	<   |||d         d
<   t          | d          o| j
        d uot          | j
                  p|j        pd|d<   |S )Nr   zd{0._orig_minute} {0._orig_hour} {0._orig_day_of_month} {0._orig_month_of_year} {0._orig_day_of_week}intervalsecondzIntervals shorter than one minute are not supported by Sentry Crons. Monitor '%s' has an interval of %s seconds. Use the `exclude_beat_tasks` option in the celery integration to exclude it.z8Celery schedule type '%s' not supported by Sentry Crons.r   typevalueunittzUTCtimezone)
isinstancer   formatr   r   secondsr   warningr0   hasattrr3   strr5   )r*   r+   r,   monitor_configschedule_typeschedule_valueschedule_units          r'   _get_monitor_configr@   :   sx    ')N;?M26N;?M/7++ !$ %+F?$;$; 	 
OX	.	. "*A#+
 +
' H$$N P  
 I % 	F!!	
 	
 	
 	!#N:)6N:v&*8N:w' -:z"6* OT** ("$.(O&''	
 <	  : r)   	schedulerschedule_entryintegration0sentry_sdk.integrations.celery.CeleryIntegrationc                    |j         sdS |j        }t          ||j                  }|rdS |j        }| j        }t          |||          }t          |          }|sdS |j        	                    di           }	|	
                    ||d           t          ||t          j                  }
|	
                    d|
i           |	|j        d<   dS )zE
    Add Sentry Crons information to the schedule_entry headers.
    Nr"   )sentry-monitor-slugsentry-monitor-config)monitor_slugr<   statussentry-monitor-check-in-id)monitor_beat_tasksnamer	   exclude_beat_tasksr   r+   r@   booloptionspopr&   r   r   IN_PROGRESS)rA   rB   rC   r,   task_should_be_excludedr*   r+   r<   is_supported_scheduler"   check_in_ids              r'   #_apply_crons_data_to_schedule_entryrU   t   s    ) !&L.k4   $-O
-C(#|LLN 00  $((B77GNN#/%3	
 	
   "!%(  K
 NN0+>??? )0N9%%%r)   original_functionCallable[..., Any]c                 N     dt                     v }|r S ddlm d
 fd	}|S )aw  
    Makes sure that:
    - a new Sentry trace is started for each task started by Celery Beat and
      it is propagated to the task.
    - the Sentry Crons information is set in the Celery Beat task's
      headers so that is is monitored with Sentry Crons.

    After the patched function is called,
    Celery Beat will call apply_async to put the task in the queue.
    sentry_patched_schedulerr   )CeleryIntegrationargsr   kwargsr   Nc                      t          j                                                  }| | i |S t          j                    }|                                 d|_        | \  }}t          |||            | i |S )Nzcelery-beat)
sentry_sdk
get_clientget_integrationget_isolation_scopeset_new_propagation_context_namerU   )r[   r\   rC   scoperA   rB   rZ   rV   s         r'   rY   z6_wrap_beat_scheduler.<locals>.sentry_patched_scheduler   s     +--==>OPP$$d5f555 .00))+++#$(!	>+I~{SSS  $1&111r)   )r[   r   r\   r   r   N)r;   sentry_sdk.integrations.celeryrZ   )rV   already_patchedrY   rZ   s   `  @r'   _wrap_beat_schedulerrg      sd     1C8I4J4JJO !  @@@@@@2 2 2 2 2 2 2 $#r)   c                  L    t          t          j                  t          _        d S N)rg   r   apply_entry r)   r'   _patch_beat_apply_entryrl      s    01FGGIr)   c                  ^    t           d S t          t           j                  t           _        d S ri   )r   rg   apply_asyncrk   r)   r'   _patch_redbeat_apply_asyncro      s(    #78H8T#U#U   r)   rK   c                     | rMt          j        t                     t          j        t                     t          j        t                     d S d S ri   )r   connectcrons_task_successr   crons_task_failurer   crons_task_retry)rK   s    r'   _setup_celery_beat_signalsru      sP     -/000/000+,,,,,- -r)   senderr\   dict[Any, Any]c           	      D   t          j        d|            t          |           }d|vrd S |                    di           }|                    d          }t	          |d         ||d         |rt                      t          |          z
  nd t          j                   d S )Nzcelery_task_success %srF   rG    sentry-monitor-start-timestamp-srJ   rH   r<   rT   durationrI   )	r   debugr(   r%   r   r   floatr   OKrv   r\   r"   r<   start_timestamp_ss        r'   rr   rr      s    
L)62226""GG++[[!8"==N$FGG23%89 !$&&/@)A)AAA
 
 
 
 
 
r)   c           	      D   t          j        d|            t          |           }d|vrd S |                    di           }|                    d          }t	          |d         ||d         |rt                      t          |          z
  nd t          j                   d S )Nzcelery_task_failure %srF   rG   ry   rJ   rz   	r   r|   r(   r%   r   r   r}   r   ERRORr   s        r'   rs   rs      s    
L)62226""GG++[[!8"==N$FGG23%89 !$&&/@)A)AAA"
 
 
 
 
 
r)   c           	      D   t          j        d|            t          |           }d|vrd S |                    di           }|                    d          }t	          |d         ||d         |rt                      t          |          z
  nd t          j                   d S )Nzcelery_task_retry %srF   rG   ry   rJ   rz   r   r   s        r'   rt   rt     s    
L'0006""GG++[[!8"==N$FGG23%89 !$&&/@)A)AAA"
 
 
 
 
 
r)   )r   r   r   r    )rA   r   rB   r   rC   rD   r   N)rV   rW   r   rW   )r   N)rv   r   r\   rw   r   N)4r^   sentry_sdk.cronsr   r   sentry_sdk.integrationsr   $sentry_sdk.integrations.celery.utilsr   r   sentry_sdk.utilsr   r	   typingr
   collections.abcr   r   r   r   r   sentry_sdk._typesr   r   r   r   celeryr   r   celery.beatr   celery.schedulesr   r   celery.signalsr   r   r   ImportErrorredbeat.schedulersr   r(   r;   r@   rU   rg   rl   ro   rN   ru   rr   rs   rt   rk   r)   r'   <module>r      s[       ; ; ; ; ; ; ; ; 0 0 0 0 0 0              
 !           	/((((((444444444444          	8CH-...A
/########%%%%%%22222222          
  / / /
,-
.
../3333333   
 
 
 
77!)79<77 7 7 7t-0-0-0 D-0 
	-0 -0 -0 -0`$$+$$$$ $$ $$ $$NH H H HV V V V-4 -D - - - -   0   0     s    A> >BB B$#B$