@@ -32,7 +32,8 @@ use crate::manager::error::Error;
32
32
use crate :: manager:: { conv, Manager , Result } ;
33
33
use crate :: stats:: {
34
34
BlkioCgroupStats , BlkioStat , CpuAcctStats , CpuCgroupStats , CpuThrottlingStats ,
35
- HugeTlbCgroupStats , HugeTlbStat , MemoryCgroupStats , MemoryStats , PidsCgroupStats ,
35
+ DeviceCgroupStat , DevicesCgroupStats , HugeTlbCgroupStats , HugeTlbStat , MemoryCgroupStats ,
36
+ MemoryStats , PidsCgroupStats ,
36
37
} ;
37
38
use crate :: { CgroupPid , CgroupStats , FreezerState } ;
38
39
@@ -727,6 +728,41 @@ impl FsManager {
727
728
} )
728
729
. collect ( )
729
730
}
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
+ }
730
766
}
731
767
732
768
impl Manager for FsManager {
@@ -862,6 +898,7 @@ impl Manager for FsManager {
862
898
pids : self . pids_cgroup_stats ( ) ,
863
899
blkio : self . blkio_cgroup_stats ( ) ,
864
900
hugetlb : self . huge_tlb_cgroup_stats ( ) ,
901
+ devices : self . devices_cgroup_stats ( ) ,
865
902
}
866
903
}
867
904
0 commit comments