
    jP-                        d dl Z d dlmZ d dlmZmZmZmZmZmZ d dl	m
Z
mZmZmZmZmZmZ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mZm Z  d d
l!m"Z"m#Z#m$Z$m%Z%m&Z& d dl'm(Z(m)Z)  ede*          Z+de,fdZ-de,de,fdZ.de,de,fdZ/e+0                    dddg          d             Z1e+0                    dg d          d             Z2e+3                    d          de4fd            Z5e+6                    d          de4fd            Z7e+3                    d          d              Z8e+3                    d!          d"             Z9e+3                    d#          d$             Z:e+3                    d%          de4fd&            Z;e+3                    d'          de4fd(            Z<e+3                    d)          d*             Z=dS )+    N)datetime)	Blueprintjsonifyredirectrender_templaterequesturl_for)
BATCH_SIZECONF_THRESHIMGSZMODEL_DEFAULTMODEL_REGISTRYget_train_base_model_optionsget_upload_model_defaultget_upload_model_options)fetch_image_urls)get_job)list_saved_jobs)get_job_snapshotlist_running_jobsrequest_cancelstart_detection_job)!attach_identity_to_manifest_itemsload_identity_reportload_result_manifest)default_time_rangeensure_hours_listformat_timestampparse_and_normalize_dtto_datetime_local_str)get_request_ownerjob_matches_ownerjobreturnc                  "    ddl m}   |             S )zGLazy import to avoid circular dependency on face module at import time.r   get_face_library_status)%modules.face.services.library_servicer'   r&   s    >/home/longshao/multi-rider-rag/modules/detection/job_routes.py_get_face_library_statusr*   +   s#    MMMMMM""$$$    c                 r      fddD             }t                               d          pg           |d<   |S )Nc                 <    i | ]}|                     |          S  )get).0keyr#   s     r)   
<dictcomp>z%_progress_payload.<locals>.<dictcomp>2   s5        	SWWS\\  r+   )idstatusmessagetotal	processedkeptnotfoundfailed
downloadedstart_tsend_tsowner_ip	model_key	zip_partszip_parts_count)lenr/   )r#   datas   ` r)   _progress_payloadrD   1   sX       
  D$ "#''+"6"6"<"==D	Kr+   recordc                    |                      d          pi }|                      d          |                      dd          |                      dd          |                      dd          t          |                      d                    t          |                      d	                    |                      d
          |                      dd          |                      dd          t          |                      d          pg           |                      dt                    |t	          d|                      d                    t	          d|                      d                    dS )Nidentity_summaryr3   job_typeoraclesource_name source_typer<   r=   r4   r8   r   r6   r@   r?   zjob.history_detail_pagejob_idzfile.download_zip)r3   rH   rJ   rL   r<   r=   r4   r8   r6   rA   r?   rG   
detail_urldownload_url)r/   r   rB   r   r	   )rE   rG   s     r)   _history_summary_payloadrQ   H   s4   zz"455;jjJJz844zz-44zz-44$VZZ
%;%;<<"6::h#7#788**X&&

61%%GQ''vzz+66<"==ZZ];;,7

4@P@PQQQ 3FJJt<L<LMMM  r+   /GETPOST)methodsc                     t           j        dk    rt          t          d                    S t	                      \  } }	 t          j        | d          }t          j        |d          }n'# t          $ r t          j                    }|}|}Y nw xY wt          d| |t          |          t          |          t          t          t          t          t                      t!                      t#                                S )NrT   z	job.indexz%Y-%m-%d %H:%M:%Sz
index.html)kssjjssj
kssj_local
jssj_localconf_defaultbatch_defaultimgsz_defaultmodel_defaultupload_model_defaultupload_modelstrain_base_models)r   methodr   r	   r   r   strptime	Exceptionnowr   r    r   r
   r   r   r   r   r   )rW   rX   kssj_dtjssj_dtre   s        r)   indexrh   \   s    ~,,---#%%JD$#D*=>>#D*=>>   lnn
 (11(11  #577.00688   s   *A* *!BBz/start)rS   rT   OPTIONSc            
         t           j        dk    rdS t           j        dk    rt           j        nt           j        } |                     dd          pd                                }|                     dd          pd                                }t           j        dk    rt           j                            d          nt           j                            d          }t          |          }|                     dd          pd                                }|                     d	d          pd                                }|                     d
