11use  capnp:: message:: Builder ; 
22use  ordered_float:: OrderedFloat ; 
33use  sbp:: messages:: piksi:: { MsgDeviceMonitor ,  MsgThreadState } ; 
4- use  sbp:: messages:: system:: { MsgCsacTelemetry ,  MsgCsacTelemetryLabels } ; 
54use  std:: collections:: HashMap ; 
65
76use  crate :: client_sender:: BoxedClientSender ; 
87use  crate :: types:: UartState ; 
98use  crate :: utils:: { cc_to_c,  normalize_cpu_usage,  serialize_capnproto_builder} ; 
109
1110const  NO_NAME :  & str  = "(no name)" ; 
12- const  METRICS_OF_INTEREST :  & [ & str ]  = & [ "Status" ,  "Alarm" ,  "Mode" ,  "Phase" ,  "DiscOK" ] ; 
1311const  CURR :  & str  = "Curr" ; 
1412const  AVG :  & str  = "Avg" ; 
1513const  MIN :  & str  = "Min" ; 
@@ -27,25 +25,17 @@ struct ThreadStateFields {
2725/// # Fields: 
2826/// 
2927/// - `client_send`: Client Sender channel for communication from backend to frontend. 
30- /// - `csac_received`: CsacTelemetry received flag. 
31- /// - `csac_telem_list`: Vec of CsacTelemetry metrics and corresponding values. 
3228/// - `fe_temp`: RF frontend temperature reading. 
33- /// - `headers`: Vec of CsacTelemetry metric labels. 
3429/// - `obs_latency`: UART state latency measurements. 
3530/// - `obs_period`: UART state period measurements. 
36- /// - `telem_header_index`: Index of current CsacTelemetry label packet. 
3731/// - `threads`: Vec of, ThreadStateFields, running threads on device containing cpu and memory metric values. 
3832/// - `threads_table_list`: Vec of ThreadStateFields, sent to frontend after heartbeat received. 
3933/// - `zynq_temp`: Zynq SoC temperature reading. 
4034pub  struct  AdvancedSystemMonitorTab  { 
4135    client_sender :  BoxedClientSender , 
42-     csac_received :  bool , 
43-     csac_telem_list :  Vec < ( String ,  String ) > , 
4436    fe_temp :  f64 , 
45-     headers :  Vec < String > , 
4637    obs_latency :  HashMap < String ,  i32 > , 
4738    obs_period :  HashMap < String ,  i32 > , 
48-     telem_header_index :  Option < u8 > , 
4939    threads :  Vec < ThreadStateFields > , 
5040    threads_table_list :  Vec < ThreadStateFields > , 
5141    zynq_temp :  f64 , 
@@ -54,10 +44,7 @@ impl AdvancedSystemMonitorTab {
5444    pub  fn  new ( client_sender :  BoxedClientSender )  -> AdvancedSystemMonitorTab  { 
5545        AdvancedSystemMonitorTab  { 
5646            client_sender, 
57-             csac_received :  false , 
58-             csac_telem_list :  vec ! [ ] , 
5947            fe_temp :  0.0 , 
60-             headers :  vec ! [ ] , 
6148            obs_latency :  { 
6249                UART_STATE_KEYS 
6350                    . iter ( ) 
@@ -70,7 +57,6 @@ impl AdvancedSystemMonitorTab {
7057                    . map ( |key| ( String :: from ( * key) ,  0 ) ) 
7158                    . collect ( ) 
7259            } , 
73-             telem_header_index :  None , 
7460            threads :  vec ! [ ] , 
7561            threads_table_list :  vec ! [ ] , 
7662            zynq_temp :  0.0 , 
@@ -109,41 +95,6 @@ impl AdvancedSystemMonitorTab {
10995        self . fe_temp  = cc_to_c ( msg. fe_temperature ) ; 
11096    } 
11197
112-     pub  fn  handle_csac_telemetry_labels ( & mut  self ,  msg :  MsgCsacTelemetryLabels )  { 
113-         self . headers  = msg
114-             . telemetry_labels 
115-             . to_string ( ) 
116-             . split ( ',' ) 
117-             . map ( |s| s. to_string ( ) ) 
118-             . collect ( ) ; 
119-         self . telem_header_index  = Some ( msg. id ) ; 
120-     } 
121- 
122-     pub  fn  handle_csac_telemetry ( & mut  self ,  msg :  MsgCsacTelemetry )  { 
123-         self . csac_telem_list . clear ( ) ; 
124-         if  let  Some ( header_index)  = self . telem_header_index  { 
125-             if  msg. id  == header_index { 
126-                 self . csac_received  = true ; 
127-                 let  telems:  Vec < String >  = msg
128-                     . telemetry 
129-                     . to_string ( ) 
130-                     . split ( ',' ) 
131-                     . map ( |s| s. to_string ( ) ) 
132-                     . collect ( ) ; 
133-                 self . headers 
134-                     . clone ( ) 
135-                     . iter ( ) 
136-                     . enumerate ( ) 
137-                     . for_each ( |( i,  header) | { 
138-                         if  METRICS_OF_INTEREST . contains ( & ( header. clone ( ) . as_str ( ) ) )  { 
139-                             self . csac_telem_list 
140-                                 . push ( ( header. clone ( ) ,  telems[ i] . clone ( ) ) ) ; 
141-                         } 
142-                     } ) ; 
143-             } 
144-         } 
145-     } 
146- 
14798    pub  fn  handle_uart_state ( & mut  self ,  msg :  UartState )  { 
14899        let  uart_fields = msg. fields ( ) ; 
149100        self . obs_latency 
@@ -198,19 +149,8 @@ impl AdvancedSystemMonitorTab {
198149                entry. set_stack_free ( val. stack_free ) ; 
199150            } 
200151        } 
201-         let  mut  csac_telem_entries = status
202-             . reborrow ( ) 
203-             . init_csac_telem_list ( self . csac_telem_list . len ( )  as  u32 ) ; 
204-         { 
205-             for  ( i,  ( key,  val) )  in  self . csac_telem_list . iter ( ) . enumerate ( )  { 
206-                 let  mut  entry = csac_telem_entries. reborrow ( ) . get ( i as  u32 ) ; 
207-                 entry. set_key ( key) ; 
208-                 entry. set_val ( val) ; 
209-             } 
210-         } 
211152        status. set_zynq_temp ( self . zynq_temp ) ; 
212153        status. set_fe_temp ( self . fe_temp ) ; 
213-         status. set_csac_received ( self . csac_received ) ; 
214154        self . client_sender 
215155            . send_data ( serialize_capnproto_builder ( builder) ) ; 
216156    } 
@@ -304,59 +244,6 @@ mod tests {
304244        assert_eq ! ( * tab. obs_period. get( & MAX . to_string( ) ) . unwrap( ) ,  pmax) ; 
305245    } 
306246
307-     #[ test]  
308-     fn  handle_csac_telemetry_test ( )  { 
309-         let  client_send = TestSender :: boxed ( ) ; 
310-         let  mut  tab = AdvancedSystemMonitorTab :: new ( client_send) ; 
311-         let  id = 13 ; 
312-         let  headers:  Vec < String >  = METRICS_OF_INTEREST . iter ( ) . map ( |s| s. to_string ( ) ) . collect ( ) ; 
313-         tab. headers  = headers. clone ( ) ; 
314-         let  telemetry_pre:  Vec < String >  = "4,3,2,1,0" . split ( ',' ) . map ( |s| s. to_string ( ) ) . collect ( ) ; 
315-         let  telemetry = SbpString :: from ( telemetry_pre. join ( "," ) ) ; 
316-         let  csac_telem = MsgCsacTelemetry  { 
317-             sender_id :  Some ( 1337 ) , 
318-             id, 
319-             telemetry, 
320-         } ; 
321-         tab. handle_csac_telemetry ( csac_telem. clone ( ) ) ; 
322-         assert ! ( tab. csac_telem_list. is_empty( ) ) ; 
323-         let  bad_id = 31 ; 
324-         tab. telem_header_index  = Some ( bad_id) ; 
325-         assert ! ( !tab. csac_received) ; 
326-         tab. handle_csac_telemetry ( csac_telem. clone ( ) ) ; 
327-         assert ! ( tab. csac_telem_list. is_empty( ) ) ; 
328-         tab. telem_header_index  = Some ( id) ; 
329-         assert ! ( !tab. csac_received) ; 
330-         tab. handle_csac_telemetry ( csac_telem) ; 
331-         assert ! ( !tab. csac_telem_list. is_empty( ) ) ; 
332-         assert ! ( tab. csac_received) ; 
333-         let  telem_table_list:  Vec < ( String ,  String ) >  = headers
334-             . iter ( ) 
335-             . zip ( telemetry_pre) 
336-             . map ( |( h,  t) | ( h. clone ( ) ,  t) ) 
337-             . collect ( ) ; 
338-         assert_eq ! ( tab. csac_telem_list,  telem_table_list) ; 
339-     } 
340-     #[ test]  
341-     fn  handle_csac_telemetry_labels_test ( )  { 
342-         let  client_send = TestSender :: boxed ( ) ; 
343-         let  mut  tab = AdvancedSystemMonitorTab :: new ( client_send) ; 
344-         let  id = 13 ; 
345-         let  headers_pre:  Vec < String >  = "mcdonald,had,a,farm" 
346-             . split ( ',' ) 
347-             . map ( |s| s. to_string ( ) ) 
348-             . collect ( ) ; 
349-         let  telemetry_labels = SbpString :: from ( headers_pre. join ( "," ) ) ; 
350-         let  csac_telem_labels = MsgCsacTelemetryLabels  { 
351-             sender_id :  Some ( 1337 ) , 
352-             id, 
353-             telemetry_labels, 
354-         } ; 
355-         assert ! ( tab. telem_header_index. is_none( ) ) ; 
356-         tab. handle_csac_telemetry_labels ( csac_telem_labels) ; 
357-         assert_eq ! ( tab. telem_header_index,  Some ( id) ) ; 
358-         assert_eq ! ( tab. headers,  headers_pre) ; 
359-     } 
360247    #[ test]  
361248    fn  handle_device_monitor_test ( )  { 
362249        let  client_send = TestSender :: boxed ( ) ; 
0 commit comments