a hD @szddlZddlZddlZddlZddlmZmZmZmZm Z m Z m Z m Z ddl mZeejdZdedkrrendZdZeeefZeeZd"eee eee ed d d ZGd d d e ZGdddZGdddeZGdddeZGdddeZ GdddeZ!GdddeZ"GdddeZ#GdddeZ$GdddeZ%Gd d!d!eZ&e&e"e#ee e!ee%e$g Z'dS)#N)AnyCallable DefaultDictIterableList NamedTupleOptionalTuple)Handle SC_CLK_TCKdz/sys/class/hwmon)rootfdstatfiledefaultkeyreturnc Csztj|tj|d}Wnty*YdS0zlzt|d}WnLty}z4|jtjkrht d||WYd}~Wt |dSd}~00Wt |n t |0|r| |t |}| d|}|||}zt |p|WStyYdS0dS)Ndir_fdzFailed to read %s: %s )osopenO_RDONLYFileNotFoundErrorreadOSErrorerrnoZENODEVloggerZwarningcloseindexlenint ValueError) rrrrfddataestartendr*3/usr/lib/python3.9/site-packages/cockpit/samples.py read_int_file%s*      r,c@s.eZdZUeed<eed<eed<eed<dS)SampleDescriptionnameZunitsZ semantics instancedN)__name__ __module__ __qualname__str__annotations__boolr*r*r*r+r-Cs r-c@s*eZdZUeeed<eddddZdS)Sampler descriptionsNsamplesrcCstdS)N)NotImplementedError)selfr9r*r*r+sampleMszSampler.sample)r0r1r2rr-r4Samplesr<r*r*r*r+r6Js  r6c @seZdZedddddedddddedddddeddddded ddd ded ddd ded ddd ded ddd dgZeddddZdS) CPUSamplerzcpu.basic.nicemilliseccounterFr/zcpu.basic.userzcpu.basic.systemzcpu.basic.iowaitz cpu.core.niceTz cpu.core.userzcpu.core.systemzcpu.core.iowaitNr8c CsBtd"}|D] }|ds"q|dd\}}}}}} |ddpLd} | rd} t|t|| d| <t|t|| d| <t|t|| d| <t| t|| d | <qd } t|t|| d<t|t|| d<t|t|| d<t| t|| d <qWdn1s40YdS) Nz /proc/statcpuzcpu.corez.nicez.userz.systemz.iowaitz cpu.basic)r startswithsplitr# MS_PER_JIFFY) r;r9statlinerBusernicesystemZ_idleZiowaitZcoreprefixr*r*r+r<^s"   zCPUSampler.sampler0r1r2r-r7r=r<r*r*r*r+r>Qs r>c @sXeZdZedddddedddddedddddedddddgZed d d d Zd S) MemorySampler memory.freebytesinstantFrA memory.used memory.cachedmemory.swap-usedNr8cCstd}dd|D}Wdn1s,0Yd|d|d<d|d|d|d <d|d |d |d <d|d |d|d<dS)Nz /proc/meminfocSs,i|]$}|dd\}}|t|dqS):z kB )rFr#strip).0rIkvr*r*r+ }rz(MemorySampler.sample..rZMemFreerPZMemTotalZ MemAvailablerSZBuffersZCachedrTZ SwapTotalZSwapFreerU)r)r;r9Zmeminfoitemsr*r*r+r<{s  ,zMemorySampler.samplerNr*r*r*r+rOss rOc@sreZdZUdZeeeed<edddddgZ e e e edd d Z e e ed d d ZeddddZdS)CPUTemperatureSamplerNsensorscpu.temperatureZcelsiusrRTrA)rrc csJzJtjdtj|d$}t|d}Wdn1s>0YWnty^YdS0|dkrrdd}n.|dkrd}n |dkrd}n|d vrd}ndSt|D]}| d sq|r>zX| d d }tj|tj|d$}t|d}Wdn1s 0YWnty0YqYn0||s>q|VqdS) Nr.rrZatk0110cSs|dkS)NzCPU Temperaturer*)labelr*r*r+rz:CPUTemperatureSampler.detect_cpu_sensors..Z cpu_thermalZcoretemp)Zk8tempZk10tempZ_inputZ_label) r rrrrdecoderXrlistdirendswithreplace)rr%r. predicateZinput_filenameZlabel_filenamerar*r*r+detect_cpu_sensorss66    8  z(CPUTemperatureSampler.detect_cpu_sensors)rc csztttjtjB}Wnty,YdS0|~t|D]b}tj|tjtjB|d6}t |D]}td|d|VqfWdq>1s0Yq>Wdn1s0YdS)Nr/) r r HWMON_PATHrr O_DIRECTORYrrdr^rh)Ztop_fdZ hwmon_nameZ subdir_fdsensorr*r*r+ scan_sensorss z"CPUTemperatureSampler.scan_sensorsr8c Cs|jdurtt|_|jD]f}t|:}t|}|dkrVWddSWdn1sj0Y|d|d|<qdS)Nrr r`)r_listr^rmrr#rrX)r;r9Z sensor_pathrlZ temperaturer*r*r+r<s   0zCPUTemperatureSampler.sample)r0r1r2r_rrr3r4r-r7 staticmethodr#rrhrmr=r<r*r*r*r+r^s * r^c @sXeZdZedddddedddddeddddded ddddgZed d d d Zd S) DiskSampler disk.all.readrQr@FrAdisk.all.written disk.dev.readTdisk.dev.writtenNr8c Cstd}d}d}|D]}|}|d}|d}|d} |d} |dkrPq|dr\q|dddvrz|d rzq|d rd |vrqt| d } t| d } || 7}|| 7}| |d |<| |d|<q||d<||d<Wdn1s0YdS)N/proc/diskstatsr 9zdm-)sdZhdZvdZnvmeprsrtrqrr)rrXrFrEisdigitr#) r;r9 diskstatsZall_read_bytesZall_written_bytesrIfieldsZ dev_majordev_nameZnum_sectors_readZnum_sectors_written read_bytesZ written_bytesr*r*r+r<s2      zDiskSampler.samplerNr*r*r*r+rps rpc @seZdZUedddddedddddedddddeddddded d d dded d dddgZdZeeed<e ddddZ dS) CGroupSamplercgroup.memory.usagerQrRTrAcgroup.memory.limitcgroup.memory.sw-usagecgroup.memory.sw-limitcgroup.cpu.usager?r@cgroup.cpu.sharescountN cgroups_v2r8c Cs|jdurtjd|_|jrd}t|D]\}}}}||d}|sJq,t|dd|d|<t|d|d|<t|d d|d |<t|d |d |<t|d |d|<t|dddd}|r,|d|d|<q,nd}t|D]j\}}}}||d}|sqt|dd|d|<t|d|d|<t|dd|d |<t|d|d |<qd} t| D]V\}}}}|| d}|szqXt|d|d|<t|d} | rX| d|d|<qXdS)Nz!/sys/fs/cgroup/cgroup.controllersz/sys/fs/cgroup/zmemory.currentrrz memory.maxrzmemory.swap.currentrzmemory.swap.maxrz cpu.weightrzcpu.stats usage_usec)rr rz/sys/fs/cgroup/memory/zmemory.usage_in_byteszmemory.limit_in_byteszmemory.memsw.usage_in_byteszmemory.memsw.limit_in_bytesz/sys/fs/cgroup/cpu/z cpu.sharesz cpuacct.usagei@B)rrpathexistsfwalkrfr,) r;r9Zcgroups_v2_pathr_rcgroupZ usage_usecZ memory_pathZcpu_pathZ usage_nsecr*r*r+r<sD     zCGroupSampler.sample) r0r1r2r-r7rrr5r4r=r<r*r*r*r+rs  rc@s|eZdZejdejdZedddddedddddgZe e e d d d Z e e e e e fd d d ZeddddZdS) CGroupDiskIOs:\bread_bytes: (?P\d+).*\nwrite_bytes: (?P\d+))flagsdisk.cgroup.readrQr@TrAdisk.cgroup.written)r%rcCsVtjdtj|d0}t|d}|ddWdS1sH0YdS)Nrri)r rrrrrcrX)r%Z cgroup_fd cgroup_namer*r*r+get_cgroup_nameEszCGroupDiskIO.get_cgroup_namecCstjdtj|db}t|d}ttj|}|rdt | d}t | d}||fWdSWddS1sz0YdS)Niorirwrite)rr) r rrrrresearchrIO_REr#group)r%Zio_fdr&match proc_read proc_writer*r*r+ get_proc_ioMs zCGroupDiskIO.get_proc_ioNr8c CstdtjtjB}|d}|d}t|D]}|ddks0|ddkrNq0zNtj|tj|d(}||}||\}} Wdn1s0YWnt t t fyYq0Yn0| |d|||<| |d| ||<q0Wdn1s0YdS)Nz/procrrr0ryr) r rrrrkrdO_PATHrrrPermissionErrorProcessLookupErrorget) r;r9Zproc_fdZreadsZwritesrZpid_fdrrrr*r*r+r<[s 0 zCGroupDiskIO.sample)r0r1r2rcompileSrr-r7ror#r3rr rr=r<r*r*r*r+r>s rc@s<eZdZedddddedddddgZeddd d ZdS) NetworkSamplernetwork.interface.txrQr@TrAnetwork.interface.rxNr8cCstdl}|D]V}|}|dddkr,q|ddd}t|d|d|<t|d|d|<qWdn1sz0YdS) Nz /proc/net/devrr{rVrWrrxr)rrFr#)r;r9Znetwork_samplesrIrZifacer*r*r+r<vs zNetworkSampler.samplerNr*r*r*r+rpsrc@s<eZdZedddddedddddgZeddd d ZdS) MountSampler mount.totalrQrRTrA mount.usedNr8c Cstd}|D]}|ddkr q|^}}}}}d|vrJd|dvrJqd|vr\d|vr\qzt|} WntyYqYn0| j} | | j} | |d |<| | | j|d |<qWdn1s0YdS) Nz /proc/mountsrriz/loopro,z revokefs-fuseZflatpakrr)rrFrstatvfsrf_frsizef_blocksf_bfree) r;r9ZmountsrIZfs_specZfs_fileZ _fs_vfstypeZ fs_mntoptsZ_restresZfrsizetotalr*r*r+r<s"      zMountSampler.samplerNr*r*r*r+rsrc@s<eZdZedddddedddddgZeddd d ZdS) BlockSamplerblock.device.readrQr@TrAblock.device.writtenNr8c Cstdd}|D]N}|^ }}}}}}}}}}}t|d|d|<t|d|d|<qWdn1sr0YdS)Nrur}rr)rrXrFr#)r;r9rrIrrZ sectors_readZsectors_writtenr*r*r+r<s  "zBlockSampler.samplerNr*r*r*r+rsr)Nr)(rZloggingrrtypingrrrrrrrr Zcockpit._vendor.systemd_ctypesr sysconf sysconf_namesZUSER_HZrGrjr3r=Z getLoggerr0rr#rQr,r-r6r>rOr^rprrrrrZSAMPLERSr*r*r*r+s@(    "M2:2