Пример #1
0
    def setUp(self):
        super(SnubaSearchTest, self).setUp()

        self.backend = SnubaSearchBackend()

        self.environments = {}

        base_datetime = (datetime.utcnow() - timedelta(days=7)).replace(tzinfo=pytz.utc)
        self.group1 = self.create_group(
            project=self.project,
            checksum='a' * 32,
            message='foo',
            times_seen=5,
            status=GroupStatus.UNRESOLVED,
            last_seen=base_datetime,
            first_seen=base_datetime - timedelta(days=31),
            score=ScoreClause.calculate(
                times_seen=5,
                last_seen=base_datetime,
            ),
        )

        self.event1 = self.create_event(
            event_id='a' * 32,
            group=self.group1,
            datetime=base_datetime - timedelta(days=31),
            message='group1',
            stacktrace={
                'frames': [{
                    'module': 'group1'
                }]},
            tags={
                'server': 'example.com',
                'environment': 'production',
            }
        )
        self.event3 = self.create_event(
            event_id='c' * 32,
            group=self.group1,
            datetime=base_datetime,
            message='group1',
            stacktrace={
                'frames': [{
                    'module': 'group1'
                }]},
            tags={
                'server': 'example.com',
                'environment': 'production',
            }
        )

        self.group2 = self.create_group(
            project=self.project,
            checksum='b' * 32,
            message='bar',
            times_seen=10,
            status=GroupStatus.RESOLVED,
            last_seen=base_datetime - timedelta(days=30),
            first_seen=base_datetime - timedelta(days=30),
            score=ScoreClause.calculate(
                times_seen=10,
                last_seen=base_datetime - timedelta(days=30),
            ),
        )

        self.event2 = self.create_event(
            event_id='b' * 32,
            group=self.group2,
            datetime=base_datetime - timedelta(days=30),
            message='group2',
            stacktrace={
                'frames': [{
                    'module': 'group2'
                }]},
            tags={
                'server': 'example.com',
                'environment': 'staging',
                'url': 'http://example.com',
            }
        )

        GroupBookmark.objects.create(
            user=self.user,
            group=self.group2,
            project=self.group2.project,
        )

        GroupAssignee.objects.create(
            user=self.user,
            group=self.group2,
            project=self.group2.project,
        )

        GroupSubscription.objects.create(
            user=self.user,
            group=self.group1,
            project=self.group1.project,
            is_active=True,
        )

        GroupSubscription.objects.create(
            user=self.user,
            group=self.group2,
            project=self.group2.project,
            is_active=False,
        )
Пример #2
0
from sentry.api.bases import OrganizationEventsEndpointBase
from sentry.api.helpers.group_index import (
    build_query_params_from_request, delete_groups, get_by_short_id, update_groups, ValidationError
)
from sentry.api.serializers import serialize
from sentry.api.serializers.models.group import StreamGroupSerializerSnuba
from sentry.api.utils import get_date_range_from_params, InvalidParams
from sentry.models import Group, GroupStatus
from sentry.search.snuba.backend import SnubaSearchBackend


ERR_INVALID_STATS_PERIOD = "Invalid stats_period. Valid choices are '', '24h', and '14d'"


search = SnubaSearchBackend(**settings.SENTRY_SEARCH_OPTIONS)


class OrganizationGroupIndexEndpoint(OrganizationEventsEndpointBase):

    def _search(self, request, organization, projects, environments, extra_query_kwargs=None):
        query_kwargs = build_query_params_from_request(
            request, organization, projects, environments,
        )
        if extra_query_kwargs is not None:
            assert 'environment' not in extra_query_kwargs
            query_kwargs.update(extra_query_kwargs)

        query_kwargs['environments'] = environments if environments else None
        result = search.query(**query_kwargs)
        return result, query_kwargs
Пример #3
0
    def setUp(self):
        super(SnubaSearchTest, self).setUp()
        self.backend = SnubaSearchBackend()
        self.base_datetime = (datetime.utcnow() - timedelta(days=3)).replace(tzinfo=pytz.utc)

        self.event1 = self.store_event(
            data={
                'fingerprint': ['put-me-in-group1'],
                'event_id': 'a' * 32,
                'message': 'foo',
                'environment': 'production',
                'tags': {
                    'server': 'example.com',
                },
                'timestamp': (self.base_datetime - timedelta(days=21)).isoformat()[:19],
                'stacktrace': {
                    'frames': [{
                        'module': 'group1'
                    }]
                },
            },
            project_id=self.project.id,
        )
        self.event3 = self.store_event(
            data={
                'fingerprint': ['put-me-in-group1'],
                'event_id': 'c' * 32,
                'message': 'group1',
                'environment': 'production',
                'tags': {
                    'server': 'example.com',
                },
                'timestamp': self.base_datetime.isoformat()[:19],
                'stacktrace': {
                    'frames': [{
                        'module': 'group1'
                    }]
                },
            },
            project_id=self.project.id,
        )

        self.group1 = Group.objects.get(id=self.event1.group.id)
        assert self.group1.id == self.event3.group.id

        assert self.group1.first_seen == self.event1.datetime
        assert self.group1.last_seen == self.event3.datetime

        self.group1.times_seen = 5
        self.group1.status = GroupStatus.UNRESOLVED
        self.group1.save()

        self.event2 = self.store_event(
            data={
                'fingerprint': ['put-me-in-group2'],
                'event_id': 'b' * 32,
                'timestamp': (self.base_datetime - timedelta(days=20)).isoformat()[:19],
                'message': 'bar',
                'stacktrace': {
                    'frames': [{
                        'module': 'group2'
                    }]
                },
                'environment': 'staging',
                'tags': {
                    'server': 'example.com',
                    'url': 'http://example.com',
                }
            },
            project_id=self.project.id
        )

        self.group2 = Group.objects.get(id=self.event2.group.id)

        assert self.group2.first_seen == self.group2.last_seen == self.event2.datetime

        self.group2.status = GroupStatus.RESOLVED
        self.group2.times_seen = 10
        self.group2.save()

        GroupBookmark.objects.create(
            user=self.user,
            group=self.group2,
            project=self.group2.project,
        )

        GroupAssignee.objects.create(
            user=self.user,
            group=self.group2,
            project=self.group2.project,
        )

        GroupSubscription.objects.create(
            user=self.user,
            group=self.group1,
            project=self.group1.project,
            is_active=True,
        )

        GroupSubscription.objects.create(
            user=self.user,
            group=self.group2,
            project=self.group2.project,
            is_active=False,
        )

        self.environments = {
            'production': self.event1.get_environment(),
            'staging': self.event2.get_environment(),
        }