HEX
Server: Apache
System: Linux server2.voipitup.com.au 4.18.0-553.104.1.lve.el8.x86_64 #1 SMP Tue Feb 10 20:07:30 UTC 2026 x86_64
User: posscale (1027)
PHP: 8.2.29
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/__pycache__/status.cpython-310.pyc
o

�N�g���@s�dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
ZddlZddl
ZddlZddlZddlZddlZddlZddlZddlmZe�e�ZdZddiZe�e�Zdd�Zd	d
�Zdd�Zd
d�Zdd�Z dd�Z!dd�Z"dd�Z#dd�Z$dd�Z%dd�Z&dd�Z'dd �Z(d!d"�Z)d#d$�Z*d%d&�Z+d'd(�Z,d)d*�Z-d+d,�Z.d-d.�Z/d/d0�Z0d1d2�Z1d<d4d5�Z2d6d7�Z3d=d8d9�Z4d>d;d�Z5dS)?zs
Module for returning various status data about a minion.
These data can be useful for compiling into stats later.
�N)�CommandExecutionError�status�time_�timecCstjj��rdStS)z0
    Not all functions supported by Windows
    )Fz0Windows platform is not supported by this module)�salt�utils�platformZ
is_windows�__virtualname__�r
r
�G/opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/status.py�__virtual__&srcCs2|��rt|�Szt|�WSty|YSw)z�
    Convert a string to a number.
    Returns an integer if the string represents an integer, a floating
    point number if the string is a real number, or the string unchanged
    otherwise.
    )�isdigit�int�float�
ValueError)�textr
r
r�_number0s
�rcCs�tdd�}|ddkrtd��|d}t�d|�}|s td��|jd	d
�}t|d�dt|d�d
t|d�dt|d�}|S)a

    Return the number of seconds since boot time on AIX

    t=$(LC_ALL=POSIX ps -o etime= -p 1)
    d=0 h=0
    case $t in *-*) d=${t%%-*}; t=${t#*-};; esac
    case $t in *:*:*) h=${t%%:*}; t=${t#*:};; esac
    s=$((d*86400 + h*3600 + ${t%%:*}*60 + ${t#*:}))
    �cmd.run_allzps -o etime= -p 1�retcoderz#Unable to find boot_time for pid 1.�stdoutz*\s*(?:(\d+)-)?(?:(\d\d):)?(\d\d):(\d\d)\s*zUnexpected time format.Z00��defaulti�Q����<�)�__salt__r�re�match�groupsr)�resZbt_timerr Z	boot_secsr
r
r�_get_boot_time_aix?s"
��
��r"cCsFtdd�}|�d�}|d��}|d�d�|d�d�|dd�S)	z(
    Return the load average on AIX
    �cmd.run�uptimezload averager�,rr�z1-minz5-minz15-min)r�split�strip)r$Zldavg�load_avgr
r
r�_aix_loadavg[s
�r*cCs tdddd���}t|d�S)zH
    Return the maximun number of PROCESSES allowed per user on AIX
    r#z!lsattr -E -l sys0 | grep maxuprocT�Zpython_shellr)rr'r)Znprocsr
r
r�
_aix_nprocjs��r,cCs�i}d}d}d}tdtddd���}|�d���}d|vr%|�d�}n	d|vr.|�d�}d|vr7|�d�}d	|vrA|�d	�}n	d
|vrJ|�d
�}|D]}|sQqL|��}||d�||d��d
�|||<qL|S)z�
    Return the process data

    .. versionchanged:: 2016.11.4
        Added support for AIX

    CLI Example:

    .. code-block:: bash

        salt '*' status.procs
    rr#�psTr+ZUSERZUIDZPIDZCOMMANDZCMD� N)�user�cmd)r�
__grains__�
splitlines�popr'�index�join)�retZuindZpindZcindZplinesZguide�line�compsr
r
r�procsts,


&r9c
Cs�i}tdd�}|��D]N\}}d�|�d�dd��}i}|dkrZz(t|�}|D]}z||||<Wq*tyHt�d||�d||<Yq*wWqtyYt�d	|�Yqwq|S)
a�
    Return a custom composite of status data and info for this minion,
    based on the minion config file. An example config like might be::

        status.cpustats.custom: [ 'cpu', 'ctxt', 'btime', 'processes' ]

    Where status refers to status.py, cpustats is the function
    where we get our data, and custom is this function It is followed
    by a list of keys that we want returned.

    This function is meant to replace all_status(), which returns
    anything and everything, which we probably don't want.

    By default, nothing is returned. Warning: Depending on what you
    include, there can be a LOT here!

    CLI Example:

    .. code-block:: bash

        salt '*' status.custom
    zconfig.dot_valsr�.N���z
