edZddlZddlZddlZddlZddlmZmZddlmZm Z m Z ddl m Z m Z ddlmZddlmZdd lmZdd lmZd d lmZmZmZmZd d lmZd dlmZmZm Z eGddeZ!dS)z- This module contains RequestProcessor class N)datetime timedelta)ThreadRLockcurrent_thread)CallableAny) AutoTracer)Common) DecisionMaker)StatisticsSender) session_scopesetup_database RequestResultcleanup_old_data)SSAError) singleton url_splitswitch_schedstatsceZdZdZdZdfd ZedZdefdZ dd Z dd Z d e de fd ZddefdZdZededefdZdZddZdeddfdZxZS)RequestProcessorz^ SSA Request processor implementation. Only one instance is allowed to be created dNcttjd|_|jdt td|r|n t|_ t|_ t||_ t|_t!||_|g|_dS)N req_processorzProcessor enabled: %sTenabled)engine)super__init__logging getLoggerloggerinfo __package__rrrr_lockr decision_makerrsenderr auto_tracerstart_background_routine_buffer)selfr __class__s L/opt/cloudlinux/venv/lib64/python3.11/site-packages/ssa/modules/processor.pyr!zRequestProcessor.__init__)s '88  0+>>>$'''' &>D{a9>>K$$L&((-t555OOD$8999K$$G&((-t555OOD$4555K$$J&((-t555"__T-@AAFK$$D&((-t555%T[111OODOV<<<&d3333""2&&&&**4;7777 8r0actionc  ||S#t$rZtj\}}}|jdt |||dt jiYdSwxYw)zACall requested Callable with given args and capture any exceptionz%s failed with exception %s, %sorig_traceback)extraN) Exceptionsysexc_infor$ exceptionr8 traceback format_exc)r-rMargsetev_s r/rHzRequestProcessor._safe_execys T64=  T T T IBA K ! !"C"%f++r2)99;O;Q;Q(R " T T T T T T TsA A+*A+to_sleepc|jdtj|t j|dS)zP Log and sleep given number of seconds or 15 minutes by default z%[%s] Routine thread sleeping for (%s)N)r$r%rrAtimesleep)r-r\s r/rJzRequestProcessor._simple_sleepsE @')). : : : 8r0ctdt|z }|t|dS)zF Sleep the number of minutes remaining till next hour r )hours)minutesN)r total_secondsrJint)r- start_minute sleep_fors r/rKz&RequestProcessor._sleep_till_next_hoursYQ''') +"+"+""#0=??  3y>>*****r0 timestampc4tj|jS)zN Takes an hour of a day, to which the given timestamp belongs )r fromtimestamprG)rgs r/get_interval_forz!RequestProcessor.get_interval_fors %i0055r0c|j5|jdd}g|_dddn #1swxYwY||dSN)r'r, flush_buffer)r-objectss r/rIz RequestProcessor.flush_with_locks Z  l111oGDL                '"""""s +//c||j}|sdSt|j5}||ddddS#1swxYwYdS)z6 Save in-memory buffer into database. N)r,rrbulk_save_objects)r-rndbs r/rmzRequestProcessor.flush_buffers ?lG  F 4; ' ' *2   ) ) ) * * * * * * * * * * * * * * * * * *sAA  A datac`|s.|jdtjdS|d}||r|jd|dSt|\}}|jdtjg}|j5|j t|||d|d|d|j k|d|d |d |d  t|j |jkr|j dd}g|_ dddn #1swxYwY|||jd tjdS)z, Process given request data z [%s] has empty request, skippingNurlz %s ignoredz-[%s] Acquires lock to handle request countersrgdurationhitting_limitsthrottled_timeio_throttled_time wordpress) domainpathrgruis_slow_requestrvrwrxryz-[%s] Released lock to handle request counters)r$r%rrAget is_ignoreddebugrr'r,appendrr3len BUFFER_SIZErm)r-rrrtrzuriobjects_per_threads r/handlezRequestProcessor.handles  K  ?AQAQAV W W W Fhhuoo ??3    K  lC 0 0 0 Fnn  I(**/ 1 1 1 Z " " L  !";/!*-$($4t7O$O#'(8#9#'(8#9&*+>&?";/       4<  D$444%)\!!!_"! ' " " " " " " " " " " " " " " "* ,--- I(**/ 1 1 1 1 1s?BE""E&)E&rl)r;N)r[)__name__ __module__ __qualname____doc__rr!propertyr3dictr:r+r?rr rHrdrJrK staticmethodrjrIrmr __classcell__)r.s@r/rr s| K(00X0EEEEE9999!8!8!8!8FTTSTTTTc+++6C6C666\6 ### * * * *)14)1D)1)1)1)1)1)1)1)1r0r)"rr"rRr^rUrr threadingrrrtypingrr autotracerr commonr r(r stat_senderrrqrrrrinternal.exceptionsrinternal.utilsrrrrr0r/rs ((((((((3333333333 """"""))))))))))))OOOOOOOOOOOO****** u1u1u1u1u1vu1u1 u1u1u1r0