Beispiel #1
0
    def test_simple(self):
        group = self.create_group()
        group.data['tags'] = (['foo', 'bar'], ['biz', 'baz'])
        group.save()

        for key, value in group.data['tags']:
            tagstore.create_tag_key(
                project_id=group.project_id,
                key=key,
            )
            tagstore.create_tag_value(
                project_id=group.project_id,
                key=key,
                value=value,
            )
            tagstore.create_group_tag_key(
                project_id=group.project_id,
                group_id=group.id,
                key=key,
            )
            tagstore.create_group_tag_value(
                project_id=group.project_id,
                group_id=group.id,
                key=key,
                value=value,
            )

        self.login_as(user=self.user)

        url = '/api/0/issues/{}/tags/'.format(group.id)
        response = self.client.get(url, format='json')
        assert response.status_code == 200, response.content
        assert len(response.data) == 2
Beispiel #2
0
    def _create_tags(self, group, environment_id=None):
        for key, values in group.data["tags"]:
            tagstore.create_tag_key(project_id=group.project_id,
                                    environment_id=environment_id,
                                    key=key)
            tagstore.create_group_tag_key(
                project_id=group.project_id,
                group_id=group.id,
                environment_id=environment_id,
                key=key,
            )

            if not isinstance(values, list):
                values = [values]
            for value in values:
                tagstore.create_tag_value(project_id=group.project_id,
                                          environment_id=environment_id,
                                          key=key,
                                          value=value)
                tagstore.create_group_tag_value(
                    project_id=group.project_id,
                    group_id=group.id,
                    environment_id=environment_id,
                    key=key,
                    value=value,
                )
Beispiel #3
0
    def test_simple(self):
        group = self.create_group()
        group.data["tags"] = (["foo", "bar"],)
        group.save()

        key, value = group.data["tags"][0]
        tagkey = tagstore.create_tag_key(
            project_id=group.project_id, environment_id=None, key=key, values_seen=2
        )
        tagstore.create_tag_value(
            project_id=group.project_id, environment_id=None, key=key, value=value, times_seen=4
        )
        tagstore.create_group_tag_key(
            project_id=group.project_id,
            group_id=group.id,
            environment_id=None,
            key=key,
            values_seen=1,
        )
        tagstore.create_group_tag_value(
            project_id=group.project_id,
            group_id=group.id,
            environment_id=None,
            key=key,
            value=value,
            times_seen=3,
        )

        self.login_as(user=self.user)

        url = u"/api/0/issues/{}/tags/{}/".format(group.id, tagkey.key)
        response = self.client.get(url, format="json")
        assert response.status_code == 200, response.content
        assert response.data["key"] == six.text_type(tagkey.key)
        assert response.data["totalValues"] == 3
    def test_simple(self):
        key, value = 'foo', 'bar'

        project = self.create_project()
        group = self.create_group(project=project)
        tagstore.create_tag_key(project_id=project.id, environment_id=self.environment.id, key=key)
        tagstore.create_tag_value(
            project_id=project.id,
            environment_id=self.environment.id,
            key=key,
            value=value,
        )
        tagstore.create_group_tag_value(
            project_id=project.id,
            group_id=group.id,
            environment_id=self.environment.id,
            key=key,
            value=value,
        )

        self.login_as(user=self.user)

        url = '/api/0/issues/{}/tags/{}/values/'.format(group.id, key)

        response = self.client.get(url)

        assert response.status_code == 200
        assert len(response.data) == 1

        assert response.data[0]['value'] == 'bar'
    def test_lookup_by_release(self):
        self.login_as(self.user)
        project = self.project
        project2 = self.create_project(name='baz',
                                       organization=project.organization)
        release = Release.objects.create(organization=project.organization,
                                         version='12345')
        release.add_project(project)
        release.add_project(project2)
        group = self.create_group(checksum='a' * 32, project=project)
        group2 = self.create_group(checksum='b' * 32, project=project2)
        tagstore.create_group_tag_value(project_id=project.id,
                                        group_id=group.id,
                                        key='sentry:release',
                                        value=release.version)

        tagstore.create_group_tag_value(project_id=project2.id,
                                        group_id=group2.id,
                                        key='sentry:release',
                                        value=release.version)

        url = '%s?query=%s' % (self.path,
                               quote('release:"%s"' % release.version))
        response = self.client.get(url, format='json')
        issues = json.loads(response.content)
        assert response.status_code == 200
        assert len(issues) == 1
        assert int(issues[0]['id']) == group.id
Beispiel #6
0
    def test_simple(self):
        key, value = "foo", "bar"

        project = self.create_project()
        group = self.create_group(project=project)
        tagstore.create_tag_key(project_id=project.id,
                                environment_id=None,
                                key=key)
        tagstore.create_tag_value(project_id=project.id,
                                  environment_id=None,
                                  key=key,
                                  value=value)
        tagstore.create_group_tag_value(project_id=project.id,
                                        group_id=group.id,
                                        environment_id=None,
                                        key=key,
                                        value=value)

        self.login_as(user=self.user)

        url = u"/api/0/issues/{}/tags/{}/values/".format(group.id, key)

        response = self.client.get(url)

        assert response.status_code == 200
        assert len(response.data) == 1

        assert response.data[0]["value"] == "bar"
    def test_lookup_by_release(self):
        self.login_as(self.user)
        project = self.project
        project2 = self.create_project(name='baz', organization=project.organization)
        release = Release.objects.create(organization=project.organization, version='12345')
        release.add_project(project)
        release.add_project(project2)
        group = self.create_group(checksum='a' * 32, project=project)
        group2 = self.create_group(checksum='b' * 32, project=project2)
        tagstore.create_group_tag_value(
            project_id=project.id, group_id=group.id, environment_id=self.environment.id,
            key='sentry:release', value=release.version
        )

        tagstore.create_group_tag_value(
            project_id=project2.id, group_id=group2.id, environment_id=self.environment.id,
            key='sentry:release', value=release.version
        )

        url = '%s?query=%s' % (self.path, quote('release:"%s"' % release.version))
        response = self.client.get(url, format='json')
        issues = json.loads(response.content)
        assert response.status_code == 200
        assert len(issues) == 1
        assert int(issues[0]['id']) == group.id
Beispiel #8
0
    def _create_tags(self, group, environment_id=None):
        for key, values in group.data['tags']:
            tagstore.create_tag_key(
                project_id=group.project_id,
                environment_id=environment_id,
                key=key,
            )
            tagstore.create_group_tag_key(
                project_id=group.project_id,
                group_id=group.id,
                environment_id=environment_id,
                key=key,
            )

            if not isinstance(values, list):
                values = [values]
            for value in values:
                tagstore.create_tag_value(
                    project_id=group.project_id,
                    environment_id=environment_id,
                    key=key,
                    value=value,
                )
                tagstore.create_group_tag_value(
                    project_id=group.project_id,
                    group_id=group.id,
                    environment_id=environment_id,
                    key=key,
                    value=value,
                )
