
    vUuj                        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Jr  S rS r	S r
S rS rS rS	 r " S
 S5      r\" 5       r " S S\5      rS#S jr\S:X  Ga  S SKr\R*                  " SS9r\R/                  SSSS9  \R/                  S\SSS9  \R/                  S\SSS9  \R5                  5       r\R8                  (       aV  \" S\R<                   35        \R>                  " \\R<                  4SS9RA                  5           \RB                  " S 5        M    \RG                  5         \" \RH                  " \RJ                  S!S"95        \RB                  " \RL                  5        MO  g! \" a     gf = f! \" a     gf = f)$    N)
HTTPServerBaseHTTPRequestHandlerc                      [        SS5       n U R                  5       nS S S 5        0 nW H  nUR                  S5      (       d  M  UR	                  5       nUS   n[        S USS   5       5      n[        U5      S:  a  [        US   5      [        US   5      -   O[        US   5      nXg4X%'   M     U$ ! , (       d  f       N= f! [         a    0 s $ f = f)	Nz
/proc/statrcpur   c              3   8   #    U  H  n[        U5      v   M     g 7fN)float).0xs     G/home/cade/axiom-zero-deploy/dev_control_center/pi5_resource_monitor.py	<genexpr> get_cpu_stats.<locals>.<genexpr>   s     9y!U1XXys            )open	readlinesFileNotFoundError
startswithsplitsumlenr
   )flinesstatslinepartsname
total_time	idle_times           r   get_cpu_statsr"      s    ,$KKME %
 E??5!!JJLE8D9uQRy99J=@Z!^eAh%a/9QVW\]^W_Q`I%1EK  L %$ 	s-   C B5C 5
C?C C CCc                     0 nU  H?  nX1;   d  M
  X   u  pEX   u  pgXd-
  nXu-
  n	US:  a  SX-
  -  U-  n
OSn
[        U
S5      X#'   MA     U$ )Nr   g      Y@           round)stats1stats2percentsr   t1i1t2i2
total_diff	idle_diffpercents              r   calculate_cpu_percentr2      si    H>\FB\FBJIA~:#9:ZG"7A.HN  O    c                     0 n  [        SS5       nU H8  nUR                  5       n[        US   5      S-  XS   R                  S5      '   M:     S S S 5        U R                  SS5      nU R                  S	S5      nU R                  S
S5      nU R                  SS5      nU R                  SXV-   U-   5      nXH-
  n	UUU	S.$ ! , (       d  f       Nw= f! [         a	    SSSS.s $ f = f)Nz/proc/meminfor   r   i   r   :)totalfreeusedMemTotalMemFreeBuffersCachedMemAvailable)r   r   intstripr   get)
memr   r   r   r6   r7   bufferscached	availabler8   s
             r   get_mem_statsrE   )   s    
C2/3'1

+.uQx=4+?!HNN3'(  ( GGJ"E779a Dggi#GWWXq!F(?@ID  ('  2Aq112s.   C ?C C  
C
C C C$#C$c                       [         R                  " SS/5      R                  S5      n [        U R	                  SS5      R	                  SS5      5      $ ! [
         a     gf = f)Nvcgencmdmeasure_temputf-8ztemp= z'C
r$   )
subprocesscheck_outputdecoder
   replace	Exceptionouts    r   get_core_temprR   ?   s\    %%z>&BCJJ7SS[["-55fbABB s   AA 
A! A!c                       [         R                  " SS/5      R                  S5      n U R                  5       R	                  S5      S   $ ! [
         a     gf = f)NrG   get_throttledrI   =r   0x0)rK   rL   rM   r?   r   rO   rP   s    r   rT   rT   G   sU    %%z?&CDKKGTyy{  %a(( s   AA 
AAc                     0 n  [        SS5       nUR                  5       SS  nS S S 5        W Hl  nUR                  S5      n[        U5      S:X  d  M%  US   R	                  5       nUS   R                  5       n[        US   5      n[        US   5      nXx4X'   Mn     U $ ! , (       d  f       N= f! [         a     U $ f = f)Nz/proc/net/devr   r%   r5   r   r      )r   r   r   r   r?   r>   r   )	netr   r   r   r   ifacer   rx_bytestx_bytess	            r   get_net_statsr]   O   s    
C/3'1KKM!"%E (DJJsOE5zQa(a(uQx=uQx=&1
  J ('  Js.   B1 B +B1 AB1  
B.*B1 1
B?>B?c                     0 nU  HK  nXA;   d  M
  X   u  pVX   u  pxXu-
  S-  S-  U-  n	X-
  S-  S-  U-  n
[        U	S5      [        U
S5      S.X4'   MM     U$ )NrX   i@B r%   )rx_mbpstx_mbpsr&   )net1net2dtmbpsrZ   rx1tx1rx2tx2r_   r`   s              r   calculate_net_mbpsri   `   st    D={HC{HCyAo	1B6GyAo	1B6G&+GQ&7E'STDUVDK  Kr3   c                        \ rS rSrS rS rSrg)Monitork   c                     [        5       U l        [        5       U l        [        R                  " 5       U l        0 U l        g r	   )r"   last_cpur]   last_nettime	last_timecurrent_statsselfs    r   __init__Monitor.__init__l   s)    %%r3   c                    [         R                   " 5       n[        5       n[        5       nXR                  -
  nUS::  a  Sn[	        U R
                  U5      n[        U R                  X45      n [        R                  " 5       nUU[        5       [        5       [        5       UUS.U l        X l        X0l        Xl        g ! [         a    Sn NHf = f)Nr   gMbP?)r$   r$   r$   )	timestampr   memorytemp_c	throttledload_avgnetwork)rp   r"   r]   rq   r2   rn   ri   ro   os
getloadavgAttributeErrorrE   rR   rT   rr   )rt   	curr_timecurr_cpucurr_netrc   cpu_pctnet_mbpsr|   s           r   updateMonitor.updater   s    IIK	 ? ?'7B'x@%dmmXB	'}}H
 ##o#o& 
 ! "  	'&H	's   -B< <C
C)rr   rn   ro   rq   N)__name__
__module____qualname____firstlineno__ru   r   __static_attributes__ r3   r   rk   rk   k   s     #r3   rk   c                       \ rS rSrS rSrg)
APIHandler   c                    U R                   S:X  a  U R                  S5        U R                  SS5        U R                  5         [        R                  5         U R                  R                  [        R                  " [        R                  5      R                  S5      5        g U R                  S5        U R                  5         g )Nz
/api/stats   zContent-typezapplication/jsonrI   i  )pathsend_responsesend_headerend_headersmonitorr   wfilewritejsondumpsrr   encoders   s    r   do_GETAPIHandler.do_GET   s    99$s#^-?@NNJJTZZ(=(=>EEgNOs#r3   r   N)r   r   r   r   r   r   r   r3   r   r   r      s    	r3   r     c                 H    [        SU 4[        5      nUR                  5         g )NrJ   )r   r   serve_forever)portservers     r   
run_serverr      s    T
J/F
r3   __main__zPi 5 Telemetry Monitor)descriptionz--api
store_truez Run JSON API server on port 8080)actionhelpz--portzAPI server port)typedefaultr   z
--intervalg      ?zCLI update intervalzStarting API server on port T)targetargsdaemonr   r%   )indent)r   )'r~   rp   r   rK   	threadinghttp.serverr   r   r"   r2   rE   rR   rT   r]   ri   rk   r   r   r   r   argparseArgumentParserparseradd_argumentr>   r
   
parse_argsr   apiprintr   ThreadstartsleepKeyboardInterruptr   r   rr   intervalr   r3   r   <module>r      s   	     :$,"	"# "#H )
' 
 z$$1IJF
;]^
sD?PQ
5#DYZDxx,TYYK89
$))dKQQS	

1 
	 djj!6!6qAB

4==) %  ! 		 ! 		s%   E, AE8 ,E54E58F F