diff --git a/Cargo.lock b/Cargo.lock index 64beb0b..644f7fc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -128,13 +128,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.82" +version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -145,9 +145,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "auxon-sdk" @@ -292,7 +292,7 @@ checksum = "0cc8b54b395f2fcfbb3d90c47b01c7f444d94d05bdeb775811dec868ac3bbc26" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -318,9 +318,9 @@ checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" [[package]] name = "cc" -version = "1.1.21" +version = "1.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07b1695e2c7e8fc85310cde85aeaab7e3097f593c91d209d3f9df76c928100f0" +checksum = "812acba72f0a070b003d3697490d2b55b837230ae7c6c6497f05cc2ddbb8d938" dependencies = [ "shlex", ] @@ -390,7 +390,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -557,7 +557,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -579,7 +579,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core 0.20.10", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -625,7 +625,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -702,7 +702,7 @@ checksum = "4673f83edb6dfabfbc26704bd89ee95f4b164cd5db5fe8c88efda48fb0fca8d7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -734,7 +734,7 @@ checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -842,9 +842,9 @@ checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "flate2" -version = "1.0.33" +version = "1.0.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" +checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" dependencies = [ "crc32fast", "miniz_oxide 0.8.0", @@ -952,7 +952,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -1265,9 +1265,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.158" +version = "0.2.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" [[package]] name = "libredox" @@ -1380,7 +1380,7 @@ checksum = "dcf09caffaac8068c346b6df2a7fc27a177fd20b39421a39ce0a211bde679a6c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -1435,7 +1435,7 @@ dependencies = [ [[package]] name = "modality-trace-recorder-plugin" -version = "0.32.0" +version = "0.33.0" dependencies = [ "async-trait", "auxon-sdk", @@ -1576,9 +1576,12 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "82881c4be219ab5faaf2ad5e5e5ecdff8c66bd7402ca3160975c93b24961afd1" +dependencies = [ + "portable-atomic", +] [[package]] name = "openssl" @@ -1603,7 +1606,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -1641,9 +1644,9 @@ dependencies = [ [[package]] name = "ordered-float" -version = "4.2.2" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a91171844676f8c7990ce64959210cd2eaef32c2612c50f9fae9f8aaa6065a6" +checksum = "44d501f1a72f71d3c063a6bbc8f7271fa73aa09fe5d6283b6571e2ed176a2537" dependencies = [ "num-traits", ] @@ -1743,6 +1746,12 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "portable-atomic" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" + [[package]] name = "powerfmt" version = "0.2.0" @@ -1856,9 +1865,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.4" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0884ad60e090bf1345b93da0a5de8923c93884cd03f40dfcfddd3b4bee661853" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" dependencies = [ "bitflags 2.6.0", ] @@ -1876,14 +1885,14 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.6" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.7", - "regex-syntax 0.8.4", + "regex-automata 0.4.8", + "regex-syntax 0.8.5", ] [[package]] @@ -1897,13 +1906,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.4", + "regex-syntax 0.8.5", ] [[package]] @@ -1914,9 +1923,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "rmp" @@ -1943,7 +1952,7 @@ dependencies = [ [[package]] name = "rtt-proxy" version = "0.1.0" -source = "git+https://github.com/auxoncorp/trace-recorder-rtt-proxy.git?branch=main#e75e44bb75802cdddd954fe725d785d6229d9613" +source = "git+https://github.com/auxoncorp/trace-recorder-rtt-proxy.git?branch=main#58b18c0fe346dda7c87a386a2699c16e95b1c8bd" dependencies = [ "serde", "uuid", @@ -2021,7 +2030,7 @@ checksum = "7f81c2fde025af7e69b1d1420531c8a8811ca898919db177141a85313b1cb932" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -2070,7 +2079,7 @@ checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -2121,7 +2130,7 @@ dependencies = [ "darling 0.20.10", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -2249,7 +2258,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -2271,9 +2280,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.77" +version = "2.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590" dependencies = [ "proc-macro2", "quote", @@ -2288,9 +2297,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.12.0" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" +checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" dependencies = [ "cfg-if", "fastrand", @@ -2316,7 +2325,7 @@ checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -2401,7 +2410,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -2449,7 +2458,7 @@ dependencies = [ "byteordered", "derive_more", "enum-iterator", - "ordered-float 4.2.2", + "ordered-float 4.3.0", "thiserror", "tracing", ] @@ -2473,7 +2482,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -2653,7 +2662,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", "wasm-bindgen-shared", ] @@ -2675,7 +2684,7 @@ checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2922,5 +2931,5 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] diff --git a/Cargo.toml b/Cargo.toml index 3b2f2a1..3b27868 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "modality-trace-recorder-plugin" -version = "0.32.0" +version = "0.33.0" edition = "2021" authors = ["Jon Lamb "] description = "A Modality reflector plugin suite and ingest adapter library for Percepio's TraceRecorder data" diff --git a/README.md b/README.md index 286b138..bfa41b6 100644 --- a/README.md +++ b/README.md @@ -220,6 +220,7 @@ These sections are the same for each of the plugins. - `interaction-mode` — Interaction mode to use (`fully-linearized` or `ipc`). The default value is `fully-linearized`. - `startup-task-name` — Use the provided initial startup task name instead of the default (`(startup)`). - `cpu-utilization-measurement-window` — CPU utilization measurement window minimum duration (Default is 500ms). + - `continue-on-error` — Don't shutdown when an error in the data is encountered. - `single-task-timeline` — Use a single timeline for all tasks instead of a timeline per task. ISRs can still be represented with their own timelines or not. - `disable-task-interactions` — Don't synthesize interactions between tasks and ISRs when a context switch occurs. - `use-timeline-id-channel` — Detect task/ISR timeline IDs from the device by reading events on the `modality_timeline_id` channel (format is `name=,id=`). diff --git a/src/config.rs b/src/config.rs index 1428f3a..f7eaf18 100644 --- a/src/config.rs +++ b/src/config.rs @@ -55,6 +55,7 @@ pub struct PluginConfig { pub user_event_fmt_arg_attr_keys: FormatArgAttributeKeysSet, pub interaction_mode: InteractionMode, pub cpu_utilization_measurement_window: Option, + pub continue_on_error: bool, pub import: ImportConfig, pub tcp_collector: TcpCollectorConfig, @@ -369,6 +370,11 @@ impl TraceRecorderConfig { } else { cfg_plugin.cpu_utilization_measurement_window }, + continue_on_error: if tr_opts.continue_on_error { + true + } else { + cfg_plugin.continue_on_error + }, import: cfg_plugin.import, tcp_collector: cfg_plugin.tcp_collector, itm_collector: cfg_plugin.itm_collector, @@ -430,6 +436,7 @@ mod internal { pub user_event_fmt_arg_attr_keys: FormatArgAttributeKeysSet, pub interaction_mode: InteractionMode, pub cpu_utilization_measurement_window: Option, + pub continue_on_error: bool, } impl From for PluginConfig { @@ -457,6 +464,7 @@ mod internal { user_event_fmt_arg_attr_keys: c.user_event_fmt_arg_attr_keys, interaction_mode: c.interaction_mode, cpu_utilization_measurement_window: c.cpu_utilization_measurement_window, + continue_on_error: c.continue_on_error, import: Default::default(), tcp_collector: Default::default(), itm_collector: Default::default(), @@ -636,6 +644,7 @@ flatten-isr-timelines = true disable-task-interactions = true include-unknown-events = true cpu-utilization-measurement-window = '100ms' +continue-on-error = true file = '/path/to/memdump.bin' [[metadata.user-event-fmt-arg-attr-keys]] @@ -902,6 +911,7 @@ custom-printf-event-id = 0x0FA0 cpu_utilization_measurement_window: HumanTime::from_str("100ms") .unwrap() .into(), + continue_on_error: true, import: ImportConfig { protocol: None, file: PathBuf::from("/path/to/memdump.bin").into(), @@ -999,6 +1009,7 @@ custom-printf-event-id = 0x0FA0 .collect(), interaction_mode: InteractionMode::Ipc, cpu_utilization_measurement_window: None, + continue_on_error: false, import: Default::default(), tcp_collector: TcpCollectorConfig { disable_control_plane: true, @@ -1100,6 +1111,7 @@ custom-printf-event-id = 0x0FA0 .collect(), interaction_mode: InteractionMode::FullyLinearized, cpu_utilization_measurement_window: None, + continue_on_error: false, import: Default::default(), tcp_collector: Default::default(), itm_collector: ItmCollectorConfig { @@ -1212,6 +1224,7 @@ custom-printf-event-id = 0x0FA0 .collect(), interaction_mode: InteractionMode::Ipc, cpu_utilization_measurement_window: None, + continue_on_error: false, import: Default::default(), tcp_collector: Default::default(), itm_collector: Default::default(), diff --git a/src/opts.rs b/src/opts.rs index c5e0091..9bd8f9d 100644 --- a/src/opts.rs +++ b/src/opts.rs @@ -250,6 +250,14 @@ pub struct TraceRecorderOpts { help_heading = "TRACE RECORDER CONFIGURATION" )] pub cpu_utilization_measurement_window: Option, + + /// Don't shutdown when an error in the data is encountered. + #[clap( + long, + name = "continue-on-error", + help_heading = "TRACE RECORDER CONFIGURATION" + )] + pub continue_on_error: bool, } /// A map of trace recorder USER_EVENT channels/format-strings to Modality event names diff --git a/src/trc_reader.rs b/src/trc_reader.rs index 455dc2a..f09b9b4 100644 --- a/src/trc_reader.rs +++ b/src/trc_reader.rs @@ -17,6 +17,7 @@ pub async fn run( intr: Interruptor, ) -> Result<(), Error> { let mut trd = RecorderData::find(&mut r)?; + let continue_on_error = cfg.plugin.continue_on_error; let maybe_custom_printf_event_id = cfg.plugin.custom_printf_event_id; if let Some(custom_printf_event_id) = maybe_custom_printf_event_id { @@ -68,9 +69,14 @@ pub async fn run( continue; } _ => { - // Store the result so we can pass it along after flushing buffered events - maybe_result = Some(Err(e.into())); - break; + if continue_on_error { + warn!(error = %e, "Continue on-error"); + continue; + } else { + // Store the result so we can pass it along after flushing buffered events + maybe_result = Some(Err(e.into())); + break; + } } } }