Beispiel #9
0
    def test_simple(self):
        this_group = self.create_group()
        this_group.data['tags'] = (['foo', ['bar', 'quux']], ['biz', 'baz'], [
                                   'sentry:release', 'releaseme'])

        this_group.save()

        other_group = self.create_group()
        other_group.data['tags'] = (['abc', 'xyz'],)
        other_group.save()

        for group in (this_group, other_group):
            for key, values in group.data['tags']:
                tagstore.create_tag_key(
                    project_id=group.project_id,
                    environment_id=None,
                    key=key,
                )
                tagstore.create_group_tag_key(
                    project_id=group.project_id,
                    group_id=group.id,
                    environment_id=None,
                    key=key,
                )

                if not isinstance(values, list):
                    values = [values]
                for value in values:
                    tagstore.create_tag_value(
                        project_id=group.project_id,
                        environment_id=None,
                        key=key,
                        value=value,
                    )
                    tagstore.create_group_tag_value(
                        project_id=group.project_id,
                        group_id=group.id,
                        environment_id=None,
                        key=key,
                        value=value,
                    )

        self.login_as(user=self.user)

        url = u'/api/0/issues/{}/tags/'.format(this_group.id)
        response = self.client.get(url, format='json')
        assert response.status_code == 200, response.content
        assert len(response.data) == 3

        data = sorted(response.data, key=lambda r: r['key'])
        assert data[0]['key'] == 'biz'
        assert len(data[0]['topValues']) == 1

        assert data[1]['key'] == 'foo'
        assert len(data[1]['topValues']) == 2

        assert data[2]['key'] == 'release'  # Formatted from sentry:release
        assert len(data[2]['topValues']) == 1
    def test_with_user(self):
        user = self.create_user()
        project = self.create_project()
        euser = EventUser.objects.create(
            project_id=project.id,
            email='*****@*****.**',
        )
        tagvalue = tagstore.create_tag_value(
            project_id=project.id,
            environment_id=self.environment.id,
            key='sentry:user',
            value=euser.tag_value,
        )
        grouptagvalue = tagstore.create_group_tag_value(
            project_id=project.id,
            group_id=self.create_group(project=project).id,
            environment_id=self.environment.id,
            key=tagvalue.key,
            value=tagvalue.value,
        )

        result = serialize(grouptagvalue, user)
        assert result['id'] == six.text_type(grouptagvalue.id)
        assert result['key'] == 'user'
        assert result['value'] == grouptagvalue.value
        assert result['name'] == euser.get_label()
Beispiel #11
0
    def test_first_release_from_tag(self):
        project = self.create_project()
        release = Release.objects.create(
            version='a',
            organization_id=project.organization_id,
        )
        release.add_project(project)

        group = self.create_group(project=project, )

        tagstore.create_group_tag_value(project_id=project.id,
                                        group_id=group.id,
                                        key='sentry:release',
                                        value=release.version)

        assert group.first_release is None
        assert group.get_first_release() == release.version
        assert group.get_last_release() == release.version
    def test_simple(self):
        group = self.create_group()
        group.data['tags'] = (['foo', 'bar'], )
        group.save()

        key, value = group.data['tags'][0]
        tagkey = tagstore.create_tag_key(
            project_id=group.project_id,
            environment_id=None,
            key=key,
            values_seen=2
        )
        tagstore.create_tag_value(
            project_id=group.project_id,
            environment_id=None,
            key=key,
            value=value,
            times_seen=4
        )
        tagstore.create_group_tag_key(
            project_id=group.project_id,
            group_id=group.id,
            environment_id=None,
            key=key,
            values_seen=1,
        )
        tagstore.create_group_tag_value(
            project_id=group.project_id,
            group_id=group.id,
            environment_id=None,
            key=key,
            value=value,
            times_seen=3,
        )

        self.login_as(user=self.user)

        url = '/api/0/issues/{}/tags/{}/'.format(group.id, tagkey.key)
        response = self.client.get(url, format='json')
        assert response.status_code == 200, response.content
        assert response.data['id'] == six.text_type(tagkey.id)
        assert response.data['key'] == six.text_type(tagkey.key)
        assert response.data['uniqueValues'] == 1
        assert response.data['totalValues'] == 3
Beispiel #13
0
    def test_first_release_from_tag(self):
        project = self.create_project()
        release = Release.objects.create(
            version='a',
            organization_id=project.organization_id,
        )
        release.add_project(project)

        group = self.create_group(
            project=project,
        )

        tagstore.create_group_tag_value(
            project_id=project.id, group_id=group.id, key='sentry:release', value=release.version
        )

        assert group.first_release is None
        assert group.get_first_release() == release.version
        assert group.get_last_release() == release.version
Beispiel #14
0
    def test_first_release_from_tag(self):
        project = self.create_project()
        release = Release.objects.create(
            version="a", organization_id=project.organization_id)
        release.add_project(project)

        group = self.create_group(project=project)

        tagstore.create_group_tag_value(
            project_id=project.id,
            group_id=group.id,
            environment_id=self.environment.id,
            key="sentry:release",
            value=release.version,
        )

        assert group.first_release is None
        assert group.get_first_release() == release.version
        assert group.get_last_release() == release.version
Beispiel #15
0
    def test_simple(self):
        group = self.create_group()
        group.data['tags'] = (['foo', 'bar'], )
        group.save()

        key, value = group.data['tags'][0]
        tagkey = tagstore.create_tag_key(
            project_id=group.project_id,
            environment_id=None,
            key=key,
            values_seen=2
        )
        tagstore.create_tag_value(
            project_id=group.project_id,
            environment_id=None,
            key=key,
            value=value,
            times_seen=4
        )
        tagstore.create_group_tag_key(
            project_id=group.project_id,
            group_id=group.id,
            environment_id=None,
            key=key,
            values_seen=1,
        )
        tagstore.create_group_tag_value(
            project_id=group.project_id,
            group_id=group.id,
            environment_id=None,
            key=key,
            value=value,
            times_seen=3,
        )

        self.login_as(user=self.user)

        url = '/api/0/issues/{}/tags/{}/'.format(group.id, tagkey.key)
        response = self.client.get(url, format='json')
        assert response.status_code == 200, response.content
        assert response.data['key'] == six.text_type(tagkey.key)
        assert response.data['uniqueValues'] == 1
        assert response.data['totalValues'] == 3
