From b5b0725cc41e63864319126fc5bc22ff69ccdb2e Mon Sep 17 00:00:00 2001 From: Abhishek Sehgal Date: Mon, 2 Aug 2021 15:38:18 +0530 Subject: [PATCH] feat: Allow users to search spans with status code regex (#249) --- frontend/src/modules/Traces/TraceFilter.tsx | 1 + frontend/src/store/actions/traceFilters.ts | 2 +- pkg/query-service/app/clickhouseReader/reader.go | 10 ++++++++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/frontend/src/modules/Traces/TraceFilter.tsx b/frontend/src/modules/Traces/TraceFilter.tsx index 216ea8ad0e..446ddf4754 100644 --- a/frontend/src/modules/Traces/TraceFilter.tsx +++ b/frontend/src/modules/Traces/TraceFilter.tsx @@ -481,6 +481,7 @@ const _TraceFilter = (props: TraceFilterProps) => { diff --git a/frontend/src/store/actions/traceFilters.ts b/frontend/src/store/actions/traceFilters.ts index 79b634eb11..3f59bd7706 100644 --- a/frontend/src/store/actions/traceFilters.ts +++ b/frontend/src/store/actions/traceFilters.ts @@ -4,7 +4,7 @@ import { ActionTypes } from "./types"; export interface TagItem { key: string; value: string; - operator: "equals" | "contains"; + operator: "equals" | "contains" | "regex"; } export interface LatencyValue { diff --git a/pkg/query-service/app/clickhouseReader/reader.go b/pkg/query-service/app/clickhouseReader/reader.go index 2124ad8935..b9c5ea6442 100644 --- a/pkg/query-service/app/clickhouseReader/reader.go +++ b/pkg/query-service/app/clickhouseReader/reader.go @@ -244,11 +244,14 @@ func (r *ClickHouseReader) SearchSpans(ctx context.Context, queryParams *model.S if item.Operator == "equals" { query = query + " AND has(tags, ?)" args = append(args, fmt.Sprintf("%s:%s", item.Key, item.Value)) - } else if item.Operator == "contains" { query = query + " AND tagsValues[indexOf(tagsKeys, ?)] ILIKE ?" args = append(args, item.Key) args = append(args, fmt.Sprintf("%%%s%%", item.Value)) + } else if item.Operator == "regex" { + query = query + " AND match(tagsValues[indexOf(tagsKeys, ?)], ?)" + args = append(args, item.Key) + args = append(args, item.Value) } else if item.Operator == "isnotnull" { query = query + " AND has(tagsKeys, ?)" args = append(args, item.Key) @@ -674,11 +677,14 @@ func (r *ClickHouseReader) SearchSpansAggregate(ctx context.Context, queryParams if item.Operator == "equals" { query = query + " AND has(tags, ?)" args = append(args, fmt.Sprintf("%s:%s", item.Key, item.Value)) - } else if item.Operator == "contains" { query = query + " AND tagsValues[indexOf(tagsKeys, ?)] ILIKE ?" args = append(args, item.Key) args = append(args, fmt.Sprintf("%%%s%%", item.Value)) + } else if item.Operator == "regex" { + query = query + " AND match(tagsValues[indexOf(tagsKeys, ?)], ?)" + args = append(args, item.Key) + args = append(args, item.Value) } else if item.Operator == "isnotnull" { query = query + " AND has(tagsKeys, ?)" args = append(args, item.Key)