
    Wwg                     \   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
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 d dlmZmZ d dlmZ d dlmZmZ  e
j>                  e       G d de
j@                               Z! e
j>                  e       G d de
j@                               Z"y)    N)	timedelta)events)BackgroundScheduler)settings)adminmessages)Avg)timezone)format_html)	mark_safe)gettext_lazy)	DjangoJobDjangoJobExecution)util)DjangoJobStoreDjangoMemoryJobStorec                        e Zd ZdgZg dZ fdZ fdZd Zd Z e	d      e_
        dgZd	 Zd
ej                  fdZ e	d      e_
         xZS )DjangoJobAdminid)r   local_run_timeaverage_durationc                     t         |   ||       t               | _        t	               | _        d | _        d | _        t        t        dd      | _
        y )NAPSCHEDULER_RUN_NOW_TIMEOUT   )super__init__r   _django_jobstorer   _memory_jobstore_jobs_scheduled_jobs_executedgetattrr   _job_execution_timeout)selfmodel
admin_site	__class__s      O/var/www/horilla/myenv/lib/python3.12/site-packages/django_apscheduler/admin.pyr   zDjangoJobAdmin.__init__   sM    
+ . 0 4 6#"&-3R'
#    c                     t         |   |      }t        j                  j	                  |j                  dd            j                  d      j                  d      j                  t        d            | _	        |S )	Nr   T)flat)
job_id__injob_idjobduration)avg_duration)
r   get_querysetr   objectsfiltervalues_listorder_byannotater	   avg_duration_qs)r#   requestqsr&   s      r'   r0   zDjangoJobAdmin.get_queryset$   sr    W!'* &&-->>$T>: .  Xh[X3z?X3 	 	r(   c                 Z    |j                   rt        j                  |j                         S y)Nz(paused))next_run_timer   get_local_dt_formatr#   objs     r'   r   zDjangoJobAdmin.local_run_time2   s%    ++C,=,=>>r(   c                     	 | j                   j                  |j                        d   S # t        j                  $ r Y yw xY w)N)r,      None)r6   getr   r   DoesNotExistr<   s     r'   r   zDjangoJobAdmin.average_duration8   sB    	''++366+:1==!.. 		s   (+ A AzAverage Duration (sec)run_selected_jobsc                    t               }|j                  | j                         |j                  | j                  t
        j                         |j                          t               | _	        t               | _
        t        j                         }|D ]  }| j                  j                  |j                        }|sAt!        d      }| j#                  |t%        ||j                        t&        j(                         k|j+                  |j,                  d |j.                  |j0                  |j                  |j2                  |j4                  |j6                  |j8                  	       | j                  j;                  |j                          | j                  | j                  k7  rt        j                         |t=        | j>                        z   kD  rzt!        d      }| j#                  |t%        || j>                  djA                  | j                  | j                  z
              t&        jB                         |jE                  d       y tG        jH                  d       | j                  | j                  k7  r| j                  D ]'  }| j#                  |t%        t!        d	      |             ) |jE                          y )
Nz<Could not find job {} in the database! Skipping execution...)triggerargskwargsr   namemisfire_grace_timecoalescemax_instances)secondszfMaximum runtime of {} seconds exceeded! Not all jobs could be completed successfully. Pending jobs: {},F)waitg?zExecuted job '{}'!)%r   add_jobstorer   add_listener_handle_execution_eventr   EVENT_JOB_EXECUTEDstartsetr   r    r
   nowr   
lookup_jobr   _message_userr   r   WARNINGadd_jobfunc_refrF   rG   rH   rI   rJ   rK   addr   r"   joinERRORshutdowntimesleep)	r#   r7   queryset	scheduler
start_timeitem
django_jobmsgr,   s	            r'   rC   z DjangoJobAdmin.run_selected_jobsB   sI   ')	t445t;;V=V=VW"u!e\\^
 	4D..99$''BJVW!!';sDGG+DhFVFVW##__!((==__#-#@#@#,,(66  
   $$Z]]3)	4, ""d&9&99||~
Y33. !  ' !!33!5!58K8K!KL
 NN """.JJsO- ""d&9&990 )) 	UFg{15I3JF'ST	U 	r(   eventc                 N    | j                   j                  |j                         y N)r    r\   r,   )r#   rh   s     r'   rQ   z&DjangoJobAdmin._handle_execution_event   s    -r(   zRun the selected django jobs)__name__
__module____qualname__search_fieldslist_displayr   r0   r   r   rW   short_descriptionactionsrC   r   JobExecutionEventrQ   __classcell__)r&   s   @r'   r   r      sh    FM?L

 *++C)D&"#G=~.V-E-E . +,,J*K''r(   r   c            
           e Zd Zej                  dej
                  dej                  dej                  dej                  diZ	g dZ
g dZd Zd Zd	 Z ed
      e_         ed      e_        y)DjangoJobExecutionAdmingreenblueorangered)r   r-   html_statusr   duration_text)job__idrun_timestatusc                 h    t        d| j                  |j                      d|j                   d      S )Nz<p style="color: z">z</p>)r   status_color_mappingr~   r<   s     r'   rz   z#DjangoJobExecutionAdmin.html_status   s6     9 9#** EFbTXY
 	
r(   c                 @    t        j                  |j                        S rj   )r   r;   r}   r<   s     r'   r   z&DjangoJobExecutionAdmin.local_run_time   s    ''55r(   c                 "    |j                   xs dS )NzN/A)r.   r<   s     r'   r{   z%DjangoJobExecutionAdmin.duration_text   s    ||$u$r(   StatuszDuration (sec)N)rk   rl   rm   r   SUCCESSSENTMAX_INSTANCESMISSEDr^   r   ro   list_filterrz   r   r{   rW   rp    r(   r'   ru   ru      s{     	""G(((!!8  % SL3K

6% %&hKK!&'(8&9M#r(   ru   )#r`   datetimer   apschedulerr   !apscheduler.schedulers.backgroundr   django.confr   django.contribr   r   django.db.modelsr	   django.utilsr
   django.utils.htmlr   django.utils.safestringr   django.utils.translationr   rW   django_apscheduler.modelsr   r   django_apschedulerr   django_apscheduler.jobstoresr   r   register
ModelAdminr   ru   r   r(   r'   <module>r      s       A   *   ! ) - 6 C # M 	pLU%% pL pLf "#:e.. : $:r(   