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
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( { '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)
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)
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)
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)
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
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
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)
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)
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)
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