Beispiel #16
0
    def test_simple(self):
        key, value = 'foo', u'b\xe4r'

        # Drop microsecond value for MySQL
        now = timezone.now().replace(microsecond=0)

        project = self.create_project()
        group = self.create_group(project=project)
        tagstore.create_tag_key(project_id=project.id,
                                environment_id=self.environment.id,
                                key=key)
        tagstore.create_tag_value(
            project_id=project.id,
            environment_id=self.environment.id,
            key=key,
            value=value,
        )
        group_tag_value = tagstore.create_group_tag_value(
            project_id=project.id,
            group_id=group.id,
            environment_id=self.environment.id,
            key=key,
            value=value,
            times_seen=1,
            first_seen=now - timedelta(hours=1),
            last_seen=now,
        )

        self.login_as(user=self.user)

        url = '/{}/{}/issues/{}/tags/{}/export/?environment={}'.format(
            project.organization.slug, project.slug, group.id, key,
            self.environment.name)

        response = self.client.get(url)

        assert response.status_code == 200
        assert response.streaming
        assert response['Content-Type'] == 'text/csv'
        rows = list(response.streaming_content)
        for idx, row in enumerate(rows):
            row = row.decode('utf-8')
            assert row.endswith(u'\r\n')
            bits = row[:-2].split(',')
            if idx == 0:
                assert bits == [
                    'value', 'times_seen', 'last_seen', 'first_seen'
                ]
            else:
                assert bits[0] == value
                assert bits[1] == '1'
                assert bits[2] == group_tag_value.last_seen.strftime(
                    '%Y-%m-%dT%H:%M:%S.%fZ')
                assert bits[3] == group_tag_value.first_seen.strftime(
                    '%Y-%m-%dT%H:%M:%S.%fZ')
    def test_simple(self):
        this_group = self.create_group()
        this_group.data['tags'] = (['foo', 'bar'], ['biz', 'baz'])
        this_group.save()

        other_group = self.create_group()
        other_group.data['tags'] = (['abc', 'xyz'], )
        other_group.save()

        for group in (this_group, other_group):
            for key, value in group.data['tags']:
                tagstore.create_tag_key(
                    project_id=group.project_id,
                    environment_id=self.environment.id,
                    key=key,
                )
                tagstore.create_tag_value(
                    project_id=group.project_id,
                    environment_id=self.environment.id,
                    key=key,
                    value=value,
                )
                tagstore.create_group_tag_key(
                    project_id=group.project_id,
                    group_id=group.id,
                    environment_id=self.environment.id,
                    key=key,
                )
                tagstore.create_group_tag_value(
                    project_id=group.project_id,
                    group_id=group.id,
                    environment_id=self.environment.id,
                    key=key,
                    value=value,
                )

        self.login_as(user=self.user)

        url = '/api/0/issues/{}/tags/'.format(this_group.id)
        response = self.client.get(url, format='json')
        assert response.status_code == 200, response.content
        assert len(response.data) == 2
    def test_simple(self):
        key, value = 'foo', u'b\xe4r'

        # Drop microsecond value for MySQL
        now = timezone.now().replace(microsecond=0)

        project = self.create_project()
        group = self.create_group(project=project)
        tagstore.create_tag_key(
            project_id=project.id,
            environment_id=self.environment.id,
            key=key
        )
        tagstore.create_tag_value(
            project_id=project.id,
            environment_id=self.environment.id,
            key=key,
            value=value,
        )
        group_tag_value = tagstore.create_group_tag_value(
            project_id=project.id,
            group_id=group.id,
            environment_id=self.environment.id,
            key=key,
            value=value,
            times_seen=1,
            first_seen=now - timedelta(hours=1),
            last_seen=now,
        )

        self.login_as(user=self.user)

        url = '/{}/{}/issues/{}/tags/{}/export/?environment={}'.format(
            project.organization.slug, project.slug, group.id, key, self.environment.name
        )

        response = self.client.get(url)

        assert response.status_code == 200
        assert response.streaming
        assert response['Content-Type'] == 'text/csv'
        rows = list(response.streaming_content)
        for idx, row in enumerate(rows):
            row = row.decode('utf-8')
            assert row.endswith(u'\r\n')
            bits = row[:-2].split(',')
            if idx == 0:
                assert bits == ['value', 'times_seen', 'last_seen', 'first_seen']
            else:
                assert bits[0] == value
                assert bits[1] == '1'
                assert bits[2] == group_tag_value.last_seen.strftime('%Y-%m-%dT%H:%M:%S.%fZ')
                assert bits[3] == group_tag_value.first_seen.strftime('%Y-%m-%dT%H:%M:%S.%fZ')
    def test_user_tag(self):
        project = self.create_project()
        group = self.create_group(project=project)
        euser = EventUser.objects.create(
            project_id=project.id,
            ident='1',
            email='*****@*****.**',
            username='******',
            ip_address='127.0.0.1',
        )
        tagstore.create_tag_key(
            project_id=project.id,
            environment_id=self.environment.id,
            key='sentry:user',
        )
        tagstore.create_tag_value(
            project_id=project.id,
            environment_id=self.environment.id,
            key='sentry:user',
            value=euser.tag_value,
        )
        tagstore.create_group_tag_value(
            project_id=project.id,
            group_id=group.id,
            environment_id=self.environment.id,
            key='sentry:user',
            value=euser.tag_value,
        )

        self.login_as(user=self.user)

        url = '/api/0/issues/{}/tags/user/values/'.format(group.id)

        response = self.client.get(url)

        assert response.status_code == 200
        assert len(response.data) == 1

        assert response.data[0]['email'] == '*****@*****.**'
        assert response.data[0]['value'] == euser.tag_value
    def setUp(self):
        super(OrganizationUserIssuesSearchTest, self).setUp()
        self.org = self.create_organization()
        self.org.flags.allow_joinleave = False
        self.org.save()
        self.team1 = self.create_team(organization=self.org)
        self.team2 = self.create_team(organization=self.org)
        self.project1 = self.create_project(team=self.team1)
        self.project2 = self.create_project(team=self.team2)
        group1 = self.create_group(project=self.project1,
                                   last_seen=timezone.now() -
                                   timedelta(minutes=1))
        group2 = self.create_group(project=self.project2)

        EventUser.objects.create(email='*****@*****.**',
                                 project_id=self.project1.id)
        EventUser.objects.create(email='*****@*****.**',
                                 project_id=self.project1.id)
        EventUser.objects.create(email='*****@*****.**',
                                 project_id=self.project2.id)

        tagstore.create_group_tag_value(key='sentry:user',
                                        value='email:[email protected]',
                                        group_id=group1.id,
                                        project_id=self.project1.id)
        tagstore.create_group_tag_value(key='sentry:user',
                                        value='email:[email protected]',
                                        group_id=group1.id,
                                        project_id=self.project1.id)
        tagstore.create_group_tag_value(key='sentry:user',
                                        value='email:[email protected]',
                                        group_id=group2.id,
                                        project_id=self.project2.id)
Beispiel #21
0
    def test_simple(self):
        key, value = "foo", u"b\xe4r"

        now = timezone.now()

        project = self.create_project()
        group = self.create_group(project=project)
        tagstore.create_tag_key(project_id=project.id,
                                environment_id=self.environment.id,
                                key=key)
        tagstore.create_tag_value(project_id=project.id,
                                  environment_id=self.environment.id,
                                  key=key,
                                  value=value)
        group_tag_value = tagstore.create_group_tag_value(
            project_id=project.id,
            group_id=group.id,
            environment_id=self.environment.id,
            key=key,
            value=value,
            times_seen=1,
            first_seen=now - timedelta(hours=1),
            last_seen=now,
        )

        self.login_as(user=self.user)

        url = u"/{}/{}/issues/{}/tags/{}/export/?environment={}".format(
            project.organization.slug, project.slug, group.id, key,
            self.environment.name)

        response = self.client.get(url)

        assert response.status_code == 200
        assert response.streaming
        assert response["Content-Type"] == "text/csv"
        rows = list(response.streaming_content)
        for idx, row in enumerate(rows):
            row = row.decode("utf-8")
            assert row.endswith(u"\r\n")
            bits = row[:-2].split(",")
            if idx == 0:
                assert bits == [
                    "value", "times_seen", "last_seen", "first_seen"
                ]
            else:
                assert bits[0] == value
                assert bits[1] == "1"
                assert bits[2] == group_tag_value.last_seen.strftime(
                    "%Y-%m-%dT%H:%M:%S.%fZ")
                assert bits[3] == group_tag_value.first_seen.strftime(
                    "%Y-%m-%dT%H:%M:%S.%fZ")
Beispiel #22
0
    def test_with_first_release(self):
        self.login_as(user=self.user)

        group = self.create_group()
        release = Release.objects.create(
            organization_id=group.project.organization_id, version="1.0")
        release.add_project(group.project)
        tagstore.create_group_tag_value(
            group_id=group.id,
            project_id=group.project_id,
            environment_id=self.environment.id,
            key="sentry:release",
            value=release.version,
        )

        url = u"/api/0/issues/{}/".format(group.id)

        response = self.client.get(url, format="json")

        assert response.status_code == 200, response.content
        assert response.data["id"] == six.text_type(group.id)
        assert response.data["firstRelease"]["version"] == release.version
Beispiel #23
0
    def test_with_first_release(self):
        self.login_as(user=self.user)

        group = self.create_group()
        release = Release.objects.create(
            organization_id=group.project.organization_id,
            version='1.0',
        )
        release.add_project(group.project)
        tagstore.create_group_tag_value(
            group_id=group.id,
            project_id=group.project_id,
            key='sentry:release',
            value=release.version,
        )

        url = '/api/0/issues/{}/'.format(group.id)

        response = self.client.get(url, format='json')

        assert response.status_code == 200, response.content
        assert response.data['id'] == six.text_type(group.id)
        assert response.data['firstRelease']['version'] == release.version
