33use std:: env;
44use std:: time:: { SystemTime , UNIX_EPOCH } ;
55
6- use serde:: Serialize ;
6+ use serde:: { Deserialize , Serialize } ;
77
88use crate :: error:: { ExitCode , VoltaError } ;
99use crate :: hook:: Publish ;
1010use crate :: monitor:: Monitor ;
1111use crate :: session:: ActivityKind ;
1212
1313// the Event data that is serialized to JSON and sent the plugin
14- #[ derive( Serialize ) ]
14+ #[ derive( Deserialize , Serialize ) ]
1515pub struct Event {
1616 timestamp : u64 ,
17- name : String ,
18- event : EventKind ,
17+ pub name : String ,
18+ pub event : EventKind ,
1919}
2020
21- #[ derive( Serialize ) ]
21+ #[ derive( Deserialize , Serialize , PartialEq , Debug ) ]
2222pub struct ErrorEnv {
2323 argv : String ,
2424 exec_path : String ,
@@ -27,10 +27,12 @@ pub struct ErrorEnv {
2727 platform_version : String ,
2828}
2929
30- #[ derive( Serialize ) ]
30+ #[ derive( Deserialize , Serialize , PartialEq , Debug ) ]
3131#[ serde( rename_all = "lowercase" ) ]
32- enum EventKind {
33- Start ,
32+ pub enum EventKind {
33+ Start {
34+ argv : String ,
35+ } ,
3436 End {
3537 exit_code : i32 ,
3638 } ,
@@ -98,8 +100,8 @@ impl EventLog {
98100 EventLog { events : Vec :: new ( ) }
99101 }
100102
101- pub fn add_event_start ( & mut self , activity_kind : ActivityKind ) {
102- self . add_event ( EventKind :: Start , activity_kind)
103+ pub fn add_event_start ( & mut self , activity_kind : ActivityKind , argv : String ) {
104+ self . add_event ( EventKind :: Start { argv } , activity_kind)
103105 }
104106 pub fn add_event_end ( & mut self , activity_kind : ActivityKind , exit_code : ExitCode ) {
105107 self . add_event (
@@ -144,7 +146,7 @@ impl EventLog {
144146#[ cfg( test) ]
145147pub mod tests {
146148
147- use super :: EventLog ;
149+ use super :: { EventKind , EventLog } ;
148150 use crate :: error:: { ErrorKind , ExitCode } ;
149151 use crate :: session:: ActivityKind ;
150152
@@ -153,21 +155,33 @@ pub mod tests {
153155 let mut event_log = EventLog :: init ( ) ;
154156 assert_eq ! ( event_log. events. len( ) , 0 ) ;
155157
156- event_log. add_event_start ( ActivityKind :: Current ) ;
158+ event_log. add_event_start ( ActivityKind :: Current , String :: from ( "foo" ) ) ;
157159 assert_eq ! ( event_log. events. len( ) , 1 ) ;
158160 assert_eq ! ( event_log. events[ 0 ] . name, "current" ) ;
161+ assert_eq ! (
162+ event_log. events[ 0 ] . event,
163+ EventKind :: Start {
164+ argv: String :: from( "foo" )
165+ }
166+ ) ;
159167
160168 event_log. add_event_end ( ActivityKind :: Pin , ExitCode :: NetworkError ) ;
161169 assert_eq ! ( event_log. events. len( ) , 2 ) ;
162170 assert_eq ! ( event_log. events[ 1 ] . name, "pin" ) ;
171+ assert_eq ! ( event_log. events[ 1 ] . event, EventKind :: End { exit_code: 5 } ) ;
163172
164173 event_log. add_event_tool_end ( ActivityKind :: Version , 12 ) ;
165174 assert_eq ! ( event_log. events. len( ) , 3 ) ;
166175 assert_eq ! ( event_log. events[ 2 ] . name, "version" ) ;
176+ assert_eq ! (
177+ event_log. events[ 2 ] . event,
178+ EventKind :: ToolEnd { exit_code: 12 }
179+ ) ;
167180
168181 let error = ErrorKind :: BinaryExecError . into ( ) ;
169182 event_log. add_event_error ( ActivityKind :: Install , & error) ;
170183 assert_eq ! ( event_log. events. len( ) , 4 ) ;
171184 assert_eq ! ( event_log. events[ 3 ] . name, "install" ) ;
185+ // not checking the error because it has too much machine-specific info
172186 }
173187}
0 commit comments