
    u(i                         d 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  ej$                  e      Z e       Zd Zd Zd Zd Zd Zy# e$ rZ ed
e        Y dZ[>dZ[ww xY w)zt
Daily Service Level Computation Cron Jobs

Simple cron jobs for daily service level computation using APScheduler.
    N)BackgroundScheduler)CronTrigger)datetime)Session)get_db_session)
CronJobLog)compute_service_level_dailyz,Warning: Could not import required modules: c                  D   t               } d}	 t        j                  d       t        ddt	        j
                               }| j                  |       | j                          | j                  |       t        j                  d|j                          t        j                         }t        j                  d|j                          |j                  |_        | j                          t        j                  d       | j'                          y# t        $ rm}t        j                  d	t        |              |r@d
|_        t        |      |_        t	        j
                         |_        | j                          Y d}~d}~ww xY w# | j'                          w xY w)z/Daily cron job to compute service level metricsNz+Starting service level computation cron jobservice_levelstarted)	task_typestatus
started_atz Created cron log entry with ID: z0Service level computation task started with ID: zIService level computation cron job completed - task running in backgroundz-Error in service level computation cron job: failed)r   loggerinfor   r   utcnowaddcommitrefreshidr	   delaytask_id	Exceptionerrorstrr   error_messagecompleted_atclose)dbcron_logtaskes       X/var/www/html/hubwallet-dev/src/smart_inventory/jobs/daily_service_level_compute_cron.pyservice_level_compute_jobr%      s6    "BH&AB %(

 	x
		


86x{{mDE +002FtwwiPQ  77
		 	_` 	
  DSVHMN&HO%(VH"$,OO$5H!IIK 	
s+   C5D 	F
A#F F F

F Fc                  d   	 t         j                  rt        j                  d       yt         j	                  t
        t        dd      ddd	       t         j                          t        j                  d
       y# t        $ r+} t        j                  dt        |               Y d} ~ yd} ~ ww xY w)z-Start the service level computation cron jobsz6Service level computation scheduler is already runningN   r   )hourminuteservice_level_computezService Level ComputationT)functriggerr   namereplace_existingzSService level computation cron job started successfully - will run daily at 2:00 AMz3Error starting service level computation cron job: )	schedulerrunningr   r   add_jobr%   r   startr   r   r   r#   s    r$   start_service_level_cronr4   H   s    UKKPQ 	*Qq1&,! 	 	
 	ij UJ3q6(STTUs   %A; AA; ;	B/!B**B/c                     	 t         j                  r*t         j                          t        j	                  d       yt        j	                  d       y# t
        $ r+} t        j                  dt        |               Y d} ~ yd} ~ ww xY w)z,Stop the service level computation cron jobsz+Service level computation cron jobs stoppedz6Service level computation scheduler is already stoppedz4Error stopping service level computation cron jobs: N)r/   r0   shutdownr   r   r   r   r   r3   s    r$   stop_service_level_cronr7   `   se    V KKEFKKPQ VKCPQF8TUUVs   9A A 	B!BBc            	         	 g } t         j                         D ]e  }| j                  |j                  |j                  |j
                  r|j
                  j                         ndt        |j                        d       g t         j                  | dS # t        $ r8}t        j                  dt        |              dt        |      icY d}~S d}~ww xY w)z5Get the status of service level computation cron jobsN)r   r-   next_run_timer,   )scheduler_runningjobszError getting cron status: r   )r/   get_jobsappendr   r-   r9   	isoformatr   r,   r0   r   r   r   )r;   jobr#   s      r$   get_cron_statusr@   l   s    !%%' 	CKKffBEBSBS!2!2!<!<!>Y]s{{+	 	 "+!2!2
 	
  !23q6(;<Q  !s   BB 	C-C	CCc                      	 t         j                  d       t                dddS # t        $ r9} t         j	                  dt        |               dt        |       dcY d} ~ S d} ~ ww xY w)z8Manually trigger service level computation (for testing)z-Manually triggering service level computationTz*Manual service level computation triggered)successmessagez+Error in manual service level computation: FN)r   r   r%   r   r   r   r3   s    r$   trigger_manual_computerD      s_    
5CD 	"#,XYY 5B3q6(KL SV445s   #& 	A(.A#A(#A()__doc__logging!apscheduler.schedulers.backgroundr   apscheduler.triggers.cronr   r   sqlalchemy.ormr   src.utils.dbr   .src.smart_inventory.apps.inventory.cron_modelsr   src.smart_inventory.tasks.tasksr	   ImportErrorr#   print	getLogger__name__r   r/   r%   r4   r7   r@   rD        r$   <module>rS      s     A 1  ">+IK 
		8	$  !	+\U0	V!*5a  >	8
<==>s   A A5 A00A5