Beispiel #24
0
    def test_with_first_release(self):
        self.login_as(user=self.user)

        group = self.create_group()
        release = Release.objects.create(
            organization_id=group.project.organization_id,
            version='1.0',
        )
        release.add_project(group.project)
        tagstore.create_group_tag_value(
            group_id=group.id,
            project_id=group.project_id,
            key='sentry:release',
            value=release.version,
        )

        url = '/api/0/issues/{}/'.format(group.id)

        response = self.client.get(url, format='json')

        assert response.status_code == 200, response.content
        assert response.data['id'] == six.text_type(group.id)
        assert response.data['firstRelease']['version'] == release.version
Beispiel #25
0
    def test_user_tag(self):
        project = self.create_project()
        group = self.create_group(project=project)
        euser = EventUser.objects.create(
            project_id=project.id,
            ident="1",
            email="*****@*****.**",
            username="******",
            ip_address="127.0.0.1",
        )
        tagstore.create_tag_key(project_id=project.id,
                                environment_id=None,
                                key="sentry:user")
        tagstore.create_tag_value(project_id=project.id,
                                  environment_id=None,
                                  key="sentry:user",
                                  value=euser.tag_value)
        tagstore.create_group_tag_value(
            project_id=project.id,
            group_id=group.id,
            environment_id=None,
            key="sentry:user",
            value=euser.tag_value,
        )

        self.login_as(user=self.user)

        url = u"/api/0/issues/{}/tags/user/values/".format(group.id)

        response = self.client.get(url)

        assert response.status_code == 200
        assert len(response.data) == 1

        assert response.data[0]["email"] == "*****@*****.**"
        assert response.data[0]["value"] == euser.tag_value
    def setUp(self):
        super(OrganizationUserIssuesTest, self).setUp()
        self.org = self.create_organization()
        self.org.flags.allow_joinleave = False
        self.org.save()
        self.team1 = self.create_team(organization=self.org)
        self.team2 = self.create_team(organization=self.org)
        self.project1 = self.create_project(team=self.team1)
        self.project2 = self.create_project(team=self.team2)
        self.group1 = self.create_group(
            project=self.project1,
            last_seen=timezone.now() - timedelta(minutes=1),
        )
        self.group2 = self.create_group(
            project=self.project2,
        )

        self.euser1 = EventUser.objects.create(email='*****@*****.**', project_id=self.project1.id)
        self.euser2 = EventUser.objects.create(email='*****@*****.**', project_id=self.project1.id)
        self.euser3 = EventUser.objects.create(email='*****@*****.**', project_id=self.project2.id)

        tagstore.create_group_tag_value(
            key='sentry:user',
            value=self.euser1.tag_value,
            group_id=self.group1.id,
            project_id=self.project1.id,
            environment_id=self.environment.id,
        )
        tagstore.create_group_tag_value(
            key='sentry:user',
            value=self.euser2.tag_value,
            group_id=self.group1.id,
            project_id=self.project1.id,
            environment_id=self.environment.id,
        )
        tagstore.create_group_tag_value(
            key='sentry:user',
            value=self.euser3.tag_value,
            group_id=self.group2.id,
            project_id=self.project2.id,
            environment_id=self.environment.id,
        )
        self.path = reverse(
            'sentry-api-0-organization-user-issues', args=[
                self.org.slug,
                self.euser1.id,
            ]
        )
    def setUp(self):
        super(OrganizationUserIssuesTest, self).setUp()
        self.org = self.create_organization()
        self.org.flags.allow_joinleave = False
        self.org.save()
        self.team1 = self.create_team(organization=self.org)
        self.team2 = self.create_team(organization=self.org)
        self.project1 = self.create_project(teams=[self.team1])
        self.project2 = self.create_project(teams=[self.team2])
        self.group1 = self.create_group(
            project=self.project1,
            last_seen=timezone.now() - timedelta(minutes=1),
        )
        self.group2 = self.create_group(
            project=self.project2,
        )

        self.euser1 = EventUser.objects.create(email='*****@*****.**', project_id=self.project1.id)
        self.euser2 = EventUser.objects.create(email='*****@*****.**', project_id=self.project1.id)
        self.euser3 = EventUser.objects.create(email='*****@*****.**', project_id=self.project2.id)

        tagstore.create_group_tag_value(
            key='sentry:user',
            value=self.euser1.tag_value,
            group_id=self.group1.id,
            project_id=self.project1.id,
            environment_id=None,
        )
        tagstore.create_group_tag_value(
            key='sentry:user',
            value=self.euser2.tag_value,
            group_id=self.group1.id,
            project_id=self.project1.id,
            environment_id=None,
        )
        tagstore.create_group_tag_value(
            key='sentry:user',
            value=self.euser3.tag_value,
            group_id=self.group2.id,
            project_id=self.project2.id,
            environment_id=None,
        )
        self.path = reverse(
            'sentry-api-0-organization-user-issues', args=[
                self.org.slug,
                self.euser1.id,
            ]
        )
    def setUp(self):
        super(OrganizationUserIssuesSearchTest, self).setUp()
        self.org = self.create_organization()
        self.org.flags.allow_joinleave = False
        self.org.save()
        self.team1 = self.create_team(organization=self.org)
        self.team2 = self.create_team(organization=self.org)
        self.project1 = self.create_project(teams=[self.team1])
        self.project2 = self.create_project(teams=[self.team2])
        group1 = self.create_group(
            project=self.project1, last_seen=timezone.now() - timedelta(minutes=1)
        )
        group2 = self.create_group(project=self.project2)

        EventUser.objects.create(email='*****@*****.**', project_id=self.project1.id)
        EventUser.objects.create(email='*****@*****.**', project_id=self.project1.id)
        EventUser.objects.create(email='*****@*****.**', project_id=self.project2.id)

        tagstore.create_group_tag_value(
            key='sentry:user',
            value='email:[email protected]',
            group_id=group1.id,
            environment_id=None,
            project_id=self.project1.id
        )
        tagstore.create_group_tag_value(
            key='sentry:user',
            value='email:[email protected]',
            group_id=group1.id,
            environment_id=None,
            project_id=self.project1.id
        )
        tagstore.create_group_tag_value(
            key='sentry:user',
            value='email:[email protected]',
            group_id=group2.id,
            environment_id=None,
            project_id=self.project2.id
        )
Beispiel #29
0
    def setUp(self):
        self.backend = self.create_backend()

        self.group1 = self.create_group(
            project=self.project,
            checksum='a' * 32,
            message='foo',
            times_seen=5,
            status=GroupStatus.UNRESOLVED,
            last_seen=datetime(2013, 8, 13, 3, 8, 24, 880386),
            first_seen=datetime(2013, 7, 13, 3, 8, 24, 880386),
            score=ScoreClause.calculate(
                times_seen=5,
                last_seen=datetime(2013, 8, 13, 3, 8, 24, 880386),
            ),
        )

        self.event1 = self.create_event(event_id='a' * 32,
                                        group=self.group1,
                                        datetime=datetime(
                                            2013, 7, 13, 3, 8, 24, 880386),
                                        tags={
                                            'server': 'example.com',
                                            'environment': 'production',
                                        })
        self.event3 = self.create_event(event_id='c' * 32,
                                        group=self.group1,
                                        datetime=datetime(
                                            2013, 8, 13, 3, 8, 24, 880386),
                                        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=datetime(2013, 7, 14, 3, 8, 24, 880386),
            first_seen=datetime(2013, 7, 14, 3, 8, 24, 880386),
            score=ScoreClause.calculate(
                times_seen=10,
                last_seen=datetime(2013, 7, 14, 3, 8, 24, 880386),
            ),
        )

        self.event2 = self.create_event(event_id='b' * 32,
                                        group=self.group2,
                                        datetime=datetime(
                                            2013, 7, 14, 3, 8, 24, 880386),
                                        tags={
                                            'server': 'example.com',
                                            'environment': 'staging',
                                            'url': 'http://example.com',
                                        })

        for key, value in self.event1.data['tags']:
            tagstore.create_group_tag_value(
                project_id=self.group1.project_id,
                group_id=self.group1.id,
                environment_id=None,
                key=key,
                value=value,
            )
        for key, value in self.event2.data['tags']:
            tagstore.create_group_tag_value(
                project_id=self.group2.project_id,
                group_id=self.group2.id,
                environment_id=None,
                key=key,
                value=value,
            )

        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,
        )
