예제 #1
0
    def get_tags(self):
        from sentry.models import GroupTagKey
        if not hasattr(self, '_tag_cache'):
            group_tags = GroupTagKey.objects.filter(
                group_id=self.id,
                project_id=self.project_id,
            )

            group_tags = list(group_tags.values_list('key', flat=True))

            tag_keys = dict(
                (t.key, t)
                for t in tagstore.get_tag_keys(self.project_id, group_tags))

            results = []
            for key in group_tags:
                try:
                    tag_key = tag_keys[key]
                except KeyError:
                    label = key.replace('_', ' ').title()
                else:
                    label = tag_key.get_label()

                results.append({
                    'key': key,
                    'label': label,
                })

            self._tag_cache = sorted(results, key=lambda x: x['label'])

        return self._tag_cache
예제 #2
0
    def get(self, request, project):
        try:
            environment_id = self._get_environment_id_from_request(
                request, project.organization_id)
        except Environment.DoesNotExist:
            tag_keys = []
        else:
            tag_keys = sorted(
                tagstore.get_tag_keys(
                    project.id,
                    environment_id,
                    # We might be able to stop including these values, but this
                    # is a pretty old endpoint, so concerned about breaking
                    # existing api consumers.
                    include_values_seen=True,
                ),
                key=lambda x: x.key)

        data = []
        for tag_key in tag_keys:
            data.append({
                'key': tagstore.get_standardized_key(tag_key.key),
                'name': tagstore.get_tag_key_label(tag_key.key),
                'uniqueValues': tag_key.values_seen,
                'canDelete': tag_key.key not in PROTECTED_TAG_KEYS,
            })

        return Response(data)
예제 #3
0
    def get(self, request, project):
        try:
            environment_id = self._get_environment_id_from_request(request, project.organization_id)
        except Environment.DoesNotExist:
            tag_keys = []
        else:
            tag_keys = sorted(
                tagstore.get_tag_keys(
                    project.id,
                    environment_id,
                ),
                key=lambda x: x.key)

        data = []
        for tag_key in tag_keys:
            data.append(
                {
                    'id': six.text_type(tag_key.id),
                    'key': tagstore.get_standardized_key(tag_key.key),
                    'name': tagstore.get_tag_key_label(tag_key.key),
                    'uniqueValues': tag_key.values_seen,
                    'canDelete': tag_key.key not in PROTECTED_TAG_KEYS,
                }
            )

        return Response(data)
예제 #4
0
    def get(self, request, project):
        try:
            environment_id = self._get_environment_id_from_request(request, project.organization_id)
        except Environment.DoesNotExist:
            tag_keys = []
        else:
            tag_keys = sorted(
                tagstore.get_tag_keys(
                    project.id,
                    environment_id,
                    # We might be able to stop including these values, but this
                    # is a pretty old endpoint, so concerned about breaking
                    # existing api consumers.
                    include_values_seen=True,
                ),
                key=lambda x: x.key)

        data = []
        for tag_key in tag_keys:
            data.append(
                {
                    'key': tagstore.get_standardized_key(tag_key.key),
                    'name': tagstore.get_tag_key_label(tag_key.key),
                    'uniqueValues': tag_key.values_seen,
                    'canDelete': tag_key.key not in PROTECTED_TAG_KEYS,
                }
            )

        return Response(data)
    def get(self, request, project):
        try:
            environment_id = self._get_environment_id_from_request(request, project.organization_id)
        except Environment.DoesNotExist:
            tag_keys = []
        else:
            tag_keys = sorted(
                tagstore.get_tag_keys(
                    project.id,
                    environment_id,
                ),
                key=lambda x: x.key)

        data = []
        for tag_key in tag_keys:
            data.append(
                {
                    'key': tagstore.get_standardized_key(tag_key.key),
                    'name': tagstore.get_tag_key_label(tag_key.key),
                    'uniqueValues': tag_key.values_seen,
                    'canDelete': tag_key.key not in PROTECTED_TAG_KEYS,
                }
            )

        return Response(data)
예제 #6
0
    def get(self, request, group):
        grouptagkeys = list(
            GroupTagKey.objects.filter(group_id=group.id).values_list(
                'key', flat=True))

        tag_keys = tagstore.get_tag_keys(group.project_id, grouptagkeys)

        # O(N) db access
        data = []
        all_top_values = []
        for tag_key in tag_keys:
            total_values = GroupTagValue.get_value_count(group.id, tag_key.key)
            top_values = GroupTagValue.get_top_values(group.id,
                                                      tag_key.key,
                                                      limit=10)

            all_top_values.extend(top_values)

            data.append({
                'id': six.text_type(tag_key.id),
                'key': tagstore.get_standardized_key(tag_key.key),
                'name': tag_key.get_label(),
                'uniqueValues': tag_key.values_seen,
                'totalValues': total_values,
            })

        # Serialize all of the values at once to avoid O(n) serialize/db queries
        top_values_by_key = defaultdict(list)
        for value in serialize(all_top_values, request.user):
            top_values_by_key[value['key']].append(value)

        for d in data:
            d['topValues'] = top_values_by_key[d['key']]

        return Response(data)
