o
    O6ufŒ  ã                   @   s:   d dl Z d dlZd dlmZmZmZ G dd„ deeƒZdS )é    N)ÚPluginÚIndependentPluginÚ	PluginOptc                
   @   sl   e Zd ZdZdZdZedddd�edd	d
d�edd	dd�eddedd�eddedd�gZdd„ Z	dd„ Z
dS )ÚProcesszprocess informationÚprocess)ÚsystemÚlsofTzcollect info on all open files)ÚdefaultÚdescúlsof-threadsFz,collect threads' open file info if supportedÚsmapszcollect /proc/*/smaps filesÚsamplesé   z"number of iotop samples to collect)r	   Úval_typer
   Únumprocsi   z*number of process to collect /proc data ofc              
   C   sr  d}d}d}|d7 }|   ddg¡ dd„ |  d	¡D ƒ}|  d
¡r)|d |  d
¡… }|D ] }|   d|› d�d|› d�d|› d�d|› d�d|› d�g¡ q+|  d¡rV|   d¡ | jddg d¢dd� | jddd� |  d¡rw| jdddddd� |  d ¡r„| jd!ddd"� | jd#d$gd%d&� |  |› d'|› �|› d'|› �g¡ |  d(¡r°| jd)|  d(¡› �d*d+� |  d,d-g¡ d S ).Nzps axoz3pid,ppid,user,group,lwp,nlwp,start_time,comm,cgroupz3flags,state,uid,pid,ppid,pgid,sid,cls,pri,psr,addr,zsz,wchan:20,lstart,tty,time,cmdz/proc/sched_debugz
/proc/statc                 S   s   g | ]
}t  d |¡r|‘qS )z[0-9])ÚreÚmatch)Ú.0Úp© r   ú</usr/lib/python3/dist-packages/sos/report/plugins/process.pyÚ
<listcomp>-   s    z!Process.setup.<locals>.<listcomp>z/procr   z/proc/z/statusz/cpusetz/oom_*z/stackz/limitsr   z/proc/[0-9]*/smapsz
ps auxwwwmÚps)Úps_auxÚps_auxwwÚ	ps_auxwwwÚ
ps_auxwwwmÚ	ps_auxcwwé   )Úroot_symlinkÚtagsÚpriorityz
pstree -lpÚpstree)r   r   zlsof +M -n -l -c ''é   é2   )r   Útimeoutr!   r    r   zlsof +M -n -l)r%   r!   z	ps alxwwwzps -elfLT)Ú
cmd_as_tagú r   ziotop -b -o -d 0.5 -t -n éd   )r!   z#pidstat -p ALL -rudvwsRU --human -hzpidstat -tl)Úadd_copy_specÚlistdirÚ
get_optionÚadd_cmd_output)ÚselfÚps_axoÚps_group_optsÚps_sched_optsÚprocsÚprocr   r   r   Úsetup!   sh   þ





û

ý
ÿ
þýþ
ÿþ
þzProcess.setupc                 C   s  |   d¡�{}| jjjs| d¡ 	 W d   ƒ d S |  d¡}i }i }|d dks;| d|d › �¡ 	 W d   ƒ d S |d  ¡ D ],}| ¡  ¡ }|d }|d }|  	|¡sWqA||vrd| jj 
|¡||< ||| d	œ||< qA| tj|dd
�¡ W d   ƒ d S 1 sƒw   Y  d S )Nzpids_to_packages.jsonz/Package manager not configured for path querieszps --no-headers aexÚstatusr   zUnable to get process list: Úoutputé   )ÚpathÚpackage)Úindent)Úcollection_fileÚpolicyÚpackage_managerÚquery_path_commandÚwriteÚexec_cmdÚ
splitlinesÚstripÚsplitÚpath_existsÚpkg_by_pathÚjsonÚdumps)r-   ÚpfileÚ_psÚpidpkgÚpathsr2   Úpidr7   r   r   r   Úcollect^   s.   

ý
÷

"ìzProcess.collectN)Ú__name__Ú
__module__Ú__qualname__Ú
short_descÚplugin_nameÚprofilesr   ÚintÚoption_listr3   rL   r   r   r   r   r      s$    ÿÿÿù=r   )rE   r   Úsos.report.pluginsr   r   r   r   r   r   r   r   Ú<module>   s   