
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
;j(                 @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZddlmZm	Z	m
Z
mZmZmZ dZdZdd Zejdd	 Zd
d ZdQddZdZdddZdRddZdd Zdd Zdd Zejdd Zejdd Zejd d! Zd"d# Zd$d% Zd&d' Z d(d) Z!d*d+ Z"d,d- Z#d.d/ Z$d0d1 Z%d2efd3efd4e fd5e!fd6e"fd7e#fd8e$ffZ&d9d: Z'd;d< Z(d=d> Z)ej*e
j+d?d@dA Z,ej*e
j+d?dBdC Z-ejej*e
j+d?dDdE Z.ej*e
j+d dFdGdH Z/ej*e
j+d dFdIdJ Z0ej*e
j+d?dKdL Z1ej*e
j+dSdFdMdN Z2dOdP Z3dS )T    N   )config	constants	log_utilsprocess_utilsselinuxutilsz/usr/libexec/kcare/virt-whatz/procc              C   s2   t jd d dk rtj S dd l} | jddS d S )N         r   F)full_distribution_name)r
   r   )sysversion_infoplatformlinux_distributiondistro)r    r   4/usr/libexec/kcare/python/kcarectl/platform_utils.py
get_distro   s    r   c               C   s   t j d S )Nr	   )r   unamer   r   r   r   get_system_uname   s    r   c               C   s   dt jd t jd f S )Nz%s.%sr   r   )r   r   r   r   r   r   get_python_version$   s    r   Fc       	      C   s   t  tjd}tj r^tjddddttj	 gdd\}}}|sN|j
 d }nd	| }||d
< | rltj|S t|}d}x |D ]}|d||| f 7 }q~W |j S )N)python_versionagent_versionZpsz-Zz--no-headersz--pidT)catch_stdoutr   z	error: %sselinux_context z%s: %s
)r   r   VERSIONr   Zis_selinux_enabledr   run_commandstrosgetpidsplitjsondumpssortedrstrip)	is_jsoninforcstdoutstderrr   Z	info_keysZinfo_strZinfo_keyr   r   r   app_info(   s    
&

r,   z/sys/firmware/efi/efivarsz$8be4df61-93ca-11d2-aa0d-00e098032b8cz$605dab50-e046-4300-abb6-3dd810dd8b23)globalshim   c          	   C   sF   t jjtd| |f }t jj|s&d S t|d}|j|S Q R X d S )Nz%s-%srb)r    pathjoinEFIVARS_PATHexistsopenread)namevendorZ	max_bytesZvar_pathvarr   r   r   _read_uefi_varI   s
    r:   c              C   s@   y&t dtd } | r$| dd  dkS W n tk
r:   Y nX dS )N
SecureBootr-   r      F)r:   EFI_VENDORS	Exception)Zsecure_boot_varr   r   r   is_secure_bootR   s    r@   c             C   sZ   yt | |}|d krd S W n. tk
rH } zt|j }W Y d d }~X nX tjtj|S )N)r:   r?   r   encoder   nstrbase64urlsafe_b64encode)r7   r8   Zvalue_byteser   r   r   _get_uefi_var_encoded]   s    
rF   c              C   s  t jtjjtd} | r0t| dkr0| d d } | tjjtjjt	d}|d sV|S yt
dd dD |d	< td
d tjt	D }d|i|d< tddddg}x<|D ]4}|dks|jdr||krt|td |d |< qW W n2 tk
r } ztjt| W Y d d }~X nX |S )Ncmdlinei   )rG   has_efirH   c             s   s    | ]}|t |td  fV  qdS )r-   N)rF   r>   ).0r9   r   r   r   	<genexpr>r   s    z#secure_boot_info.<locals>.<genexpr>r;   	SetupModer-   c             S   s4   g | ],}|j td  r|dttd   d  qS )r.   r   r   )endswithr>   len)rI   r9   r   r   r   
<listcomp>t   s    z$secure_boot_info.<locals>.<listcomp>varsr.   Z	MokListRTZ
MokListXRTZMokListTrustedRTZSbatLevelRT	HSIStatusMokIgnoreDBZRT)r;   rK   )rP   rQ   )r   try_to_readr    r1   r2   PROC_DIRrM   r4   dirnamer3   dictr%   listdirsetrL   rF   r>   r?   r   logwarnr   )rG   r(   Z	shim_varsZshim_exclude_varsr9   errr   r   r   secure_boot_infoh   s$    
 rZ   c              C   sr   t jrfy&tjtj ddddtjd d } W qn tjk
rb } ztj| t	j
 } W Y d d }~X qnX nt	j
 } | S )Nr   r
   )r   REPORT_FQDNsocketgetaddrinfogethostnameAI_CANONNAMEgaierrorr   logerrorr   node)hostnameger   r   r   get_hostname   s    &
re   c              C   sT   t jjtd} t jj| rPt| d}|j }ttt	|j
 d }|j  |S dS )Nuptimerr   z-1)r    r1   r2   rS   isfiler5   readliner   intfloatr"   close)Zuptime_fileflineresultr   r   r   
