Skip to content

Commit c87be7d

Browse files
feat: trace_view_config 增加操作符选项
# Reviewed, transaction id: 41247
1 parent 33a974a commit c87be7d

File tree

3 files changed

+33
-32
lines changed

3 files changed

+33
-32
lines changed

bkmonitor/packages/apm_web/trace/constants.py

+21-15
Original file line numberDiff line numberDiff line change
@@ -28,33 +28,39 @@ class OperatorEnum:
2828
"""操作符枚举"""
2929

3030
EQ = {"operator": "equal", "label": "=", "placeholder": _("请选择或直接输入,Enter分隔")}
31-
EQ_WILDCARD = {
32-
"operator": "equal",
33-
"label": "=",
34-
"placeholder": _("请选择或直接输入,Enter分隔"),
35-
"wildcard_operator": "like",
36-
}
3731
NE = {"operator": "not_equal", "label": "!=", "placeholder": _("请选择或直接输入,Enter分隔")}
38-
NE_WILDCARD = {
39-
"operator": "not_equal",
40-
"label": "!=",
41-
"placeholder": _("请选择或直接输入,Enter分隔"),
42-
"wildcard_operator": "like",
43-
}
44-
4532
EXISTS = {"operator": "exists", "label": _("存在"), "placeholder": _("确认字段已存在")}
4633
NOT_EXISTS = {"operator": "not exists", "label": _("不存在"), "placeholder": _("确认字段不存在")}
4734
INCLUDE = {"operator": "like", "label": _("包含"), "placeholder": _("请选择或直接输入,Enter分隔")}
35+
CONTAINS_MATCH_PHRASE = {
36+
"operator": "equal",
37+
"label": _("包含"),
38+
"placeholder": _("请选择或直接输入,Enter分隔"),
39+
"options": [
40+
{"label": _("使用通配符"), "name": "is_wildcard", "default": False},
41+
{
42+
"label": _("组间关系"),
43+
"name": "group_relation",
44+
"default": "OR",
45+
"children": [
46+
{"label": "AND", "value": "AND"},
47+
{"label": "OR", "value": "OR"},
48+
],
49+
},
50+
],
51+
}
4852

4953

5054
OPERATORS = {
5155
"keyword": [
52-
OperatorEnum.EQ_WILDCARD,
53-
OperatorEnum.NE_WILDCARD,
56+
OperatorEnum.EQ,
57+
OperatorEnum.NE,
5458
OperatorEnum.EXISTS,
5559
OperatorEnum.NOT_EXISTS,
60+
OperatorEnum.INCLUDE,
5661
],
5762
"text": [
63+
OperatorEnum.CONTAINS_MATCH_PHRASE,
5864
OperatorEnum.EXISTS,
5965
OperatorEnum.NOT_EXISTS,
6066
],

bkmonitor/packages/apm_web/trace/resources.py

+2-15
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
from apm_web.models.trace import TraceComparison
3333
from apm_web.trace.serializers import (
3434
BaseTraceRequestSerializer,
35+
GetFieldsOptionValuesRequestSerializer,
3536
QuerySerializer,
3637
QueryStatisticsSerializer,
3738
SpanIdInputSerializer,
@@ -1093,21 +1094,7 @@ def perform_request(self, validated_request_data):
10931094
class GetFieldsOptionValuesResource(Resource):
10941095
"""获取指定字段列表的候选项值"""
10951096

1096-
class RequestSerializer(serializers.Serializer):
1097-
class FilterSerializer(serializers.Serializer):
1098-
key = serializers.CharField(label="字段名")
1099-
operator = serializers.CharField(label="操作符")
1100-
value = serializers.ListField(child=serializers.CharField(), label="值列表")
1101-
1102-
bk_biz_id = serializers.IntegerField()
1103-
app_name = serializers.CharField(label="应用名称")
1104-
start_time = serializers.IntegerField()
1105-
end_time = serializers.IntegerField()
1106-
fields = serializers.ListField(child=serializers.CharField(), label="查询字段列表")
1107-
limit = serializers.IntegerField(label="查询条数", default=10)
1108-
filters = serializers.ListField(child=FilterSerializer(), label="过滤条件列表", allow_empty=True)
1109-
query_string = serializers.CharField(label="查询字符串", allow_blank=True)
1110-
mode = serializers.ChoiceField(label="查询视角", choices=QueryMode.choices(), default="span")
1097+
RequestSerializer = GetFieldsOptionValuesRequestSerializer
11111098

11121099
@using_cache(CacheType.APM(60 * 1))
11131100
def perform_request(self, validated_request_data):

bkmonitor/packages/apm_web/trace/serializers.py

+10-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
# -*- coding: utf-8 -*-
21
"""
32
Tencent is pleased to support the open source community by making 蓝鲸智云 - 监控平台 (BlueKing - Monitor) available.
43
Copyright (C) 2017-2022 THL A29 Limited, a Tencent company. All rights reserved.
@@ -8,6 +7,7 @@
87
an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
98
specific language governing permissions and limitations under the License.
109
"""
10+
1111
from django.utils.translation import gettext_lazy as _
1212
from rest_framework import serializers
1313

@@ -71,6 +71,7 @@ class Meta:
7171
class FilterSerializer(serializers.Serializer):
7272
key = serializers.CharField(label="查询键")
7373
operator = serializers.CharField(label="操作符")
74+
options = serializers.DictField(label="操作符选项", required=False)
7475
value = serializers.ListSerializer(label="查询值", child=serializers.CharField(allow_blank=True), allow_empty=True)
7576

7677

@@ -91,7 +92,9 @@ class QueryStatisticsSerializer(serializers.Serializer):
9192
class FilterSerializer(serializers.Serializer):
9293
key = serializers.CharField(label="查询键")
9394
operator = serializers.CharField(label="操作符")
94-
value = serializers.ListSerializer(label="查询值", child=serializers.CharField(allow_blank=True), allow_empty=True)
95+
value = serializers.ListSerializer(
96+
label="查询值", child=serializers.CharField(allow_blank=True), allow_empty=True
97+
)
9598

9699
bk_biz_id = serializers.IntegerField(label="业务ID")
97100
app_name = serializers.CharField(label="应用名称")
@@ -124,6 +127,11 @@ class BaseTraceFilterSerializer(serializers.Serializer):
124127
end_time = serializers.IntegerField(label="结束时间")
125128

126129

130+
class GetFieldsOptionValuesRequestSerializer(BaseTraceRequestSerializer, BaseTraceFilterSerializer):
131+
fields = serializers.ListField(child=serializers.CharField(), label="查询字段列表")
132+
limit = serializers.IntegerField(label="查询条数", required=False, default=10)
133+
134+
127135
class TraceFieldsTopkRequestSerializer(BaseTraceRequestSerializer, BaseTraceFilterSerializer):
128136
fields = serializers.ListField(child=serializers.CharField(), label="查询字段列表")
129137
limit = serializers.IntegerField(label="数量限制", required=False, default=5)

0 commit comments

Comments
 (0)