def test_simple(self): project = self.create_project() with pytest.raises(Environment.DoesNotExist): Environment.get_for_organization_id( project.organization_id, 'prod', ) env = Environment.get_or_create( project=project, name='prod', ) assert env.name == 'prod' assert env.projects.first().id == project.id env2 = Environment.get_or_create( project=project, name='prod', ) assert env2.id == env.id with self.assertNumQueries(0): assert Environment.get_for_organization_id( project.organization_id, 'prod', ).id == env.id
def test_tsdb(self): project = self.project manager = EventManager( self.make_event( fingerprint=['totally unique super duper fingerprint'], environment='totally unique super duper environment', )) event = manager.save(project) def query(model, key, **kwargs): return tsdb.get_sums(model, [key], event.datetime, event.datetime, **kwargs)[key] assert query(tsdb.models.project, project.id) == 1 assert query(tsdb.models.group, event.group.id) == 1 environment_id = Environment.get_for_organization_id( event.project.organization_id, 'totally unique super duper environment', ).id assert query(tsdb.models.project, project.id, environment_id=environment_id) == 1 assert query(tsdb.models.group, event.group.id, environment_id=environment_id) == 1
def test_event_user(self): manager = EventManager( make_event( event_id="a", environment="totally unique environment", **{"user": {"id": "1"}} ) ) manager.normalize() with self.tasks(): event = manager.save(self.project.id) environment_id = Environment.get_for_organization_id( event.project.organization_id, "totally unique environment" ).id assert tsdb.get_distinct_counts_totals( tsdb.models.users_affected_by_group, (event.group.id,), event.datetime, event.datetime ) == {event.group.id: 1} assert tsdb.get_distinct_counts_totals( tsdb.models.users_affected_by_project, (event.project.id,), event.datetime, event.datetime, ) == {event.project.id: 1} assert tsdb.get_distinct_counts_totals( tsdb.models.users_affected_by_group, (event.group.id,), event.datetime, event.datetime, environment_id=environment_id, ) == {event.group.id: 1} assert tsdb.get_distinct_counts_totals( tsdb.models.users_affected_by_project, (event.project.id,), event.datetime, event.datetime, environment_id=environment_id, ) == {event.project.id: 1} euser = EventUser.objects.get(project_id=self.project.id, ident="1") assert event.get_tag("sentry:user") == euser.tag_value # ensure event user is mapped to tags in second attempt manager = EventManager(make_event(event_id="b", **{"user": {"id": "1", "name": "jane"}})) manager.normalize() with self.tasks(): event = manager.save(self.project.id) euser = EventUser.objects.get(id=euser.id) assert event.get_tag("sentry:user") == euser.tag_value assert euser.name == "jane" assert euser.ident == "1"
def validate_environment(self, environment): if environment is None: return environment try: environment = Environment.get_for_organization_id( self.context["project"].organization_id, environment ).id except Environment.DoesNotExist: raise serializers.ValidationError(u"This environment has not been created.") return environment
def _get_environment_from_request(self, request, organization_id): if not hasattr(request, "_cached_environment"): environment_param = request.GET.get("environment") if environment_param is None: environment = None else: environment = Environment.get_for_organization_id( name=environment_param, organization_id=organization_id) request._cached_environment = environment return request._cached_environment
def validate_environment(self, attrs, source): name = attrs.get(source) if name is None: return attrs try: attrs['environment'] = Environment.get_for_organization_id( self.context['project'].organization_id, name, ).id except Environment.DoesNotExist: raise serializers.ValidationError(u'This environment has not been created.') return attrs
def _get_environment_from_request(self, request, organization_id): if not hasattr(request, '_cached_environment'): environment_param = request.GET.get('environment') if environment_param is None: environment = None else: environment = Environment.get_for_organization_id( name=environment_param, organization_id=organization_id, ) request._cached_environment = environment return request._cached_environment
def _get_environment_from_request(self, request, organization_id): from sentry.models import Environment # Django 1.9 setup issue if not hasattr(request, '_cached_environment'): environment_param = request.GET.get('environment') if environment_param is None: environment = None else: environment = Environment.get_for_organization_id( name=environment_param, organization_id=organization_id, ) request._cached_environment = environment return request._cached_environment
def _get_event_environment(event, project, cache): from sentry.models import Environment environment_name = event.get_tag("environment") if environment_name not in cache: try: environment = Environment.get_for_organization_id( project.organization_id, environment_name ) except Environment.DoesNotExist: logger.warn( "event.environment.does_not_exist", extra={"project_id": project.id, "environment_name": environment_name}, ) environment = Environment.get_or_create(project, environment_name) cache[environment_name] = environment return cache[environment_name]
def test_tsdb(self): project = self.project manager = EventManager(self.make_event( fingerprint=['totally unique super duper fingerprint'], environment='totally unique super duper environment', )) event = manager.save(project) def query(model, key, **kwargs): return tsdb.get_sums(model, [key], event.datetime, event.datetime, **kwargs)[key] assert query(tsdb.models.project, project.id) == 1 assert query(tsdb.models.group, event.group.id) == 1 environment_id = Environment.get_for_organization_id( event.project.organization_id, 'totally unique super duper environment', ).id assert query(tsdb.models.project, project.id, environment_id=environment_id) == 1 assert query(tsdb.models.group, event.group.id, environment_id=environment_id) == 1
def _get_event_environment(event, project, cache): from sentry.models import Environment environment_name = event.get_tag('environment') if environment_name not in cache: try: environment = Environment.get_for_organization_id( project.organization_id, environment_name) except Environment.DoesNotExist: logger.warn( 'event.environment.does_not_exist', extra={ 'project_id': project.id, 'environment_name': environment_name, } ) environment = Environment.get_or_create(project, environment_name) cache[environment_name] = environment return cache[environment_name]
def test_event_user(self): manager = EventManager(self.make_event( environment='totally unique environment', **{'sentry.interfaces.User': { 'id': '1', }} )) manager.normalize() with self.tasks(): event = manager.save(self.project.id) environment_id = Environment.get_for_organization_id( event.project.organization_id, 'totally unique environment', ).id assert tsdb.get_distinct_counts_totals( tsdb.models.users_affected_by_group, (event.group.id, ), event.datetime, event.datetime, ) == { event.group.id: 1, } assert tsdb.get_distinct_counts_totals( tsdb.models.users_affected_by_project, (event.project.id, ), event.datetime, event.datetime, ) == { event.project.id: 1, } assert tsdb.get_distinct_counts_totals( tsdb.models.users_affected_by_group, (event.group.id, ), event.datetime, event.datetime, environment_id=environment_id, ) == { event.group.id: 1, } assert tsdb.get_distinct_counts_totals( tsdb.models.users_affected_by_project, (event.project.id, ), event.datetime, event.datetime, environment_id=environment_id, ) == { event.project.id: 1, } euser = EventUser.objects.get( project_id=self.project.id, ident='1', ) assert event.get_tag('sentry:user') == euser.tag_value # ensure event user is mapped to tags in second attempt manager = EventManager( self.make_event(**{'sentry.interfaces.User': { 'id': '1', 'name': 'jane', }}) ) manager.normalize() with self.tasks(): event = manager.save(self.project.id) euser = EventUser.objects.get(id=euser.id) assert event.get_tag('sentry:user') == euser.tag_value assert euser.name == 'jane' assert euser.ident == '1'
def test_event_user(self): manager = EventManager(self.make_event( event_id='a', environment='totally unique environment', **{'sentry.interfaces.User': { 'id': '1', }} )) manager.normalize() with self.tasks(): event = manager.save(self.project.id) environment_id = Environment.get_for_organization_id( event.project.organization_id, 'totally unique environment', ).id assert tsdb.get_distinct_counts_totals( tsdb.models.users_affected_by_group, (event.group.id, ), event.datetime, event.datetime, ) == { event.group.id: 1, } assert tsdb.get_distinct_counts_totals( tsdb.models.users_affected_by_project, (event.project.id, ), event.datetime, event.datetime, ) == { event.project.id: 1, } assert tsdb.get_distinct_counts_totals( tsdb.models.users_affected_by_group, (event.group.id, ), event.datetime, event.datetime, environment_id=environment_id, ) == { event.group.id: 1, } assert tsdb.get_distinct_counts_totals( tsdb.models.users_affected_by_project, (event.project.id, ), event.datetime, event.datetime, environment_id=environment_id, ) == { event.project.id: 1, } euser = EventUser.objects.get( project_id=self.project.id, ident='1', ) assert event.get_tag('sentry:user') == euser.tag_value # ensure event user is mapped to tags in second attempt manager = EventManager( self.make_event( event_id='b', **{'sentry.interfaces.User': { 'id': '1', 'name': 'jane', }} ) ) manager.normalize() with self.tasks(): event = manager.save(self.project.id) euser = EventUser.objects.get(id=euser.id) assert event.get_tag('sentry:user') == euser.tag_value assert euser.name == 'jane' assert euser.ident == '1'