From f65d506103adeabf9c611575aa762eb11a3cc3a9 Mon Sep 17 00:00:00 2001 From: Kyrylo Shmidt Date: Wed, 29 Nov 2023 07:57:52 +0100 Subject: [PATCH 1/2] Keep all spans expanded when uiFind param is present --- .../src/components/TracePage/TraceTimelineViewer/duck.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/jaeger-ui/src/components/TracePage/TraceTimelineViewer/duck.tsx b/packages/jaeger-ui/src/components/TracePage/TraceTimelineViewer/duck.tsx index 2d351a5649..6cf5ad38fe 100644 --- a/packages/jaeger-ui/src/components/TracePage/TraceTimelineViewer/duck.tsx +++ b/packages/jaeger-ui/src/components/TracePage/TraceTimelineViewer/duck.tsx @@ -157,7 +157,7 @@ function setTrace(state: TTraceTimeline, { uiFind, trace }: TTraceUiFindValue) { return Object.assign( { ...newInitialState(), spanNameColumnWidth, traceID }, - uiFind ? calculateFocusedFindRowStates(uiFind, spans) : null + uiFind ? calculateFocusedFindRowStates(uiFind, spans, false) : null ); } From c540bd9e6b0a4ce18585ba4643541e0a86a99d73 Mon Sep 17 00:00:00 2001 From: Kyrylo Shmidt Date: Wed, 29 Nov 2023 13:12:03 +0100 Subject: [PATCH 2/2] Add search by exact string --- packages/jaeger-ui/src/utils/filter-spans.tsx | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/packages/jaeger-ui/src/utils/filter-spans.tsx b/packages/jaeger-ui/src/utils/filter-spans.tsx index 5817f65cbc..b9902d377d 100644 --- a/packages/jaeger-ui/src/utils/filter-spans.tsx +++ b/packages/jaeger-ui/src/utils/filter-spans.tsx @@ -26,17 +26,18 @@ export default function filterSpans(textFilter: string, spans: Span[] | TNil) { // values with keys that include text in any one of the excludeKeys will be ignored const excludeKeys: string[] = []; - // split textFilter by whitespace, remove empty strings, and extract includeFilters and excludeKeys - textFilter - .split(/\s+/) - .filter(Boolean) - .forEach(w => { - if (w[0] === '-') { - excludeKeys.push(w.substr(1).toLowerCase()); - } else { - includeFilters.push(w.toLowerCase()); - } - }); + // split textFilter by whitespace, but not that in double quotes, remove empty strings, and extract includeFilters and excludeKeys + const regex = /"[^"]+"|[^\s]+/g; + const match = textFilter.match(regex); + const results = match ? match.map(e => e.replace(/"(.*)"/, '$1')) : []; + + results.filter(Boolean).forEach(w => { + if (w[0] === '-') { + excludeKeys.push(w.substr(1).toLowerCase()); + } else { + includeFilters.push(w.toLowerCase()); + } + }); const isTextInFilters = (filters: Array, text: string) => filters.some(filter => text.toLowerCase().includes(filter));