
    h                         S SK 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J	r	J
r
JrJrJrJrJr  SSKJrJr  SSKJrJrJr  SSKJrJrJrJr  \R8                  " \5      r " S S	\
5      r " S
 S\5      r g)    N)defaultdict)DictList
NamedTupleOptionalSetTupleTypeUnion   )AsyncChannelChannelError)JsonList
JsonObjectget_int)SAMPLERSSampleDescriptionSamplerSamplesc                   0    \ rS rSr% \\   \S'   \\S'   Srg)
MetricInfo!   derivedesc N)	__name__
__module____qualname____firstlineno__r   str__annotations__r   __static_attributes__r       :/usr/lib/python3/dist-packages/cockpit/channels/metrics.pyr   r   !   s    SM
r#   r   c                   ,   \ rS rSr% SrS/r\\   \S'   \	\S'   Sr
\\\\\\   \4   4      \S'   Sr\\S	'   S
r\\S'   Sr\\S'   Sr\\S'   \S 5       rS\SS4S jrS\S\4S jrS\4S jrS\S\\   S\ \\4   4S jr!S\S\4S jr"S\SS4S jr#Sr$g)InternalMetricsChannel&   metrics1)sourceinternalmetricssamplersNsamplers_cache  intervalT	need_metar   last_timestampnext_timestampc                     U R                   c=  [         VVs0 s H#  oR                    H  o"R                  X4_M     M%     snnU l         g g s  snnf N)r-   r   descriptionsname)clssamplerr   s      r$   ensure_samplers&InternalMetricsChannel.ensure_samplers3   sD    %LT!vHauauY]))g_"<au)H!vC &!vs   *Aoptionsreturnc           	         [         R                  SXR                  5        [        USU R                  5      nUS::  d  U[
        R                  :  a  [        SSU 3S9eX l        UR                  S5      n[        U[        5      (       a  [        U5      S:X  a   [         R                  SU5        [        SS	S9eU R                  (       d   S
5       e[        5       nU H  nUR                  S5      nUR                  S5      nUR                  S5      n U R                  U   u  pU(       a+  XzR                   :w  a  [        SU SU
R                    SU 3S9eUR#                  U	5        U R$                  R'                  [)        XS95        M     U Vs1 s H	  o" 5       iM     snU l        g ! [         a)  n[         R                  SU5        [        SSU 3S9UeS nAff = fs  snf )Nz&metrics internal open: %s, channel: %sr/   r   zprotocol-errorzinvalid "interval" value: )messager+   zinvalid "metrics" value: %sz5invalid "metrics" option was specified (not an array)zensure_samples not calledr6   unitsr   zunsupported metric: %sznot-supportedzunsupported metric: z has units z, not )r   r   )loggerdebugchannelr   r/   sysmaxsizer   get
isinstancelistlenerrorr-   setKeyErrorr?   addr+   appendr   r,   )selfr;   r/   r+   sampler_classesmetricr6   r?   r   r8   r   excr7   s                r$   parse_options$InternalMetricsChannel.parse_options8   s   =wU7J>q=Hs{{2/;UV^U_9`aa ++i('4((CLA,=LL6@/9pqq""?$??"%F::f%DJJw'EZZ)Fd $ 3 3D 9
 **,"?tfKPTPZPZ|[abgah<ijj(LL
& DE! $ +::/3/:  d5t<"?>RSWRX<YZ`ccd ;s   F,G",
G6$GGsamples	timestampc           	         / nU R                    H  nUR                  R                  (       a  UR                  UR                  R                  UR                  R
                  [        XR                  R                     R                  5       5      UR                  R                  S.5        M  UR                  UR                  R                  UR                  UR                  R
                  UR                  R                  S.5        M     [        [        R                  " 5       5      S-  nU R                  SU R                  US-  XSS9  SU l        g )N)r6   r?   	instances	semantics)r6   r   r?   rX   r.   r*   )r)   r/   rU   nowr+   F)r+   r   	instancedrM   r6   r?   rG   keysrX   r   inttime	send_jsonr/   r0   )rN   rT   rU   r+   
metricinforY   s         r$   	send_meta InternalMetricsChannel.send_meta\   s    ,,J((&OO00'__22!%goo.B.B&C&H&H&J!K!+!:!:	   &OO00(//'__22!+!:!:	   '  $))+%j4==IX\L\ 	 	1r#   c                 l    [        [        5      nU R                   H  nUR                  U5        M     U$ r4   )r   dictr,   sample)rN   rT   r8   s      r$   rd   InternalMetricsChannel.samples   s+    &t,}}GNN7# %r#   value	old_valuec                 F    Ub  X-
  U R                   U R                  -
  -  $ g)NF)r2   r1   )rN   rf   rg   s      r$   calculate_sample_rate,InternalMetricsChannel.calculate_sample_ratey   s*     %$*=*=@S@S*STTr#   last_samplesc           
         / n[         R                   " 5       nX@l        U R                   GH  nXR                  R                     nUR                  R
                  (       Ga  X%R                  R                     n[        U[        5      (       d   e[        U[        5      (       d   eUR                  5       UR                  5       :w  a  SU l	        UR                  S:X  a^  / nUR                  5        H4  u  pUR                  U R                  XR                  U	5      5      5        M6     UR                  U5        GM  UR                  [        UR!                  5       5      5        GM@  UR                  UR                  R                  5      n[        U[        5      (       a   e[        U[        5      (       a   eUR                  S:X  a#  UR                  U R                  Xg5      5        GM  UR                  U5        GM     U R                  (       a  U R#                  X5        U R                  U l        U R'                  [(        R*                  " U/5      5        g )NTrate)r]   r2   r+   r   r6   rZ   rF   rc   r[   r0   r   itemsrM   ri   rE   rG   valuesr`   r1   	send_textjsondumps)rN   rT   rk   datarU   r_   rf   rg   rW   keyvals              r$   send_updates#InternalMetricsChannel.send_updates   s   GIIIK	',,JOO001E(((()=)=>	!%....!)T2222 ::<9>>#33%)DN$$.DFI$)KKM!(()C)CCWZI[)\] %2 KK	*KKU\\^ 45(,,Z__-A-AB	%eT2222%i6666$$.KK : :5 LMKK&9 '< >>NN7."11tzz4&)*r#   c                 d  #    / U l         [        5       U l        [        R	                  5         U R                  U5        U R                  5         [        [        5      n U R                  5       nU R                  X25        Un[        R                  " U R                  S-  5      I S h  vN   MP   N7f)Nr.   )r+   rJ   r,   r&   r9   rR   readyr   rc   rd   rv   asynciosleepr/   )rN   r;   rk   rT   s       r$   runInternalMetricsChannel.run   s     ..07#

 +D 1kkmGg4"L-- 4555	  6s   B%B0'B.(B0)r/   r1   r+   r0   r2   r,   )%r   r   r   r   payloadrestrictionsr   r   r!   r   r-   r   r   r    r	   r
   r   r   r/   r\   r0   boolr1   floatr2   classmethodr9   r   rR   r   r`   rd   r   ri   rv   r|   r"   r   r#   r$   r&   r&   &   s   G*+L*MSWNHT#uT']<M-M'N"NOPWHcItNENEw w";Z ";D ";H U . 5 Xe_ QVW\^bWbQc '+G '+7 '+R6 6 6r#   r&   )!rz   rq   loggingrC   r]   collectionsr   typingr   r   r   r   r   r	   r
   r   rB   r   r   jsonutilr   r   r   rT   r   r   r   r   	getLoggerr   r@   r   r&   r   r#   r$   <module>r      s[   $    
  # L L L 0 4 4 C C			8	$ 
P6\ P6r#   