U
    bh\                     @  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)Z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-kcem4wq5/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)r6   )r   r   r&   setupr   r   r    r!   )r,   r6   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"   r0   bannerr8   r   loggerdebugsocketsetdefaulttimeoutinstall_sync_handlerstart	Exceptioncritical	__class__)r,   serviceexcr-   r-   r.   r3   ]   s4    
 zBeat.start_schedulerzbeat.Service)rE   r$   c                 C  sB   | j }t|d|d|d|d|d|| |S )Nz__    -z    ... __   z
        _
)r'   r   ZblueZmagentaresetstartup_info)r,   rE   cr-   r-   r.   r;   x   s     zBeat.bannerc                 C  s   | j j  | j   d S N)r   loaderZinit_workerfinalizer4   r-   r-   r.   r1      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   rL   r   Zscheduler_infoZhmax_intervalr   )Zget_schedulerSTARTUP_INFO_FMTformatr   
connectionas_urir   nowreplacer   r   r   r   rL   infor   r   )r,   rE   r   r-   r-   r.   rI      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 )rV   )sysargvr
   r2   join)r,   Z	arg_startr-   r-   r.   r2      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 rK   )sync
SystemExit)r]   r^   rE   r-   r.   _sync   s    z(Beat.install_sync_handler.<locals>._sync)SIGTERMSIGINTN)r
   Zsignalsupdate)r,   rE   rb   r-   ra   r.   r@      s    zBeat.install_sync_handler)NNr   NNr   NNNNNNF)N)__name__
__module____qualname____doc__r	   r:   r   __annotations__r/   r5   r8   r3   r;   r1   rI   r2   r@   r-   r-   r-   r.   r   (   s0   
                , 	r   )ri   
__future__r   r)   r>   rZ   r   signalr   typesr   typingr   Zceleryr   r   r	   r
   Zcelery.utils.importsr   Zcelery.utils.logr   r   Zcelery.utils.timer   __all__striprP   r<   r   r-   r-   r-   r.   <module>   s    