
    i                         d Z ddlZddlZddlmZmZ ddlmZ ddlmZm	Z	m
Z
 dZddeded	efd
Zdded	e
e	eef      fdZde
e	eef      d	efdZded	efdZy)ux   
에러 알림 모듈

최근 에러 개수를 모니터링하고 임계값을 초과할 때 알림을 전송합니다.
    N)datetime	timedelta)Path)AnyDictListz/tmp/errors.jsonlminutes
max_errorsreturnc                 ~    	 t        |       }t        |      |kD  S # t        t        j                  t
        f$ r Y yw xY w)u  
    최근 minutes분 이내 에러 개수가 max_errors를 초과하면 True 반환.

    Args:
        minutes: 확인할 시간 범위 (분 단위)
        max_errors: 에러 개수 임계값

    Returns:
        에러 개수 > max_errors이면 True, 아니면 False
    F)get_recent_errors_in_windowlenFileNotFoundErrorjsonJSONDecodeError	Exception)r	   r
   errorss      B/home/jay/workspace/.worktrees/task-2116-dev1/utils/error_alert.pycheck_error_thresholdr      s?    ,W56{Z''t33Y? s    <<c                    t        t              j                         sg S g }t        j                         t        |       z
  }	 t        t        d      5 }|D ]d  }|j                         st        j                  |      }t        j                  |j                  dd            }||k\  sT|j                  |       f 	 ddd       |S # 1 sw Y   |S xY w# t        j                  t        t        f$ r Y |S w xY w)u   
    최근 minutes분 이내 에러 목록 반환.

    Args:
        minutes: 확인할 시간 범위 (분 단위)

    Returns:
        에러 레코드 리스트
    )r	   rts N)r   ERRORS_FILEexistsr   nowr   openstripr   loadsfromisoformatgetappendr   
ValueErrorr   )r	   r   cutoff_timeflinerecord
error_times          r   r   r   $   s     ##%	F,,.9W#==K
+s# 	*q *zz|D)%33FJJtR4HI
,MM&)*	* M	* M   *i8 Ms7   C AC	+C	?C 	CC C C87C8r   c                 D   | sydt        |        d}t        dt        |             }t        |      D ]7  }| |   }|j                  dd      }|j                  dd      }|d	| d
| dz  }9 t        |       dkD  rt        |       dz
  }|d| dz  }|j	                         S )u   
    에러 요약 메시지 생성.

    Args:
        errors: 에러 레코드 리스트

    Returns:
        포맷된 알림 메시지
    u'   [에러 알림] 에러가 없습니다.u   [에러 알림] u   건의 에러 발생
   
error_typeUnknownmessager   z  - z: 
u     외 u   건
)r   minranger!   rstrip)r   r-   display_countierrorr+   msgextra_counts           r   format_alert_messager7   C   s     8 V-CDG 3v;'M=! 0q	YY|Y7
ii	2&T*RuB//	0 6{Q&kAoVK=..>>    r-   c                 t    	 t        j                  d| gdd      }|j                  dk(  S # t        $ r Y yw xY w)u   
    알림 메시지를 cokacdir로 전송.

    Args:
        message: 전송할 메시지

    Returns:
        성공하면 True, 실패하면 False
    cokacdirT   )capture_outputtimeoutr   F)
subprocessrun
returncoder   )r-   results     r   
send_alertrB   b   sB    W 5dTUV  A%% s   (+ 	77)   r;   )rC   )__doc__r   r>   r   r   pathlibr   typingr   r   r   r   intboolr   strr   r7   rB    r8   r   <module>rK      s      (  " " "3  T $ d4S>6J >d38n!5 # >  r8   