@@ -32,7 +32,8 @@ use crate::manager::error::Error;
3232use crate :: manager:: { conv, Manager , Result } ;
3333use crate :: stats:: {
3434 BlkioCgroupStats , BlkioStat , CpuAcctStats , CpuCgroupStats , CpuThrottlingStats ,
35- HugeTlbCgroupStats , HugeTlbStat , MemoryCgroupStats , MemoryStats , PidsCgroupStats ,
35+ DeviceCgroupStat , DevicesCgroupStats , HugeTlbCgroupStats , HugeTlbStat , MemoryCgroupStats ,
36+ MemoryStats , PidsCgroupStats ,
3637} ;
3738use crate :: { CgroupPid , CgroupStats , FreezerState } ;
3839
@@ -727,6 +728,41 @@ impl FsManager {
727728 } )
728729 . collect ( )
729730 }
731+
732+ fn devices_cgroup_stats ( & self ) -> DevicesCgroupStats {
733+ let controller: & DevicesController = match self . controller ( ) {
734+ Ok ( controller) => controller,
735+ Err ( _) => return DevicesCgroupStats :: default ( ) ,
736+ } ;
737+
738+ let list = controller
739+ . allowed_devices ( )
740+ . map ( |devs| {
741+ devs. iter ( )
742+ . map ( |dev| DeviceCgroupStat {
743+ dev_type : dev. devtype . to_char ( ) . to_string ( ) ,
744+ major : dev. major ,
745+ minor : dev. minor ,
746+ access : {
747+ let mut access = String :: new ( ) ;
748+ if dev. access . contains ( & DevicePermissions :: Read ) {
749+ access. push ( 'r' ) ;
750+ }
751+ if dev. access . contains ( & DevicePermissions :: Write ) {
752+ access. push ( 'w' ) ;
753+ }
754+ if dev. access . contains ( & DevicePermissions :: MkNod ) {
755+ access. push ( 'm' ) ;
756+ }
757+ access
758+ } ,
759+ } )
760+ . collect :: < Vec < _ > > ( )
761+ } )
762+ . unwrap_or_default ( ) ;
763+
764+ DevicesCgroupStats { list }
765+ }
730766}
731767
732768impl Manager for FsManager {
@@ -862,6 +898,7 @@ impl Manager for FsManager {
862898 pids : self . pids_cgroup_stats ( ) ,
863899 blkio : self . blkio_cgroup_stats ( ) ,
864900 hugetlb : self . huge_tlb_cgroup_stats ( ) ,
901+ devices : self . devices_cgroup_stats ( ) ,
865902 }
866903 }
867904
0 commit comments