
    h#                     v    d dl mZmZ d dlZd dlZddlmZ ddlmZm	Z	m
Z
 erddlmZ ddlmZ  G d d	e      Zy)
    )print_functionunicode_literalsN   )TYPE_CHECKING)Pebkacget_df
unhumanize)HttpCli)HttpSrvc                       e Zd Zd Zd Zy)Metricsc                     || _         y )N)hsrv)selfr   s     F/jellyfin/media/venv/lib/python3.12/site-packages/copyparty/metrics.py__init__zMetrics.__init__   s	    	    c           	         )* |j                   st        dd|j                  z         |j                  }|j                  st        dd      |j
                  }|j                  j                  }t        t        |j                  j                                     }|j                         }|rt        |d      sd }g ** fd}* fd}*fd}	*fd}
*fd	}*fd
}*fd}d}dj                  t        j                          j                   j"                  z
        } |
dd||       d}dj                   j                   j"                        } |
dd||       d} |	dt%        t'         j                   j(                              |       d} |	dt%         j                   j*                        |       d} |dt%         j                   j,                        |       d} |dt%         j                   j.                        |       t%        t'        |j0                  xs g             } |	d|d       d} |	dt%         j                   j2                        |       |j4                  s? j                   j6                  j9                  ddd       }t;        j<                  |j?                               }d!}d!}d!}|d"   jA                         D ]  }|d#k(  r|d$z  }d%|v r|d$z  }|d$z  }  |	d&t%        |      d'        |	d(t%        |      d)        |	d*t%        |      d+       d,} |
d-dt%        |d.         |       d/} |
d0dt%        |d1         |       d2} |	d3t%        |d4         |       d5} |	d6t%        |d7         |       	 d8} |	d9t%        tC        |d:               |       |jD                  se |d;d<        |d=d>       |D ]N  \  }}tG        |jH                  d?      \  }}}||% |d@|z  t%        |              |dA|z  t%        |             P |r|jJ                  s |dBdC        |dDdEdF        |dGdH        |dIdEdJ       d!}d!}g }	 |D cg c]  \  }}|jH                   }}} j                   j6                  j9                  dK|      }|j?                         }tQ        ||      D ]   \  \  }}\  }} ||z  }|| z  } |dN|z  t%        |              |dO|z  t%        |              |jR                  j?                  dP      s|jR                  j?                  dQ      sxtU        |jR                  j?                  dP      xs dR      }!|!rt%        |!|z
        } |dS|z  |       tU        |jR                  j?                  dQ      xs dR      }!|!st%        |!| z
        } |dT|z  |        |r$ |dUt%        |              |dVt%        |             |r|jV                  s |dWdX        |dYdEdZ       d!}d!}|D ]y  \  }}|jY                  |      }"|"sd!}d!} d[}#|"j[                  |#      D ]  \  }$}%||$|%z  z  }| |%z  }  ||z  }|| z  } |d\|z  t%        |              |d]|z  t%        |              {  |d^t%        |              |d_t%        |             |j\                  s1 |d`da        |dbdEdc       d!}d!}	  j                   j6                  j9                  dd      }|j?                         }&|&stM        de      t;        j<                  |&      }'|'j                         D ]  \  )\  }} ||z  }|| z  }t_        )fdf|D        d       }|s$dg}|jO                  |j                  )      dM       N |dh|j`                  z  t%        |              |di|j`                  z  t%        |                |djt%        |              |dkt%        |             *jc                  dm       dn}(|jd                  j?                  do      xs |(}(|jg                  dpji                  *      jk                  dq      |(r       y#  Y xY wc c}}w # tL        $ r,}|jO                  dLj                  |      dM       Y d }~d }~ww xY w# tL        $ r+}|jO                  dlj                  |      dM       Y d }~d }~ww xY w)sNi  z'stats' not allowed for user z1the stats feature is not enabled in server configp_endc           
      z    d}j                  || | || t        j                  j                        | |fz         y )Nz8# TYPE %s counter
# HELP %s %s
%s_created %s
%s_total %sappendintr   t0)kvdesczsretr   s       r   addczMetrics.tx.<locals>.addc%   s5    NBJJrQ4C		,=q!DDEr   c                     | d|z   z  } d}j                  || | || || t        j                  j                        | |f	z         y )N_zE# TYPE %s counter
# UNIT %s %s
# HELP %s %s
%s_created %s
%s_total %sr   )r   unitr   r   r   r   r   s        r   adduczMetrics.tx.<locals>.adduc)   sF    tOA\BJJrQ4D!S5F1MMNr   c                 <    d}j                  || | || |fz         y )Nz"# TYPE %s gauge
# HELP %s %s
%s %sr   )r   r   r   r   r   s       r   addgzMetrics.tx.<locals>.addg.   s$    7BJJrQ4A../r   c           
      P    | d|z   z  } d}j                  || | || || |fz         y )Nr"   z/# TYPE %s gauge
