
    @i
                     V    d Z ddlmZ ddlmZ ddlmZ  G d dej                        Zy)z1
Database models for cronjob execution tracking.
    )models)timezone)	timedeltac                      e Zd ZdZ ej
                  ddd      Z ej
                  ddd      Z ej                  dd      Z	 ej                  dd	      Z
 ej                  d
d      Z ej                  d
      Z ej                  d      Z ej
                  dd      Z ej"                  dd      Z ej&                  d      Z ej&                  ddd      Z G d d      Zd Zed        ZddZddZd Zy)CronExecutionz!Tracks cronjob execution history.2   TzUnique task code)
max_lengthdb_index	help_textd   zHuman-readable task name)auto_now_addr
   )nullblankF)defaultr
   )r   )r   )r	   r   z$Date for which the task was executed)r
   r   r   zProcess ID for timeout handling)r   r   r   c                       e Zd ZdZ ej
                  ddg       ej
                  g d       ej
                  dg       ej
                  dg      gZdgZd	Zd
Z	y)CronExecution.Metacron_execution	task_codeexecution_date)fields)r   successr   	completedstartedz-startedzCron ExecutionzCron ExecutionsN)
__name__
__module____qualname__db_tabler   Indexindexesorderingverbose_nameverbose_name_plural     O/home/cursorai/projects/django-cronjob-utils/src/django_cronjob_utils/models.pyMetar      se    #FLL.> ?@FLL JKFLL.FLL,	
 <'/r$   r&   c                     | j                   rdn| j                  rdnd}| d| j                   d| j                   d| j                   S )Nu   ✓u   ✗u   → z (z) - )r   r   	task_namer   r   )selfstatuss     r%   __str__zCronExecution.__str__%   sE    ,,T^^E4>>*"T^^,<DATAT@UVVr$   c                     | j                   r3| j                  r'| j                   | j                  z
  j                         S | j                  s/t	        j
                         | j                  z
  j                         S y)z(Calculate execution duration in seconds.N)endedr   total_secondsr   r   nowr*   s    r%   durationzCronExecution.duration)   sU     ::$,,JJ-<<>>~~LLNT\\1@@BBr$   c                     d| _         || _        t        j                         | _        || _        || _        | j                  g d       y)zMark execution as completed.T)r   r   r.   message
error_codeupdate_fieldsN)r   r   r   r0   r.   r4   r5   save)r*   r   r4   r5   s       r%   mark_completedzCronExecution.mark_completed2   s:    \\^
$		 Z	[r$   c                 ,    | j                  d||       y)zMark execution as failed.F)r   r4   r5   N)r9   )r*   r4   r5   s      r%   mark_failedzCronExecution.mark_failed<   s    E7zRr$   c                 T    | xj                   dz  c_         | j                  dg       y)zIncrement retry count.   retry_countr6   N)r>   r8   r1   s    r%   increment_retryzCronExecution.increment_retry@   s#    A			0r$   N)T r@   )r@   r@   )r   r   r   __doc__r   	CharFieldr   r)   DateTimeFieldr   r.   BooleanFieldr   r   	TextFieldr4   r5   	DateFieldr   IntegerFieldr>   pidr&   r,   propertyr2   r9   r;   r?   r#   r$   r%   r   r   
   s   +   BI[\I   C$JdeI"f""tDG F  d$7E###EDAI!f!!%0GfT*G!!!Rt<J%V%%t?efN%&%%a0K
&

4t?`
aC
0 
0W  \S1r$   r   N)	rA   	django.dbr   django.utilsr   datetimer   Modelr   r#   r$   r%   <module>rN      s%     ! 91FLL 91r$   