예제 #1
0
파일: project.py 프로젝트: xsbchen/sentry
    def merge_to(self, project):
        from sentry.models import (Group, Event)

        if not isinstance(project, Project):
            project = Project.objects.get_from_cache(pk=project)

        for group in Group.objects.filter(project=self):
            try:
                other = Group.objects.get(project=project, )
            except Group.DoesNotExist:
                group.update(project=project)
                tagstore.update_project_for_group(group_id=group.id,
                                                  old_project_id=self.id,
                                                  new_project_id=project.id)
            else:
                Event.objects.filter(
                    group_id=group.id, ).update(group_id=other.id)

                for obj in tagstore.get_group_tag_values(group_id=group.id):
                    obj2, created = tagstore.get_or_create_group_tag_value(
                        project_id=project.id,
                        group_id=group.id,
                        key=obj.key,
                        value=obj.value,
                        defaults={'times_seen': obj.times_seen})
                    if not created:
                        obj2.update(times_seen=F('times_seen') +
                                    obj.times_seen)

        for fv in tagstore.get_tag_values(self.id):
            tagstore.get_or_create_tag_value(project_id=project.id,
                                             key=fv.key,
                                             value=fv.value)
            fv.delete()
        self.delete()
예제 #2
0
파일: project.py 프로젝트: alshopov/sentry
    def merge_to(self, project):
        from sentry.models import (Group, Event)

        if not isinstance(project, Project):
            project = Project.objects.get_from_cache(pk=project)

        for group in Group.objects.filter(project=self):
            try:
                other = Group.objects.get(
                    project=project,
                )
            except Group.DoesNotExist:
                group.update(project=project)
                tagstore.update_project_for_group(
                    group_id=group.id,
                    old_project_id=self.id,
                    new_project_id=project.id)
            else:
                Event.objects.filter(
                    group_id=group.id,
                ).update(group_id=other.id)

                for obj in tagstore.get_group_tag_values(group_id=group.id):
                    obj2, created = tagstore.get_or_create_group_tag_value(
                        project_id=project.id,
                        group_id=group.id,
                        key=obj.key,
                        value=obj.value,
                        defaults={'times_seen': obj.times_seen}
                    )
                    if not created:
                        obj2.update(times_seen=F('times_seen') + obj.times_seen)

        for fv in tagstore.get_tag_values(self.id):
            tagstore.get_or_create_tag_value(project_id=project.id, key=fv.key, value=fv.value)
            fv.delete()
        self.delete()
예제 #3
0
파일: release.py 프로젝트: alshopov/sentry
    def get_attrs(self, item_list, user, *args, **kwargs):
        project = kwargs.get('project')
        if project:
            project_ids = [project.id]
        else:
            project_ids = list(ReleaseProject.objects.filter(release__in=item_list).values_list(
                'project_id', flat=True
            ).distinct())

        tags = {}
        tvs = tagstore.get_tag_values(project_ids, 'sentry:release',
                                      [o.version for o in item_list])
        for tv in tvs:
            val = tags.get(tv.value)
            tags[tv.value] = {
                'first_seen': min(tv.first_seen, val['first_seen']) if val else tv.first_seen,
                'last_seen': max(tv.last_seen, val['last_seen']) if val else tv.last_seen
            }
        owners = {
            d['id']: d for d in serialize(set(i.owner for i in item_list if i.owner_id), user)
        }

        if project:
            group_counts_by_release = dict(
                ReleaseProject.objects.filter(project=project, release__in=item_list)
                .values_list('release_id', 'new_groups')
            )
        else:
            # assume it should be a sum across release
            # if no particular project specified
            group_counts_by_release = dict(
                ReleaseProject.objects.filter(release__in=item_list, new_groups__isnull=False)
                .values('release_id').annotate(new_groups=Sum('new_groups'))
                .values_list('release_id', 'new_groups')
            )

        release_metadata_attrs = self._get_commit_metadata(item_list, user)
        deploy_metadata_attrs = self._get_deploy_metadata(item_list, user)

        release_projects = defaultdict(list)
        project_releases = ReleaseProject.objects.filter(release__in=item_list).values(
            'release_id', 'project__slug', 'project__name'
        )
        for pr in project_releases:
            release_projects[pr['release_id']].append(
                {
                    'slug': pr['project__slug'],
                    'name': pr['project__name'],
                }
            )

        result = {}
        for item in item_list:
            result[item] = {
                'tag': tags.get(item.version),
                'owner': owners[six.text_type(item.owner_id)] if item.owner_id else None,
                'new_groups': group_counts_by_release.get(item.id) or 0,
                'projects': release_projects.get(item.id, [])
            }
            result[item].update(release_metadata_attrs[item])
            result[item].update(deploy_metadata_attrs[item])
        return result
예제 #4
0
    def get_attrs(self, item_list, user, *args, **kwargs):
        project = kwargs.get('project')
        if project:
            project_ids = [project.id]
        else:
            project_ids = list(
                ReleaseProject.objects.filter(
                    release__in=item_list).values_list('project_id',
                                                       flat=True).distinct())

        tags = {}
        tvs = tagstore.get_tag_values(project_ids, 'sentry:release',
                                      [o.version for o in item_list])
        for tv in tvs:
            val = tags.get(tv.value)
            tags[tv.value] = {
                'first_seen':
                min(tv.first_seen, val['first_seen'])
                if val else tv.first_seen,
                'last_seen':
                max(tv.last_seen, val['last_seen']) if val else tv.last_seen
            }
        owners = {
            d['id']: d
            for d in serialize(set(
                i.owner for i in item_list if i.owner_id), user)
        }

        if project:
            group_counts_by_release = dict(
                ReleaseProject.objects.filter(
                    project=project,
                    release__in=item_list).values_list('release_id',
                                                       'new_groups'))
        else:
            # assume it should be a sum across release
            # if no particular project specified
            group_counts_by_release = dict(
                ReleaseProject.objects.filter(
                    release__in=item_list,
                    new_groups__isnull=False).values('release_id').annotate(
                        new_groups=Sum('new_groups')).values_list(
                            'release_id', 'new_groups'))

        release_metadata_attrs = self._get_commit_metadata(item_list, user)
        deploy_metadata_attrs = self._get_deploy_metadata(item_list, user)

        release_projects = defaultdict(list)
        project_releases = ReleaseProject.objects.filter(
            release__in=item_list).values('release_id', 'project__slug',
                                          'project__name')
        for pr in project_releases:
            release_projects[pr['release_id']].append({
                'slug':
                pr['project__slug'],
                'name':
                pr['project__name'],
            })

        result = {}
        for item in item_list:
            result[item] = {
                'tag':
                tags.get(item.version),
                'owner':
                owners[six.text_type(item.owner_id)]
                if item.owner_id else None,
                'new_groups':
                group_counts_by_release.get(item.id) or 0,
                'projects':
                release_projects.get(item.id, [])
            }
            result[item].update(release_metadata_attrs[item])
            result[item].update(deploy_metadata_attrs[item])
        return result