From 6522bb377e1bc4b64fe0aebd7e34ec2111859e11 Mon Sep 17 00:00:00 2001 From: Joey <90795735+joey-grafana@users.noreply.github.com> Date: Fri, 21 Apr 2023 11:31:24 +0100 Subject: [PATCH] Tracing: Rename feature toggle (#66833) Rename feature toggle so something more specific so new work can use older feature toggle name --- docs/sources/datasources/jaeger/_index.md | 2 +- docs/sources/datasources/tempo/_index.md | 2 +- docs/sources/datasources/zipkin/_index.md | 2 +- docs/sources/explore/trace-integration.md | 2 +- .../feature-toggles/index.md | 2 +- .../src/types/featureToggles.gen.ts | 2 +- pkg/services/featuremgmt/registry.go | 4 +- pkg/services/featuremgmt/toggles_gen.csv | 2 +- pkg/services/featuremgmt/toggles_gen.go | 6 +- .../features/explore/TraceView/TraceView.tsx | 24 ++-- .../explore/TraceView/TraceViewContainer.tsx | 4 +- .../NewTracePageHeader.test.tsx | 2 +- .../explore/TraceView/components/index.ts | 2 +- .../components/utils/filter-spans.test.ts | 130 ++++++++++-------- .../components/utils/filter-spans.tsx | 4 +- .../explore/TraceView/useSearch.test.ts | 10 +- .../features/explore/TraceView/useSearch.ts | 14 +- .../app/plugins/panel/traces/TracesPanel.tsx | 2 +- 18 files changed, 120 insertions(+), 96 deletions(-) diff --git a/docs/sources/datasources/jaeger/_index.md b/docs/sources/datasources/jaeger/_index.md index 091e8934989..7d26e429ec4 100644 --- a/docs/sources/datasources/jaeger/_index.md +++ b/docs/sources/datasources/jaeger/_index.md @@ -295,7 +295,7 @@ If the file has multiple traces, Grafana visualizes its first trace. ## Span Filters -> **Note:** This feature is behind the `newTraceView` [feature toggle]({{< relref "../../setup-grafana/configure-grafana#feature_toggles" >}}). +> **Note:** This feature is behind the `newTraceViewHeader` [feature toggle]({{< relref "../../setup-grafana/configure-grafana#feature_toggles" >}}). > If you use Grafana Cloud, open a [support ticket in the Cloud Portal](/profile/org#support) to access this feature.  diff --git a/docs/sources/datasources/tempo/_index.md b/docs/sources/datasources/tempo/_index.md index 820f9bbe4db..3a3dd770f96 100644 --- a/docs/sources/datasources/tempo/_index.md +++ b/docs/sources/datasources/tempo/_index.md @@ -359,7 +359,7 @@ To open a query in Tempo with the span name of that row automatically set in the ## Span Filters -> **Note:** This feature is behind the `newTraceView` [feature toggle]({{< relref "../../setup-grafana/configure-grafana#feature_toggles" >}}). +> **Note:** This feature is behind the `newTraceViewHeader` [feature toggle]({{< relref "../../setup-grafana/configure-grafana#feature_toggles" >}}). > If you use Grafana Cloud, open a [support ticket in the Cloud Portal](/profile/org#support) to access this feature.  diff --git a/docs/sources/datasources/zipkin/_index.md b/docs/sources/datasources/zipkin/_index.md index c3de7290d6e..308552fe7fa 100644 --- a/docs/sources/datasources/zipkin/_index.md +++ b/docs/sources/datasources/zipkin/_index.md @@ -264,7 +264,7 @@ If the file has multiple traces, Grafana visualizes its first trace. ## Span Filters -> **Note:** This feature is behind the `newTraceView` [feature toggle]({{< relref "../../setup-grafana/configure-grafana#feature_toggles" >}}). +> **Note:** This feature is behind the `newTraceViewHeader` [feature toggle]({{< relref "../../setup-grafana/configure-grafana#feature_toggles" >}}). > If you use Grafana Cloud, open a [support ticket in the Cloud Portal](/profile/org#support) to access this feature.  diff --git a/docs/sources/explore/trace-integration.md b/docs/sources/explore/trace-integration.md index 69b1e90231f..15f743d58ca 100644 --- a/docs/sources/explore/trace-integration.md +++ b/docs/sources/explore/trace-integration.md @@ -42,7 +42,7 @@ Shows condensed view or the trace timeline. Drag your mouse over the minimap to ### Span Filters -> **Note:** This feature is behind the `newTraceView` [feature toggle]({{< relref "../../setup-grafana/configure-grafana#feature_toggles" >}}). +> **Note:** This feature is behind the `newTraceViewHeader` [feature toggle]({{< relref "../../setup-grafana/configure-grafana#feature_toggles" >}}). > If you use Grafana Cloud, open a [support ticket in the Cloud Portal](/profile/org#support) to access this feature.  diff --git a/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md b/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md index b0cb06aab05..a4b50479e7c 100644 --- a/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md +++ b/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md @@ -70,7 +70,7 @@ Alpha features might be changed or removed without prior notice. | `publicDashboardsEmailSharing` | Enables public dashboard sharing to be restricted to only allowed emails | | `lokiLive` | Support WebSocket streaming for loki (early prototype) | | `storage` | Configurable storage for dashboards, datasources, and resources | -| `newTraceView` | Shows the new trace view design | +| `newTraceViewHeader` | Shows the new trace view header | | `datasourceQueryMultiStatus` | Introduce HTTP 207 Multi Status for api/ds/query | | `traceToMetrics` | Enable trace to metrics links | | `prometheusWideSeries` | Enable wide series responses in the Prometheus datasource | diff --git a/packages/grafana-data/src/types/featureToggles.gen.ts b/packages/grafana-data/src/types/featureToggles.gen.ts index e31c4cca901..9eedfbb439f 100644 --- a/packages/grafana-data/src/types/featureToggles.gen.ts +++ b/packages/grafana-data/src/types/featureToggles.gen.ts @@ -33,7 +33,7 @@ export interface FeatureToggles { storage?: boolean; k8s?: boolean; exploreMixedDatasource?: boolean; - newTraceView?: boolean; + newTraceViewHeader?: boolean; correlations?: boolean; cloudWatchDynamicLabels?: boolean; datasourceQueryMultiStatus?: boolean; diff --git a/pkg/services/featuremgmt/registry.go b/pkg/services/featuremgmt/registry.go index ebbf9866eaf..89e93e6d614 100644 --- a/pkg/services/featuremgmt/registry.go +++ b/pkg/services/featuremgmt/registry.go @@ -105,8 +105,8 @@ var ( Owner: grafanaExploreSquad, }, { - Name: "newTraceView", - Description: "Shows the new trace view design", + Name: "newTraceViewHeader", + Description: "Shows the new trace view header", State: FeatureStateAlpha, FrontendOnly: true, Owner: grafanaObservabilityTracesAndProfilingSquad, diff --git a/pkg/services/featuremgmt/toggles_gen.csv b/pkg/services/featuremgmt/toggles_gen.csv index 6ff2620cad0..d9c0df0a89b 100644 --- a/pkg/services/featuremgmt/toggles_gen.csv +++ b/pkg/services/featuremgmt/toggles_gen.csv @@ -14,7 +14,7 @@ migrationLocking,beta,@grafana/backend-platform,false,false,false,false storage,alpha,@grafana/grafana-app-platform-squad,false,false,false,false k8s,alpha,@grafana/grafana-app-platform-squad,true,false,false,false exploreMixedDatasource,beta,@grafana/explore-squad,false,false,false,true -newTraceView,alpha,@grafana/observability-traces-and-profiling,false,false,false,true +newTraceViewHeader,alpha,@grafana/observability-traces-and-profiling,false,false,false,true correlations,beta,@grafana/explore-squad,false,false,false,false cloudWatchDynamicLabels,stable,@grafana/aws-plugins,false,false,false,false datasourceQueryMultiStatus,alpha,@grafana/plugins-platform-backend,false,false,false,false diff --git a/pkg/services/featuremgmt/toggles_gen.go b/pkg/services/featuremgmt/toggles_gen.go index f5bcadbce47..d3defd21235 100644 --- a/pkg/services/featuremgmt/toggles_gen.go +++ b/pkg/services/featuremgmt/toggles_gen.go @@ -67,9 +67,9 @@ const ( // Enable mixed datasource in Explore FlagExploreMixedDatasource = "exploreMixedDatasource" - // FlagNewTraceView - // Shows the new trace view design - FlagNewTraceView = "newTraceView" + // FlagNewTraceViewHeader + // Shows the new trace view header + FlagNewTraceViewHeader = "newTraceViewHeader" // FlagCorrelations // Correlations page diff --git a/public/app/features/explore/TraceView/TraceView.tsx b/public/app/features/explore/TraceView/TraceView.tsx index 5e9a44b5873..1d2c655f79a 100644 --- a/public/app/features/explore/TraceView/TraceView.tsx +++ b/public/app/features/explore/TraceView/TraceView.tsx @@ -41,7 +41,7 @@ import { createSpanLinkFactory } from './createSpanLink'; import { useChildrenState } from './useChildrenState'; import { useDetailState } from './useDetailState'; import { useHoverIndentGuide } from './useHoverIndentGuide'; -import { useSearchNewTraceView } from './useSearch'; +import { useSearchNewTraceViewHeader } from './useSearch'; import { useViewRange } from './useViewRange'; const getStyles = (theme: GrafanaTheme2) => ({ @@ -94,8 +94,10 @@ export function TraceView(props: Props) { const { removeHoverIndentGuideId, addHoverIndentGuideId, hoverIndentGuideIds } = useHoverIndentGuide(); const { viewRange, updateViewRangeTime, updateNextViewRangeTime } = useViewRange(); const { expandOne, collapseOne, childrenToggle, collapseAll, childrenHiddenIDs, expandAll } = useChildrenState(); - const { newTraceViewSearch, setNewTraceViewSearch, spanFilterMatches } = useSearchNewTraceView(traceProp?.spans); - const [newTraceViewFocusedSpanIdForSearch, setNewTraceViewFocusedSpanIdForSearch] = useState(''); + const { newTraceViewHeaderSearch, setNewTraceViewHeaderSearch, spanFilterMatches } = useSearchNewTraceViewHeader( + traceProp?.spans + ); + const [newTraceViewHeaderFocusedSpanIdForSearch, setNewTraceViewHeaderFocusedSpanIdForSearch] = useState(''); const [showSpanFilters, setShowSpanFilters] = useToggle(false); const [headerHeight, setHeaderHeight] = useState(0); @@ -152,17 +154,17 @@ export function TraceView(props: Props) { <> {props.dataFrames?.length && traceProp ? ( <> - {config.featureToggles.newTraceView ? ( + {config.featureToggles.newTraceViewHeader ? ( <> <NewTracePageHeader trace={traceProp} timeZone={timeZone} - search={newTraceViewSearch} - setSearch={setNewTraceViewSearch} + search={newTraceViewHeaderSearch} + setSearch={setNewTraceViewHeaderSearch} showSpanFilters={showSpanFilters} setShowSpanFilters={setShowSpanFilters} - focusedSpanIdForSearch={newTraceViewFocusedSpanIdForSearch} - setFocusedSpanIdForSearch={setNewTraceViewFocusedSpanIdForSearch} + focusedSpanIdForSearch={newTraceViewHeaderFocusedSpanIdForSearch} + setFocusedSpanIdForSearch={setNewTraceViewHeaderFocusedSpanIdForSearch} spanFilterMatches={spanFilterMatches} datasourceType={datasourceType} setHeaderHeight={setHeaderHeight} @@ -186,7 +188,7 @@ export function TraceView(props: Props) { <TraceTimelineViewer registerAccessors={noop} scrollToFirstVisibleSpan={noop} - findMatchesIDs={config.featureToggles.newTraceView ? spanFilterMatches : spanFindMatches} + findMatchesIDs={config.featureToggles.newTraceViewHeader ? spanFilterMatches : spanFindMatches} trace={traceProp} datasourceType={datasourceType} spanBarOptions={spanBarOptions?.spanBar} @@ -220,7 +222,9 @@ export function TraceView(props: Props) { scrollElement={scrollElement} focusedSpanId={focusedSpanId} focusedSpanIdForSearch={ - config.featureToggles.newTraceView ? newTraceViewFocusedSpanIdForSearch : props.focusedSpanIdForSearch! + config.featureToggles.newTraceViewHeader + ? newTraceViewHeaderFocusedSpanIdForSearch + : props.focusedSpanIdForSearch! } createFocusSpanLink={createFocusSpanLink} topOfViewRef={topOfViewRef} diff --git a/public/app/features/explore/TraceView/TraceViewContainer.tsx b/public/app/features/explore/TraceView/TraceViewContainer.tsx index feb8df59faf..b11e1d4263d 100644 --- a/public/app/features/explore/TraceView/TraceViewContainer.tsx +++ b/public/app/features/explore/TraceView/TraceViewContainer.tsx @@ -33,7 +33,7 @@ const getStyles = (theme: GrafanaTheme2) => ({ display: flex; flex-direction: column; flex: 1 1 0; - padding: ${config.featureToggles.newTraceView ? 0 : theme.spacing(theme.components.panel.padding)}; + padding: ${config.featureToggles.newTraceViewHeader ? 0 : theme.spacing(theme.components.panel.padding)}; `, }); @@ -57,7 +57,7 @@ export function TraceViewContainer(props: Props) { return ( <div className={style.container}> - {!config.featureToggles.newTraceView && ( + {!config.featureToggles.newTraceViewHeader && ( <TracePageSearchBar navigable={true} searchValue={search} diff --git a/public/app/features/explore/TraceView/components/TracePageHeader/NewTracePageHeader.test.tsx b/public/app/features/explore/TraceView/components/TracePageHeader/NewTracePageHeader.test.tsx index d68935d294b..64db99647b1 100644 --- a/public/app/features/explore/TraceView/components/TracePageHeader/NewTracePageHeader.test.tsx +++ b/public/app/features/explore/TraceView/components/TracePageHeader/NewTracePageHeader.test.tsx @@ -42,7 +42,7 @@ const setup = () => { describe('NewTracePageHeader test', () => { it('should render the new trace header', () => { - config.featureToggles.newTraceView = true; + config.featureToggles.newTraceViewHeader = true; setup(); const header = document.querySelector('header'); diff --git a/public/app/features/explore/TraceView/components/index.ts b/public/app/features/explore/TraceView/components/index.ts index 334855a9ebc..5412992f8d8 100644 --- a/public/app/features/explore/TraceView/components/index.ts +++ b/public/app/features/explore/TraceView/components/index.ts @@ -6,5 +6,5 @@ export * from './types'; export * from './TraceTimelineViewer/types'; export { default as DetailState } from './TraceTimelineViewer/SpanDetail/DetailState'; export { default as transformTraceData } from './model/transform-trace-data'; -export { filterSpansNewTraceView, filterSpans } from './utils/filter-spans'; +export { filterSpansNewTraceViewHeader, filterSpans } from './utils/filter-spans'; export * from './Theme'; diff --git a/public/app/features/explore/TraceView/components/utils/filter-spans.test.ts b/public/app/features/explore/TraceView/components/utils/filter-spans.test.ts index 65fe9d37d88..ed733b88a4c 100644 --- a/public/app/features/explore/TraceView/components/utils/filter-spans.test.ts +++ b/public/app/features/explore/TraceView/components/utils/filter-spans.test.ts @@ -15,7 +15,7 @@ import { defaultFilters, defaultTagFilter } from '../../useSearch'; import { TraceSpan } from '../types'; -import { filterSpans, filterSpansNewTraceView } from './filter-spans'; +import { filterSpans, filterSpansNewTraceViewHeader } from './filter-spans'; describe('filterSpans', () => { // span0 contains strings that end in 0 or 1 @@ -110,46 +110,51 @@ describe('filterSpans', () => { const spans = [span0, span2] as TraceSpan[]; it('should return `undefined` if spans is falsy', () => { - expect(filterSpansNewTraceView({ ...defaultFilters, spanName: 'operationName' }, null)).toBe(undefined); + expect(filterSpansNewTraceViewHeader({ ...defaultFilters, spanName: 'operationName' }, null)).toBe(undefined); }); // Service / span name it('should return spans whose serviceName match a filter', () => { - expect(filterSpansNewTraceView({ ...defaultFilters, serviceName: 'serviceName0' }, spans)).toEqual( + expect(filterSpansNewTraceViewHeader({ ...defaultFilters, serviceName: 'serviceName0' }, spans)).toEqual( new Set([spanID0]) ); - expect(filterSpansNewTraceView({ ...defaultFilters, serviceName: 'serviceName2' }, spans)).toEqual( + expect(filterSpansNewTraceViewHeader({ ...defaultFilters, serviceName: 'serviceName2' }, spans)).toEqual( new Set([spanID2]) ); expect( - filterSpansNewTraceView({ ...defaultFilters, serviceName: 'serviceName2', serviceNameOperator: '!=' }, spans) + filterSpansNewTraceViewHeader( + { ...defaultFilters, serviceName: 'serviceName2', serviceNameOperator: '!=' }, + spans + ) ).toEqual(new Set([spanID0])); }); it('should return spans whose operationName match a filter', () => { - expect(filterSpansNewTraceView({ ...defaultFilters, spanName: 'operationName0' }, spans)).toEqual( + expect(filterSpansNewTraceViewHeader({ ...defaultFilters, spanName: 'operationName0' }, spans)).toEqual( new Set([spanID0]) ); - expect(filterSpansNewTraceView({ ...defaultFilters, spanName: 'operationName2' }, spans)).toEqual( + expect(filterSpansNewTraceViewHeader({ ...defaultFilters, spanName: 'operationName2' }, spans)).toEqual( new Set([spanID2]) ); expect( - filterSpansNewTraceView({ ...defaultFilters, spanName: 'operationName2', spanNameOperator: '!=' }, spans) + filterSpansNewTraceViewHeader({ ...defaultFilters, spanName: 'operationName2', spanNameOperator: '!=' }, spans) ).toEqual(new Set([spanID0])); }); // Durations it('should return spans whose duration match a filter', () => { - expect(filterSpansNewTraceView({ ...defaultFilters, from: '2ms' }, spans)).toEqual(new Set([spanID0, spanID2])); - expect(filterSpansNewTraceView({ ...defaultFilters, from: '3.05ms' }, spans)).toEqual(new Set([spanID2])); - expect(filterSpansNewTraceView({ ...defaultFilters, from: '3.05ms', fromOperator: '>=' }, spans)).toEqual( + expect(filterSpansNewTraceViewHeader({ ...defaultFilters, from: '2ms' }, spans)).toEqual( + new Set([spanID0, spanID2]) + ); + expect(filterSpansNewTraceViewHeader({ ...defaultFilters, from: '3.05ms' }, spans)).toEqual(new Set([spanID2])); + expect(filterSpansNewTraceViewHeader({ ...defaultFilters, from: '3.05ms', fromOperator: '>=' }, spans)).toEqual( new Set([spanID0, spanID2]) ); expect( - filterSpansNewTraceView({ ...defaultFilters, from: '3.05ms', fromOperator: '>=', to: '4ms' }, spans) + filterSpansNewTraceViewHeader({ ...defaultFilters, from: '3.05ms', fromOperator: '>=', to: '4ms' }, spans) ).toEqual(new Set([spanID0])); - expect(filterSpansNewTraceView({ ...defaultFilters, to: '4ms' }, spans)).toEqual(new Set([spanID0])); - expect(filterSpansNewTraceView({ ...defaultFilters, to: '5ms', toOperator: '<=' }, spans)).toEqual( + expect(filterSpansNewTraceViewHeader({ ...defaultFilters, to: '4ms' }, spans)).toEqual(new Set([spanID0])); + expect(filterSpansNewTraceViewHeader({ ...defaultFilters, to: '5ms', toOperator: '<=' }, spans)).toEqual( new Set([spanID0, spanID2]) ); }); @@ -157,16 +162,16 @@ describe('filterSpans', () => { // Tags it('should return spans whose tags kv.key match a filter', () => { expect( - filterSpansNewTraceView({ ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'tagKey1' }] }, spans) + filterSpansNewTraceViewHeader({ ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'tagKey1' }] }, spans) ).toEqual(new Set([spanID0, spanID2])); expect( - filterSpansNewTraceView({ ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'tagKey0' }] }, spans) + filterSpansNewTraceViewHeader({ ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'tagKey0' }] }, spans) ).toEqual(new Set([spanID0])); expect( - filterSpansNewTraceView({ ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'tagKey2' }] }, spans) + filterSpansNewTraceViewHeader({ ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'tagKey2' }] }, spans) ).toEqual(new Set([spanID2])); expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'tagKey2', operator: '!=' }] }, spans ) @@ -175,16 +180,25 @@ describe('filterSpans', () => { it('should return spans whose process.tags kv.key match a filter', () => { expect( - filterSpansNewTraceView({ ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'processTagKey1' }] }, spans) + filterSpansNewTraceViewHeader( + { ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'processTagKey1' }] }, + spans + ) ).toEqual(new Set([spanID0, spanID2])); expect( - filterSpansNewTraceView({ ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'processTagKey0' }] }, spans) + filterSpansNewTraceViewHeader( + { ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'processTagKey0' }] }, + spans + ) ).toEqual(new Set([spanID0])); expect( - filterSpansNewTraceView({ ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'processTagKey2' }] }, spans) + filterSpansNewTraceViewHeader( + { ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'processTagKey2' }] }, + spans + ) ).toEqual(new Set([spanID2])); expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'processTagKey2', operator: '!=' }] }, spans ) @@ -193,16 +207,16 @@ describe('filterSpans', () => { it('should return spans whose logs have a field whose kv.key match a filter', () => { expect( - filterSpansNewTraceView({ ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'logFieldKey1' }] }, spans) + filterSpansNewTraceViewHeader({ ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'logFieldKey1' }] }, spans) ).toEqual(new Set([spanID0, spanID2])); expect( - filterSpansNewTraceView({ ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'logFieldKey0' }] }, spans) + filterSpansNewTraceViewHeader({ ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'logFieldKey0' }] }, spans) ).toEqual(new Set([spanID0])); expect( - filterSpansNewTraceView({ ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'logFieldKey2' }] }, spans) + filterSpansNewTraceViewHeader({ ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'logFieldKey2' }] }, spans) ).toEqual(new Set([spanID2])); expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'logFieldKey2', operator: '!=' }] }, spans ) @@ -212,7 +226,7 @@ describe('filterSpans', () => { it('should return no spans when logs is null', () => { const nullSpan = { ...span0, logs: null }; expect( - filterSpansNewTraceView({ ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'logFieldKey1' }] }, [ + filterSpansNewTraceViewHeader({ ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'logFieldKey1' }] }, [ nullSpan, ] as unknown as TraceSpan[]) ).toEqual(new Set([])); @@ -220,13 +234,13 @@ describe('filterSpans', () => { it("should return spans whose tags' kv.key and kv.value match a filter", () => { expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'tagKey1', value: 'tagValue1' }] }, spans ) ).toEqual(new Set([spanID0])); expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'tagKey1', value: 'tagValue1', operator: '!=' }] }, spans ) @@ -235,19 +249,19 @@ describe('filterSpans', () => { it("should not return spans whose tags' kv.key match a filter but kv.value/operator does not match", () => { expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'tagKey1', operator: '!=' }] }, spans ) ).toEqual(new Set()); expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'tagKey2', operator: '!=' }] }, spans ) ).toEqual(new Set([spanID0])); expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, tags: [{ ...defaultTagFilter, key: 'tagKey1', value: 'tagValue1', operator: '!=' }] }, spans ) @@ -257,7 +271,7 @@ describe('filterSpans', () => { it('should return spans with multiple tag filters', () => { // tags in same span expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, tags: [ @@ -269,7 +283,7 @@ describe('filterSpans', () => { ) ).toEqual(new Set([spanID0])); expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, tags: [ @@ -281,7 +295,7 @@ describe('filterSpans', () => { ) ).toEqual(new Set([spanID0])); expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, tags: [ @@ -295,7 +309,7 @@ describe('filterSpans', () => { // tags in different spans expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, tags: [ @@ -307,7 +321,7 @@ describe('filterSpans', () => { ) ).toEqual(new Set()); expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, tags: [ @@ -321,7 +335,7 @@ describe('filterSpans', () => { // values in different spans expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, tags: [ @@ -333,7 +347,7 @@ describe('filterSpans', () => { ) ).toEqual(new Set()); expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, tags: [ @@ -345,7 +359,7 @@ describe('filterSpans', () => { ) ).toEqual(new Set()); expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, tags: [ @@ -357,7 +371,7 @@ describe('filterSpans', () => { ) ).toEqual(new Set()); expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, tags: [ @@ -374,13 +388,19 @@ describe('filterSpans', () => { it('should return spans with multiple filters', () => { // service name + span name expect( - filterSpansNewTraceView({ ...defaultFilters, serviceName: 'serviceName0', spanName: 'operationName0' }, spans) + filterSpansNewTraceViewHeader( + { ...defaultFilters, serviceName: 'serviceName0', spanName: 'operationName0' }, + spans + ) ).toEqual(new Set([spanID0])); expect( - filterSpansNewTraceView({ ...defaultFilters, serviceName: 'serviceName0', spanName: 'operationName2' }, spans) + filterSpansNewTraceViewHeader( + { ...defaultFilters, serviceName: 'serviceName0', spanName: 'operationName2' }, + spans + ) ).toEqual(new Set([])); expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, serviceName: 'serviceName0', spanName: 'operationName2', spanNameOperator: '!=' }, spans ) @@ -388,19 +408,19 @@ describe('filterSpans', () => { // service name + span name + duration expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, serviceName: 'serviceName0', spanName: 'operationName0', from: '2ms' }, spans ) ).toEqual(new Set([spanID0])); expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, serviceName: 'serviceName0', spanName: 'operationName0', to: '2ms' }, spans ) ).toEqual(new Set([])); expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, serviceName: 'serviceName2', spanName: 'operationName2', to: '6ms' }, spans ) @@ -408,31 +428,31 @@ describe('filterSpans', () => { // service name + tag key expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, serviceName: 'serviceName0', tags: [{ ...defaultTagFilter, key: 'tagKey0' }] }, spans ) ).toEqual(new Set([spanID0])); expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, serviceName: 'serviceName0', tags: [{ ...defaultTagFilter, key: 'tagKey1' }] }, spans ) ).toEqual(new Set([spanID0])); expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, serviceName: 'serviceName2', tags: [{ ...defaultTagFilter, key: 'tagKey1' }] }, spans ) ).toEqual(new Set([spanID2])); expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, serviceName: 'serviceName2', tags: [{ ...defaultTagFilter, key: 'tagKey2' }] }, spans ) ).toEqual(new Set([spanID2])); expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, serviceName: 'serviceName0', @@ -444,13 +464,13 @@ describe('filterSpans', () => { // duration + tag expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, from: '2ms', tags: [{ ...defaultTagFilter, key: 'tagKey0' }] }, spans ) ).toEqual(new Set([spanID0])); expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, to: '5ms', toOperator: '<=', tags: [{ ...defaultTagFilter, key: 'tagKey2' }] }, spans ) @@ -458,7 +478,7 @@ describe('filterSpans', () => { // all expect( - filterSpansNewTraceView( + filterSpansNewTraceViewHeader( { ...defaultFilters, serviceName: 'serviceName0', diff --git a/public/app/features/explore/TraceView/components/utils/filter-spans.tsx b/public/app/features/explore/TraceView/components/utils/filter-spans.tsx index a9e5c5be92c..e3d4735c769 100644 --- a/public/app/features/explore/TraceView/components/utils/filter-spans.tsx +++ b/public/app/features/explore/TraceView/components/utils/filter-spans.tsx @@ -17,7 +17,7 @@ import { TNil, TraceKeyValuePair, TraceSpan } from '../types'; // filter spans where all filters added need to be true for each individual span that is returned // i.e. the more filters added -> the more specific that the returned results are -export function filterSpansNewTraceView(searchProps: SearchProps, spans: TraceSpan[] | TNil) { +export function filterSpansNewTraceViewHeader(searchProps: SearchProps, spans: TraceSpan[] | TNil) { if (!spans) { return undefined; } @@ -151,7 +151,7 @@ export const convertTimeFilter = (time: string) => { return undefined; }; -// legacy code that will be removed when the newTraceView feature flag is removed +// legacy code that will be removed when the Header feature flag is removed export function filterSpans(textFilter: string, spans: TraceSpan[] | TNil) { if (!spans) { return undefined; diff --git a/public/app/features/explore/TraceView/useSearch.test.ts b/public/app/features/explore/TraceView/useSearch.test.ts index e144f8fa733..683de3c11fe 100644 --- a/public/app/features/explore/TraceView/useSearch.test.ts +++ b/public/app/features/explore/TraceView/useSearch.test.ts @@ -1,7 +1,7 @@ import { act, renderHook } from '@testing-library/react'; import { TraceSpan } from './components'; -import { defaultFilters, useSearch, useSearchNewTraceView } from './useSearch'; +import { defaultFilters, useSearch, useSearchNewTraceViewHeader } from './useSearch'; describe('useSearch', () => { const spans = [ @@ -28,15 +28,15 @@ describe('useSearch', () => { ]; it('returns matching span IDs', async () => { - const { result } = renderHook(() => useSearchNewTraceView(spans)); - act(() => result.current.setNewTraceViewSearch({ ...defaultFilters, serviceName: 'service1' })); + const { result } = renderHook(() => useSearchNewTraceViewHeader(spans)); + act(() => result.current.setNewTraceViewHeaderSearch({ ...defaultFilters, serviceName: 'service1' })); expect(result.current.spanFilterMatches?.size).toBe(1); expect(result.current.spanFilterMatches?.has('span1')).toBe(true); }); it('works without spans', async () => { - const { result } = renderHook(() => useSearchNewTraceView()); - act(() => result.current.setNewTraceViewSearch({ ...defaultFilters, serviceName: 'service1' })); + const { result } = renderHook(() => useSearchNewTraceViewHeader()); + act(() => result.current.setNewTraceViewHeaderSearch({ ...defaultFilters, serviceName: 'service1' })); expect(result.current.spanFilterMatches).toBe(undefined); }); diff --git a/public/app/features/explore/TraceView/useSearch.ts b/public/app/features/explore/TraceView/useSearch.ts index 2339f8a246a..a67327eb72e 100644 --- a/public/app/features/explore/TraceView/useSearch.ts +++ b/public/app/features/explore/TraceView/useSearch.ts @@ -1,7 +1,7 @@ import { useMemo, useState } from 'react'; import { v4 as uuidv4 } from 'uuid'; -import { filterSpansNewTraceView, filterSpans, TraceSpan } from './components'; +import { filterSpansNewTraceViewHeader, filterSpans, TraceSpan } from './components'; export interface SearchProps { serviceName?: string; @@ -41,16 +41,16 @@ export const defaultFilters = { * Controls the state of search input that highlights spans if they match the search string. * @param spans */ -export function useSearchNewTraceView(spans?: TraceSpan[]) { - const [newTraceViewSearch, setNewTraceViewSearch] = useState<SearchProps>(defaultFilters); +export function useSearchNewTraceViewHeader(spans?: TraceSpan[]) { + const [newTraceViewHeaderSearch, setNewTraceViewHeaderSearch] = useState<SearchProps>(defaultFilters); const spanFilterMatches: Set<string> | undefined = useMemo(() => { - return spans && filterSpansNewTraceView(newTraceViewSearch, spans); - }, [newTraceViewSearch, spans]); + return spans && filterSpansNewTraceViewHeader(newTraceViewHeaderSearch, spans); + }, [newTraceViewHeaderSearch, spans]); - return { newTraceViewSearch, setNewTraceViewSearch, spanFilterMatches }; + return { newTraceViewHeaderSearch, setNewTraceViewHeaderSearch, spanFilterMatches }; } -// legacy code that will be removed when the newTraceView feature flag is removed +// legacy code that will be removed when the newTraceViewHeader feature flag is removed export function useSearch(spans?: TraceSpan[]) { const [search, setSearch] = useState(''); const spanFindMatches: Set<string> | undefined = useMemo(() => { diff --git a/public/app/plugins/panel/traces/TracesPanel.tsx b/public/app/plugins/panel/traces/TracesPanel.tsx index 46ec26476d9..cd4ed2a644f 100644 --- a/public/app/plugins/panel/traces/TracesPanel.tsx +++ b/public/app/plugins/panel/traces/TracesPanel.tsx @@ -39,7 +39,7 @@ export const TracesPanel = ({ data }: PanelProps) => { return ( <div className={styles.wrapper}> <div ref={topOfViewRef}></div> - {!config.featureToggles.newTraceView ? ( + {!config.featureToggles.newTraceViewHeader ? ( <TracePageSearchBar navigable={true} searchValue={search}