o
    &j                     @   s   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 d dlmZ d dlmZ d d	lmZ d d
lmZmZmZ eeZdadd Zdd Zdd Zdd Zdd ZdefddZdS )    N)BackgroundScheduler)CronTrigger)FastAPI)StaticFilestimezone)CORSMiddleware)SessionMiddleware)Config)dbengineBaseFc                  C      ddl m}  z3ztd | dd}td|  W n ty)   td Y n	w W tj  d S W tj  d S tj  w )Nr   )sync_active_subscribers_oncez[BillingSync] Job startd   )limitz[BillingSync] Job finished: z$[BillingSync] Unhandled error in job)	app.routes.callback_routesr   loggerinfo	Exception	exceptionr   sessionremove)r   summary r   :/home/www/bk.finsightngr.online/finsigh_v2/app/__init__.py_run_billing_sync_job      

r   c                  C   r   )Nr   )expunge_billing_syncz)[BillingSync:EXPUNGE] Nightly purge startT)Zhard_truncatez,[BillingSync:EXPUNGE] Nightly purge result: z%[BillingSync:EXPUNGE] Unhandled error)	r   r   r   r   r   r   r   r   r   )r   resultr   r   r   _run_expunge_billing_sync$   r   r    c                  C   |   ddl m}  z1ztd |  }td|  W n ty'   td Y n	w W tj  d S W tj  d S tj  w )Nr   ) sync_billing_to_subscribers_oncez[SubSync] job startz[SubSync] job done: z[SubSync] unhandled job error)	r   r"   r   r   r   r   r   r   r   )r"   r   r   r   r   _run_billing_to_subscribers_job0      
r#   c                  C   r!   )Nr   )run_daily_link_maintenancez[DailyLinks] Job startz[DailyLinks] Job finished: z[DailyLinks] Unhandled error)	Zapp.routes.scheduler_routesr%   r   r   r   r   r   r   r   )r%   resr   r   r   _run_daily_links_job<   r$   r'   c                 O   s   z9z| |i |}t d| j d|  W n ty)   t d| j d Y n	w W tj  d S W tj  d S tj  w )Nz[Scheduler] z: z failed)r   r   __name__r   r   r   r   r   )fnargskwargsr&   r   r   r   _with_cleanupH   s   r,   returnc               	      s@  t jt jd t  } | t d t  |  tdd}|j	t
tjd |j	tg ddg dg d	d
gd z|jdtdddd W n tyT   td Y nw ddlm} tjt ddlm} || tsddlm} ddlmm m!m"  t#t$ddj%|ddddddd j%t&ddddddd j%t't(ddd d!dddd" j%t)dd#d$dddd j%t*t(d%dd d&dddd" j%fd'd(t(d)d*d d+dddd" j% fd,d(t(d)d-d d.dddd" j%fd/d(t(d)d0d d1dddd" +  t,-fd2d( dat.d3 |S t.d4 |S )5N)levelz)%(asctime)s - %(levelname)s - %(message)szFinSight API)title)Z
secret_key)zhttps://finsightngr.onlinezhttp://192.168.0.134zhttp://192.168.0.177zhttp://192.168.100.21z!https://worker.finsightngr.onlineT)GETPOSTPUTZDELETEZOPTIONS)Content-Typez	x-api-keyzX-Subscriber-TokenAuthorizationr3   )Zallow_originsZallow_credentialsZallow_methodsZallow_headersZexpose_headersz/staticz
app/static)	directoryZstatic)namez9app/static directory not found; static files not mounted.   )modelsr   )setup_routes)send_payload)&reset_has_received_message_for_activesenqueue_sms_for_activesprocess_sms_outbox_onceSENDER_DEFAULTzAfrica/Lagosr   interval   Zpayload_job)functriggerminutesidreplace_existingcoalescemax_instances   Zbilling_sync_job)hourminuteZbilling_expunge_job)rA   rB   rD   rE   rF   rG      Zbilling_to_subscribers_jobz4-8Zdaily_links_jobc                      s   t  S Nr,   r   )r;   r   r   <lambda>   s    zcreate_app.<locals>.<lambda>	      Zsubmsg_reset_jobc                      s
   t  S rL   rM   r   )r>   r<   r   r   rN         
    Zsms_enqueue_jobc                      s
   t  dS )Ni  rM   r   )r=   r   r   rN      rQ   z16-59/1Zsms_worker_jobc                      s    j ddS )NF)wait)shutdownr   )	schedulerr   r   rN      s    z)[Scheduler] Background scheduler started.u9   [Scheduler] Already running — skipping duplicate start.)/loggingbasicConfigINFOStreamHandlersetFormatter	Formatter	getLogger
addHandlerr   Zadd_middlewarer	   r
   Z
SECRET_KEYr   Zmountr   RuntimeErrorr   warning r8   r   metadataZ
create_allr   Z
app.routesr9   _scheduler_startedZapp.checker_1r:   Zapp.sms_pushr;   r<   r=   r>   r   r   Zadd_jobr   r    r   r#   r'   startatexitregisterr   )streamappZ_modelsr9   r:   r   )r>   r<   r=   r;   rU   r   
create_appT   s   







rh   ) rd   rV   Z!apscheduler.schedulers.backgroundr   Zapscheduler.triggers.cronr   Zfastapir   Zfastapi.staticfilesr   Zpytzr   Zstarlette.middleware.corsr   Zstarlette.middleware.sessionsr	   Z
app.configr
   Zapp.databaser   r   r   r\   r(   r   rb   r   r    r#   r'   r,   rh   r   r   r   r   <module>   s&    