status.customzval %s not in return of %s�UNKNOWNzcustom status %s isn't loaded)r�itemsr5r'�KeyError�log�warning)r6Zconf�key�val�func�vals�itemr
r
r�custom�s*
����rFc
CsNt��}tjj��r>d}tj�|�std|�d���tjj	�
|��}tt|�
���d��}Wd�n1s8wYn�tjj��rctdd�}|ddkrTtd	��t|t|d
��d��}nstjj��sotjj��r�tdd
�}|s{td��t|t|��}nRtjj��s�tjj��r�tdd
�}|s�td��|�d�d�d�d���dd�}dd�dd�|�d�D�D�}t||d�}ntjj��r�t�}ntdd�Stj�||�}tj�|�}	|	|}
||��t||�|
j|
jd�d|
jdd��d�}tjj�d��r%tjj���rdnd }ttd|��tj ��|d!<|S)"a�
    Return the uptime for this system.

    .. versionchanged:: 2015.8.9
        The uptime function was changed to return a dictionary of easy-to-read
        key/value pairs containing uptime information, instead of the output
        from a ``cmd.run`` call.

    .. versionchanged:: 2016.11.0
        Support for OpenBSD, FreeBSD, NetBSD, MacOS, and Solaris

    .. versionchanged:: 2016.11.4
        Added support for AIX

    CLI Example:

    .. code-block:: bash

        salt '*' status.uptime
    z/proc/uptimezFile z was not found.rNrz%kstat -p unix:0:system_misc:boot_timerz"The boot_time kstat was not found.rr;�
sysctl.getz
kern.boottimez*Cannot find kern.boottime system parameter�{�}r.�cSsi|]	\}}|t|��qSr
)r)�.0�k�vr
r
r�
<dictcomp>�s���zuptime.<locals>.<dictcomp>cSsg|]	}|���d��qS)�=)r(r')rK�pr
r
r�
<listcomp>��zuptime.<locals>.<listcomp>r%Zsecr#r$r�:r)�secondsZ	since_isoZsince_t�daysrZwhozwho -s�users)!rrrrZis_linux�os�path�existsr�files�fopenrr�readr'Zis_sunosrZ
is_openbsdZ	is_netbsdZ
is_freebsdZ	is_darwinr(�replaceZis_aixr"�datetime�utcfromtimestamp�	isoformatrUrT�which�len�linesep)
Zcurr_secondsZut_pathZrfhrTr!Zbt_data�datar$Z	boot_timeZ	curr_timeZup_timeZut_retZwho_cmdr
r
rr$�sZ��$�
��r$cCsRtddkr	t�Szt��}Wn
tytj�d��w|d|d|dd�S)a
    Return the load averages for this minion

    .. versionchanged:: 2016.11.4
        Added support for AIX

    CLI Example:

    .. code-block:: bash

        salt '*' status.loadavg

        :raises CommandExecutionError: If the system cannot report loadaverages to Python
    �kernel�AIXz1status.loadavag is not available on your platformrrrr&)r1r*rW�
getloadavg�AttributeErrorr�
exceptionsr)r)r
r
r�loadavgs��rjcsXdd�}dd�}dd�}dd�}d	d
�}||||||d�}d�|�td
�fdd���S)a
    Return the CPU stats for this minion

    .. versionchanged:: 2016.11.4
        Added support for AIX

    .. versionchanged:: 2018.3.0
        Added support for OpenBSD

    CLI Example:

    .. code-block:: bash

        salt '*' status.cpustats
    cSsti}z#tjj�dd��}tjj�|���}Wd�n1swYWn
ty/Y|Sw|��D]�}|s9q4|�	�}|ddkrst
|d�t
|d�t
|d�t
|d	�t
|d
�t
|d�t
|d�t
|d
�d�||d<q4|ddkr�t
|d
�dd�|d	d�D�d�||d<q4|ddkr�t
|d
�dd�|d	d�D�d�||d<q4t
|d
�||d<q4|S)z;
        linux specific implementation of cpustats
        z
/proc/stat�rNr�cpu���r��rr)�idleZiowaitZirq�nice�softirqZsteal�systemr/ZintrcS�g|]}t|��qSr
�r�rK�xr
r
rrQb�z4cpustats.<locals>.linux_cpustats.<locals>.<listcomp>)�totalZirqsrtcSrvr
rwrxr
r
rrQgrz)r{Zsoftirqs�rrrZr[�stringutils�
to_unicoder\�OSErrorr2r'r�r6�fp_�statsr7r8r
r
r�linux_cpustatsEsD���







�

�
�z cpustats.<locals>.linux_cpustatsc	Ss�tdd���}|d��}|�d�}|d��}|�d�}|d��}d}i}||d�D]*}t||d	|�t||dd	|�t||dd	|�d
�||<|d7}q.|S)z=
        freebsd specific implementation of cpustats
        r#z	vmstat -PrZcpu0r�usrNr)r�Zsy�id)rr2r'r4r)	�vmstatZvm0Zcpu0locZvm1ZuslocZvm2Zcpuctrr6rlr
r
r�freebsd_cpustatsms