# UNIT %s %s
# HELP %s %s
%s %sr&   )r   r#   r   r   r   r   s        r   addugzMetrics.tx.<locals>.addug2   s5    tOAEBJJrQ4D!Q778r   c                 :    d}j                  || || |fz         y )Nz# TYPE %s %s
# HELP %s %sr&   )r   typr   r   r   s       r   addhzMetrics.tx.<locals>.addh7   s"    -BJJrQQ--.r   c                 :    d}j                  || | | |fz         y )Nz,# TYPE %s gauge
# UNIT %s bytes
# HELP %s %sr&   )r   r   r   r   s      r   addbhzMetrics.tx.<locals>.addbh;   s!    ABJJrQ1dO+,r   c                 2    j                  | d|       y )N r&   )r   r   r   s     r   addvzMetrics.tx.<locals>.addv?   s    JJ!Q'(r   z!time since last copyparty restartz{:.3f}
cpp_uptimesecondsz"unixtime of last copyparty restartcpp_boot_unixtimeznumber of active downloadscpp_active_dlz)number of open http(s) client connectionscpp_http_connsz-number of http(s) requests since last restartcpp_http_reqsz.number of 403/422/malicious reqs since restartcpp_sus_reqscpp_active_bansznumber of currently banned IPsz'number of IPs banned since last restartcpp_total_banszup2k.get_stateT r   volstatezonline, idler   OFFLINEcpp_idle_volsznumber of idle/ready volumescpp_busy_volsznumber of busy/indexing volumescpp_offline_volsznumber of offline volumesz8time since last database activity (upload/rename/delete)cpp_db_idledbwtz9unixtime of last database activity (upload/rename/delete)
cpp_db_actdbwuz+number of files queued for hashing/indexingcpp_hashing_fileshashqz,number of files queued for metadata scanningcpp_tagq_filestagqz0number of files queued for plugin-based analysiscpp_mtpq_filesmtpqcpp_disk_size_bytesztotal HDD size of volumecpp_disk_free_byteszfree HDD space in volumeFzcpp_disk_size_bytes{vol="/%s"}zcpp_disk_free_bytes{vol="/%s"}cpp_vol_bytesznum bytes of data in volumecpp_vol_filesgaugeznum files in volumecpp_vol_free_byteszfree space (vmaxb) in volumecpp_vol_free_fileszfree space (vmaxn) in volumezup2k.get_volsizesztx_stats get_volsizes: {!r}   zcpp_vol_bytes{vol="/%s"}zcpp_vol_files{vol="/%s"}vmaxbvmaxn0zcpp_vol_free_bytes{vol="/%s"}zcpp_vol_free_files{vol="/%s"}zcpp_vol_bytes{vol="total"}zcpp_vol_files{vol="total"}cpp_dupe_bytesznum dupe bytes in volumecpp_dupe_filesznum dupe files in volumez3select sz, count(*)-1 c from up group by w having czcpp_dupe_bytes{vol="/%s"}zcpp_dupe_files{vol="/%s"}zcpp_dupe_bytes{vol="total"}zcpp_dupe_files{vol="total"}cpp_unf_bytesz'incoming/unfinished uploads (num bytes)cpp_unf_filesz'incoming/unfinished uploads (num files)zup2k.get_unfinishedz up2k mutex acquisition timed outc              3   N   K   | ]  }|d    j                   k(  s|d      yw)r   N)realpath).0xptops     r   	<genexpr>zMetrics.tx.<locals>.<genexpr>   s$     O1$9N!Os   %
%z)tx_stats get_unfinished: could not map {}zcpp_unf_bytes{vol="/%s"}zcpp_unf_files{vol="/%s"}zcpp_unf_bytes{vol="total"}zcpp_unf_files{vol="total"}ztx_stats get_unfinished: {!r}z# EOFz:application/openmetrics-text; version=1.0.0; charset=utf-8mime
zutf-8)r`   )6avolr   unameargsstatsconnasrvvfslistsortedall_volsitems	get_u2idxhasattrformattimer   r   strlentdlsnclinreqnsusbansnbannos_vstbrokeraskjsonloadsgetvaluesr   nos_hddr   r[   nos_vol	Exceptionlogzipflagsr	   nos_dupget_curexecutenos_unfnextvpathr   uparamreplyjoinencode)+r   clird   rf   rh   allvolsidxr    r$   r'   r)   r,   r.   r1   tr   r]   vsnvidlenvbusy	nvoffliner   volfreetotalr"   tnbytestnfilesvolsizesptopsexnbytesnfileszicurqszcxsxjr`   r^   r   s+   `                                        @@r   txz
Metrics.tx   sE   xx=		IJJxxzzQRRxxiimmvcll00234nn'#w/C	F	O
	0	9
	/	-	) 0OODIIK$)),,67lIq!, 1OODIILL)!9a3(_c#diinn"56:7s499>>2A6;_c$))..115<^S0!4DIIO$%#CD5s499>>2A6||		  $$%5tR@AAEEG$BFFI
^**,  &aKF!^NIaKF  #f+/MN#f+/PQ#S^5PQJA-C6
OQ?KA,	3r&z?A>=A$c"W+&6:>A!3r&z?A6F%s3r&z?';Q? ||')CD')CD% L
s!'e!<eQ<5=5?UL5?TKL t||/#@A'+@A&(FG%w0NOGGHE078188II$$(()<eD557 36gx2H K..vv6!6!/593v;G/593v;G99==)SYY]]7-C#CIIMM'$:$AcBBV,<FJ#CIIMM'$:$AcBBV,<FJ!K$ 13w<@13w<@t||"$>?!7,FGGG% I
skk#&I [[^  EBb1f$FaKF  6!6!0E:CKH0E:CKHI" .G=.G=||/#LM'+TUGGGII$$(()>?UUW#$FGGZZ^.0hhj 
P*D*66v%Gv%GOgOQUVCG2 3syyA3v;O3syyA3v;O
P 13w<@13w<@
 	

7Kzz~~f%-		$))C.''0t	<a. 9  E5<<R@!DDEZ  G7>>rBAFFGsO   !a
 a a29a Db 
aa 	b!!bb	c!b??cN)__name__
__module____qualname__r   r    r   r   r   r      s    \r   r   )
__future__r   r   r|   rp   r   r   utilr   r   r	   httpclir
   httpsrvr   objectr   r   r   r   <module>r      s.    7   # , ,  `f `r   