Beispiel #30
0
    def test_merge_updates_tag_values_seen(self):
        project = self.create_project()
        target, other = [self.create_group(project) for _ in range(0, 2)]

        data = {
            'sentry:user': {
                'id:1': {
                    target: 2,
                },
                'id:2': {
                    other: 3,
                },
                'id:3': {
                    target: 1,
                    other: 2,
                },
            },
            'key': {
                'foo': {
                    other: 3,
                },
            },
        }

        input_group_tag_keys = defaultdict(int)  # [(group, key)] = values_seen
        input_group_tag_values = defaultdict(int)  # [(group, key, value)] = times_seen
        output_group_tag_keys = defaultdict(int)  # [key] = values_seen
        output_group_tag_values = defaultdict(int)  # [(key, value)] = times_seen

        for key, values in data.items():
            output_group_tag_keys[key] = len(values)

            for value, groups in values.items():
                for group, count in groups.items():
                    input_group_tag_keys[(group, key)] += 1
                    input_group_tag_values[(group, key, value)] += count
                    output_group_tag_values[(key, value)] += count

        for ((group, key), values_seen) in input_group_tag_keys.items():
            tagstore.create_group_tag_key(
                project_id=project.id,
                group_id=group.id,
                environment_id=self.environment.id,
                key=key,
                values_seen=values_seen,
            )

        for ((group, key, value), times_seen) in input_group_tag_values.items():
            tagstore.create_group_tag_value(
                project_id=project.id,
                group_id=group.id,
                environment_id=self.environment.id,
                key=key,
                value=value,
                times_seen=times_seen,
            )

        with self.tasks():
            merge_group(other.id, target.id)

        assert not Group.objects.filter(id=other.id).exists()
        assert len(
            tagstore.get_group_tag_keys(
                other.project_id,
                other.id,
                environment_id=self.environment.id)) == 0
        assert len(
            GroupTagValue.objects.filter(
                project_id=other.project_id,
                group_id=other.id,
            )) == 0

        for key, values_seen in output_group_tag_keys.items():
            assert tagstore.get_group_tag_key(
                target.project_id, target.id, environment_id=self.environment.id, key=key).values_seen == values_seen

        for (key, value), times_seen in output_group_tag_values.items():
            assert tagstore.get_group_tag_value(
                project_id=target.project_id,
                group_id=target.id,
                environment_id=self.environment.id,
                key=key,
                value=value,
            ).times_seen == times_seen
Beispiel #31
0
    def test_simple(self):
        from sentry.tagstore.tasks import delete_tag_key as delete_tag_key_task

        team = self.create_team(name='test', slug='test')
        project = self.create_project(teams=[team], name='test1', slug='test1')
        group = self.create_group(project=project)
        key = 'foo'
        value = 'bar'
        tk = tagstore.create_tag_key(
            key=key,
            project_id=project.id,
            environment_id=self.environment.id)
        tv = tagstore.create_tag_value(
            key=key,
            value=value,
            project_id=project.id,
            environment_id=self.environment.id)
        tagstore.create_group_tag_key(
            key=key,
            group_id=group.id,
            project_id=project.id,
            environment_id=self.environment.id)
        tagstore.create_group_tag_value(
            key=key, value=value, group_id=group.id, project_id=project.id, environment_id=self.environment.id
        )
        tagstore.create_event_tags(
            group_id=group.id,
            project_id=project.id,
            environment_id=self.environment.id,
            event_id=1,
            tags=[
                (tk.key, tv.value),
            ],
        )

        project2 = self.create_project(teams=[team], name='test2')
        env2 = self.create_environment(project=project2)
        group2 = self.create_group(project=project2)
        tk2 = tagstore.create_tag_key(
            key=key,
            project_id=project2.id,
            environment_id=env2.id,
        )
        tv2 = tagstore.create_tag_value(
            project_id=project2.id,
            environment_id=env2.id,
            key=key,
            value=value
        )
        tagstore.create_group_tag_key(
            key=key,
            group_id=group2.id,
            project_id=project2.id,
            environment_id=env2.id,
        )
        tagstore.create_group_tag_value(
            key=key,
            value=value,
            group_id=group2.id,
            project_id=project2.id,
            environment_id=env2.id,
        )
        tagstore.create_event_tags(
            group_id=group2.id,
            project_id=project2.id,
            environment_id=env2.id,
            event_id=1,
            tags=[
                (tk2.key, tv2.value)
            ],
        )

        with self.tasks():
            from sentry.tagstore.models import TagKey
            delete_tag_key_task(object_id=tk.id, model=TagKey)

            try:
                tagstore.get_group_tag_value(group.project_id, group.id, None, key, value)
                assert False  # verify exception thrown
            except tagstore.GroupTagValueNotFound:
                pass
            try:
                tagstore.get_group_tag_key(group.project_id, group.id, None, key)
                assert False  # verify exception thrown
            except tagstore.GroupTagKeyNotFound:
                pass
            try:
                tagstore.get_tag_value(project.id, None, key, value)
                assert False  # verify exception thrown
            except tagstore.TagValueNotFound:
                pass
            try:
                tagstore.get_tag_key(project.id, None, key)
                assert False  # verify exception thrown
            except tagstore.TagKeyNotFound:
                pass

        assert tagstore.get_tag_key(project2.id, env2.id, key) is not None
        assert tagstore.get_group_tag_key(group2.project_id, group2.id, env2.id, key) is not None
        assert tagstore.get_group_tag_value(
            group2.project_id, group2.id, env2.id, key, value) is not None
        assert EventTag.objects.filter(key_id=tk2.id).exists()
