Skip to content

Commit 305b5c1

Browse files
authored
fix(eap): Move timestamp to common eap column (#95333)
Timestamp gets special treatment and should be the same across eap datasets. This moves it into the common columns so the behaviour is shared. Fixes LOGS-210
1 parent 5ee3441 commit 305b5c1

File tree

4 files changed

+59
-16
lines changed

4 files changed

+59
-16
lines changed

src/sentry/search/eap/common_columns.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from sentry.search.eap import constants
2-
from sentry.search.eap.columns import ResolvedAttribute
2+
from sentry.search.eap.columns import ResolvedAttribute, datetime_processor
33

44
COMMON_COLUMNS = [
55
ResolvedAttribute(
@@ -30,4 +30,11 @@
3030
internal_name="sentry.organization_id",
3131
private=True,
3232
),
33+
ResolvedAttribute(
34+
public_alias="timestamp",
35+
internal_name="sentry.timestamp",
36+
internal_type=constants.DOUBLE,
37+
search_type="string",
38+
processor=datetime_processor,
39+
),
3340
]

src/sentry/search/eap/ourlogs/attributes.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from sentry.search.eap.columns import (
55
ResolvedAttribute,
66
VirtualColumnDefinition,
7-
datetime_processor,
87
project_context_constructor,
98
project_term_resolver,
109
simple_sentry_field,
@@ -37,12 +36,6 @@
3736
search_type="string",
3837
validator=is_event_id_or_list,
3938
),
40-
ResolvedAttribute(
41-
public_alias="timestamp",
42-
internal_name="sentry.timestamp",
43-
search_type="string",
44-
processor=datetime_processor,
45-
),
4639
simple_sentry_field("browser.name"),
4740
simple_sentry_field("browser.version"),
4841
simple_sentry_field("environment"),

src/sentry/search/eap/spans/attributes.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
from sentry.search.eap.columns import (
1111
ResolvedAttribute,
1212
VirtualColumnDefinition,
13-
datetime_processor,
1413
project_context_constructor,
1514
project_term_resolver,
1615
simple_measurements_field,
@@ -236,13 +235,6 @@
236235
internal_name="sentry.sampling_factor",
237236
search_type="percentage",
238237
),
239-
ResolvedAttribute(
240-
public_alias="timestamp",
241-
internal_name="sentry.timestamp",
242-
internal_type=constants.DOUBLE,
243-
search_type="string",
244-
processor=datetime_processor,
245-
),
246238
ResolvedAttribute(
247239
public_alias="cache.hit",
248240
internal_name="cache.hit",

tests/snuba/api/endpoints/test_organization_events_ourlogs.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import pytest
44

5+
from sentry.testutils.helpers.datetime import before_now
56
from sentry.utils.cursors import Cursor
67
from tests.snuba.api.endpoints.test_organization_events import OrganizationEventsEndpointTestBase
78

@@ -217,3 +218,53 @@ def test_trace_id_list_filter(self):
217218
{"message": "foo", "trace": trace_id_1},
218219
]
219220
assert meta["dataset"] == self.dataset
221+
222+
def test_filter_timestamp(self):
223+
one_day_ago = before_now(days=1).replace(microsecond=0)
224+
three_days_ago = before_now(days=3).replace(microsecond=0)
225+
226+
log1 = self.create_ourlog(
227+
{"body": "foo"},
228+
timestamp=one_day_ago,
229+
)
230+
log2 = self.create_ourlog(
231+
{"body": "bar"},
232+
timestamp=three_days_ago,
233+
)
234+
self.store_ourlogs([log1, log2])
235+
236+
request = {
237+
"field": ["message"],
238+
"project": self.project.id,
239+
"dataset": self.dataset,
240+
}
241+
242+
response = self.do_request(
243+
{
244+
**request,
245+
"query": "timestamp:-2d",
246+
}
247+
)
248+
assert response.status_code == 200, response.content
249+
assert response.data["data"] == [{"message": "foo"}]
250+
251+
timestamp = before_now(days=2).isoformat()
252+
timestamp = timestamp.split("T", 2)[0]
253+
254+
response = self.do_request(
255+
{
256+
**request,
257+
"query": f"timestamp:>{timestamp}",
258+
}
259+
)
260+
assert response.status_code == 200, response.content
261+
assert response.data["data"] == [{"message": "foo"}]
262+
263+
response = self.do_request(
264+
{
265+
**request,
266+
"query": f"timestamp:<{timestamp}",
267+
}
268+
)
269+
assert response.status_code == 200, response.content
270+
assert response.data["data"] == [{"message": "bar"}]

0 commit comments

Comments
 (0)