�
z"cpustats.<locals>.freebsd_cpustatscSs�tdd���}|d��}i}|D]0}|�d�rq|��}i|t|d�<tdt|�d�D]}t||�|t|d�||<q/q|S)z;
        sunos specific implementation of cpustats
        r#z
mpstat 1 2r�CPUr)rr2r'�
startswithr�rangerb)�mpstat�fieldsr6rl�ir
r
r�sunos_cpustats�s
"�z cpustats.<locals>.sunos_cpustatsc
Ssi}g|d<d}g}tdd���D]v}|sqt|d�}|�d�rT|�d�}|d�i�i|d|d<|d��}|D]}|�d	�}|d|d|d|d
<q>|�d�r^|��}q|r�|��}i|t|d
�<tdt|�d�D]}	t||	�|t|d
�||	<quq|S)z9
        AIX specific implementation of cpustats
        r�Nr#z	mpstat -a�SystemrSrurrOrrl)rr2rbr�r'�appendrr�)
r6�procnr�r7r8Z	cpu_comps�compZcpu_valsZcpustatr�r
r
r�aix_cpustats�s4



"�zcpustats.<locals>.aix_cpustatscSs|tdd���}|d��}i}|dd�D]%}|��}|d}i||<t|dd��D]\}}||d|||<q,q|S)z=
        openbsd specific implementation of cpustats
        r#zsystat -s 2 -B cpurrmNrr)rr2r'�	enumerate)Zsystatr�r6rlZcpu_lineZcpu_idx�idx�fieldr
r
r�openbsd_cpustats�s�z"cpustats.<locals>.openbsd_cpustats��Linux�FreeBSD�Junos�OpenBSD�SunOSrf�;This method is unsupported on the current operating system!rec��S�Nr
r
��errmsgr
r�<lambda>��zcpustats.<locals>.<lambda>��getr1)r�r�r�r�r��get_versionr
r�r�cpustats4s(!�	r�csNdd�}dd�}dd�}dd�}|||||d	�}d
�|�td�fdd
���S)a
    Return the memory info for this minion

    .. versionchanged:: 2016.11.4
        Added support for AIX

    .. versionchanged:: 2018.3.0
        Added support for OpenBSD

    CLI Example:

    .. code-block:: bash

        salt '*' status.meminfo
    cSs�i}z#tjj�dd��}tjj�|���}Wd�n1swYWn
ty/Y|Sw|��D]-}|s9q4|�	�}|d�
dd�|d<d|di||d<t|�d	kra|d	||dd
<q4|S)z:
        linux specific implementation of meminfo
        z
/proc/meminforkNrrSrJ�valuerrZunit)rrrZr[r}r~r\rr2r'r]rbr�r
r
r�
linux_meminfo�s*�����zmeminfo.<locals>.linux_meminfocSs�tdd���}dd�|D�}dd�|D�}dd�|D�}dd�|D�}i}|D]
}|d||d	<q(tdd
���}dd�|D�}||d<|S)
z<
        freebsd specific implementation of meminfo
        r#z	sysctl vmcSsg|]	}|�d�r|�qS)Zvm)r�rxr
r
rrQ�rRz4meminfo.<locals>.freebsd_meminfo.<locals>.<listcomp>cSsg|]}|�d��qS)rS)r'rxr
r
rrQscSsg|]	}dd�|D��qS)cSsg|]}|���qSr
)r()rK�yr
r
rrQrzz?meminfo.<locals>.freebsd_meminfo.<locals>.<listcomp>.<listcomp>r
rxr
r
rrQrRcSsg|]}|dr|�qS)rr
rxr
r
rrQsrrzsysctl -n vm.vmtotalcSsg|]}|r|�qSr
r
rxr
r
rrQ	rzz
vm.vmtotal)rr2)Zsysctlvmr6r7Zsysctlvmtotr
r
r�freebsd_meminfo�sz meminfo.<locals>.freebsd_meminfoc	Ssvi}g|d<g|d<d}g}d}tdd���D]�}|sqt�d|�r(|��}q|�d�s2|�d	�rot|d�}|d�i�|��}i|d||d
<t|�D]\}}t|�|dkrm||d|d||d
|<qQq|�d�sy|�d
�r�t|d�}|d�i�|��}|d
�d|d��}i|d||<t|�D]\}}t|�|dkr�||d|d|||<q�q|�d�r�|��}d}q|�rt|d�}|d�i�|��}i|d||d
<t|�D]\}}t|�|k�r|||d||d
|<q�qqtdd���D])}|�s�qt|d�}|d�i�|�	��dd�}|d
|d||d<�q|S)z8
        AIX specific implementation of meminfo
        Zsvmonr�NFr#zsvmon -G�\sZmemoryZpinrrzpg spacezin user.rZPageSizez	vmstat -v)
rr2rrr'r�rbr�r��lstrip)	r6r�r�Z
pagesize_flagr7r8r�r�Zpg_spacer
r
r�aix_meminfo
sp
 ��
