From 89ff25e86e5460f33c70cdb03f9a934a05e47d01 Mon Sep 17 00:00:00 2001 From: Alessandro Racheli Date: Sat, 16 Apr 2022 14:14:37 +0200 Subject: [PATCH 1/3] Fix: service operations fetch by URL query params If query parameters are provided to the search page, the system now fetches the correct set of operations linked to the specified service. This fixes the current behavior on fetching the operations linked to the last searched service, ignoring all specified URL parameters. Signed-off-by: Alessandro Racheli --- packages/jaeger-ui/src/components/SearchTracePage/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/jaeger-ui/src/components/SearchTracePage/index.js b/packages/jaeger-ui/src/components/SearchTracePage/index.js index 4e5d231f99..fdf1fd879f 100644 --- a/packages/jaeger-ui/src/components/SearchTracePage/index.js +++ b/packages/jaeger-ui/src/components/SearchTracePage/index.js @@ -62,7 +62,7 @@ export class SearchTracePageImpl extends Component { fetchMultipleTraces(needForDiffs); } fetchServices(); - const { service } = store.get('lastSearch') || {}; + const { service } = urlQueryParams || store.get('lastSearch') || {}; if (service && service !== '-') { fetchServiceOperations(service); } From b04c11f2bd6ac6e39f49a3e0620803e802573976 Mon Sep 17 00:00:00 2001 From: Alessandro Racheli Date: Sat, 16 Apr 2022 17:01:36 +0200 Subject: [PATCH 2/3] Improve behavior of operation fetch logic This commit ensures that the service to be used for fetching operations is overwritten only if it's really provided in the URL params. Signed-off-by: Alessandro Racheli --- packages/jaeger-ui/src/components/SearchTracePage/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/jaeger-ui/src/components/SearchTracePage/index.js b/packages/jaeger-ui/src/components/SearchTracePage/index.js index fdf1fd879f..df2c1811e5 100644 --- a/packages/jaeger-ui/src/components/SearchTracePage/index.js +++ b/packages/jaeger-ui/src/components/SearchTracePage/index.js @@ -62,7 +62,10 @@ export class SearchTracePageImpl extends Component { fetchMultipleTraces(needForDiffs); } fetchServices(); - const { service } = urlQueryParams || store.get('lastSearch') || {}; + let { service } = store.get('lastSearch') || {}; + if (urlQueryParams && urlQueryParams.service) { + service = urlQueryParams.service; + } if (service && service !== '-') { fetchServiceOperations(service); } From 1f72e8b8146f17b0e3ab87efc39268c05804871b Mon Sep 17 00:00:00 2001 From: Alessandro Racheli Date: Sat, 16 Apr 2022 17:06:08 +0200 Subject: [PATCH 3/3] Expand unit tests on operations fetch This commit adds and updates unit tests to ensure that 1. If the "service" parameter is present on the search URL, the component fetches the correct operations set 2. If no "service" parameter is present, the component fetches the operations linked to the last service searched Signed-off-by: Alessandro Racheli --- .../components/SearchTracePage/index.test.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/packages/jaeger-ui/src/components/SearchTracePage/index.test.js b/packages/jaeger-ui/src/components/SearchTracePage/index.test.js index 1d52250f94..c71749d687 100644 --- a/packages/jaeger-ui/src/components/SearchTracePage/index.test.js +++ b/packages/jaeger-ui/src/components/SearchTracePage/index.test.js @@ -73,6 +73,22 @@ describe('', () => { }); it('loads the services and operations if a service is stored', () => { + props.fetchServices.mockClear(); + props.fetchServiceOperations.mockClear(); + const oldFn = store.get; + store.get = jest.fn(() => ({ service: 'svc-b' })); + wrapper = mount( + + + + ); + expect(props.fetchServices.mock.calls.length).toBe(1); + expect(props.fetchServiceOperations.mock.calls.length).toBe(1); + expect(props.fetchServiceOperations.mock.calls[0][0]).toBe('svc-b'); + store.get = oldFn; + }); + + it('loads the operations linked to the URL service parameter if present', () => { props.fetchServices.mockClear(); props.fetchServiceOperations.mockClear(); const oldFn = store.get; @@ -84,6 +100,7 @@ describe('', () => { ); expect(props.fetchServices.mock.calls.length).toBe(1); expect(props.fetchServiceOperations.mock.calls.length).toBe(1); + expect(props.fetchServiceOperations.mock.calls[0][0]).toBe('svc-a'); store.get = oldFn; });