def test_paginates_project_series_and_reassembles_result(self): self.login_as(user=self.user) now = timezone.now() two_days_ago = now - timedelta(days=2) three_days_ago = iso_format(now - timedelta(days=3)) seven_days_back = now - timedelta(days=7) event1 = self.store_event( data={ "event_id": "a" * 32, "message": "message", "timestamp": three_days_ago, "stacktrace": copy.deepcopy(DEFAULT_EVENT_DATA["stacktrace"]), "fingerprint": ["group-1"], }, project_id=self.project.id, ) event2 = self.store_event( data={ "event_id": "b" * 32, "message": "message", "timestamp": three_days_ago, "stacktrace": copy.deepcopy(DEFAULT_EVENT_DATA["stacktrace"]), "fingerprint": ["group-2"], }, project_id=self.project.id, ) group1 = event1.group group2 = event2.group group1.status = GroupStatus.RESOLVED group1.resolved_at = two_days_ago group1.save() group2.status = GroupStatus.RESOLVED group2.resolved_at = two_days_ago group2.save() response = prepare_project_series( [floor_to_utc_day(seven_days_back), floor_to_utc_day(now)], self.project) assert any(map( lambda x: x[1] == (2, 0), response)), "must show two issues resolved in one rollup window"
def _fill_default_parameters(timestamp=None, rollup=None): if timestamp is None: timestamp = to_timestamp(floor_to_utc_day(timezone.now())) if rollup is None: rollup = 60 * 60 * 24 * 7 return (timestamp, rollup)
def test_deliver_organization_user_report(self): now = timezone.now() seven_days = timedelta(days=7) two_days_ago = now - timedelta(days=2) three_days_ago = now - timedelta(days=3) timestamp = to_timestamp(floor_to_utc_day(now)) for outcome, category, num in [ (Outcome.ACCEPTED, DataCategory.ERROR, 1), (Outcome.RATE_LIMITED, DataCategory.ERROR, 2), (Outcome.ACCEPTED, DataCategory.TRANSACTION, 3), (Outcome.RATE_LIMITED, DataCategory.TRANSACTION, 4), # Filtered should be ignored in these emails (Outcome.FILTERED, DataCategory.TRANSACTION, 5), ]: self.store_outcomes( { "org_id": self.organization.id, "project_id": self.project.id, "outcome": outcome, "category": category, "timestamp": two_days_ago, "key_id": 1, }, num_times=num, ) event1 = self.store_event( data={ "event_id": "a" * 32, "message": "message", "timestamp": iso_format(three_days_ago), "stacktrace": copy.deepcopy(DEFAULT_EVENT_DATA["stacktrace"]), "fingerprint": ["group-1"], }, project_id=self.project.id, ) group1 = event1.group group1.status = GroupStatus.RESOLVED group1.resolved_at = two_days_ago group1.save() messages = [] def wrapped_build_message(*args, **kwargs): rt = build_message(*args, **kwargs) messages.append(rt) return rt mock_build_message = mock.Mock(wraps=wrapped_build_message) with mock.patch("sentry.tasks.reports.build_message", mock_build_message): deliver_organization_user_report( timestamp, seven_days.total_seconds(), self.organization.id, self.user.id, ) ctx = messages[0].context projects = ctx["report"]["projects"]["series"]["legend"] # Validate projects list assert len(projects["rows"]) == 1 assert projects["rows"][0].data == { "accepted_errors": 1, "dropped_errors": 2, "accepted_transactions": 3, "dropped_transactions": 4, } # Validate issue distribution assert ctx["report"]["distribution"]["types"][0][1] == 1 assert ctx["report"]["distribution"]["types"][1][1] == 0 assert ctx["report"]["distribution"]["types"][2][1] == 0 assert ctx["report"]["distribution"]["total"] == 1
def test_paginates_project_series_and_reassembles_result(self): self.login_as(user=self.user) now = timezone.now() two_days_ago = now - timedelta(days=2) three_days_ago = now - timedelta(days=3) seven_days_back = now - timedelta(days=7) event1 = self.store_event( data={ "event_id": "a" * 32, "message": "message", "timestamp": iso_format(three_days_ago), "stacktrace": copy.deepcopy(DEFAULT_EVENT_DATA["stacktrace"]), "fingerprint": ["group-1"], }, project_id=self.project.id, ) event2 = self.store_event( data={ "event_id": "b" * 32, "message": "message", "timestamp": iso_format(three_days_ago), "stacktrace": copy.deepcopy(DEFAULT_EVENT_DATA["stacktrace"]), "fingerprint": ["group-2"], }, project_id=self.project.id, ) self.store_outcomes( { "org_id": self.organization.id, "project_id": self.project.id, "outcome": Outcome.ACCEPTED, "category": DataCategory.ERROR, "timestamp": three_days_ago, "key_id": 1, }, num_times=2, ) self.store_outcomes( { "org_id": self.organization.id, "project_id": self.project.id, "outcome": Outcome.ACCEPTED, "category": DataCategory.TRANSACTION, "timestamp": three_days_ago, "key_id": 1, }, num_times=10, ) group1 = event1.group group2 = event2.group group1.status = GroupStatus.RESOLVED group1.resolved_at = two_days_ago group1.save() group2.status = GroupStatus.RESOLVED group2.resolved_at = two_days_ago group2.save() response = build_project_series( [floor_to_utc_day(seven_days_back), floor_to_utc_day(now)], self.project) assert any(map( lambda x: x[1] == (2, 0, 10), response)), "must show two issues resolved in one rollup window"