��
zmeminfo.<locals>.aix_meminfocSs>tdd���}gd�}|d��dd�}tt||��}|S)z<
        openbsd specific implementation of meminfo
        r#r�)zactive virtual pageszfree list sizezpage faultszpages reclaimedzpages paged inzpages paged outzpages freedz
pages scannedr�
)rr2r'�dict�zip)r�r�rdr6r
r
r�openbsd_meminfo\s

z meminfo.<locals>.openbsd_meminfo�r�r�r�r�rfr�recr�r�r
r
r�r
rr�{r�zmeminfo.<locals>.<lambda>r�)r�r�r�r�r�r
r�r�meminfo�sO�r�csRdd�}dd�}dd�}dd�}|||||||d	�}d
�|�td�fdd
���S)a/
    .. versionchanged:: 2016.3.2
        Return the CPU info for this minion

    .. versionchanged:: 2016.11.4
        Added support for AIX

    .. versionchanged:: 2018.3.0
        Added support for NetBSD and OpenBSD

    CLI Example:

    .. code-block:: bash

        salt '*' status.cpuinfo
    cSs�i}z#tjj�dd��}tjj�|���}Wd�n1swYWn
ty/Y|Sw|��D]-}|s9q4|�	d�}|d�
�|d<|ddkrW|d�	�||d<q4|d�
�||d<q4|S)z7
        linux specific cpuinfo implementation
        z
/proc/cpuinforkNrSr�flagsr)rrrZr[r}r~r\rr2r'r(r�r
r
r�
linux_cpuinfo�s&���
zcpuinfo.<locals>.linux_cpuinfocSspd}i}td��dvrd}nd}td|���D]}|sq|�|�}|d��|d<|d��||d<q|S)	z5
        bsd specific cpuinfo implementation
        zsysctl hw.model hw.ncpure)ZnetbsdZopenbsdrOrSr#rr)r1�lowerrr2r'r()Zbsd_cmdr6�sepr7r8r
r
r�bsd_cpuinfo�s
zcpuinfo.<locals>.bsd_cpuinfocSsi}i|d<tdd���D]"}|sq|�d�}|d��|d<t|d�����|d|d<qg|d<d}tdd	���D]�}|sDq?|�d
�r�t|d�}|��}|d�i�d|vr�i|d|d<t|d
�|d|dd<t|d�|d|dd<q?d|vr�i|d|d<t|d
�|d|dd<q?|�d�r�|��|d|d<q?|�d��r|����}|ddd�|d|d<t|d
�|d|d<t|d�|d|d<t|d�|d|d<|d�d|ddd���|d|d<q?|S)z7
        sunos specific cpuinfo implementation
        Zisainfor#z
isainfo -xrSrrZpsrinfoNz
psrinfo -v -pzThe physical processorZcoresZtopologyrmrp�threadsZvirtualz      �namez    �vendor�familyroZmodelrq�stepr�r.�r;Zclock)	rr2r'r(�sortedr�rbr�r)r6r7r8r�r
r
r�
sunos_cpuinfo�sH
"
�
*�zcpuinfo.<locals>.sunos_cpuinfocSs�i}g|d<g|d<d}tdddd���D]6}|sqt|d�}|�d�s+|�d	�rL|d�i�|�d
�}|d��|d<|d|d||d<qqtdd
dd���D]1}|s\qWt|d�}|�d�r�|d�i�|�d
�}|d��|d<|d|d||d<qWqWtdddd���D]+}|s�q�t|d�}|d�i�|�d
�}|d��|d<|d|d||d<q�|S)z6
        AIX  specific cpuinfo implementation
        ZprtconfZlparstatNr#zprtconf | grep -i "Processor"Tr+Z	Processor�NumberrSrrzprtconf | grep "CPU"r�zlparstat -i | grep CPU)rr2rbr�r�r'�rstrip)r6r�r7r8r
r
r�aix_cpuinfo�sZ��
��

��
zcpuinfo.<locals>.aix_cpuinfo)r�r�r�ZNetBSDr�r�rfr�recr�r�r
r
r�r
rr�Sr�zcpuinfo.<locals>.<lambda>r�)r�r�r�r�r�r
r�r�cpuinfo~sCM�
r�csFdd�}dd�}dd�}|||||d�}d�|�td	�fd
d���S)z�
    .. versionchanged:: 2016.3.2
        Return the disk stats for this minion

    .. versionchanged:: 2016.11.4
        Added support for AIX

    CLI Example:

    .. code-block:: bash

        salt '*' status.diskstats
    cSsi}z#tjj�dd��}tjj�|���}Wd�n1swYWn