Beispiel #32
0
    def test_simple(self):
        from sentry.tagstore.tasks import delete_tag_key as delete_tag_key_task

        team = self.create_team(name='test', slug='test')
        project = self.create_project(teams=[team], name='test1', slug='test1')
        group = self.create_group(project=project)
        key = 'foo'
        value = 'bar'
        tk = tagstore.create_tag_key(key=key,
                                     project_id=project.id,
                                     environment_id=self.environment.id)
        tv = tagstore.create_tag_value(key=key,
                                       value=value,
                                       project_id=project.id,
                                       environment_id=self.environment.id)
        tagstore.create_group_tag_key(key=key,
                                      group_id=group.id,
                                      project_id=project.id,
                                      environment_id=self.environment.id)
        tagstore.create_group_tag_value(key=key,
                                        value=value,
                                        group_id=group.id,
                                        project_id=project.id,
                                        environment_id=self.environment.id)
        tagstore.create_event_tags(
            group_id=group.id,
            project_id=project.id,
            environment_id=self.environment.id,
            event_id=1,
            tags=[
                (tk.key, tv.value),
            ],
        )

        project2 = self.create_project(teams=[team], name='test2')
        env2 = self.create_environment(project=project2)
        group2 = self.create_group(project=project2)
        tk2 = tagstore.create_tag_key(
            key=key,
            project_id=project2.id,
            environment_id=env2.id,
        )
        tv2 = tagstore.create_tag_value(project_id=project2.id,
                                        environment_id=env2.id,
                                        key=key,
                                        value=value)
        tagstore.create_group_tag_key(
            key=key,
            group_id=group2.id,
            project_id=project2.id,
            environment_id=env2.id,
        )
        tagstore.create_group_tag_value(
            key=key,
            value=value,
            group_id=group2.id,
            project_id=project2.id,
            environment_id=env2.id,
        )
        tagstore.create_event_tags(
            group_id=group2.id,
            project_id=project2.id,
            environment_id=env2.id,
            event_id=1,
            tags=[(tk2.key, tv2.value)],
        )

        with self.tasks():
            from sentry.tagstore.models import TagKey
            delete_tag_key_task(object_id=tk.id, model=TagKey)

            try:
                tagstore.get_group_tag_value(group.project_id, group.id, None,
                                             key, value)
                assert False  # verify exception thrown
            except tagstore.GroupTagValueNotFound:
                pass
            try:
                tagstore.get_group_tag_key(group.project_id, group.id, None,
                                           key)
                assert False  # verify exception thrown
            except tagstore.GroupTagKeyNotFound:
                pass
            try:
                tagstore.get_tag_value(project.id, None, key, value)
                assert False  # verify exception thrown
            except tagstore.TagValueNotFound:
                pass
            try:
                tagstore.get_tag_key(project.id, None, key)
                assert False  # verify exception thrown
            except tagstore.TagKeyNotFound:
                pass

        assert tagstore.get_tag_key(project2.id, env2.id, key) is not None
        assert tagstore.get_group_tag_key(group2.project_id, group2.id,
                                          env2.id, key) is not None
        assert tagstore.get_group_tag_value(group2.project_id, group2.id,
                                            env2.id, key, value) is not None
        assert EventTag.objects.filter(key_id=tk2.id).exists()
Beispiel #33
0
    def setUp(self):
        self.backend = self.create_backend()

        self.project1 = self.create_project(name='foo')
        self.project2 = self.create_project(name='bar')

        self.group1 = self.create_group(
            project=self.project1,
            checksum='a' * 32,
            message='foo',
            times_seen=5,
            status=GroupStatus.UNRESOLVED,
            last_seen=datetime(2013, 8, 13, 3, 8, 24, 880386),
            first_seen=datetime(2013, 7, 13, 3, 8, 24, 880386),
        )
        self.event1 = self.create_event(
            event_id='a' * 32,
            group=self.group1,
            datetime=datetime(2013, 7, 13, 3, 8, 24, 880386),
            tags={
                'server': 'example.com',
                'env': 'production',
            }
        )
        self.event3 = self.create_event(
            event_id='c' * 32,
            group=self.group1,
            datetime=datetime(2013, 8, 13, 3, 8, 24, 880386),
            tags={
                'server': 'example.com',
                'env': 'production',
            }
        )

        self.group2 = self.create_group(
            project=self.project1,
            checksum='b' * 32,
            message='bar',
            times_seen=10,
            status=GroupStatus.RESOLVED,
            last_seen=datetime(2013, 7, 14, 3, 8, 24, 880386),
            first_seen=datetime(2013, 7, 14, 3, 8, 24, 880386),
        )
        self.event2 = self.create_event(
            event_id='b' * 32,
            group=self.group2,
            datetime=datetime(2013, 7, 14, 3, 8, 24, 880386),
            tags={
                'server': 'example.com',
                'env': 'staging',
                'url': 'http://example.com',
            }
        )

        for key, value in self.event1.data['tags']:
            tagstore.create_group_tag_value(
                project_id=self.group1.project_id,
                group_id=self.group1.id,
                key=key,
                value=value,
            )
        for key, value in self.event2.data['tags']:
            tagstore.create_group_tag_value(
                project_id=self.group2.project_id,
                group_id=self.group2.id,
                key=key,
                value=value,
            )

        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,
        )
Beispiel #34
0
    def test_simple(self):
        team = self.create_team(name='test', slug='test')
        project = self.create_project(team=team, name='test1', slug='test1')
        group = self.create_group(project=project)
        key = 'foo'
        value = 'bar'
        tk = tagstore.create_tag_key(key=key,
                                     project_id=project.id,
                                     environment_id=self.environment.id)
        tagstore.create_tag_value(key=key,
                                  value=value,
                                  project_id=project.id,
                                  environment_id=self.environment.id)
        tagstore.create_group_tag_key(key=key,
                                      group_id=group.id,
                                      project_id=project.id,
                                      environment_id=self.environment.id)
        tagstore.create_group_tag_value(key=key,
                                        value=value,
                                        group_id=group.id,
                                        project_id=project.id,
                                        environment_id=self.environment.id)
        tagstore.create_event_tags(group_id=group.id,
                                   project_id=project.id,
                                   event_id=1,
                                   environment_id=self.environment.id,
                                   tags=[
                                       (tk.id, 1),
                                   ])

        project2 = self.create_project(team=team, name='test2')
        group2 = self.create_group(project=project2)
        tk2 = tagstore.create_tag_key(project2.id, self.environment.id, key)
        tagstore.create_group_tag_key(key=key,
                                      group_id=group2.id,
                                      project_id=project2.id,
                                      environment_id=self.environment.id)
        tagstore.create_group_tag_value(key=key,
                                        value=value,
                                        group_id=group2.id,
                                        project_id=project2.id,
                                        environment_id=self.environment.id)
        tagstore.create_event_tags(
            group_id=group2.id,
            project_id=project.id,
            environment_id=self.environment.id,
            event_id=1,
            tags=[
                (tk2.id, 1),
            ],
        )

        deletion = ScheduledDeletion.schedule(tk, days=0)
        deletion.update(in_progress=True)

        with self.tasks():
            run_deletion(deletion.id)

        try:
            tagstore.get_group_tag_value(group.project_id, group.id, None, key,
                                         value)
            assert False  # verify exception thrown
        except tagstore.GroupTagValueNotFound:
            pass
        try:
            tagstore.get_group_tag_key(group.project_id, group.id, None, key)
            assert False  # verify exception thrown
        except tagstore.GroupTagKeyNotFound:
            pass
        try:
            tagstore.get_tag_value(project.id, None, key, value)
            assert False  # verify exception thrown
        except tagstore.TagValueNotFound:
            pass
        try:
            tagstore.get_tag_key(project.id, None, key)
            assert False  # verify exception thrown
        except tagstore.TagKeyNotFound:
            pass

        assert tagstore.get_tag_key(project2.id, None, key) is not None
        assert tagstore.get_group_tag_key(group2.project_id, group2.id, None,
                                          key) is not None
        assert tagstore.get_group_tag_value(group2.project_id, group2.id, None,
                                            key, value) is not None
        assert EventTag.objects.filter(key_id=tk.id).exists()
        assert EventTag.objects.filter(key_id=tk2.id).exists()
