Exemplo n.º 1
0
    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"
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
    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"