ty/Y|Sw|��D]V}|s9q4|�	�}t
|d�t
|d�t
|d�t
|d�t
|d�t
|d	�t
|d
�t
|d�t
|d�t
|d
�t
|d�t
|d�t
|d�t
|d�d�||d<q4|S)z<
        linux specific implementation of diskstats
        z/proc/diskstatsrkNrrrrrmrnrorprq�	r�r���
)�major�minorZdeviceZreads_issuedZreads_mergedZsectors_readZms_spent_readingZwrites_completedZ
writes_mergedZsectors_writtenZms_spent_writingZio_in_progressZms_spent_in_ioZweighted_ms_spent_in_ior|r�r
r
r�linux_diskstatses<���













�z"diskstats.<locals>.linux_diskstatscSs�i}tdd���}|d}|dd�D]*}|��}i||d<t|��dd�|dd��D]\}}t|�||d|<q/q|S)zU
        generic implementation of diskstats
        note: freebsd and sunos
        r#ziostat -xzdrrNr)rr2r'r�r)r6Ziostat�headerr7r8Zmetricr�r
r
r�generic_diskstats�s&�z$diskstats.<locals>.generic_diskstatscSsNi}d}g}d}d}tdd���D]�}|r |�d�s |�d�r!qt�d|�sZ|�d�}|d	��}|d	}|d
}|d
��}g||<t||�}||�i�i||||<qd|vr�|�d�}|d
��}|d	��}t||�}||�i�i||||<q|��}t	|�D]\}	}
t|�|	kr�||	|||||
<q�q|S)z:
        AIX specific implementation of diskstats
        NrJr#ziostat -dDVr�z-----------r�rSrr)
rr2r�rrr'rbr�r�r�)r6r�r�Z	disk_nameZ	disk_moder7Z	dsk_compsZ
dsk_firstsr8r�r�r
r
r�
aix_diskstats�sB

��z diskstats.<locals>.aix_diskstats�r�r�r�r�rfr�recr�r�r
r
r�r
rr��r�zdiskstats.<locals>.<lambda>r�)r�r�r�r�r
r�r�	diskstatsVs!9�r�cGs�t�}t�}|s|�d�n|D]}|�d�r|�|�q|�|�q|r�t�d�dd�|D���}tddkriz%tjj	�
dd	��}tjj�|�
����}Wd
�n1sWwYWntyhiYSwtddvrxtdd
���}ntd��|D]=}|��}tddkr�t|�dkr�|d}	|d}
|�|
�r�|�|	�q~t|�dkr�|d}	|d}
|�|
�r�|�|	�q~i}|D]}t�|�}
|
j}|
j|}|
j|}||d�||<q�|S)a�
    Return the disk usage for this minion

    Usage::

        salt '*' status.diskusage [paths and/or filesystem types]

    CLI Example:

    .. code-block:: bash

        salt '*' status.diskusage         # usage for all filesystems
        salt '*' status.diskusage / /tmp  # usage for / and /tmp
        salt '*' status.diskusage ext?    # usage for ext[234] filesystems
        salt '*' status.diskusage / ext?  # usage for / and all ext filesystems
    �*�/�|css �|]}t�|��d�VqdS)z(%s)N)�fnmatch�	translate�format)rK�fstyper
r
r�	<genexpr>�s�zdiskusage.<locals>.<genexpr>rer�z/proc/mountsrkN)r�r�r#zmount -pz3status.diskusage not yet supported on this platformr�rmrrr)�	availabler{)�set�addr�r�compiler5r1rrrZr[r}r~r\r2rrrr'rbrrW�statvfs�f_bsize�f_bavail�f_blocks)�args�selectedZfstypes�argZregexr�Zifiler7r8Zmntptr�r6rXZfsstatsZblkszr�r{r
r
r�	diskusage�sb
�����

�

�


r�cs@dd�}dd�}||||||d�}d�|�td�fdd	���S)
z�
    .. versionchanged:: 2016.3.2
        Return the virtual memory stats for this minion

    .. versionchanged:: 2016.11.4
        Added support for AIX

    CLI Example:

    .. code-block:: bash

        salt '*' status.vmstats
    cSs�i}z#tjj�dd��}tjj�|���}Wd�n1swYWn
ty/Y|Sw|��D]}|s9q4|�	�}t
|d�||d<q4|S)z:
        linux specific implementation of vmstats
        z/proc/vmstatrkNrrr|r�r
r
r�
linux_vmstats4s ���zvmstats.<locals>.linux_vmstatscSsTi}tdd���D]}|��}|d��r't|d���|d�|dd��<q
|S)zw
        generic implementation of vmstats
        note: works on FreeBSD, SunOS and OpenBSD (possibly others)
        r#z	vmstat -srr.rN)rr2r'r
rr(r5)r6r7r8r
r
r�generic_vmstatsFs"�z vmstats.<locals>.generic_vmstatsr�r�recr�r�r
r
r�r
rr�]r�zvmstats.<locals>.<lambda>r�)r�r�r�r
r�r�vmstats%s�	r�cs@dd�}dd�}|||||td�}d�|�td�fdd	���S)
a,
    Return the number of processing units available on this system

    .. versionchanged:: 2016.11.4
        Added support for AIX

    .. versionchanged:: 2018.3.0
        Added support for Darwin, FreeBSD and OpenBSD

    CLI Example:

    .. code-block:: bash

        salt '*' status.nproc
    cSs,zttdd����WStyYdSw)z8
        linux specific implementation of nproc
        r#�nprocr)rrr(rr