d          pd                                }|                     dd          pd                                }|                     dt                    pt                                          }	|	t          vrt          dd|	 d          dfS 	 t          |          }
t          |          }n# t          $ r |}
|}Y nw xY w	 t          |
|||	          }n.# t          $ r!}t          dd| d          dfcY d }~S d }~ww xY w|st          ddd          dfS t          }	 |r+t          dt!          dt#          |                              }n# t          $ r Y nw xY wt$          }	 |rt          dt'          |                    }n# t          $ r Y nw xY wt(          }	 |rt          dt'          |                    }n# t          $ r Y nw xY wt+          t                     \  }}t-          ||||||	||          }t          d|d         t/          |          d          S )Nri   )rK      rT   rW   rK   rX   hoursconf
batch_sizeimgszclassesr?   Fu   非法 model_key: okerrori  u   数据库查询失败: i  u   未查询到图片 URLg        g      ?   @   Tr3   )rr   rN   r6   )r   rb   formargsr/   stripgetlistr   r   r   r   r   rd   r   r   maxminfloatr
   intr   r!   r   rB   )rv   kssj_injssj_in	hours_rawrl   conf_inbatch_inimgsz_inclasses_rawr?   rW   rX   url_and_timesexcconf_val	batch_val	imgsz_val	owner_keyr>   r#   s                       r)   	start_jobr   z   s   ~""y">V337<<Dxx##)r0022Gxx##)r0022G1861I1I$$W---w|OcOcdkOlOlIi((Exx##)r0022Gr**0b7799H"%%+2244H88Ir**0b7799K+}55FMMOOI&&e.N9.N.NOOPPRUUU%g..%g..   U(tUIFF U U Ue.M.M.MNNOOQTTTTTTTTU  Ne.FGGHH#MMH 	:3Cw 8 899H    I 	.As8}}--I    I 	/BH..I    ,G44Ix
	 	C $#d)c->P>PQQRRRsf   )H HHH0 0
I:III<-J* *
J76J7K" "
K/.K/:L 
L'&L'z/progress/<job_id>rN   c                    t          t                    \  }}t          |           }|Dt          |||          st	          ddd          dfS t	          dt          |          d          S t          |           }|t          |||          st	          ddd          dfS t	          dt          |          d          S )NFjob not foundrq     T)rr   r#   )r!   r   r   r"   r   rD   get_saved_job)rN   r   r>   r#   	saved_jobs        r)   get_progressr      s    +G44Ix
6
"
"C
 i:: 	I%/BBCCSHHd+<S+A+ABBCCCf%%I 1)Y Q Qeo>>??DD$'8'C'CDDEEEr+   z/cancel/<job_id>c                     t          t                    \  }}t          | ||          st          ddd          dfS t          ddi          S )NFr   rq   r   rr   T)r!   r   r   r   )rN   r   r>   s      r)   
cancel_jobr      sV    +G44Ix&)X66 Eeo>>??DDD$<   r+   z/jobsc                      t          t                    \  } }t          | |          }t          dt	          |          |d          S )NT)rr   running_countrunning)r!   r   r   r   rB   )r   r>   r   s      r)   	list_jobsr      sA    +G44Ix	844G$W'RRSSSr+   z/historyc                     t           j                            dd          } 	 t          |           }n# t          $ r d}Y nw xY wt          t                     \  }}t          |||          }d |D             }t          d|d          S )Nlimit502   )r   c                 ,    g | ]}t          |          S r.   )rQ   )r0   rE   s     r)   
<listcomp>zhistory.<locals>.<listcomp>   s!    DDD&%f--DDDr+   T)rr   jobs)r   rw   r/   r}   rd   r!   r   r   )	limit_rawr   r   r>   recordsitemss         r)   historyr      s      $//II    ,G44Ixi???GDDGDDDE$..///s   2 A Az/history-pagec                       t          d          S )Nz&modules/detection/history/history.htmlr   r.   r+   r)   history_pager      s    CDDDr+   z/history-page/<job_id>c                 $    t          d|           S )Nz-modules/detection/history/history_detail.htmlrM   r   rM   s    r)   history_detail_pager      s    JSYZZZZr+   z/history/<job_id>c                     t                     }|t          ddd          dfS d }|                    d          }|rBt          j                            |          r#	 t          |          }n# t          $ r d }Y nw xY wi g d}|                    d          }|rEt          j                            |          r&	 t          |          }n# t          $ r i g d}Y nw xY wg }|t          ||          D ]}|
                    |                    d          |                    d	          |                    d
          p|                    d	          |                    dd          t          d |                    d                    |                    d          d           di t          |          |                    dd          |                    dd          |                    dd          |                    dd          |                    dd          t          |          t          d           t          |                    d          pg           dk    r# fd|                    d          pg D             ng d||                    d          p|                    d          pi t                      d }t          |          S )!NFr   rq   r   result_manifest_path)summaryr   identity_result_pathr3   nameorigin_name
