@@ -17,10 +17,11 @@ use id_pool::IdPool;
1717use ra_rpc:: client:: RaClient ;
1818use serde:: { Deserialize , Serialize } ;
1919use serde_json:: json;
20- use std:: collections:: { BTreeSet , HashMap } ;
20+ use std:: collections:: { BTreeSet , HashMap , VecDeque } ;
2121use std:: net:: IpAddr ;
2222use std:: path:: { Path , PathBuf } ;
2323use std:: sync:: { Arc , Mutex , MutexGuard } ;
24+ use std:: time:: SystemTime ;
2425use supervisor_client:: SupervisorClient ;
2526use tracing:: { error, info} ;
2627
@@ -411,6 +412,17 @@ impl App {
411412 let Some ( vm) = state. vms . values_mut ( ) . find ( |vm| vm. config . cid == cid) else {
412413 bail ! ( "VM not found" ) ;
413414 } ;
415+ vm. state . events . push_back ( pb:: GuestEvent {
416+ event : event. into ( ) ,
417+ body : body. clone ( ) ,
418+ timestamp : SystemTime :: now ( )
419+ . duration_since ( SystemTime :: UNIX_EPOCH )
420+ . unwrap_or_default ( )
421+ . as_millis ( ) as u64 ,
422+ } ) ;
423+ while vm. state . events . len ( ) > self . config . event_buffer_size {
424+ vm. state . events . pop_front ( ) ;
425+ }
414426 match event {
415427 "boot.progress" => {
416428 vm. state . boot_progress = body;
@@ -648,6 +660,7 @@ struct VmStateMut {
648660 boot_error : String ,
649661 shutdown_progress : String ,
650662 devices : GpuConfig ,
663+ events : VecDeque < pb:: GuestEvent > ,
651664}
652665
653666impl VmStateMut {
0 commit comments