r
r
r�linux_nprocqs
�znproc.<locals>.linux_nproccSstdd�}|s
dSt|�S)z1
        generic implementation of nproc
        rGzhw.ncpur)rr)Z	ncpu_datar
r
r�
generic_nproczsznproc.<locals>.generic_nproc)r��Darwinr�r�r�rfr�recr�r�r
r
r�r
rr��r�znproc.<locals>.<lambda>)r,r�r1)r�r�r�r
r�rr�`s	
�	r�cs\dd�}�fdd�}dd��dd�}d	d
�}|���||d�}d�|�td
�fdd���S)a
    Return the network stats for this minion

    .. versionchanged:: 2016.11.4
        Added support for AIX

    .. versionchanged:: 2018.3.0
        Added support for OpenBSD

    CLI Example:

    .. code-block:: bash

        salt '*' status.netstats
    c
Ss�i}z#tjj�dd��}tjj�|���}Wd�n1swYWn
ty/Y|Swdg}|��D]>}|s<q7|�	�}|d|dkrst
|�d}i}t|�D]}|dkr[qTt||�|||<qT|d�
dd�}	|||	<q7|}q7|S)z8
        linux specific netstats implementation
        z/proc/net/netstatrkNrJrrrS)rrrZr[r}r~r\rr2r'rbr�rr])
r6r�r��headersr7r8r4�rowr�Zrownamer
r
r�linux_netstats�s4���
z netstats.<locals>.linux_netstatscs��Sr�r
r
)�bsd_netstatsr
r�freebsd_netstats�sz"netstats.<locals>.freebsd_netstatscSs�i}tdd���D]5}|�d�rq
|�d�s&|��d�dd�}i||<q
|��}|d��r?|d||d�|d	d
��<q
|S)z6
        bsd specific netstats implementation
        r#�
netstat -sz		�	rrSrJr.rN)rr2r�r'r]r
r5)r6r7rAr8r
r
rr��s


�znetstats.<locals>.bsd_netstatscSs�i}tdd���D]a}|�dd���}t|�dkr|�d�d|vrkt|�dkrG|d��s7|ddd	kr?t|d�|d<|d||d<t|�dkrk|d
��s[|d
dd	krct|d
�|d
<|d
||d<q
|S)z8
        sunos specific netstats implementation
        r#r�rOz = rorrr�-rn)rr2r]r'rbr3r
r)r6r7r
r
r�sunos_netstats�s 
�z netstats.<locals>.sunos_netstatscSs�i}g}d}d}tdd���D]P}|sqt�d|�s:d|vr:|�d�}|d}g||<t||�}||�i�q|��}|d��|d<|d��r`t	|d�|||d�
|dd��<qq|S)	z6
        AIX specific netstats implementation
        Nr#r�r�rSrr.r)rr2rrr'rbr�r(r
rr5)r6r�r�Z
proto_namer7r8r
r
r�aix_netstats�s(
(znetstats.<locals>.aix_netstatsr�r�recr�r�r
r
r�r
rr�r�znetstats.<locals>.<lambda>r�)r�r�r�r�r�r
)r�r�r�netstats�s�	r�csNdd�}dd�}dd�}dd�}|||||d	�}d
�|�td�fdd
���S)z�
    .. versionchanged:: 2016.3.2
        Return the network device stats for this minion

    .. versionchanged:: 2016.11.4
        Added support for AIX

    CLI Example:

    .. code-block:: bash

        salt '*' status.netdev
    cSs�i}z#tjj�dd��}tjj�|���}Wd�n1swYWn
ty/Y|Sw|��D]�}|s9q4|�	d�dkrAq4|�
�}|�
d�d��|d<|�d|�
d�d���
�d�id|d�dt
|d	��d
t
|d��dt
|d
��dt
|d��dt
|d��dt
|d��dt
|d��dt
|d��dt
|d��dt
|d��dt
|d��dt
|d��d t
|d!��d"t
|d#��d$t
|d%��d&t
|d'��||d<q4|S)(z9
        linux specific implementation of netdev
        z
/proc/net/devrkNrSrrZifaceZrx_bytesrZ
rx_compressedrqZrx_droprnZrx_errsrmZrx_fiforoZrx_framerpZrx_multicastr�Z
rx_packetsrZtx_bytesr�Z
tx_carrier�Ztx_colls�Z
tx_compressed�Ztx_dropr�Ztx_errsr�Ztx_fifo�Z
tx_packetsr�)rrrZr[r}r~r\rr2�findr'r(�insertrr�r
r
r�linux_netdev$sl���"��������	�
���
�����znetdev.<locals>.linux_netdevcs��fdd����}tdd���}|tdd���dd�7}|d��}|dd�D]$}|��}td	d
�D]}t||�||d|d|d||<q6q+|S)
z;
        freebsd specific implementation of netdev
        cs