Beispiel #35
0
    def test_simple(self):
        team = self.create_team(name="test", slug="test")
        project = self.create_project(teams=[team], name="test1", slug="test1")
        group = self.create_group(project=project)
        key = "foo"
        value = "bar"
        tk = tagstore.create_tag_key(
            key=key, project_id=project.id, environment_id=self.environment.id
        )
        tv = tagstore.create_tag_value(
            key=key, value=value, project_id=project.id, environment_id=self.environment.id
        )
        tagstore.create_group_tag_key(
            key=key, group_id=group.id, project_id=project.id, environment_id=self.environment.id
        )
        tagstore.create_group_tag_value(
            key=key,
            value=value,
            group_id=group.id,
            project_id=project.id,
            environment_id=self.environment.id,
        )
        tagstore.create_event_tags(
            group_id=group.id,
            project_id=project.id,
            event_id=1,
            environment_id=self.environment.id,
            tags=[(tk.key, tv.value)],
        )

        project2 = self.create_project(teams=[team], name="test2")
        env2 = self.create_environment(project=project2)
        group2 = self.create_group(project=project2)
        tk2 = tagstore.create_tag_key(project2.id, env2.id, key)
        tv2 = tagstore.create_tag_value(
            key=key, value=value, project_id=project2.id, environment_id=env2.id
        )
        tagstore.create_group_tag_key(
            key=key, group_id=group2.id, project_id=project2.id, environment_id=env2.id
        )
        tagstore.create_group_tag_value(
            key=key, value=value, group_id=group2.id, project_id=project2.id, environment_id=env2.id
        )
        tagstore.create_event_tags(
            group_id=group2.id,
            project_id=project2.id,
            environment_id=env2.id,
            event_id=1,
            tags=[(tk2.key, tv2.value)],
        )

        deletion = ScheduledDeletion.schedule(tk, days=0)
        deletion.update(in_progress=True)

        with self.tasks():
            run_deletion(deletion.id)

        try:
            tagstore.get_group_tag_value(
                group.project_id, group.id, self.environment.id, key, value
            )
            assert False  # verify exception thrown
        except tagstore.GroupTagValueNotFound:
            pass
        try:
            tagstore.get_group_tag_key(group.project_id, group.id, self.environment.id, key)
            assert False  # verify exception thrown
        except tagstore.GroupTagKeyNotFound:
            pass
        try:
            tagstore.get_tag_value(project.id, self.environment.id, key, value)
            assert False  # verify exception thrown
        except tagstore.TagValueNotFound:
            pass
        try:
            tagstore.get_tag_key(project.id, self.environment.id, key)
            assert False  # verify exception thrown
        except tagstore.TagKeyNotFound:
            pass

        assert tagstore.get_tag_key(project2.id, env2.id, key) is not None
        assert tagstore.get_group_tag_key(group2.project_id, group2.id, env2.id, key) is not None
        assert (
            tagstore.get_group_tag_value(group2.project_id, group2.id, env2.id, key, value)
            is not None
        )
        assert EventTag.objects.filter(key_id=tk2.id).exists()
Beispiel #36
0
    def test_simple(self):
        from sentry.tagstore.legacy.tasks import delete_tag_key

        team = self.create_team(name='test', slug='test')
        project = self.create_project(team=team, name='test1', slug='test1')
        group = self.create_group(project=project)
        key = 'foo'
        value = 'bar'
        tk = tagstore.create_tag_key(
            key=key,
            project_id=project.id,
            environment_id=self.environment.id)
        tagstore.create_tag_value(
            key=key,
            value=value,
            project_id=project.id,
            environment_id=self.environment.id)
        tagstore.create_group_tag_key(
            key=key,
            group_id=group.id,
            project_id=project.id,
            environment_id=self.environment.id)
        tagstore.create_group_tag_value(
            key=key, value=value, group_id=group.id, project_id=project.id, environment_id=self.environment.id
        )
        tagstore.create_event_tags(
            group_id=group.id,
            project_id=project.id,
            event_id=1,
            tags=[
                (tk.id, 1),
            ],
        )

        project2 = self.create_project(team=team, name='test2')
        group2 = self.create_group(project=project2)
        tk2 = tagstore.create_tag_key(key=key, project_id=project2.id,
                                      environment_id=self.environment.id)
        tagstore.create_group_tag_key(
            key=key,
            group_id=group2.id,
            project_id=project2.id,
            environment_id=self.environment.id)
        tagstore.create_group_tag_value(
            key=key, value=value, group_id=group2.id, project_id=project2.id, environment_id=self.environment.id
        )
        tagstore.create_event_tags(
            group_id=group2.id,
            project_id=project.id,
            event_id=1,
            tags=[
                (tk2.id, 1)
            ],
        )

        with self.tasks():
            delete_tag_key(object_id=tk.id)

            assert tagstore.get_event_tag_qs(key_id=tk.id).exists()
            try:
                tagstore.get_group_tag_value(group.id, key, value)
                assert False  # verify exception thrown
            except tagstore.GroupTagValueNotFound:
                pass
            try:
                tagstore.get_group_tag_key(group.id, key)
                assert False  # verify exception thrown
            except tagstore.GroupTagKeyNotFound:
                pass
            try:
                tagstore.get_tag_value(project.id, key, value)
                assert False  # verify exception thrown
            except tagstore.TagValueNotFound:
                pass
            try:
                tagstore.get_tag_key(project.id, key)
                assert False  # verify exception thrown
            except tagstore.TagKeyNotFound:
                pass

        assert tagstore.get_tag_key(project2.id, key) is not None
        assert tagstore.get_group_tag_key(group2.id, key) is not None
        assert tagstore.get_group_tag_value(group2.id, key, value) is not None
        assert tagstore.get_event_tag_qs(key_id=tk2.id).exists()
