%IIrddlmZddlZddlZddlZddlmZddlmZm Z m Z ddl m Z m Z ddl mZddlmZmZmZmZmZmZmZmZddlmZdd lmZdd lmZd d lmZm Z m!Z!d Z" dZ# dZ$dZ%dZ&ej'dZ(ej'dZ)ej'dZ*Gdde+eZ,eGddZ-eGddZ.eGddZ/GddZ0eGdd Z1Gd!d"eZ2Gd#d$eZ3Gd%d&e3e2Z4ee.gefZ5 eGd'd(Z6Gd)d*eZ7eGd+d,e7Z8eGd-d.e7Z9eGd/d0Z:Gd1d2eZ;dde#fd:d9Z]*[>]?$ceZdZdZdZdZdS) ServiceVerbPINGSTATSINFON)__name__ __module__ __qualname__rrr r/builddir/build/BUILD/imunify360-venv-2.6.2/opt/imunify360/venv/lib/python3.11/site-packages/nats/micro/service.pyrr,s D E DDDr%rc`eZdZUded< ded< dZded< dZded< dZd ed < dd ZdS)EndpointConfigstrnamerhandlerN Optional[str] queue_groupsubjectOptional[Dict[str, str]]metadatareturnNonecf|jstdt|jstd|jr.t |jstd|jr.t |jstddSdS)NName cannot be empty.zWInvalid name. Name must contain only alphanumeric characters, underscores, and hyphens.zSInvalid subject. Subject must not contain spaces, and can only have '>' at the end.z9Invalid queue group. Queue group must not contain spaces.)r* ValueError NAME_REGEXmatchr. SUBJECT_REGEXr-selfs r& __post_init__zEndpointConfig.__post_init__Fsy 6455 5 ** xvww w < x &&t|44 x !vwww   ^ &&t'788 ^ !\]]] ^ ^ ^ ^r%r1r2)r!r"r#__annotations__r-r.r0r;r$r%r&r(r(2s III &!%K%%%%G!G!!!!h)-H----' ^ ^ ^ ^ ^ ^r%r(ceZdZUdZded< ded< ded< ded< ded< ded < ded < d Zd ed < d Zded< eddZddZ d S) EndpointStatsz6 Statistics about a specific service endpoint r)r*r.r-int num_requests num_errorsprocessing_timeaverage_processing_timeNr, last_errorz Optional[Any]dataDict[str, Any]r1c ||d|d|d|d|d|d|d|d|d  S) Nr*r.r-rArBrErCrDrF r*r.r-rArBrErCrDrFr$clsrFs r& from_dictzEndpointStats.from_dictsbsfO]+n-L)L) !23$()B$Cf    r%c x|j|j|j|j|j|jpd|j|j|jd S)NrIrIr9s r&to_dictzEndpointStats.to_dictsGI|+ -///R#3'+'CI   r%)rFrGr1r?r1rG) r!r"r#__doc__r=rErF classmethodrLrOr$r%r&r?r?VsIIILLLOOO!   !%J$$$$D    [         r%r?c|eZdZUdZded< ded< ded< eeZded< edd Z dd Z d S) EndpointInfozThe information of an endpoint.r)r*r.r-default_factoryrGr0rFr1cP||d|d|d|dS)Nr*r.r-r0r*r.r-r0r$rJs r&rLzEndpointInfo.from_dicts9sfO]+*%     r%c8|j|j|j|jdS)NrXrXr9s r&rOzEndpointInfo.to_dicts&I|+    r%N)rFrGr1rTrP) r!r"r#rQr=rdictr0rRrLrOr$r%r&rTrTs)) IIILLL %uT:::H::::   [       r%rTc:eZdZdZddZdd Zdd Zdd ZddZdS)Endpointz$Endpoint manages a service endpoint.serviceServiceconfigr(r1r2c||_|j|_|jp|j|_|jpt |_|j|_ |j |_ d|_ d|_ d|_d|_d|_d|_dS)Nr)_servicer*_namer._subjectr-DEFAULT_QUEUE_GROUP _queue_groupr+_handlerr0 _metadata _num_requests _num_errors_processing_time_average_processing_time _last_error _subscriptionr:r]r_s r&__init__zEndpoint.__init__s{ [ 5&+ ".E2E  !()%59r%cK|jrJ|jj|j|j|jd{V|_dS)N)r.queuecb)rmra_client subscribercre_handle_requestr9s r&_startzEndpoint._startsm%%%%#'=#8#B#BM##$C$ $       r%chK|jsJ|jd{Vd|_dSN)rm unsubscriber9s r&_stopzEndpoint._stopsJ!!!! ,,.........!r%cVd|_d|_d|_t|_dS)zReset the endpoint statistics.rN)rhrirjr rkr9s r&_resetzEndpoint._resets, !(1 %%%r%msgrczKtj}|xjdz c_t|} ||d{Vn#t $r}|xjdz c_t||_t|tr'| |j |j d{Vn)| dt|d{VYd}~nd}~wwxYwtj}||z }|xj|z c_t|j|jz |_dS)zHandle an endpoint message.rN500)timeperf_counter_nsrhrrf Exceptionrireprrl isinstancer respond_errorcode descriptionrjr@rk)r:r} start_timerequesterror current_time elapsed_times r&ruzEndpoint._handle_requestsj)++  a#,, @--(( ( ( ( ( ( ( ( ( @ @ @    !  #E{{D %.. @++EJ8IJJJJJJJJJJ++E4;;????????? @+-- #j0  -(+D,ADDV,V(W(W%%%sA C/B C**C/N)r]r^r_r(r1r2r<r}rr1r2) r!r"r#rQrorvrzr|rur$r%r&r\r\s..::::     """" 4444XXXXXXr%r\c.eZdZUdZded< dZded<dS) GroupConfigzThe configuration of a group.r)r*Nr,r-)r!r"r#rQr=r-r$r%r&rrs5'' III !%K%%%%//r%rcVeZdZdZeddZeddddddZdddZdS)EndpointManagerz- Manages the endpoints of a service. r_r(r1r2c KdSrxr$r:r_s r& add_endpointzEndpointManager.add_endpoint  BE#r%Nr-r.r0r*r)r+rr-r,r.r0r/c KdSrxr$r:r*r+r-r.r0s r&rzEndpointManager.add_endpoint# sr%Optional[EndpointConfig]c KdSrxr$r:r_kwargss r&rzEndpointManager.add_endpoint.s r%r_r(r1r2 r*r)r+rr-r,r.r,r0r/r1r2rxr_rr1r2)r!r"r#rQrrr$r%r&rrswEEEXE &*!%-1Xa``````r%rcReZdZdZedddd Zedd ZdddZdS) GroupManagerz* Manages the groups of a service. Nr-r*r)r-r,r1GroupcdSrxr$r:r*r-s r& add_groupzGroupManager.add_group6SVSVr%r_rcdSrxr$rs r&rzGroupManager.add_group97:sr%Optional[GroupConfig]c dSrxr$rs r&rzGroupManager.add_group<sr%r*r)r-r,r1rr_rr1rrxr_rr1r)r!r"r#rQrrr$r%r&rr1s`CGVVVVVXV :::X:UUUUUUUr%rceZdZddZedd Zed d d d ddZd d!dZed dd"dZed#dZd d$dZd S)%rr] 'Service'r_rr1r2cD||_|j|_|j|_dSrx)rar*_prefixr-rerns r&rozGroup.__init__@s# { ".r%r(c KdSrxr$rs r&rzGroup.add_endpointErr%Nrr*r)r+rr-r,r.r0r/c KdSrxr$rs r&rzGroup.add_endpointHrr%rc6K| tdi|}n t|fi|}t||jdd|jp|jd|jp|j}|j |d{VdS)N.)r.r-r$) r(rrstripr.r*r-rerarrs r&rzGroup.add_endpointSs >#--f--FFV..v..F |))#..PP1N6;PPVVWZ[[*?d.?    m((00000000000r%rcdSrxr$rs r&rzGroup.add_grouparr%cdSrxr$rs r&rzGroup.add_groupdrr%rc |rt|fi|}n tdi|}t||jd|j|jp|j}t |j|S)Nr)r*r-r$)rrrr*r-rerrars r&rzGroup.add_groupgs  +V..v..FF **6**F L006;00*?d.?    T]F+++r%)r]rr_rr1r2rrrxrrrr)r!r"r#rorrrr$r%r&rr?s//// EEEXE &*!%-1X 1 1 1 1 1CGVVVVVXV :::X: , , , , , , ,r%rcteZdZUdZded< ded< dZded< dZded < dZded < dZd ed < ddZ dS) ServiceConfigzThe configuration of a service.r)r*versionNr,rr/r0r-zOptional[StatsHandler] stats_handlerr1r2c|jstdt|jstd|jstdt |jstd|jr.t|jstddSdS)Nr4zTInvalid name. It must contain only alphanumeric characters, dashes, and underscores.zVersion cannot be empty.zQInvalid version. It must follow semantic versioning (e.g., 1.0.0, 2.1.3-alpha.1).z[Invalid queue group. It must contain only alphanumeric characters, dashes, and underscores.)r*r5r6r7r SEMVER_REGEXr-r8r9s r&r;zServiceConfig.__post_init__sy 6455 5 ** ustt t| 9788 8!!$,// rpqq q    &&t'788  q    r%r<) r!r"r#rQr=rr0r-rr;r$r%r&rr|s)) III@LLL6"&K%%%%))-H----&!%K%%%%1,0M0000r%rc<eZdZUdZded<ded<ded<ded<dS) ServiceIdentityz@ Defines fields helping to identity a service instance. r)idr*rDict[str, str]r0N)r!r"r#rQr=r$r%r&rrsE GGG IIILLLr%rceZdZUdZded<ded<ded<eeZded<eZ ded <e dd Z ddZ dS) ServicePingzThe response to a ping message.r)rr*rrUrr0typerFrGr1c l||d|d|d|diS)Nrr*rr0rr*rr0getrJs r&rLzServicePing.from_dictsAsDzfOXXj"--     r%cD|j|j|j|j|jdS)Nrrr*rr0rr9s r&rOzServicePing.to_dicts*I'I|    r%N)rFrGr1rrP) r!r"r#rQr=rrZr0PING_RESPONSE_TYPErrRrLrOr$r%r&rrs)) GGG IIILLL$uT:::H::::"D""""   [       r%rceZdZUdZded< ded< ded< ded< eeZd ed < eeZ d ed < e Z ded < e ddZ ddZdS) ServiceStatszThe statistics of a service.r)rr*rrstartedrUzList[EndpointStats] endpointsrr0rrFrGr1c ||d|d|dtj|ddd|dD|d }|S) Nrr*rrz%Y-%m-%dT%H:%M:%S.%fZcBg|]}t|Sr$)r?rL.0endpoints r& z*ServiceStats.from_dict..s&[[[X}..x88[[[r%rr0)rr*rrrr0)rstrptime)rKrFresults r&rLzServiceStats.from_dictsgDzfO%d9o7NOO[[kIZ[[[*%     r%c|j|j|j|j|jddddzd|jD|jdS)Nz%Y-%m-%dT%H:%M:%S.%fZc6g|]}|Sr$rOrs r&rz(ServiceStats.to_dict.. $LLL(**,,LLLr%)rr*rrrrr0)rr*rrrstrftimerr0r9s r&rOzServiceStats.to_dicts_II'||,,-CDDSbSICOLLT^LLL    r%N)rFrGr1rrP)r!r"r#rQr=rlistrrZr0STATS_RESPONSE_TYPErrRrLrOr$r%r&rrs&& GGGIIILLL&+U4%@%@%@I@@@@ %uT:::H::::#D####   [        r%rceZdZUdZded< ded< ded< dZded< ee Zd ed < ee Z d ed < e Z ded< e ddZddZdS) ServiceInfozThe information of a service.r)r*rrNr,rrUzList[EndpointInfo]rrr0rrFrGr1c ||d|d|d|dd|dD|d|dd  S) zu Create a `ServiceInfo` from a dictionary. Notes: - Unknown fields are ignored. rr*rrcBg|]}t|Sr$)rTrLrs r&rz)ServiceInfo.from_dict..Es&ZZZH|--h77ZZZr%rr0rr)rr*rrrr0rrrJs r&rLzServiceInfo.from_dict7sqsDzfO//ZZ[HYZZZ*%&"BCC    r%cp|j|j|j|j|jd|jD|jdS)z< Convert the `ServiceInfo` to a dictionary. c6g|]}|Sr$rrs r&rz'ServiceInfo.to_dict..Urr%rrr*rrrr0rr9s r&rOzServiceInfo.to_dictJsE I'I|+LLT^LLL    r%)rFrGr1rrP)r!r"r#rQr=rrrrrZr0INFO_RESPONSE_TYPErrRrLrOr$r%r&rrs'' III GGGLLL"&K%%%%%*E$$?$?$?I???? %uT:::H::::#D""""   [ $       r%rceZdZd1dZed2d Zd3d Zed4d Zed d d dd5dZd6d7dZed dd8dZ ed9dZ d6d:d Z d;d"Z dd*Zd3d+Zd?d.Zd?d/Zd?d0Zd S)@r^clientrr_rr1r2c|j|_|j|_|j|_|j|_ |j pi|_ |j |_ |j|_||_i|_g|_t'j|_t-|_t0|_dSrx)_nuidnextdecode_idr*rbr_versionr _descriptionr0rgr-rer_stats_handlerrs_subscriptions _endpointsrutcnow_startedr_stoppedDEFAULT_PREFIXr)r:rr_s r&rozService.__init__[s<$$&&--//[  "..B".$2   ))  % r%r)c|jS)z? Returns the unique identifier of the service. )rr9s r&rz Service.idks xr%c PK|jrdStj|jtj|jtj|ji}|D]\}}|dt|dd|j f|dt||j d|j f|t||j |j |j fg}|D]/\}}|j ||d{V|j|<0tj|_|j d{VdS)Nz-all)r*rprefixz-kind)rr)rrr_handle_ping_requestr _handle_info_requestr_handle_stats_requestitemscontrol_subjectrrbrrsrtrrrflush)r:verb_request_handlersverb verb_handler verb_subjectskeyr.s r&startz Service.startrsp    F  d7  d7  t9!  #8"="="?"? b b D,MMM#DtT\RRR NNN#Dtzd4<XXX #Dtzdht|\\\ M!. b b W151G1GT`1G1a1a+a+a+a+a+a+a#C(( b!)) l  """""""""""r%r(c KdSrxr$rs r&rzService.add_endpointrr%Nrr*r+rr-r,r.r0r/c KdSrxr$rs r&rzService.add_endpointrr%rcK| tdi|}n t|fi|}t||jp|j}t ||}|d{V|j|dSNrr$)r(rr-rer\rvrappend)r:r_rrs r&rzService.add_endpoints >#--f--FFV..v..FV-?-T4CTUUUD&))oo x(((((r%rrcdSrxr$rs r&rzService.add_grouprr%rcdSrxr$rs r&rzService.add_grouprr%rc |rt|fi|}n tdi|}t||jp|j}t ||Sr)rrr-rerrs r&rzService.add_groupsa  +V..v..FF **6**FV-?-T4CTUUUT6"""r%rct|j|j|j|jd|jpgD|j}|jr$|jD]}|||_ |S)z9 Returns the statistics for the service. c g|]A}t|j|j|j|j|j|j|j|jBS))r*r.r-rArBrErCrD) r?rbrcrerhrirlrjrkrs r&rz!Service.stats..sh   !$- ( 5!)!7'3'3$,$=,4,M      r%)rr*rr0rr) rrrbrrgrrrrrF)r:statsendpoint_statss r&rz Service.statssxM^  "&!6B   M%   *   J"'/ J J&*&9&9.&I&I## r%rc |t|j|j|j|j|jd|jDS)Nc\g|])}t|j|j|j|j*S)rX)rTrbrcrergrs r&rz Service.info..sP !$- ( 5%/ r%)rr*rr0rr)rrrbrrgrrr9s r&infoz Service.infosSxM^)!%     r%c:Ktj|_dS)zP Resets all statistics for all endpoints on a service instance. N)rrrr9s r&resetz Service.resets!)) r%cBK|jrdS|jD]}|d{V|jD]}|d{Vg|_i|_|jdSrx)ris_setrrzrvaluesdrainset)r:r subscriptions r&stopz Service.stops =   ! !  F # #H.."" " " " " " " " " /6688 ' 'L$$&& & & & & & & & &  r%rc|jS)zG Indicates whether `stop` was executed on the service. )rr9s r&stoppedzService.stoppeds }r%rc>K|d{V|Srx)r r9s r& __aenter__zService.__aenter__ s+jjll r%c>K|d{VdSrx)r#)r:exc_typeexctbs r& __aexit__zService.__aexit__ s,iikkr%r}rcKt|j|j|j|j}|tj| d{VdS)zHandle a ping message.rrFN) rrrbrrgrOrespondjsondumpsencode)r:r}pings r&rzService._handle_ping_requestsxM^    ')) kktz$//6688k99999999999r%cK|}|tj|d{VdS)zHandle an info message.r.N)rrOr/r0r1r2)r:r}rs r&rzService._handle_info_requestsayy{{""$$kktz$//6688k99999999999r%cK|}|tj|d{VdS)zHandle a stats message.r.N)rrOr/r0r1r2)r:r}rs r&rzService._handle_stats_request!sa $$&&kktz%007799k:::::::::::r%)rrr_rr1r2)r1r)r<rrrxrrrr)r1r)r1r)r1r)r1rr)r!r"r#ropropertyrr rrrrrrr#r%r'r,rrrr$r%r&r^r^Zs&&&& X ####@EEEXE &*!%-1X ) ) ) ) )CGVVVVVXV :::X:#####>    $****    X  : : : ::::: ;;;;;;r%r^rr*r,rr1r)ch|| |d|jS||d|jd|S|d|jd|d|S)Nr)value)rr*rrs r&rr'sl  | ''4:''' ..4:.....334:3333r333r%)rrr*r,rr,r1r))= __future__rr0rerasyncior dataclassesrrrrr enumr typingr r r rrrrrnats.aio.clientr nats.aio.msgrnats.aio.subscriptionrrrrrrdrrrrcompilerr6r8r)rr(r?rTr\rrrr StatsHandlerrrrrrr^rr$r%r&rDs"""""" 1111111111((((((((                    #"""""......33333333330'557rz{ RZ, - -  ?++ #t   ^ ^ ^ ^ ^ ^ ^  ^F K K K K K K K  K \ & & & & & & &  & R>X>X>X>X>X>X>X>XB 0000000 0aaaaahaaa, V V V V V8 V V V4,4,4,4,4,L/4,4,4,n,-   ******* *Zh      /    8 : : : : : ?: :  : z F F F F F F F  F RJ;J;J;J;J;!J;J;J;^  4 4 4 4 4 4 4r%