Skip to content

Commit aac34d1

Browse files
authored
feat(trace): Add query param to trace logs (#92967)
- This is so the endpoint respects the query made as well
1 parent 73bebc1 commit aac34d1

File tree

2 files changed

+42
-4
lines changed

2 files changed

+42
-4
lines changed

src/sentry/api/endpoints/organization_trace_logs.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ def query_logs_data(
5454
snuba_params: SnubaParams,
5555
trace_ids: list[str],
5656
orderby: list[str],
57+
additional_query: str | None,
5758
offset: int,
5859
limit: int,
5960
) -> EventsResponse:
@@ -73,11 +74,16 @@ def query_logs_data(
7374
raise ParseError(
7475
f"{column.lstrip('-')} must be one of {','.join(selected_columns)}"
7576
)
77+
base_query = (
78+
f"trace:{trace_ids[0]}" if len(trace_ids) == 1 else f"trace:[{','.join(trace_ids)}]"
79+
)
80+
if additional_query is not None:
81+
query = f"{base_query} and {additional_query}"
82+
else:
83+
query = base_query
7684
results = ourlogs.query(
7785
selected_columns=selected_columns,
78-
query=(
79-
f"trace:{trace_ids[0]}" if len(trace_ids) == 1 else f"trace:[{','.join(trace_ids)}]"
80-
),
86+
query=query,
8187
snuba_params=snuba_params,
8288
orderby=orderby,
8389
offset=offset,
@@ -101,12 +107,15 @@ def get(self, request: Request, organization: Organization) -> HttpResponse:
101107
raise ParseError("Need to pass at least one traceId")
102108

103109
orderby = request.GET.getlist("orderby", ["-timestamp"])
110+
additional_query = request.GET.get("query")
104111

105112
update_snuba_params_with_timestamp(request, snuba_params)
106113

107114
def data_fn(offset: int, limit: int) -> EventsResponse:
108115
with handle_query_errors():
109-
return self.query_logs_data(snuba_params, trace_ids, orderby, offset, limit)
116+
return self.query_logs_data(
117+
snuba_params, trace_ids, orderby, additional_query, offset, limit
118+
)
110119

111120
return self.paginate(
112121
request=request,

tests/snuba/api/endpoints/test_organization_trace_logs.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,3 +206,32 @@ def test_cross_project_query(self):
206206
assert log_data["project.id"] == project2.id
207207
assert log_data["trace"] == trace_id_2
208208
assert log_data["message"] == "bar"
209+
210+
def test_query_field(self):
211+
trace_id_1 = "1" * 32
212+
trace_id_2 = "2" * 32
213+
self.store_ourlogs(
214+
[
215+
self.create_ourlog(
216+
{"body": "foo", "trace_id": trace_id_1},
217+
timestamp=self.ten_mins_ago,
218+
),
219+
self.create_ourlog(
220+
{"body": "bar", "trace_id": trace_id_2},
221+
timestamp=self.ten_mins_ago,
222+
),
223+
]
224+
)
225+
226+
response = self.client.get(
227+
self.url,
228+
data={"traceId": [trace_id_1, trace_id_2], "query": "message:foo"},
229+
format="json",
230+
)
231+
assert response.status_code == 200, response.content
232+
data = response.data["data"]
233+
assert len(data) == 1
234+
log_data = data[0]
235+
assert log_data["project.id"] == self.project.id
236+
assert log_data["trace"] == trace_id_1
237+
assert log_data["message"] == "foo"

0 commit comments

Comments
 (0)