U
    .e\                     @  s   d Z ddlmZ ddlZ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mZmZmZ dd	lmZ dd
lmZmZ ddlmZ dZd ZedZG dd dZdS )zBeat command-line program.

This module is the 'program-version' of :mod:`celery.beat`.

It does everything necessary to run that module
as an actual application, like installing signal handlers
and so on.
    )annotationsN)datetime)Signals)	FrameType)Any)VERSION_BANNERCelerybeat	platforms)qualname)
LOG_LEVELS
get_logger)humanize_seconds)Beatz
LocalTime -> {timestamp}
Configuration ->
    . broker -> {conninfo}
    . loader -> {loader}
    . scheduler -> {scheduler}
{scheduler_info}
    . logfile -> {logfile}@%{loglevel}
    . maxinterval -> {hmax_interval} ({max_interval}s)
zcelery.beatc                   @  s   e Zd ZU dZejZdZded< d(dd	d
dddddddddddddddZddddZ	d)dddddZ
ddddZdddddZddd d!Zdddd"d#Zddd$d%Zdddd&d'ZdS )*r   zBeat as a service.Nr   app   WARNFz
int | NonezCelery | Noneintz
str | Nonezbool | Nonestrboolr   None)max_intervalr   socket_timeoutpidfileno_colorloglevellogfileschedule	schedulerscheduler_clsredirect_stdoutsredirect_stdouts_levelquietkwargsreturnc                 K  s   |p| j  | _ }| j j}|| _|| _|d|| _|d|	|
| _|d|| _|d|| _|| _|| _	|| _
|| _|jj| j|d k	r| n|d| _|| _t| jtjst| j  | _d S )NZbeat_schedule_filenameZbeat_schedulerZworker_redirect_stdoutsZworker_redirect_stdouts_level)enabled)r   eitherr   r   r   r   r    r!   r"   r   r   r   logcoloredr   
isinstancenumbersIntegralr   upper)selfr   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r&    r.   4/tmp/pip-unpacked-wheel-f4liivr4/celery/apps/beat.py__init__.   s:        zBeat.__init__)r$   c                 C  s>   | j s"tt| jdt d |   |   |   d S )Nzcelery beat vz is starting.)	r"   printr   r(   Zcyanr   init_loaderset_process_titlestart_schedulerr-   r.   r.   r/   runN   s    

zBeat.run)colorizer$   c                 C  s>   |d kr| j d k	r| j  }| jjj| j| j| j| j|d d S )N)r7   )r   r   r'   setupr   r   r    r!   )r-   r7   r.   r.   r/   setup_loggingV   s     zBeat.setup_loggingc              
   C  s   | j rt| j  | j| j| j| j| jd}| js@t	| 
| |   | jrhtd| j t| j z| | |  W n8 tk
r } ztjd|j|dd  W 5 d }~X Y nX d S )N)r   r   r   Zschedule_filenamez$Setting default socket timeout to %rzbeat raised exception %s: %rT)exc_info)r   r
   Zcreate_pidlockServicer   r   r   r   r"   r1   bannerr9   r   loggerdebugsocketsetdefaulttimeoutinstall_sync_handlerstart	Exceptioncritical	__class__)r-   serviceexcr.   r.   r/   r4   ]   s4    
 zBeat.start_schedulerzbeat.Service)rF   r$   c                 C  sB   | j }t|d|d|d|d|d|| |S )Nz__    -z    ... __   z
        _
)r(   r   ZblueZmagentaresetstartup_info)r-   rF   cr.   r.   r/   r<   x   s     zBeat.bannerc                 C  s   | j j  | j   d S N)r   loaderZinit_workerfinalizer5   r.   r.   r/   r2      s    zBeat.init_loaderc                 C  s`   |j dd}tj| j  t jdd| j	p2dt
| j t| jjt||jt|j|jd	S )NT)Zlazyr   )microsecondz[stderr])	Zconninfo	timestampr   r   rM   r   Zscheduler_infoZhmax_intervalr   )Zget_schedulerSTARTUP_INFO_FMTformatr   
connectionas_urir   nowreplacer   r   r   r   rM   infor   r   )r-   rF   r   r.   r.   r/   rJ      s    
zBeat.startup_infoc                 C  s8   dt jd krdpd}tjddt j|d  d d S )NZmanager         zcelery beat )rW   )sysargvr
   r3   join)r-   Z	arg_startr.   r.   r/   r3      s
     zBeat.set_process_titlec                   s*   dddd fdd}t jj||d dS )	z;Install a `SIGTERM` + `SIGINT` handler saving the schedule.r   r   r   )signumframer$   c                   s       t d S rL   )sync
SystemExit)r^   r_   rF   r.   r/   _sync   s    z(Beat.install_sync_handler.<locals>._sync)SIGTERMSIGINTN)r
   Zsignalsupdate)r-   rF   rc   r.   rb   r/   rA      s    zBeat.install_sync_handler)NNr   NNr   NNNNNNF)N)__name__
__module____qualname____doc__r	   r;   r   __annotations__r0   r6   r9   r4   r<   r2   rJ   r3   rA   r.   r.   r.   r/   r   (   s0   
                , 	r   )rj   
__future__r   r*   r?   r[   r   signalr   typesr   typingr   Zceleryr   r   r	   r
   Zcelery.utils.importsr   Zcelery.utils.logr   r   Zcelery.utils.timer   __all__striprQ   r=   r   r.   r.   r.   r/   <module>   s    