size_bytesr   zface.result_asset)rN   asset_ididentity)r3   r   r   r   	asset_urlr   Tr5   rK   r;   r9   r:   summary_textzfile.download_summaryrM   r@   rt   c           
          g | ]R}|                     d           |                     d           t          d|                     d                     dSS )r   zfile.download_zip_part)rN   part)r   url)r/   r	   )r0   r   rN   s     r)   r   z"history_detail.<locals>.<listcomp>%  sv       
 88F## HHV,,"#;FQUQYQYZ`QaQabbb   r+   )r5   r;   r9   r:   r   result_countsummary_urldownload_partsr   rG   )rr   r#   r   rG   library)r   r   r/   ospathisfiler   rd   r   r   appendr	   rQ   rB   r*   )	rN   rE   manifestmanifest_pathidentity_reportidentity_pathr   itempayloads	   `        r)   history_detailr      s9   6""F~eo>>??DDHJJ566M 66 	+M::HH 	 	 	HHH	 #%r22OJJ566M ;66 ;	;2=AAOO 	; 	; 	;*,r::OOO	; E5hPP 
	 
	DLL((4.. HHV,,#'88M#:#:#Ndhhv>N>N"&((<";";!()<VVZV^V^_cVdVd!e!e!e $ 4 4 	 	 	 	 
&v..
zz)R00 **\155

:q11jj1--"JJ~r::JJ"#:6JJJ VZZ,,233a77   
 $ZZ44:    >@!
 
 
$ +//	::dvzzJ\?]?]?cac+--- G0 7s$    A0 0A?>A?>C C C z/api/dashboard/statsc                     ddl } ddl}ddlm} t	          t
                    \  }}t          |                                          |                                dz  z
  }ddl}|j                                        }|                    |j	        |j
        |j                                                  }d}	d}
	 |                     |d          }| j        |_        |                    dt          |          ||f                                          }|r|d         nd}	|                    d	||f                                          }|r|d         nd}
|                                 n# t&          $ r Y nw xY wt)          d
|	|
d          S )zSReturn real-time header stats: today's identity matches and pending dispatch count.r   N)SQLITE_DB_PATHiQ    )timeoutz`SELECT COUNT(*) AS cnt FROM dispatch_queue WHERE created_ts >= ? AND (owner_key=? OR owner_ip=?)cntzjSELECT COUNT(*) AS cnt FROM dispatch_queue WHERE dispatch_status='pending' AND (owner_key=? OR owner_ip=?)T)rr   today_matchedpending_dispatch)sqlite3timeshared.config.configr   r!   r   r}   r   re   yearmonthday	timestampconnectRowrow_factoryexecutefetchonecloserd   r   )_sqlite3_time_DB_PATHr   r>   today_start_dt	now_localtoday_midnightr   r   connrowrow2s                 r)   dashboard_statsr   5  s    ??????+G44Ixejjll##uzz||e';<K  ""I\\).)/9=QQ[[]]NM!44#< lln  )X6
 
 (** 	 '*0E

q ||x!
 
 (** 	 +/54;;A

    $Tdeefffs   9B1E+ +
E87E8)>r   r   flaskr   r   r   r   r   r	   r   r
   r   r   r   r   r   r   r   shared.db.oracler   shared.db.sqliter   r   r   &modules.detection.services.job_servicer   r   r   r   /modules.detection.services.result_store_servicer   r   r   shared.utils.helpersr   r   r   r   r    shared.ownership.ownershipr!   r"   __name__job_bpdictr*   rD   rQ   routerh   r   r/   strr   postr   r   r   r   r   r   r   r.   r+   r)   <module>r      s,   				       Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 . - - - - - 5 5 5 5 5 5 , , , , , ,                    
              L K K K K K K K 
5(	#	#%$ % % % %4 D    .T d    ( cE6?++  ,+: h : : :;;BS BS <;BSJ  !!F F F F "!F   !s ! ! ! ! ! GT T T J
0 
0 
0 OE E E $%%[ [ [ [ &%[   ;3 ; ; ; ! ;| "##'g 'g $#'g 'g 'gr+   