|
@@ -3,12 +3,9 @@ from unittest import mock
|
|
from sentry.eventstore.base import Filter
|
|
from sentry.eventstore.base import Filter
|
|
from sentry.eventstore.models import Event
|
|
from sentry.eventstore.models import Event
|
|
from sentry.eventstore.snuba.backend import SnubaEventStorage
|
|
from sentry.eventstore.snuba.backend import SnubaEventStorage
|
|
-from sentry.issues.grouptype import (
|
|
|
|
- PerformanceRenderBlockingAssetSpanGroupType,
|
|
|
|
- PerformanceSlowDBQueryGroupType,
|
|
|
|
-)
|
|
|
|
-from sentry.issues.query import apply_performance_conditions
|
|
|
|
|
|
+from sentry.issues.grouptype import PerformanceNPlusOneGroupType
|
|
from sentry.testutils import SnubaTestCase, TestCase
|
|
from sentry.testutils import SnubaTestCase, TestCase
|
|
|
|
+from sentry.testutils.cases import PerformanceIssueTestCase
|
|
from sentry.testutils.helpers.datetime import before_now, iso_format
|
|
from sentry.testutils.helpers.datetime import before_now, iso_format
|
|
from sentry.testutils.silo import region_silo_test
|
|
from sentry.testutils.silo import region_silo_test
|
|
from sentry.utils import snuba
|
|
from sentry.utils import snuba
|
|
@@ -16,7 +13,7 @@ from sentry.utils.samples import load_data
|
|
|
|
|
|
|
|
|
|
@region_silo_test(stable=True)
|
|
@region_silo_test(stable=True)
|
|
-class SnubaEventStorageTest(TestCase, SnubaTestCase):
|
|
|
|
|
|
+class SnubaEventStorageTest(TestCase, SnubaTestCase, PerformanceIssueTestCase):
|
|
def setUp(self):
|
|
def setUp(self):
|
|
super().setUp()
|
|
super().setUp()
|
|
self.min_ago = iso_format(before_now(minutes=1))
|
|
self.min_ago = iso_format(before_now(minutes=1))
|
|
@@ -66,23 +63,27 @@ class SnubaEventStorageTest(TestCase, SnubaTestCase):
|
|
self.transaction_event = self.store_event(data=event_data, project_id=self.project1.id)
|
|
self.transaction_event = self.store_event(data=event_data, project_id=self.project1.id)
|
|
|
|
|
|
event_data_2 = load_data(
|
|
event_data_2 = load_data(
|
|
- platform="transaction",
|
|
|
|
- fingerprint=[f"{PerformanceRenderBlockingAssetSpanGroupType.type_id}-group3"],
|
|
|
|
|
|
+ platform="transaction-n-plus-one",
|
|
|
|
+ fingerprint=[f"{PerformanceNPlusOneGroupType.type_id}-group3"],
|
|
)
|
|
)
|
|
event_data_2["timestamp"] = iso_format(before_now(seconds=30))
|
|
event_data_2["timestamp"] = iso_format(before_now(seconds=30))
|
|
event_data_2["start_timestamp"] = iso_format(before_now(seconds=31))
|
|
event_data_2["start_timestamp"] = iso_format(before_now(seconds=31))
|
|
event_data_2["event_id"] = "e" * 32
|
|
event_data_2["event_id"] = "e" * 32
|
|
|
|
|
|
- self.transaction_event_2 = self.store_event(data=event_data_2, project_id=self.project2.id)
|
|
|
|
|
|
+ self.transaction_event_2 = self.create_performance_issue(
|
|
|
|
+ event_data=event_data_2, project_id=self.project2.id
|
|
|
|
+ )
|
|
|
|
|
|
event_data_3 = load_data(
|
|
event_data_3 = load_data(
|
|
- "transaction", fingerprint=[f"{PerformanceSlowDBQueryGroupType.type_id}-group3"]
|
|
|
|
|
|
+ "transaction-n-plus-one", fingerprint=[f"{PerformanceNPlusOneGroupType.type_id}-group3"]
|
|
)
|
|
)
|
|
event_data_3["timestamp"] = iso_format(before_now(seconds=30))
|
|
event_data_3["timestamp"] = iso_format(before_now(seconds=30))
|
|
event_data_3["start_timestamp"] = iso_format(before_now(seconds=31))
|
|
event_data_3["start_timestamp"] = iso_format(before_now(seconds=31))
|
|
event_data_3["event_id"] = "f" * 32
|
|
event_data_3["event_id"] = "f" * 32
|
|
|
|
|
|
- self.transaction_event_3 = self.store_event(data=event_data_3, project_id=self.project2.id)
|
|
|
|
|
|
+ self.transaction_event_3 = self.create_performance_issue(
|
|
|
|
+ event_data=event_data_3, project_id=self.project2.id
|
|
|
|
+ )
|
|
|
|
|
|
"""
|
|
"""
|
|
event_data_4 = load_data("transaction")
|
|
event_data_4 = load_data("transaction")
|
|
@@ -182,23 +183,23 @@ class SnubaEventStorageTest(TestCase, SnubaTestCase):
|
|
with mock.patch("sentry.eventstore.snuba.backend.Event") as mock_event:
|
|
with mock.patch("sentry.eventstore.snuba.backend.Event") as mock_event:
|
|
dummy_event = Event(
|
|
dummy_event = Event(
|
|
project_id=self.project2.id,
|
|
project_id=self.project2.id,
|
|
- event_id="f" * 32,
|
|
|
|
- data={"something": "hi", "timestamp": self.min_ago},
|
|
|
|
|
|
+ event_id="1" * 32,
|
|
|
|
+ data={"something": "hi", "timestamp": self.min_ago, "type": "error"},
|
|
)
|
|
)
|
|
mock_event.return_value = dummy_event
|
|
mock_event.return_value = dummy_event
|
|
- event = self.eventstore.get_event_by_id(self.project2.id, "f" * 32)
|
|
|
|
|
|
+ event = self.eventstore.get_event_by_id(self.project2.id, "1" * 32)
|
|
# Result of query should be None
|
|
# Result of query should be None
|
|
assert event is None
|
|
assert event is None
|
|
|
|
|
|
# Now we store the event properly, so it will exist in Snuba.
|
|
# Now we store the event properly, so it will exist in Snuba.
|
|
self.store_event(
|
|
self.store_event(
|
|
- data={"event_id": "f" * 32, "timestamp": self.min_ago},
|
|
|
|
|
|
+ data={"event_id": "1" * 32, "timestamp": self.min_ago, "type": "error"},
|
|
project_id=self.project2.id,
|
|
project_id=self.project2.id,
|
|
)
|
|
)
|
|
|
|
|
|
# Make sure that the negative cache isn't causing the event to not show up
|
|
# Make sure that the negative cache isn't causing the event to not show up
|
|
- event = self.eventstore.get_event_by_id(self.project2.id, "f" * 32)
|
|
|
|
- assert event.event_id == "f" * 32
|
|
|
|
|
|
+ event = self.eventstore.get_event_by_id(self.project2.id, "1" * 32)
|
|
|
|
+ assert event.event_id == "1" * 32
|
|
assert event.project_id == self.project2.id
|
|
assert event.project_id == self.project2.id
|
|
assert event.group_id == event.group.id
|
|
assert event.group_id == event.group.id
|
|
|
|
|
|
@@ -299,19 +300,23 @@ class SnubaEventStorageTest(TestCase, SnubaTestCase):
|
|
assert next_event is None
|
|
assert next_event is None
|
|
|
|
|
|
def test_transaction_get_next_prev_event_id(self):
|
|
def test_transaction_get_next_prev_event_id(self):
|
|
- group = self.transaction_event_2.groups[0]
|
|
|
|
|
|
+ group = self.transaction_event_2.group
|
|
_filter = Filter(
|
|
_filter = Filter(
|
|
project_ids=[self.project2.id],
|
|
project_ids=[self.project2.id],
|
|
- conditions=apply_performance_conditions([], group),
|
|
|
|
|
|
+ group_ids=[group.id],
|
|
|
|
+ )
|
|
|
|
+ event = self.eventstore.get_event_by_id(
|
|
|
|
+ self.project2.id, self.transaction_event_3.event_id, group_id=group.id
|
|
)
|
|
)
|
|
- event = self.eventstore.get_event_by_id(self.project2.id, "f" * 32)
|
|
|
|
prev_event, next_event = self.eventstore.get_adjacent_event_ids(event, filter=_filter)
|
|
prev_event, next_event = self.eventstore.get_adjacent_event_ids(event, filter=_filter)
|
|
|
|
|
|
- assert prev_event == (str(self.project2.id), "e" * 32)
|
|
|
|
|
|
+ assert prev_event == (str(self.project2.id), self.transaction_event_2.event_id)
|
|
assert next_event is None
|
|
assert next_event is None
|
|
|
|
|
|
- event = self.eventstore.get_event_by_id(self.project2.id, "e" * 32)
|
|
|
|
|
|
+ event = self.eventstore.get_event_by_id(
|
|
|
|
+ self.project2.id, self.transaction_event_2.event_id, group_id=group.id
|
|
|
|
+ )
|
|
prev_event, next_event = self.eventstore.get_adjacent_event_ids(event, filter=_filter)
|
|
prev_event, next_event = self.eventstore.get_adjacent_event_ids(event, filter=_filter)
|
|
|
|
|
|
assert prev_event is None
|
|
assert prev_event is None
|
|
- assert next_event == (str(self.project2.id), "f" * 32)
|
|
|
|
|
|
+ assert next_event == (str(self.project2.id), self.transaction_event_3.event_id)
|