
    6i              
       X   d dl mZmZ d dlZddlmZ ddlmZ 	 d dl	m
Z
 dZ ej                  e      Z e       Zej'                  ed	d
g       ej'                  eddg       ej)                  ddg      defd       Zd dl mZmZ d dlmZ d dlmZmZ d dlmZmZ 	 d dl m!Z! d dl"m#Z# dZ$ej)                  ddg       edd       edddd       ed dd!d"       ee!      fd#ed$e%d%e%d&efd'       Z&y# e$ rZ ede        dZ
dZY dZ[dZ[ww xY w# e$ r	 dZ!dZ#dZ$Y yw xY w)(    )	APIRouterHTTPExceptionN   )router)
celery_appTz-Warning: Could not import Celery components: Fz	/productszSmart Inventory - Products)prefixtagsz
/inventoryzSmart Inventory - Inventoryz/celery/task-status/{task_id}zSmart Inventory - Common)r	   task_idc                 L   t         st        dd      	 t        st        dd      t        j                  |       }|j                  dk(  r| |j                  dd}|S |j                  dk(  r| |j                  |j
                  d	}|S |j                  d
k(  r| |j                  |j
                  d	}|S | |j                  |j
                  rt        |j
                        ndd}|S # t        $ r3}t        j                  dt        |              t        dd      d}~ww xY w)zGet status of a Celery task  zCCelery not available. Task status service is currently unavailable.status_codedetailzCelery app not availablePENDINGzTask is pending...)r
   statusmessagePROGRESS)r
   r   dataSUCCESSzUnknown error)r
   r   errorzError getting task status:   zError getting task statusN)
celery_availabler   r   AsyncResultstateresultstr	Exceptionloggerr   )r
   taskresponsees       9/var/www/html/hubwallet-dev/src/smart_inventory/router.pyget_task_statusr#       s5    X
 	

*Q1 
 %%g.::" #**/H6 - ZZ:% #**H(  ZZ9$ #**H  #**-1[[T[[)oH  Q23q6(;<4OPPQs*   AC' *C' 	*C' 42C' '	D#0.DD#)DependsQuery)Session)descfunc)datetime	timedelta)get_db)
CronJobLogz/testing/cron-statusz?Filter by task type (e.g., 'daily_sales', 'inventory_snapshot'))description      z'Number of days to check for recent logs)geler-   
   2   zNumber of recent logs to return	task_typedayslimitdbc                    t         st        dd      	 t        j                         }|t	        |      z
  }|j                  t              }| r"|j                  t        j                  | k(        }|j                  t        j                  |k\        j                  t        t        j                              j                  |      j                         }|j                  t              }| r"|j                  t        j                  | k(        }|j                         }	|j                  t        j                  dk(        j                         }
|j                  t        j                  dk(        j                         }g }|D ]  }|j!                  |j"                  |j$                  |j                  |j                  |j&                  r|j&                  j)                         nd|j*                  r|j*                  j)                         nd|j,                  |j.                  |j                  r|j                  j)                         ndd	        |	d	kD  r|
|	z  d
z  nd	}|	|
|t1        |d      |d|| rd| ind|j)                         g dddS # t2        $ r?}t4        j7                  dt9        |              t        ddt9        |             d}~ww xY w)zz
    Get cron job status and recent execution logs for all smart inventory crons.
    Optionally filter by task_type.
    r   zCron models not availabler   )r5   successfailedN)	idr
   r4   r   
started_atcompleted_atduration_secondserror_message
created_atr   d   r   )total_executionssuccessful_executionsfailed_executionssuccess_rate_percentdays_checkedr4   )daily_salesinventory_snapshotservice_levelslow_moversinventory_planningproduct_fetch)
checked_atavailable_task_types)
statisticsrecent_logsfiltermetadatazError checking cron status: r   )cron_models_availabler   r)   utcnowr*   queryr,   rQ   r4   r@   order_byr'   r6   allcountr   appendr;   r
   r<   	isoformatr=   r>   r?   roundr   r   r   r   )r4   r5   r6   r7   now
since_date
base_queryrP   stats_queryrB   rC   rD   formatted_logslogsuccess_rater!   s                   r"   get_cron_statusrc   f   s    !.
 	

<]oo9$//
 XXj)
#**:+?+?9+LMJ !VJ))Z78Xd:0012U5\SU	 	 hhz*%,,Z-A-AY-NOK&,,. + 2 2:3D3D	3Q R X X Z'..z/@/@H/LMSSU  	C!!ff;; ]]**<?NNcnn668PT@C@P@P 0 0 : : <VZ$'$8$8!$!2!2<?NNcnn668PT
# 
	 L\^_K_-0@@3Fef %5)>%6(-lA(> $ *2;{I.!mmo )U
 	
   ]3CF8<=6RSVWXSYRZ4[\\]s   I:J 	K:KK)'fastapir   r   loggingapps.products.routerr   products_routerapps.inventory.routerinventory_routersrc.utils.celery_workerr   r   ImportErrorr!   print	getLogger__name__r   main_routerinclude_routergetr   r#   r$   r%   sqlalchemy.ormr&   
sqlalchemyr'   r(   r)   r*   src.utils.dbr+   #src.smart_inventory.jobs.cron_modelr,   rS   intrc        r"   <module>ry      s   ,  ; =2 
		8	$k   
&	'     
'	(   08R7ST2QS 2Q U2Ql # " ! ("#>  '/I.JK4-noaA"2[\raB4UV&/	L]L]
L] L] 		L] LL]{  	9!
=>Jl  "FJ!"s)   C: !D :D?DDD)(D)