t���Sr�)�collections�defaultdictr
��
_dict_treer
rrSs
z2netdev.<locals>.freebsd_netdev.<locals>._dict_treer#znetstat -i -n -4 -b -dznetstat -i -n -6 -b -drNrrmr�rr)rr2r'r�r)r6Znetstatr�r7r8r�r
rr�freebsd_netdevNs.�znetdev.<locals>.freebsd_netdevcSs:i}t�td��td���D]�}tdd|�d����}tdd|�d����}|d��|d<|d��|d<|d��|d<|d��|d<i||<|dd	d
�D]}|dkr]qV|dvrk|||d
|��<qVt|�|||<qV|dd	d
�D]}|dkr�q||dvr�|||d|��<q|t|�|||<q|q|S)z9
        sunos specific implementation of netdev
        �ip4_interfaces�ip6_interfacesr#znetstat -i -I z -n -f inetz -n -f inet6rrNr;�Name)ZAddresszNet/DestzIPv4 zIPv6 )�	itertools�chainr1�keysrr2r'r)r6�dev�netstat_ipv4�netstat_ipv6rBr
r
r�sunos_netdev`sB�
��
���znetdev.<locals>.sunos_netdevc	Ss�i}g}d}t�td��td���D]�}tdd|�d����}tdd|�d����}g||<|D]X}|�d�r@|��}q4|��}t|�d	krQt	d
�
|���|d�d�rYq4t||�}||�i�i|||d
<tdt|��D]}t|�|kr�|||||d
||<quq4|D]X}|�d�r�|��}q�|��}t|�d	kr�t	d
�
|���|d�d�r�q�t||�}||�i�i|||d<tdt|��D]}t|�|kr�|||||d||<q�q�q|S)z7
        AIX specific implementation of netdev
        Nrrr#znetstat -i -n -I z -f inetz	 -f inet6rrz4Insufficent data returned by command to process '{}'r�linkZipv4rZipv6)
rrr1r	rr2r�r'rbrr�r�r�)	r6r�r�r
rrr7r8r�r
r
r�
aix_netdev�sz�
��
��
����
�����znetdev.<locals>.aix_netdevr�r�recr�r�r
r
r�r
rr��r�znetdev.<locals>.<lambda>r�)r�rr
rr�r
r�r�netdevs**O�rcs>dd�}dd�}|||||d�}d�|�td�fdd	���S)
z�
    Return a list of logged in users for this minion, using the w command

    CLI Example:

    .. code-block:: bash

        salt '*' status.w
    cSstg}tdd���}|D]+}|sq|��}|d|d|d|d|d|dd	�|d
d��d�}|�|�q|S)
z5
        Linux specific implementation for w
        r#zw -fhrrmrrnrrr.roN)rrZjcpu�loginZpcpu�ttyr/�what�rr2r'r5r��Z	user_listrVr�r8Zrecr
r
r�linux_w�s �	zw.<locals>.linux_wcSsng}tdd���}|D](}|sq|��}|d|d|d|d|dd�|d	d
��d�}|�|�q|S)z2
        Generic BSD implementation for w
        r#zw -hrrmrrrr.rnN)�fromrrrrr/rrrr
r
r�bsd_ws�zw.<locals>.bsd_w)r�r�r�r�r�r�recr�r�r
r
r�r
rr�$r�zw.<locals>.<lambda>r�)rrr�r
r�r�w�s�rcCs2t�t�t�t�t�t�t�t�t�t	�t
�d�S)z�
    Return a composite of all status data and info for this minion.
    Warning: There is a LOT here!

    CLI Example:

    .. code-block:: bash

        salt '*' status.all_status
    �r�r�r�r�rjr�rr�r$r�rrr
r
r
r�
all_status's�rcCsltt���}td}td|dd�}d}|��D]}||vrqt�||�r3|r+|d7}||��d7}q|S)a�
    Return the PID or an empty string if the process is running or not.
    Pass a signature to use to find the process via ps.  Note you can pass
    a Python-compatible regular expression to return all pids of
    processes matching the regexp.

    .. versionchanged:: 2016.11.4
        Added support for AIX

    CLI Example:

    .. code-block:: bash

        salt '*' status.pid <sig>
    r-zcmd.run_stdoutTr+rJ�
r)	�strrW�getpidr1rr2r�searchr')�sigZmy_pidr0�outputZpidsr7r
r
r�pidAs�r"csBdd�}dd�}||||dd�d�}d�|�td	�fd
d���S)a
    Return the system version for this minion

    .. versionchanged:: 2016.11.4
        Added support for AIX

    .. versionchanged:: 2018.3.0
        Added support for OpenBSD

    CLI Example:

    .. code-block:: bash

        salt '*' status.version
    cSsfz'tjj�dd��}tjj�|�����Wd�WS1s wYWdSty2iYSw)z:
        linux specific implementation of version
        z
/proc/versionrkN)	rrrZr[r}r~r\r(r)r�r
r
r�
linux_versionrs(��zversion.<locals>.linux_versioncS�tdd�S)z8
        bsd specific implementation of version
        r#zsysctl -n kern.version�rr
r
r
r�bsd_version|szversion.<locals>.bsd_versioncSr$)Nr#z
oslevel -sr%r
r
r
rr��szversion.<locals>.<lambda>r�r�recr�r�r
r
r�r
rr��r�r�)r#r&r�r
r�r�versionas
�r'TcCs�d}|rtjj�|�}|sdSd}tdddd�}tjj�|�}|D]
}||vr,d}nq"||urqtjjjdtdd	��.}|rL|�	d
|itj
jdd��n|�	d
|itj
jd
d��Wd�|SWd�|S1slwY|S)a�
    .. versionadded:: 2014.7.0

    Return the connection status with master. Fire an event if the
    connection to master is not as expected. This function is meant to be
    run via a scheduled job from the minion. If master_ip is an FQDN/Hostname,
    it must be resolvable to a valid IPv4 address.

    .. versionchanged:: 2016.11.4
        Added support for AIX

    CLI Example:

    .. code-block:: bash

        salt '*' status.master
    NFz
config.getZpublish_porti�rT�minion��opts�listen�master�	connected��typeZdisconnected)rr�networkZhost_to_ipsrZremote_port_tcp�event�	get_event�__opts__�
fire_eventr(�master_event)r,r-Z
master_ipsZmaster_connection_status�portZ
connected_ips�	master_ipr1r
r
rr,�s:���
�
�
�
�
r,c	CsZ|dus|dkr
dSt�t�}||d<d|vr|d=|�tj�|��z
|�tjj|dd��Wn
ty:YdSw|�	dd�}d	d
i}d}tj
jjj
|dd��R}z|j|d
|d�}d}Wntyp}zWYd}~nd}~ww|r�tjjjdtdd��}|�d|itjjdd��Wd�n1s�wY|Wd�S1s�wYdS)z�
    .. versionadded:: 2016.3.0

    Sends ping request to the given master. Fires '__master_failback' event on success.
    Returns bool result.

    CLI Example:

    .. code-block:: bash

        salt '*' status.ping_master localhost
    NrJFr,r7)�fallbackZauth_timeoutrr0Zping�clear)Zcryptr)Ztries�timeoutTr(r)Zfailbackr.)�copy�deepcopyr3�updaterr(Zprep_ip_portZresolve_dns�	Exceptionr��channel�clientZ
ReqChannel�factory�sendrr1r2r4r5)	r,r*r:�load�resultr?�payload�er1r
r
r�ping_master�sD

������$�rGcCs�|st}d|vr
dS|d}|tvrdS|d}|tvr6t|�r6|�dd�p,|�dd�}t�d||�d	St||�}|sh|�dd�pI|�dd�}t�d
||�t|d|�t|d|�t�d
||�d	S)a
    Forces proxy minion reconnection when not alive.

    proxy_name
        The virtual name of the proxy module.

    opts: None
        Opts dictionary. Not intended for CLI usage.

    CLI Example:

    .. code-block:: bash

        salt '*' status.proxy_reconnect rest_sample
    �proxyFz.alivez.get_reboot_activeZproxyidrJr�zD%s (%s proxy) is rebooting or shutting down. Don't probe connection.Tz"%s (%s proxy) is down. Restarting.z	.shutdownz.initzRestarted %s (%s proxy)!)r3Z	__proxy__r�r?�info�debug)Z
proxy_namer*Zproxy_keepalive_fnZchk_reboot_active_keyZ	minion_id�is_aliver
r
r�proxy_reconnect�s0�rL�%A, %d. %B %Y %I:%M%pcCstj��}|�|�S)a#
    .. versionadded:: 2016.3.0

    Return the current time on the minion,
    formatted based on the format parameter.

    Default date format: Monday, 27. July 2015 07:55AM

    CLI Example:

    .. code-block:: bash

        salt '*' status.time

        salt '*' status.time '%s'

    )r^�today�strftime)r��dtr
r
rr%s

)NTr�)rM)6�__doc__r�r;r^r�r�loggingrWrrZsalt.channelrZsalt.configZsalt.minionZsalt.utils.eventZsalt.utils.filesZsalt.utils.networkZsalt.utils.pathZsalt.utils.platformZsalt.utils.stringutilsZsalt.exceptionsr�	getLogger�__file__r?r	Z__func_alias__�__name__rrr"r*r,r9rFr$rjr�r�r�r�r�r�r�r�rrrr"r'r,rGrLrr
r
r
r�<module>sp



&+S-YL;3PC 
.3
03