a c8h @sJdZddlmZmZmZmZddlZddlZddlZddlZddl m Z ddl m Z ddl m Z ddl mZzeWneyeZYn0zddlZdZWneyd ZYn0zddlZddlZdZWneyd ZYn0ddlZejd dd Zeed seje_ejZddlZe d dgddl Z Wdn1sJ0Yddl m!Z!zddl"m#Z#m$Z$dZ%WnZeyzddl&m#Z#m$Z$dZ%Wn,eyddl'm(Z(m)Z)m*Z*dZ%Yn0Yn0z ddl+Z+WneydZ+Yn0ej,-dzddl.m/Z0dZ1Wney2d Z1Yn0da2da3ddZ4e4Z5e5rne 6e!7Z8e89de5ddZ:ddZ;ddZd"d#Z?d$d%Z@d&d'ZAd(d)ZBd*d+ZCd,d-ZDd.d/ZEd0d1ZFd2d3ZGd4d5ZHd6d7ZId8d9ZJd:d;ZKdkrFe/D].ZMeMND]ZOePd?eOeMeOfq"ePqdS)@z1Used to read hardware info from kudzu, /proc, etc) gethostname getaddrinfoAF_INETAF_INET6N)config) rhnserver) up2dateUtils)ustrTFzrhn-client-tools)fallbackugettextzFailed to save log entryzSMBIOS.*: entry point at) up2dateLog) get_devicesget_computer_info)check_hal_dbus_statusget_hal_computerread_halz/usr/share/rhsm)HardwarecCsttdsdStS)N get_warnings)hasattr dmidecoderrr;/usr/lib/python3.9/site-packages/up2date_client/hardware.py dmi_warnings[s rz.Warnings collected during dmidecode import: %scCstdurtrdSt}|tjz6|d}t}|rXtt }| d|Wn$dat}|rxtYdS0| atS)z= Initialize _dmi_data unless it already exist and returns it Nallzdmidecode warnings: %sr) _dmi_data_dmi_not_availablerZ dmidecodeXMLZ SetResultTypeZ DMIXML_DOCZ QuerySectionrclear_warningsr initLog log_debugZxpathNewContext)Zdmixmldatadmi_warnlogrrr_initialize_dmi_datags(  r#cCs6t}|durdS||}|gkr.|djSdSdS)z Fetch DMI data from given section using given path. If data could not be retrieved, returns empty string. General method and should not be used outside of this module. Nr)r#Z xpathEvalZcontent)pathZdmi_datar rrr get_dmi_datas  r&cCstdS)zt Return Vendor from dmidecode bios information. If this value could not be fetch, returns empty string. /dmidecode/BIOSinfo/Vendorr&rrrr dmi_vendorsr)cCstd}|sd}|S)zt Return UUID from dmidecode system information. If this value could not be fetch, returns empty string. z7/dmidecode/SystemInfo/SystemUUID[not(@unavailable='1')]r$r()Zuuidrrrdmi_system_uuidsr*cCstdtjsiStdd}i}d|d<|D]X}t|s>q0|d}t|dkrVq0|d}||d<d|dd||d<q0|S) Nz/etc/sysconfig/installinforZ INSTALLINFOclass=rrr$) osaccessR_OKopen readlineslensplitstripjoin)Z installinfoZ installdictinfovalsZstrippedstringrrrread_installinfos    r9csFztd}Wnty$g}Yn0tdtfdd|DS)z returns number of CPU in system Beware that it can be different from number of active CPU (e.g. on s390x architecture z/sys/devices/system/cpu/z ^cpu[0-9]+$csg|]}|r|qSr)match).0iZre_cpurr zcpu_count..)r.listdirOSErrorrecompiler3)Zcpu_dirrr=r cpu_counts    rDcCsztrtdWSWn Yn0d}tdtjrz\td}d}|D].}|dr`qPt | dd}||krP|}qP|dkrd |WSWn Yn0td tj r"zbt d d }t }|D],}d |vrt | d d }||qt|dkrt|WSWn Yn0tdtjrzDtd}d}|D]}d|vrJ|d 7}qJ|dkrt|WSWn Yn0dS)Nzcpu.cpu_socket(s)rz/usr/bin/lscpuz/usr/bin/lscpu -p#,r /proc/cpuinfor+z physical id:z/usr/sbin/dmidecodez /usr/sbin/dmidecode -t processorzProcessor Information)subscription_manager_availableSubManHardwareZ getCpuInfor.r/X_OKpopenr2 startswithintr4r0r1setr5addr3)number_socketslinesZmax_socket_indexlineZ socket_indexZ socket_idscountrrr__get_number_socketssX      rWc Csldd}dd}tdtjs"iStr4ttjdtdd}td }t }d d d }|d d kr~|dddks|dkrx||}|dkrd|d<nd|d<||d<||d|d<||d|d<||d|d<||d|d<||d|d<||d|d<||d|d<||d |d!<||d"}|d#kr:d$}zt t t |d%|d&<Wntyrd'|d&<Yn0nr|d(vrl||}d)|d<||d*|d<||d+|d<||d,|d<||d-|d<d.||d/||d0f|d1<||d2|d<d#|d<||d|d<||d3|d!<||d4}|}z t t t |d d5|d&<Wntyfd'|d&<Yn0n~|d6vr(||}||d<||d<||d7|d<||d8|d<||d9|d<||d:|d<||d|d<|d"}zt t t |d%|d&<Wntyd'|d&<Yn0||d;|d!<n|ddd?}zt t t |d%|d&<Wntyd'|d&<Yn0n|d@vri}|dAD]:} | dB} t| dCkr q| d%|| d <q||d<||d|d<||d<||d<||dD|d<d#|d<d#|d<d#|d<d#|d<||d;|d!<d |d&<nX||d<||d<||d<||d<d#|d<d#|d<d#|d<d#|d<d#|d<d#|d!<d |d&<|dsd%|d<n@zt |d|d<Wnd%|d<Yn0|dd kr>d%|d<t} | jdErht} | rh| |dF<|S)GNcSs|}||vrdS||S)Nr$)lower)aentryerrr get_entryszread_cpuinfo..get_entrycSsd}i}|dD]z}t|s q|d}|dkr4q|dD]L}t|sLq>|d}t|dkrdq>|d|d}}|||<q>q|S)Nrz r rJrH)r4r3r5rX)cpulistrVtmpdictcpuZcpu_attrr8namevaluerrrget_cpulist_as_dicts"  z)read_cpuinfo..get_cpulist_as_dictrICr+ZCPUZ Processor)r,Zdescrr<86x86_64platformZi386rVZ vendor_idtypez model nameZmodelz cpu familyZ model_numberZ model_verZsteppingZ model_revz cache sizecacheZbogomipsflagsotherzcpu mhzr$z-1rZspeedrE)alphaZalphaev6rnz cpus detectedr`z cpu modelz cpu variationz%s/%sz system typezsystem variationZ model_versionz cpu revisionzplatform stringzcycle frequency [Hz]i@B)Zia64vendorfamilyZarchrevZrevisionZfeatures)Zppc64machineZclock)Zs390Zs390xr]z: rHzbogomips per cpuZ cpu_socketsZ socket_count)r.r/r0locale setlocale LC_NUMERICr1readunamerXrDrProundfloat ValueErrorr4r3r5rZ RhnServerZ capabilitiesZ hasCapabilityrW) r\rcr^rwrVZhwdictr_Z mhz_speedZhz_speedr`r8srSrrr read_cpuinfos &               r|cCs@t}|d}|dddkr&tS|dddkrir?zread_network..rrez 127.0.0.1cSs|dtjkSr)rrrrrrrrr?z::1r$)rrrrrfilter)ZnetdictZ list_of_addrsZ ipv4_addrsZ ipv6_addrsrrr read_network[s4      rc Csti}d|d<ts$ts$tjd|StrBtttt }nt }|D]}z,trft |}nt |t jdd}Wnd}Yn0ztd|}Wnd}Yn0|rtj|}t||}z@trt|}n,td|d }|d d }|Wn |d kr(d }nd}Yn0z.trFt|}nt |t jdd}Wnd}Yn0z.trt|} nt |t jdd} Wnd} Yn0z.trt|} nt |t jdd} Wnd} Yn0g} trPt|} | D]@} | D]0}|j }|dkr.d}| !||j"|j#dqq nzt |t j$D]} | ddd}t%&|}|j'rd}n(|j(rd}n|j)rd}n |j*rd}| d}d}|dD]Z}|sq*nF|+dkr|d7}n.|d t,t-|ddddd.d7}q| !|||dqbWnt/yVYn0||| | || d||<qN|S)NZ NETINTERFACESr,zWWarning: information about network interfaces could not be retrieved on this platform. raddrr$z/sys/class/net/%s/masterz/sys/class/net/%s/device/ueventr+r-rloZloopbackZUnknownnetmask broadcastglobalZuniverse)scoperr%linkhostZsiterJZffffrrrH1)rrrrmoduleZipv6)0ethtool_presentnetifaces_presentsysstderrwritelistrQethtoolr Zget_active_devices netifaces interfacesZ get_hwaddrZ ifaddressesZAF_LINKr.readlinkr%basenamerZ get_moduler1readliner4r5rZ get_ipaddrrZ get_netmaskZ get_broadcastZget_interfaces_infoZget_ipv6_addressesrappendaddressrr ipaddress IPv6Address is_global is_link_local is_loopback is_site_localrXbinrPrindexKeyError)ZintDictrZ interfacerrZmaster_interfacerZ driver_filerrrZip6_listZdev_infor7Zip6rZip6_addrZ scope_infoZ ip6_netmaskZ netmask_bitsZ two_octetsrrrread_network_interfaces~s                      2 rc Cs:i}d|d<td}|ddkr8|dddksD|dksD|St}|rV||d <td }|rj||d <td }|r|d |}||d<td|d<td}|r||d<td}|r||d<td}|r||d<td}td}td} td} dd|d|d| d| f|d<t|D]} || dur|| =q|S)NZDMIr,rerr<rfrgrhro!/dmidecode/SystemInfo/ProductNameproduct/dmidecode/SystemInfo/Versionrsystemz%/dmidecode/BaseBoardInfo/ManufacturerZboardr'Z bios_vendorz/dmidecode/BIOSinfo/VersionZ bios_versionz/dmidecode/BIOSinfo/ReleaseDateZ bios_releasez#/dmidecode/ChassisInfo/SerialNumberz/dmidecode/ChassisInfo/AssetTagz%/dmidecode/BaseBoardInfo/SerialNumber"/dmidecode/SystemInfo/SerialNumberz#(%s: %s) (%s: %s) (%s: %s) (%s: %s)ZchassisZasset)r.rwrXr)r&rkeys) ZdmidictrwrorversionrreleaseZchassis_serialZ chassis_tagZ board_serialZ system_serialkrrrread_dmisL$    rcCsztrt}nt}|}Wn8tyVt}dtd}| |iYS0i}|D]"}| dr`t |||t |<q`| t |S)Nz0Error reading system and smbios information: %s rr) using_gudevrrZGetAllProperties Exceptionr rrexc_inforrOr update get_smbios)ZpropsZcomputerr"msgZsystem_and_smbiosrrrrget_hal_system_and_smbios;s       rc CsDttriStttdtdtdtdtdtddSdS) a  Returns dictionary with values we are interested for. For historical reason it is in format, which use HAL. Currently in dictionary are keys: smbios.system.uuid, smbios.bios.vendor, smbios.system.serial, smbios.system.manufacturer. rz"/dmidecode/SystemInfo/Manufacturerrz/dmidecode/SystemInfo/SKUnumberz/dmidecode/SystemInfo/Familyr)zsmbios.system.uuidzsmbios.bios.vendorzsmbios.system.serialzsmbios.system.manufacturerzsmbios.system.productzsmbios.system.skunumberzsmbios.system.familyzsmbios.system.versionN)r#rr*r)r&rrrrrPsrcCs"tr t}nzt\}}d}|s"|rs           (       7B!K#:]