
    ,Wi                         S r SSKrSSKrSSKrSSKrSSKJr  SSKJr  SSK	J	r	J
r
  \R                  " \5      r " S S5      rg)uE   
Session自动清理服务

定期清理过期的Flask session文件
    N)Path)Optional)datetime	timedeltac                   `    \ rS rSrSrSS\S\S\4S jjrS rS r	S	 r
S
\4S jrS
\4S jrSrg)SessionCleaner   u   Session自动清理器session_dirsession_lifetimecleanup_intervalc                 X    [        U5      U l        X l        X0l        SU l        SU l        g)u   
初始化Session清理器

Args:
    session_dir: Session文件目录
    session_lifetime: Session生命周期（秒），默认1小时
    cleanup_interval: 清理间隔（秒），默认1小时
FN)r   r
   r   r   _running_thread)selfr
   r   r   s       N   /Users/yu22x/Desktop/ddd_副本128/ctf/app/services/storage/session_cleaner.py__init__SessionCleaner.__init__   s+      , 0 037    c                 "   U R                   (       a  [        R                  S5        gSU l         [        R                  " U R
                  SS9U l        U R                  R                  5         [        R                  SU R                   S35        g)u   启动自动清理线程u   Session清理器已在运行NT)targetdaemonu/   Session自动清理器已启动 (清理间隔: u   秒))
r   loggerwarning	threadingThread_cleanup_loopr   startinfor   r   s    r   r   SessionCleaner.start$   sh    ==NN9: ''t/A/A$OEdF[F[E\\`abr   c                     SU l         U R                  (       a  U R                  R                  SS9  [        R	                  S5        g)u   停止自动清理线程F   )timeoutu   Session自动清理器已停止N)r   r   joinr   r   r   s    r   stopSessionCleaner.stop/   s2    <<LLa(56r   c                 V   U R                   (       aj   U R                  5         [        U R                  5       H,  nU R                   (       d    O[        R                  " S5        M.     U R                   (       a  Mi  gg! [         a!  n[        R	                  SU 3SS9   SnANSnAff = f)u   清理循环u   清理Session时出错: Texc_infoN   )	r   cleanup_expired_sessions	Exceptionr   errorranger   timesleep)r   e_s      r   r   SessionCleaner._cleanup_loop6   s~    mmL--/
 4001}}

1 2 mmm  L7s;dKLs   A= =
B(B##B(returnc                    U R                   R                  5       (       d#  [        R                  SU R                    35        gSn[        R                  " 5       nX R
                  S-   -
  n U R                   R                  S5       Hs  nUR                  5       (       d  M   UR                  5       R                  nXS:  a9  UR                  5         US-  n[        R                  SUR                   35        Ms  Mu     US:  a  [        R#                  SU S35        U$ ! [        [        4 a0  n[        R                  SUR                   SU 35         S	nAM  S	nAf[         a1  n[        R!                  S
UR                   SU 35         S	nAGM  S	nAff = f! [         a"  n[        R!                  SU 3SS9   S	nAU$ S	nAff = f)uB   
清理过期的Session文件

Returns:
    清理的文件数量
u   Session目录不存在: r     *r*   u   已删除过期Session文件: u   无法删除Session文件 z: Nu   处理Session文件 u    时出错: u
   已清理 u    个过期Session文件u   清理Session文件时出错: Tr(   )r
   existsr   debugr/   r   globis_filestatst_mtimeunlinknameOSErrorPermissionErrorr   r,   r-   r   )r   deleted_countnowcutoffsession_filemtimer1   s          r   r+   'SessionCleaner.cleanup_expired_sessionsD   s    &&((LL3D4D4D3EFGiik--45	N $ 0 0 5 5c :#++--
\(--/88E~$++-%*'ElFWFWEX%YZ & !;  q j7NOP
   1 ZNN%?@Q@Q?RRTUVTW#XYY  \LL#78I8I7J,WXVY!Z[[\  	NLL9!=LM	NsU   ,5F "AD8%F F/%EF F'%FF FF 
G%GGc                 "    U R                  5       $ )u   立即执行一次清理)r+   r   s    r   cleanup_nowSessionCleaner.cleanup_nowm   s    ,,..r   )r   r   r   r
   r   N)r6   r6   )__name__
__module____qualname____firstlineno____doc__strintr   r   r%   r   r+   rI   __static_attributes__ r   r   r   r      sI     8C 83 8Y\ 8	c7'# 'R/S /r   r   )rO   osr/   r   loggingpathlibr   typingr   r   r   	getLoggerrK   r   r   rS   r   r   <module>rY      s=   
 
      (			8	$]/ ]/r   