get_uptime   s    
rp   c               C   s    t jjtrtjtgj S dS )Nzno-virt-what)r    r1   rh   VIRTWHATr   check_outputstripr   r   r   r   get_virt   s    rt   c               C   s   t jjdS )Nz/usr/local/cpanel/cpanel)r    r1   rh   r   r   r   r   	is_cpanel   s    ru   c               C   s   t jjdS )Nz/usr/local/psa/admin/)r    r1   isdirr   r   r   r   is_plesk   s    rw   c               C   s   t jjdS )Nz/usr/local/interworx/)r    r1   rv   r   r   r   r   is_interworx   s    rx   c               C   s   t jjdS )Nz/usr/local/ispmgr/)r    r1   rv   r   r   r   r   is_ispmanager   s    ry   c               C   s   t jjdS )Nz/usr/local/directadmin/plugins/)r    r1   rv   r   r   r   r   is_directadmin   s    rz   c               C   s   t jjdS )Nz/usr/local/hostingcontroller/)r    r1   rv   r   r   r   r   is_hosting_controller   s    r{   c               C   s   t jjdS )Nz/hsphere/shared)r    r1   rv   r   r   r   r   
is_hsphere   s    r|   c               C   s   t dd dD S )z:Softaculous markers checked by the kcdoctor.sh detect_cp()c             s   s   | ]}t jj|V  qd S )N)r    r1   r4   )rI   r1   r   r   r   rJ      s   z"has_softaculous.<locals>.<genexpr>/usr/local/softaculous*/usr/local/cpanel/whostmgr/cgi/softaculous*/usr/local/directadmin/plugins/softaculous)r}   r~   r   )anyr   r   r   r   has_softaculous   s
      r   ZPleskZcPanelZ	InterWorxZ
ISPmanagerZDirectAdminzHosting ControllerzH-Spherec               C   s2   t jjt jjtddo0t jjt jjtdd S )NZvzZveinfoversion)r    r1   r4   r2   rS   r   r   r   r   inside_vz_container   s    r   c               C   s   dt tjjtddj kS )Nz/lxc/1Zcgroup)r5   r    r1   r2   rS   r6   r   r   r   r   inside_lxc_container   s    r   c               C   s   t jjdS )Nz/.dockerenv)r    r1   rh   r   r   r   r   inside_docker_container   s    r   )loggerc              C   sF   t jtjjtd} | sd S | jdd\}}}}t|t|t|fS )Nloadavg r
   )r   rR   r    r1   r2   rS   r"   rk   )r   m1Zm5Zm15_r   r   r   get_load_average   s
    r   c                 sD   t jtjjtd} | sdS d
 t fddd	d | j D D S )z!Returns dict of memory info in kBmeminfoNMemTotalMemFree	SwapTotalSwapFreec             3   s&   | ]\}}| kr|t |fV  qd S )N)rj   )rI   kv)filter_paramsr   r   rJ     s    zget_mem_info.<locals>.<genexpr>c             s   s"   | ]}t jd |dd V  qdS )z[\s:]+Nr	   )rer"   )rI   rn   r   r   r   rJ     s    )r   r   r   r   )r   rR   r    r1   r2   rS   rU   
splitlines)r   r   )r   r   get_mem_info   s
    r   c              C   s   t jtjjtd} | sd S dd | jdD }t|ttdd |D |d j	dt
|d j	d	d|d j	d
t
|d j	ddt
|d j	dd|d j	d|d j	ddj d	S )Ncpuinfoc             S   s&   g | ]}|rt d d |j D qS )c             s   s   | ]}t jd |V  qdS )z\s*:\s*N)r   r"   )rI   rn   r   r   r   rJ     s    z*get_cpu_info.<locals>.<listcomp>.<genexpr>)rU   r   )rI   Z	cpu_linesr   r   r   rN     s   z get_cpu_info.<locals>.<listcomp>z

c             s   s"   | ]}|j d |j dfV  qdS )zphysical idzcore idN)get)rI   Zcpur   r   r   rJ     s    zget_cpu_info.<locals>.<genexpr>r   	vendor_idmodelz
model namez
cpu familystepping	microcodeflagsr   )	Zlogical_coresZphysical_coresr   r   Z
model_nameZ
cpu_familyr   r   r   )r   rR   r    r1   r2   rS   r"   rM   rW   r   rj   )r   Zcpusr   r   r   get_cpu_info  s    r   )r   default_returnc               C   s   t dd tjtD S )Nc             S   s   g | ]}|j  r|qS r   )isdigit)rI   dr   r   r   rN      s    z%get_process_count.<locals>.<listcomp>)rM   r    rV   rS   r   r   r   r   get_process_count  s    r   c              C   s(   t jtjjtd} t| pdj d S )Nzsys/fs/file-nr0r   )r   rR   r    r1   r2   rS   rj   r"   )Zfd_infor   r   r   get_opened_files_count#  s    r   c              C   s$   xt jdD ]\} }}t|S W d S )Nz/sys/kernel/debug/kvm)r    walkrM   )Z_rootdirs_filesr   r   r   get_vm_count_kvm*  s    
r   c              C   s(   dd } | d| d | d| d fS )z8Return tuple of total numbers of TCP and UDP connectionsc             S   s4   t jtjjtd| }|sdS tt|j d dS )Nnetr   r   )	r   rR   r    r1   r2   rS   maxrM   r   )protorecordsr   r   r   conn_records_count7  s    z9get_network_connections_count.<locals>.conn_records_countZtcpZtcp6ZudpZudp6r   )r   r   r   r   get_network_connections_count2  s    r   c           	   C   s,   t  \} }t t t t t t | |dS )N)Zload_averageZmem_infoZcpu_infoZvm_countZ	processesZ
open_filesZtcp_connectionsZudp_connections)r   r   r   r   r   r   r   )Zconn_tcpZconn_udpr   r   r   get_performance_metricsA  s    
r   )F)r/   )r   r   )4rC   r#   r    r   r   r\   r   r   r   r   r   r   r   r   rq   rS   r   cachedr   r   r,   r3   r>   r:   r@   rF   rZ   re   rp   rt   ru   rw   rx   ry   rz   r{   r|   r   ZCONTROL_PANEL_PROBESr   r   r   catch_errorsrX   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sd    	

	

