@@ -14,6 +14,7 @@ use omicron_uuid_kinds::EreporterRestartUuid;
1414use omicron_uuid_kinds:: OmicronZoneKind ;
1515use omicron_uuid_kinds:: OmicronZoneUuid ;
1616use rand:: rngs:: StdRng ;
17+ use slog:: Logger ;
1718use typed_rng:: TypedUuidRng ;
1819
1920pub struct FmTest {
@@ -28,29 +29,34 @@ impl FmTest {
2829 let logctx = dev:: test_setup_log ( test_name) ;
2930 let example_system_builder =
3031 example:: ExampleSystemBuilder :: new ( & logctx. log , test_name) ;
32+ let reporters = SimReporters :: new (
33+ test_name,
34+ logctx. log . new ( slog:: o!( "component" => "sim-reporters" ) ) ,
35+ ) ;
3136 Self {
3237 logctx,
33- reporters : SimReporters :: new ( test_name ) ,
38+ reporters,
3439 sitrep_rng : SitrepBuilderRng :: from_seed ( test_name) ,
3540 system_builder : example_system_builder,
3641 }
3742 }
3843}
3944
4045pub struct SimReporters {
46+ log : slog:: Logger ,
4147 parent : StdRng ,
4248 collector_id_rng : TypedUuidRng < OmicronZoneKind > ,
4349}
4450
4551impl SimReporters {
46- fn new ( test_name : & str ) -> Self {
52+ fn new ( test_name : & str , log : slog :: Logger ) -> Self {
4753 let mut parent = typed_rng:: from_seed ( test_name, "sim-reporters" ) ;
4854 // TODO(eliza): would be more realistic to pick something from the
4955 // example system's omicron zones, but these UUIDs are only used for
5056 // debugging purposes...
5157 let collector_id_rng =
5258 TypedUuidRng :: from_parent_rng ( & mut parent, "collector-ids" ) ;
53- Self { parent, collector_id_rng }
59+ Self { parent, collector_id_rng, log }
5460 }
5561
5662 pub fn reporter ( & mut self , reporter : Reporter ) -> SimReporter {
@@ -66,6 +72,7 @@ impl SimReporters {
6672 ena : Ena ( 0x1 ) ,
6773 restart_id_rng,
6874 collector_id,
75+ log : self . log . new ( slog:: o!( "reporter" => reporter. to_string( ) ) ) ,
6976 }
7077 }
7178}
@@ -80,6 +87,8 @@ pub struct SimReporter {
8087 // to each reporter...but the DEs don't actually care who collected the
8188 // ereport, and we just need something to put in there.
8289 collector_id : OmicronZoneUuid ,
90+
91+ log : slog:: Logger ,
8392}
8493
8594impl SimReporter {
@@ -98,10 +107,11 @@ impl SimReporter {
98107 pub fn mk_ereport (
99108 & mut self ,
100109 now : chrono:: DateTime < Utc > ,
101- json : serde_json:: Value ,
110+ json : serde_json:: Map < String , serde_json :: Value > ,
102111 ) -> Ereport {
103112 self . ena . 0 += 1 ;
104113 mk_ereport (
114+ & self . log ,
105115 self . reporter ,
106116 EreportId { ena : self . ena , restart_id : self . restart_id } ,
107117 self . collector_id ,
@@ -117,19 +127,23 @@ impl SimReporter {
117127}
118128
119129pub fn mk_ereport (
130+ log : & slog:: Logger ,
120131 reporter : Reporter ,
121132 id : EreportId ,
122133 collector_id : OmicronZoneUuid ,
123134 time_collected : chrono:: DateTime < Utc > ,
124- json : serde_json:: Value ,
135+ json : serde_json:: Map < String , serde_json :: Value > ,
125136) -> Ereport {
126- let ( serial_number , part_number ) = match reporter {
137+ let data = match reporter {
127138 Reporter :: Sp { .. } => {
128- let part_number =
129- json[ "baseboard_part_number" ] . as_str ( ) . map ( ToOwned :: to_owned) ;
130- let serial_number =
131- json[ "baseboard_serial_number" ] . as_str ( ) . map ( ToOwned :: to_owned) ;
132- ( serial_number, part_number)
139+ let raw = ereport_types:: Ereport { ena : id. ena , data : json } ;
140+ EreportData :: from_sp_ereport (
141+ log,
142+ id. restart_id ,
143+ raw,
144+ time_collected,
145+ collector_id,
146+ )
133147 }
134148 Reporter :: HostOs { .. } => {
135149 todo ! (
@@ -139,19 +153,13 @@ pub fn mk_ereport(
139153 ) ;
140154 }
141155 } ;
142- Ereport {
143- reporter,
144- data : EreportData {
145- id,
146- collector_id,
147- time_collected,
148- class : json[ "class" ]
149- . as_str ( )
150- . or_else ( || json[ "k" ] . as_str ( ) )
151- . map ( ToOwned :: to_owned) ,
152- serial_number,
153- part_number,
154- report : json,
155- } ,
156- }
156+ slog:: info!(
157+ & log,
158+ "simulating an ereport: {}" , data. id;
159+ "ereport_id" => %data. id,
160+ "ereport_class" => ?data. class,
161+ "serial_number" => ?data. serial_number,
162+ "part_number" => ?data. part_number,
163+ ) ;
164+ Ereport { reporter, data }
157165}
0 commit comments