U
    -_g*                     @   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 informationZ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   Zval_typer	   numprocsi   z*number of process to collect /proc data ofc              
   C   s  d}d}d}|d7 }|  ddddd	g d
d | dD }| drX|d | d }|D ]@}|  d| dd| dd| dd| dd| dg q\| dr|  d | jdddddddgdd | jdd d! | d"r| jd#d"d$d%d"d& | d'r| jd(d$d%d) | jd*d+d,gd-d. | | d/| | d/| g | d0rr| jd1| d0 d2d3 | d4d5g d S )6Nz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/statz/sys/kernel/debug/sched/debugz /sys/kernel/debug/sched/featuresz/sys/kernel/sched_ext/c                 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>0   s      z!Process.setup.<locals>.<listcomp>z/procr   z/proc/z/statusz/cpusetz/oom_*z/stackz/limitsr   z/proc/[0-9]*/smapsz
ps auxwwwmZpsZps_auxZps_auxwwZ	ps_auxwwwZ
ps_auxwwwmZ	ps_auxcww   )root_symlinktagspriorityz
pstree -lpZ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 auxfwwwzps -elfLT)Z
cmd_as_tag r   ziotop -b -o -d 0.5 -t -n d   )r   z#pidstat -p ALL -rudvwsRU --human -hzpidstat -tl)Zadd_copy_speclistdirZ
get_optionZadd_cmd_output)selfZps_axoZps_group_optsZps_sched_optsZprocsprocr   r   r   setup!   sv    







 
  zProcess.setupc              	   C   s   |  d}| jjjs.|d W 5 Q R  d S | d}i }i }|d dksn|d|d   W 5 Q R  d S |d  D ]X}|  }|d }|d }| 	|sqz||kr| jj
|||< ||| d	||< qz|tj|dd
 W 5 Q R X d S )Nzpids_to_packages.jsonz/Package manager not configured for path querieszps --no-headers aexZstatusr   zUnable to get process list: output   )pathpackage)indent)Zcollection_fileZpolicyZpackage_managerZquery_path_commandwriteZexec_cmd
splitlinesstripsplitZpath_existsZpkg_by_pathjsondumps)r    ZpfileZ_psZpidpkgpathsr!   pidr%   r   r   r   collectb   s(    



zProcess.collectN)__name__
__module____qualname__Z
short_descZplugin_nameZprofilesr   intZoption_listr"   r0   r   r   r   r   r      s"   Ar   )r,   r   Zsos.report.pluginsr   r   r   r   r   r   r   r   <module>	   s   