Skip to content

Commit 1b3abb0

Browse files
committed
Nested Parsers: Separate parsing in sessions and CLI
* Sessions needs to keep track on errors but indexer CLI doesn't need that for now. * Each part should responsible of how errors for parsing log messages should be handled. * Added reminder for handling resolver in indexer CLI.
1 parent d99005f commit 1b3abb0

File tree

3 files changed

+28
-20
lines changed

3 files changed

+28
-20
lines changed

application/apps/indexer/indexer_cli/src/interactive.rs

+13-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
use crate::{duration_report, Instant};
22
use futures::{pin_mut, stream::StreamExt};
33
use parsers::{
4-
dlt::DltParser,
5-
nested_parser::{resolve_log_msg, ParseRestResolver},
6-
MessageStreamItem, ParseYield,
4+
dlt::DltParser, nested_parser::ParseRestResolver, LogMessage, MessageStreamItem,
5+
ParseLogMsgError, ParseYield,
76
};
87
use processor::grabber::LineRange;
98
use rustyline::{error::ReadlineError, DefaultEditor};
@@ -50,6 +49,7 @@ pub(crate) async fn handle_interactive_session(input: Option<PathBuf>) {
5049
let udp_source = UdpSource::new(RECEIVER, vec![]).await.unwrap();
5150
let dlt_parser = DltParser::new(None, None, None, false);
5251
let mut dlt_msg_producer = MessageProducer::new(dlt_parser, udp_source, None);
52+
//TODO AAZ: Make sure we need to provide the resolver in indexer CLI.
5353
let mut parse_reslover = ParseRestResolver::new();
5454
let msg_stream = dlt_msg_producer.as_stream();
5555
pin_mut!(msg_stream);
@@ -62,11 +62,11 @@ pub(crate) async fn handle_interactive_session(input: Option<PathBuf>) {
6262
item = msg_stream.next() => {
6363
match item {
6464
Some((_, MessageStreamItem::Item(ParseYield::Message(item)))) => {
65-
let msg = resolve_log_msg(item, &mut parse_reslover);
65+
let msg = parse_log_msg_lossy(item, &mut parse_reslover);
6666
println!("msg: {msg}");
6767
}
6868
Some((_, MessageStreamItem::Item(ParseYield::MessageAndAttachment((item, attachment))))) => {
69-
let msg = resolve_log_msg(item, &mut parse_reslover);
69+
let msg = parse_log_msg_lossy(item, &mut parse_reslover);
7070
println!("msg: {msg}, attachment: {attachment:?}");
7171
}
7272
Some((_, MessageStreamItem::Item(ParseYield::Attachment(attachment)))) => {
@@ -201,3 +201,11 @@ async fn collect_user_input(tx: mpsc::UnboundedSender<Command>) -> JoinHandle<()
201201
println!("done with readline loop");
202202
})
203203
}
204+
205+
/// Parse log messages without registering errors and calling [`ParseLogMsgError::parse_lossy()`] on errors
206+
pub fn parse_log_msg_lossy<T: LogMessage>(item: T, err_resolver: &mut ParseRestResolver) -> String {
207+
match item.try_resolve(Some(err_resolver)) {
208+
Ok(item) => item.to_string(),
209+
Err(err) => err.parse_lossy(),
210+
}
211+
}

application/apps/indexer/parsers/src/nested_parser.rs

-13
Original file line numberDiff line numberDiff line change
@@ -75,16 +75,3 @@ impl ParseRestResolver {
7575

7676
// Ensure the type of given argument is Infallible, raising a compile time error if not.
7777
fn ensure_infalliable(_err: Infallible) {}
78-
79-
/// Get the text message of [`LogMessage`], resolving its rest payloads if existed when possible,
80-
/// TODO: Otherwise it should save the error to the faulty messages store, which need to be
81-
/// implemented as well :)
82-
pub fn resolve_log_msg<T: LogMessage>(item: T, err_resolver: &mut ParseRestResolver) -> String {
83-
match item.try_resolve(Some(err_resolver)) {
84-
Ok(item) => item.to_string(),
85-
Err(err) => {
86-
//TODO: Add error to errors cache.
87-
err.parse_lossy()
88-
}
89-
}
90-
}

application/apps/indexer/session/src/handlers/observing/mod.rs

+15-2
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ use crate::{
88
use log::trace;
99
use parsers::{
1010
dlt::{fmt::FormatOptions, DltParser},
11-
nested_parser::{resolve_log_msg, ParseRestResolver},
11+
nested_parser::ParseRestResolver,
1212
someip::SomeipParser,
1313
text::StringTokenizer,
14-
LogMessage, MessageStreamItem, ParseYield, Parser,
14+
LogMessage, MessageStreamItem, ParseLogMsgError, ParseYield, Parser,
1515
};
1616
use sources::{
1717
factory::ParserType,
@@ -240,3 +240,16 @@ async fn run_producer<T: LogMessage, P: Parser<T>, S: ByteSource>(
240240
debug!("listen done");
241241
Ok(None)
242242
}
243+
244+
/// Get the text message of [`LogMessage`], resolving its rest payloads if existed when possible,
245+
/// TODO: Otherwise it should save the error to the faulty messages store, which need to be
246+
/// implemented as well :)
247+
pub fn resolve_log_msg<T: LogMessage>(item: T, err_resolver: &mut ParseRestResolver) -> String {
248+
match item.try_resolve(Some(err_resolver)) {
249+
Ok(item) => item.to_string(),
250+
Err(err) => {
251+
//TODO: Add error to errors cache.
252+
err.parse_lossy()
253+
}
254+
}
255+
}

0 commit comments

Comments
 (0)