fj} t d Z ddlZddlZddlmZmZ ddlmZ ddlmZm Z ddl
mZmZm
Z
G d d ZdS ) z[
This module contains FaultDetector class, aimed to track throttling
for incoming requests
N)datetime timedelta)RLock)TupleAny)
drop_aftercheck_periodthrottling_thresholdc D e Zd ZdZdZd Zdededee ef fdZ
edefd Zede
fd Zede
fd
Zede fd Zedede
fd
Zdede
fdZdededdfdZdeddfdZdededee ef fdZddZddZdefdZdS )
FaultDetectorz
Fault Detector class
i' c t j d | _ t | _ t | _ d| _ d S )Nfault_detectorz$/usr/share/alt-php-xray/flush.latest)logging getLoggerloggerdictthrottling_statr locktime_marker_fileselfs P/opt/cloudlinux/venv/lib64/python3.11/site-packages/xray/agent/fault_detector.py__init__zFaultDetector.__init__ s: '(899#vvGG F t_key cpu_valuereturnc | j 5 | j | \ }}| || \ }}| | n# t $ r d\ }}Y nw xY wddd n# 1 swxY w Y ||fS )z)
Perform fault detection
)Fr N)r r _was_throttled_since_flush_entryKeyError)r r r saved_cpu_hitting_limitsthrottled_times r __call__zFaultDetector.__call__" s Y ) )
)#3E: 1 261J1Jy2* 2*.!!%((((
:
:
:19.
: ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ~--s3 A*A /A* AA*AA**A.1A.c B t t j S )z(
Current Unix timestamp
)inttimer s r timestampzFaultDetector.timestamp1 s
49;;r c 6 | t S )z8
Drop after value as datetime.timedelta
)timedelta_in_minutesr r s r _drop_afterzFaultDetector._drop_after8 s
((444r c 6 | t S )z:
Check period value as datetime.timedelta
)r, r r s r
_check_periodzFaultDetector._check_period? s
((666r c t | j 5 }t | }ddd n# 1 swxY w Y | | | j k S # t t f$ r7 | j 5 |
ddd n# 1 swxY w Y Y dS w xY w)ze
If throttling_stat should be flushed right now
regarding check period value
NF)openr r( readstrip
current_deltar/ OSError
ValueErrorr _update_latest_flush)r latest_infolatest_flush_times r should_flushzFaultDetector.should_flushF sS d+,,
D$'(8(8(:(:(@(@(B(B$C$C!
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D%%&7884;MMM$
,
,))+++
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,55 sX A? 4A
A? AA? A A? ?CB8,C8B< <C?B< CCminsc " t | S )zB
Get timedelta object for given number of minutes
)minutes)r )r; s r r, z"FaultDetector.timedelta_in_minutesU s
&&&&r
time_stampc ^ dt dt fd} || j || z
S )zQ
Calculate timedelta for given time_stamp from current timestamp
tsr c * t j | S )z>
Make a datetime object from ts (int)
)r
fromtimestamp)r@ s r _castz*FaultDetector.current_delta.