예제 #7
0
    def get(self, request, organization, team, project):
        tag_list = sorted(tagstore.get_tag_keys(project.id), key=lambda x: x.key)

        context = {
            'tag_list': tag_list,
            'page': 'tags',
        }
        return self.respond('sentry/projects/manage_tags.html', context)
예제 #8
0
    def _build_query_params_from_request(self, request, project):
        query_kwargs = {
            'project': project,
        }

        if request.GET.get('status'):
            try:
                query_kwargs['status'] = STATUS_CHOICES[request.GET['status']]
            except KeyError:
                raise ValidationError('invalid status')

        if request.user.is_authenticated() and request.GET.get('bookmarks'):
            query_kwargs['bookmarked_by'] = request.user

        if request.user.is_authenticated() and request.GET.get('assigned'):
            query_kwargs['assigned_to'] = request.user

        sort_by = request.GET.get('sort')
        if sort_by is None:
            sort_by = DEFAULT_SORT_OPTION

        query_kwargs['sort_by'] = sort_by

        tags = {}
        for tag_key in (tk.key for tk in tagstore.get_tag_keys(project.id)):
            if request.GET.get(tag_key):
                tags[tag_key] = request.GET[tag_key]
        if tags:
            query_kwargs['tags'] = tags

        limit = request.GET.get('limit')
        if limit:
            try:
                query_kwargs['limit'] = int(limit)
            except ValueError:
                raise ValidationError('invalid limit')

        # TODO: proper pagination support
        cursor = request.GET.get('cursor')
        if cursor:
            query_kwargs['cursor'] = Cursor.from_string(cursor)

        query = request.GET.get('query', 'is:unresolved').strip()
        if query:
            try:
                query_kwargs.update(parse_query(project, query, request.user))
            except InvalidQuery as e:
                raise ValidationError(
                    u'Your search query could not be parsed: {}'.format(
                        e.message))

        return query_kwargs
예제 #9
0
    def get_tags(self):
        from sentry import tagstore

        if not hasattr(self, '_tag_cache'):
            tags = self.get_option('tags', None)
            if tags is None:
                tags = [
                    t
                    for t in (tk.key for tk in tagstore.get_tag_keys(self.id))
                ]
            self._tag_cache = tags

        return self._tag_cache
예제 #10
0
    def get(self, request, project):
        tag_keys = tagstore.get_tag_keys(project.id)

        data = []
        for tag_key in tag_keys:
            data.append({
                'id': six.text_type(tag_key.id),
                'key': tagstore.get_standardized_key(tag_key.key),
                'name': tag_key.get_label(),
                'uniqueValues': tag_key.values_seen,
            })

        return Response(data)
예제 #11
0
    def get(self, request, project):
        tag_keys = sorted(tagstore.get_tag_keys(project.id), key=lambda x: x.key)

        data = []
        for tag_key in tag_keys:
            data.append(
                {
                    'id': six.text_type(tag_key.id),
                    'key': tagstore.get_standardized_key(tag_key.key),
                    'name': tagstore.get_tag_key_label(tag_key.key),
                    'uniqueValues': tag_key.values_seen,
                }
            )

        return Response(data)
예제 #12
0
    def get(self, request, organization, team, project):
        try:
            environment_id = self._get_environment_id_from_request(request, project.organization_id)
        except Environment.DoesNotExist:
            tag_list = []
        else:
            tag_list = sorted(
                tagstore.get_tag_keys(
                    project.id,
                    environment_id,
                ),
                key=lambda x: x.key)

        context = {
            'tag_list': tag_list,
            'page': 'tags',
        }
        return self.respond('sentry/projects/manage_tags.html', context)
예제 #13
0
    def get_attrs(self, item_list, user):
        tag_labels = {
            t.key: t.get_label()
            for t in tagstore.get_tag_keys(item_list[0].project_id,
                                           [i.key for i in item_list])
        }

        result = {}
        for item in item_list:
            key = tagstore.get_standardized_key(item.key)
            try:
                label = tag_labels[item.key]
            except KeyError:
                label = key
            result[item] = {
                'name': label,
                'key': key,
            }

        return result