Beispiel #37
0
    def test_simple(self):
        from sentry.tagstore.legacy.tasks import delete_tag_key

        team = self.create_team(name='test', slug='test')
        project = self.create_project(team=team, name='test1', slug='test1')
        group = self.create_group(project=project)
        key = 'foo'
        value = 'bar'
        tk = tagstore.create_tag_key(key=key, project_id=project.id)
        tagstore.create_tag_value(key=key, value=value, project_id=project.id)
        tagstore.create_group_tag_key(key=key,
                                      group_id=group.id,
                                      project_id=project.id)
        tagstore.create_group_tag_value(key=key,
                                        value=value,
                                        group_id=group.id,
                                        project_id=project.id)
        tagstore.create_event_tag(
            key_id=tk.id,
            group_id=group.id,
            value_id=1,
            project_id=project.id,
            event_id=1,
        )

        project2 = self.create_project(team=team, name='test2')
        group2 = self.create_group(project=project2)
        tk2 = tagstore.create_tag_key(key=key, project_id=project2.id)
        tagstore.create_group_tag_key(key=key,
                                      group_id=group2.id,
                                      project_id=project2.id)
        tagstore.create_group_tag_value(key=key,
                                        value=value,
                                        group_id=group2.id,
                                        project_id=project2.id)
        tagstore.create_event_tag(
            key_id=tk2.id,
            group_id=group2.id,
            value_id=1,
            project_id=project.id,
            event_id=1,
        )

        with self.tasks():
            delete_tag_key(object_id=tk.id)

            try:
                tagstore.get_group_tag_value(group.id, key, value)
                assert False  # verify exception thrown
            except tagstore.GroupTagValueNotFound:
                pass
            try:
                tagstore.get_group_tag_key(group.id, key)
                assert False  # verify exception thrown
            except tagstore.GroupTagKeyNotFound:
                pass
            try:
                tagstore.get_tag_value(project.id, key, value)
                assert False  # verify exception thrown
            except tagstore.TagValueNotFound:
                pass
            assert not tagstore.get_event_tag_qs(key_id=tk.id).exists()
            try:
                tagstore.get_tag_key(project.id, key)
                assert False  # verify exception thrown
            except tagstore.TagKeyNotFound:
                pass

        assert tagstore.get_tag_key(project2.id, key) is not None
        assert tagstore.get_group_tag_key(group2.id, key) is not None
        assert tagstore.get_group_tag_value(group2.id, key, value) is not None
        assert tagstore.get_event_tag_qs(key_id=tk2.id).exists()
    def test_simple(self):
        key, value = "foo", u"b\xe4r"
        project = self.create_project()

        if settings.SENTRY_TAGSTORE in [
                "sentry.tagstore.snuba.SnubaCompatibilityTagStorage",
                "sentry.tagstore.snuba.SnubaTagStorage",
        ]:
            event_timestamp = iso_format(before_now(seconds=1))

            event = self.store_event(
                data={
                    "tags": {
                        key: value
                    },
                    "timestamp": event_timestamp,
                    "environment": self.environment.name,
                },
                project_id=project.id,
                assert_no_errors=False,
            )

            group = event.group

            first_seen = datetime.strptime(
                event_timestamp,
                "%Y-%m-%dT%H:%M:%S").strftime("%Y-%m-%dT%H:%M:%S.%fZ")
            last_seen = first_seen

        else:
            from django.utils import timezone
            from sentry import tagstore

            now = timezone.now()

            group = self.create_group(project=project)
            tagstore.create_tag_key(project_id=project.id,
                                    environment_id=self.environment.id,
                                    key=key)
            tagstore.create_tag_value(project_id=project.id,
                                      environment_id=self.environment.id,
                                      key=key,
                                      value=value)
            group_tag_value = tagstore.create_group_tag_value(
                project_id=project.id,
                group_id=group.id,
                environment_id=self.environment.id,
                key=key,
                value=value,
                times_seen=1,
                first_seen=now - timedelta(hours=1),
                last_seen=now,
            )

            first_seen = group_tag_value.first_seen.strftime(
                "%Y-%m-%dT%H:%M:%S.%fZ")
            last_seen = group_tag_value.last_seen.strftime(
                "%Y-%m-%dT%H:%M:%S.%fZ")

        self.login_as(user=self.user)

        url = u"/{}/{}/issues/{}/tags/{}/export/?environment={}".format(
            project.organization.slug, project.slug, group.id, key,
            self.environment.name)

        response = self.client.get(url)

        assert response.status_code == 200
        assert response.streaming
        assert response["Content-Type"] == "text/csv"
        rows = list(response.streaming_content)
        for idx, row in enumerate(rows):
            row = row.decode("utf-8")
            assert row.endswith(u"\r\n")
            bits = row[:-2].split(",")
            if idx == 0:
                assert bits == [
                    "value", "times_seen", "last_seen", "first_seen"
                ]
            else:
                assert bits[0] == value
                assert bits[1] == "1"
                assert bits[2] == last_seen
                assert bits[3] == first_seen
Beispiel #39
0
    def test_merge_updates_tag_values_seen(self):
        project = self.create_project()
        target, other = [self.create_group(project) for _ in range(0, 2)]

        data = {
            'sentry:user': {
                'id:1': {
                    target: 2,
                },
                'id:2': {
                    other: 3,
                },
                'id:3': {
                    target: 1,
                    other: 2,
                },
            },
            'key': {
                'foo': {
                    other: 3,
                },
            },
        }

        input_group_tag_keys = defaultdict(int)  # [(group, key)] = values_seen
        input_group_tag_values = defaultdict(
            int)  # [(group, key, value)] = times_seen
        output_group_tag_keys = defaultdict(int)  # [key] = values_seen
        output_group_tag_values = defaultdict(
            int)  # [(key, value)] = times_seen

        for key, values in data.items():
            output_group_tag_keys[key] = len(values)

            for value, groups in values.items():
                for group, count in groups.items():
                    input_group_tag_keys[(group, key)] += 1
                    input_group_tag_values[(group, key, value)] += count
                    output_group_tag_values[(key, value)] += count

        for ((group, key), values_seen) in input_group_tag_keys.items():
            tagstore.create_group_tag_key(
                project_id=project.id,
                group_id=group.id,
                environment_id=self.environment.id,
                key=key,
                values_seen=values_seen,
            )

        for ((group, key, value),
             times_seen) in input_group_tag_values.items():
            tagstore.create_group_tag_value(
                project_id=project.id,
                group_id=group.id,
                environment_id=self.environment.id,
                key=key,
                value=value,
                times_seen=times_seen,
            )

        with self.tasks():
            merge_group(other.id, target.id)

        assert not Group.objects.filter(id=other.id).exists()
        assert len(
            tagstore.get_group_tag_keys(
                other.project_id, other.id,
                environment_id=self.environment.id)) == 0
        assert len(
            GroupTagValue.objects.filter(
                project_id=other.project_id,
                group_id=other.id,
            )) == 0

        for key, values_seen in output_group_tag_keys.items():
            assert tagstore.get_group_tag_key(
                target.project_id,
                target.id,
                environment_id=self.environment.id,
                key=key).values_seen == values_seen

        for (key, value), times_seen in output_group_tag_values.items():
            assert tagstore.get_group_tag_value(
                project_id=target.project_id,
                group_id=target.id,
                environment_id=self.environment.id,
                key=key,
                value=value,
            ).times_seen == times_seen
Beispiel #40
0
    def test_simple(self):
        team = self.create_team(name='test', slug='test')
        project = self.create_project(team=team, name='test1', slug='test1')
        group = self.create_group(project=project)
        key = 'foo'
        value = 'bar'
        tk = tagstore.create_tag_key(
            key=key,
            project_id=project.id,
            environment_id=self.environment.id)
        tagstore.create_tag_value(
            key=key,
            value=value,
            project_id=project.id,
            environment_id=self.environment.id)
        tagstore.create_group_tag_key(
            key=key,
            group_id=group.id,
            project_id=project.id,
            environment_id=self.environment.id)
        tagstore.create_group_tag_value(
            key=key, value=value, group_id=group.id, project_id=project.id, environment_id=self.environment.id
        )
        tagstore.create_event_tags(
            group_id=group.id,
            project_id=project.id,
            event_id=1,
            tags=[
                (tk.id, 1),
            ]
        )

        project2 = self.create_project(team=team, name='test2')
        group2 = self.create_group(project=project2)
        tk2 = tagstore.create_tag_key(project2.id, self.environment.id, key)
        tagstore.create_group_tag_key(
            key=key,
            group_id=group2.id,
            project_id=project2.id,
            environment_id=self.environment.id)
        tagstore.create_group_tag_value(
            key=key, value=value, group_id=group2.id, project_id=project2.id, environment_id=self.environment.id
        )
        tagstore.create_event_tags(
            group_id=group2.id,
            project_id=project.id,
            event_id=1,
            tags=[
                (tk2.id, 1),
            ],
        )

        deletion = ScheduledDeletion.schedule(tk, days=0)
        deletion.update(in_progress=True)

        with self.tasks():
            run_deletion(deletion.id)

        try:
            tagstore.get_group_tag_value(group.id, key, value)
            assert False  # verify exception thrown
        except tagstore.GroupTagValueNotFound:
            pass
        try:
            tagstore.get_group_tag_key(group.id, key)
            assert False  # verify exception thrown
        except tagstore.GroupTagKeyNotFound:
            pass
        try:
            tagstore.get_tag_value(project.id, key, value)
            assert False  # verify exception thrown
        except tagstore.TagValueNotFound:
            pass
        try:
            tagstore.get_tag_key(project.id, key)
            assert False  # verify exception thrown
        except tagstore.TagKeyNotFound:
            pass

        assert tagstore.get_tag_key(project2.id, key) is not None
        assert tagstore.get_group_tag_key(group2.id, key) is not None
        assert tagstore.get_group_tag_value(group2.id, key, value) is not None
        assert tagstore.get_event_tag_qs(key_id=tk.id).exists()
        assert tagstore.get_event_tag_qs(key_id=tk2.id).exists()