mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
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:
parent
9a29dd7d6e
commit
6522bb377e
@ -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.
|
||||
|
||||

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

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

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

|
||||
|
@ -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 |
|
||||
|
@ -33,7 +33,7 @@ export interface FeatureToggles {
|
||||
storage?: boolean;
|
||||
k8s?: boolean;
|
||||
exploreMixedDatasource?: boolean;
|
||||
newTraceView?: boolean;
|
||||
newTraceViewHeader?: boolean;
|
||||
correlations?: boolean;
|
||||
cloudWatchDynamicLabels?: boolean;
|
||||
datasourceQueryMultiStatus?: boolean;
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
|
@ -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
|
||||
|
@ -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}
|
||||
|
@ -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}
|
||||
|
@ -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');
|
||||
|
@ -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';
|
||||
|
@ -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',
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
});
|
||||
|
||||
|
@ -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(() => {
|
||||
|
@ -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}
|
||||
|
Loading…
Reference in New Issue
Block a user