Tracing: Rename feature toggle (#66833)

Rename feature toggle so something more specific so new work can use older feature toggle name
This commit is contained in:
Joey 2023-04-21 11:31:24 +01:00 committed by GitHub
parent 9a29dd7d6e
commit 6522bb377e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 120 additions and 96 deletions

View File

@ -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.
![Screenshot of span filtering](/media/docs/tempo/screenshot-grafana-tempo-span-filters.png)

View File

@ -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.
![Screenshot of span filtering](/media/docs/tempo/screenshot-grafana-tempo-span-filters.png)

View File

@ -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.
![Screenshot of span filtering](/media/docs/tempo/screenshot-grafana-tempo-span-filters.png)

View File

@ -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.
![Screenshot of span filtering](/media/docs/tempo/screenshot-grafana-tempo-span-filters.png)

View File

@ -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 |

View File

@ -33,7 +33,7 @@ export interface FeatureToggles {
storage?: boolean;
k8s?: boolean;
exploreMixedDatasource?: boolean;
newTraceView?: boolean;
newTraceViewHeader?: boolean;
correlations?: boolean;
cloudWatchDynamicLabels?: boolean;
datasourceQueryMultiStatus?: boolean;

View File

@ -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,

View File

@ -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

1 Name State Owner requiresDevMode RequiresLicense RequiresRestart FrontendOnly
14 storage alpha @grafana/grafana-app-platform-squad false false false false
15 k8s alpha @grafana/grafana-app-platform-squad true false false false
16 exploreMixedDatasource beta @grafana/explore-squad false false false true
17 newTraceView newTraceViewHeader alpha @grafana/observability-traces-and-profiling false false false true
18 correlations beta @grafana/explore-squad false false false false
19 cloudWatchDynamicLabels stable @grafana/aws-plugins false false false false
20 datasourceQueryMultiStatus alpha @grafana/plugins-platform-backend false false false false

View File

@ -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

View File

@ -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}

View File

@ -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}

View File

@ -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');

View File

@ -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';

View File

@ -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',

View File

@ -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;

View File

@ -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);
});

View File

@ -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(() => {

View File

@ -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}