22// SPDX-License-Identifier: Apache-2.0
33use std:: { fmt:: Write , time:: SystemTime } ;
44
5- use crate :: SigInfo ;
5+ use crate :: { ErrorKind , SigInfo } ;
66
77use super :: { CrashInfo , Metadata } ;
88use anyhow:: Context ;
@@ -26,6 +26,7 @@ struct TelemetryMetadata {
2626pub struct CrashPingBuilder {
2727 crash_uuid : Uuid ,
2828 custom_message : Option < String > ,
29+ kind : Option < ErrorKind > ,
2930 metadata : Option < Metadata > ,
3031 sig_info : Option < SigInfo > ,
3132}
@@ -38,6 +39,7 @@ impl CrashPingBuilder {
3839 Self {
3940 crash_uuid,
4041 custom_message : None ,
42+ kind : None ,
4143 metadata : None ,
4244 sig_info : None ,
4345 }
@@ -53,6 +55,11 @@ impl CrashPingBuilder {
5355 self
5456 }
5557
58+ pub fn with_kind ( mut self , kind : ErrorKind ) -> Self {
59+ self . kind = Some ( kind) ;
60+ self
61+ }
62+
5663 pub fn with_metadata ( mut self , metadata : Metadata ) -> Self {
5764 self . metadata = Some ( metadata) ;
5865 self
@@ -62,6 +69,7 @@ impl CrashPingBuilder {
6269 let crash_uuid = self . crash_uuid ;
6370 let sig_info = self . sig_info ;
6471 let metadata = self . metadata . context ( "metadata is required" ) ?;
72+ let kind = self . kind . context ( "kind is required" ) ?;
6573
6674 let message = if let Some ( custom_message) = self . custom_message {
6775 format ! ( "Crashtracker crash ping: crash processing started - {custom_message}" )
@@ -71,13 +79,13 @@ impl CrashPingBuilder {
7179 sig_info. si_code_human_readable, sig_info. si_signo_human_readable
7280 )
7381 } else {
74- "Crashtracker crash ping: crash processing started - Process terminated" . to_string ( )
82+ format ! ( "Crashtracker crash ping: crash processing started - Process terminated due to {:?}" , kind )
7583 } ;
7684
7785 Ok ( CrashPing {
7886 crash_uuid : crash_uuid. to_string ( ) ,
79- kind : "Crash ping" . to_string ( ) ,
8087 message,
88+ kind,
8189 metadata,
8290 siginfo : sig_info,
8391 version : CrashPing :: current_schema_version ( ) ,
@@ -88,11 +96,11 @@ impl CrashPingBuilder {
8896#[ derive( Debug , Serialize ) ]
8997pub struct CrashPing {
9098 crash_uuid : String ,
99+ kind : ErrorKind ,
100+ message : String ,
91101 #[ serde( skip_serializing_if = "Option::is_none" ) ]
92102 siginfo : Option < SigInfo > ,
93- message : String ,
94103 version : String ,
95- kind : String ,
96104 metadata : Metadata ,
97105}
98106
@@ -446,7 +454,10 @@ fn extract_crash_info_tags(crash_info: &CrashInfo) -> anyhow::Result<String> {
446454#[ cfg( test) ]
447455mod tests {
448456 use super :: TelemetryCrashUploader ;
449- use crate :: crash_info:: { test_utils:: TestInstance , CrashInfo , CrashInfoBuilder , Metadata } ;
457+ use crate :: {
458+ crash_info:: { test_utils:: TestInstance , CrashInfo , CrashInfoBuilder , Metadata } ,
459+ ErrorKind ,
460+ } ;
450461 use libdd_common:: Endpoint ;
451462 use libdd_telemetry:: data:: LogLevel ;
452463 use std:: { collections:: HashSet , fs} ;
@@ -580,6 +591,7 @@ mod tests {
580591 let mut crash_info_builder = CrashInfoBuilder :: new ( ) ;
581592 crash_info_builder. with_sig_info ( sig_info. clone ( ) ) . unwrap ( ) ;
582593 crash_info_builder. with_metadata ( metadata. clone ( ) ) . unwrap ( ) ;
594+ crash_info_builder. with_kind ( ErrorKind :: UnixSignal ) . unwrap ( ) ;
583595 let crash_ping = crash_info_builder. build_crash_ping ( ) . unwrap ( ) ;
584596 t. upload_crash_ping ( & crash_ping) . await . unwrap ( ) ;
585597
@@ -607,7 +619,7 @@ mod tests {
607619 assert ! ( Uuid :: parse_str( message_json[ "crash_uuid" ] . as_str( ) . unwrap( ) ) . is_ok( ) ) ;
608620
609621 assert_eq ! ( message_json[ "version" ] , "1.0" ) ;
610- assert_eq ! ( message_json[ "kind" ] , "Crash ping " ) ;
622+ assert_eq ! ( message_json[ "kind" ] , "UnixSignal " ) ;
611623
612624 let metadata_in_message = & message_json[ "metadata" ] ;
613625 assert ! (
@@ -655,6 +667,7 @@ mod tests {
655667 let mut crash_info_builder = CrashInfoBuilder :: new ( ) ;
656668 crash_info_builder. with_sig_info ( sig_info. clone ( ) ) . unwrap ( ) ;
657669 crash_info_builder. with_metadata ( metadata. clone ( ) ) . unwrap ( ) ;
670+ crash_info_builder. with_kind ( ErrorKind :: UnixSignal ) . unwrap ( ) ;
658671 let crash_ping = crash_info_builder. build_crash_ping ( ) . unwrap ( ) ;
659672 t. upload_crash_ping ( & crash_ping) . await . unwrap ( ) ;
660673
@@ -707,7 +720,7 @@ mod tests {
707720 ) ;
708721
709722 assert_eq ! ( message_json[ "version" ] , "1.0" ) ;
710- assert_eq ! ( message_json[ "kind" ] , "Crash ping " ) ;
723+ assert_eq ! ( message_json[ "kind" ] , "UnixSignal " ) ;
711724
712725 let tags = log_entry[ "tags" ] . as_str ( ) . unwrap ( ) ;
713726 let uuid_str = message_json[ "crash_uuid" ] . as_str ( ) . unwrap ( ) ;
@@ -738,6 +751,7 @@ mod tests {
738751 let mut crash_info_builder = CrashInfoBuilder :: new ( ) ;
739752 crash_info_builder. with_sig_info ( sig_info. clone ( ) ) . unwrap ( ) ;
740753 crash_info_builder. with_metadata ( metadata. clone ( ) ) . unwrap ( ) ;
754+ crash_info_builder. with_kind ( ErrorKind :: UnixSignal ) . unwrap ( ) ;
741755 let crash_ping = crash_info_builder. build_crash_ping ( ) ?;
742756
743757 let endpoint = Some ( Endpoint :: from_slice ( & format ! (
@@ -781,7 +795,7 @@ mod tests {
781795 assert ! ( message_json[ "crash_uuid" ] . is_string( ) ) ;
782796 assert ! ( Uuid :: parse_str( message_json[ "crash_uuid" ] . as_str( ) . unwrap( ) ) . is_ok( ) ) ;
783797 assert_eq ! ( message_json[ "version" ] , "1.0" ) ;
784- assert_eq ! ( message_json[ "kind" ] , "Crash ping " ) ;
798+ assert_eq ! ( message_json[ "kind" ] , "UnixSignal " ) ;
785799
786800 Ok ( ( ) )
787801 }
@@ -794,6 +808,7 @@ mod tests {
794808 crash_info_builder
795809 . with_metadata ( Metadata :: test_instance ( 1 ) )
796810 . unwrap ( ) ;
811+ crash_info_builder. with_kind ( ErrorKind :: UnixSignal ) . unwrap ( ) ;
797812 let result = crash_info_builder. build_crash_ping ( ) ;
798813 assert ! ( result. is_ok( ) ) ;
799814 let crash_ping = result. unwrap ( ) ;
@@ -807,6 +822,7 @@ mod tests {
807822 crash_info_builder
808823 . with_sig_info ( crate :: SigInfo :: test_instance ( 1 ) )
809824 . unwrap ( ) ;
825+ crash_info_builder. with_kind ( ErrorKind :: UnixSignal ) . unwrap ( ) ;
810826 let result = crash_info_builder. build_crash_ping ( ) ;
811827 assert ! ( result. is_err( ) ) ;
812828 assert ! ( result
@@ -822,6 +838,7 @@ mod tests {
822838 crash_info_builder
823839 . with_metadata ( Metadata :: test_instance ( 1 ) )
824840 . unwrap ( ) ;
841+ crash_info_builder. with_kind ( ErrorKind :: UnixSignal ) . unwrap ( ) ;
825842 let result = crash_info_builder. build_crash_ping ( ) ;
826843 assert ! ( result. is_ok( ) ) ;
827844 let crash_ping = result. unwrap ( ) ;
@@ -838,6 +855,7 @@ mod tests {
838855 let mut crash_info_builder = CrashInfoBuilder :: new ( ) ;
839856 crash_info_builder. with_sig_info ( sig_info. clone ( ) ) . unwrap ( ) ;
840857 crash_info_builder. with_metadata ( metadata. clone ( ) ) . unwrap ( ) ;
858+ crash_info_builder. with_kind ( ErrorKind :: UnixSignal ) . unwrap ( ) ;
841859 let crash_ping = crash_info_builder. build_crash_ping ( ) . unwrap ( ) ;
842860
843861 assert ! ( !crash_ping. crash_uuid( ) . is_empty( ) ) ;
@@ -857,6 +875,7 @@ mod tests {
857875 let mut crash_info_builder = CrashInfoBuilder :: new ( ) ;
858876 crash_info_builder. with_sig_info ( sig_info. clone ( ) ) . unwrap ( ) ;
859877 crash_info_builder. with_metadata ( metadata. clone ( ) ) . unwrap ( ) ;
878+ crash_info_builder. with_kind ( ErrorKind :: UnixSignal ) . unwrap ( ) ;
860879 let crash_ping = crash_info_builder. build_crash_ping ( ) . unwrap ( ) ;
861880
862881 assert ! ( !crash_ping. crash_uuid( ) . is_empty( ) ) ;
@@ -882,6 +901,7 @@ mod tests {
882901 crash_info_builder
883902 . with_message ( "my process panicked" . to_string ( ) )
884903 . unwrap ( ) ;
904+ crash_info_builder. with_kind ( ErrorKind :: UnixSignal ) . unwrap ( ) ;
885905 let crash_ping = crash_info_builder. build_crash_ping ( ) . unwrap ( ) ;
886906
887907 assert ! ( !crash_ping. crash_uuid( ) . is_empty( ) ) ;
@@ -918,6 +938,7 @@ mod tests {
918938 let mut crash_info_builder = CrashInfoBuilder :: new ( ) ;
919939 crash_info_builder. with_sig_info ( sig_info. clone ( ) ) . unwrap ( ) ;
920940 crash_info_builder. with_metadata ( metadata. clone ( ) ) . unwrap ( ) ;
941+ crash_info_builder. with_kind ( ErrorKind :: UnixSignal ) . unwrap ( ) ;
921942 let crash_ping = crash_info_builder. build_crash_ping ( ) . unwrap ( ) ;
922943
923944 uploader. upload_crash_ping ( & crash_ping) . await ?;
@@ -941,7 +962,7 @@ mod tests {
941962 assert ! ( message_json[ "crash_uuid" ] . is_string( ) ) ;
942963 assert ! ( Uuid :: parse_str( message_json[ "crash_uuid" ] . as_str( ) . unwrap( ) ) . is_ok( ) ) ;
943964 assert_eq ! ( message_json[ "version" ] , "1.0" ) ;
944- assert_eq ! ( message_json[ "kind" ] , "Crash ping " ) ;
965+ assert_eq ! ( message_json[ "kind" ] , "UnixSignal " ) ;
945966
946967 let uploaded_siginfo = & message_json[ "siginfo" ] ;
947968 assert_eq ! ( uploaded_siginfo[ "si_signo" ] , sig_info. si_signo) ;
0 commit comments