def create_counts(self, when, amount, minute_offset=0, normalize=True): date = when - timedelta(minutes=minute_offset) if normalize: date = normalize_datetime(date) ProjectCountByMinute.objects.create( project=self.project, date=date, times_seen=amount, )
def _create_group(self, event, tags=None, **kwargs): from sentry.models import ProjectCountByMinute, GroupCountByMinute date = event.datetime time_spent = event.time_spent project = event.project group, is_new = self.get_or_create( project=project, checksum=event.checksum, defaults=kwargs ) if is_new: transaction.commit_unless_managed(using=group._state.db) update_kwargs = { 'times_seen': 1, } if time_spent: update_kwargs.update({ 'time_spent_total': time_spent, 'time_spent_count': 1, }) if not is_new: extra = { 'last_seen': max(event.datetime, group.last_seen), 'score': ScoreClause(group), } if event.message and event.message != group.message: extra['message'] = event.message if group.level != event.level: extra['level'] = event.level if group.status == STATUS_RESOLVED or group.is_over_resolve_age(): # Making things atomic is_new = bool(self.filter( id=group.id, status=STATUS_RESOLVED, ).exclude( active_at__gte=date, ).update(active_at=date, status=STATUS_UNRESOLVED)) transaction.commit_unless_managed(using=group._state.db) group.active_at = date group.status = STATUS_UNRESOLVED group.last_seen = extra['last_seen'] app.buffer.incr(self.model, update_kwargs, { 'id': group.id, }, extra) else: # TODO: this update should actually happen as part of create group.update(score=ScoreClause(group)) # We need to commit because the queue can run too fast and hit # an issue with the group not existing before the buffers run transaction.commit_unless_managed(using=group._state.db) # Determine if we've sampled enough data to store this event if is_new: is_sample = False elif not self.should_sample(group, event): is_sample = False else: is_sample = True # Rounded down to the nearest interval normalized_datetime = normalize_datetime(date) app.buffer.incr(GroupCountByMinute, update_kwargs, { 'group': group, 'project': project, 'date': normalized_datetime, }) app.buffer.incr(ProjectCountByMinute, update_kwargs, { 'project': project, 'date': normalized_datetime, }) try: self.add_tags(group, tags) except Exception as e: logger.exception('Unable to record tags: %s' % (e,)) return group, is_new, is_sample
def _create_group(self, event, tags=None, **kwargs): from sentry.models import ProjectCountByMinute, GroupCountByMinute date = event.datetime time_spent = event.time_spent project = event.project group, is_new = self.get_or_create(project=project, checksum=event.checksum, defaults=kwargs) if is_new: transaction.commit_unless_managed(using=group._state.db) update_kwargs = { 'times_seen': 1, } if time_spent: update_kwargs.update({ 'time_spent_total': time_spent, 'time_spent_count': 1, }) if not is_new: extra = { 'last_seen': max(event.datetime, group.last_seen), 'score': ScoreClause(group), } message = kwargs.get('message') if message: extra['message'] = message if group.status == STATUS_RESOLVED or group.is_over_resolve_age(): # Making things atomic is_new = bool( self.filter( id=group.id, status=STATUS_RESOLVED, ).exclude(active_at__gte=date, ).update( active_at=date, status=STATUS_UNRESOLVED)) transaction.commit_unless_managed(using=group._state.db) group.active_at = date group.status = STATUS_UNRESOLVED group.last_seen = extra['last_seen'] app.buffer.incr(self.model, update_kwargs, { 'id': group.id, }, extra) else: # TODO: this update should actually happen as part of create group.update(score=ScoreClause(group)) # We need to commit because the queue can run too fast and hit # an issue with the group not existing before the buffers run transaction.commit_unless_managed(using=group._state.db) # Determine if we've sampled enough data to store this event if is_new: is_sample = False elif not self.should_sample(group, event): is_sample = False else: is_sample = True # Rounded down to the nearest interval normalized_datetime = normalize_datetime(date) app.buffer.incr(GroupCountByMinute, update_kwargs, { 'group': group, 'project': project, 'date': normalized_datetime, }) app.buffer.incr(ProjectCountByMinute, update_kwargs, { 'project': project, 'date': normalized_datetime, }) user_ident = event.user_ident if user_ident: self.record_affected_user(group, user_ident, event.data.get('sentry.interfaces.User')) try: self.add_tags(group, tags) except Exception, e: logger.exception('Unable to record tags: %s' % (e, ))
def _create_group(self, event, tags=None, **kwargs): from sentry.models import ProjectCountByMinute, GroupCountByMinute date = event.datetime time_spent = event.time_spent project = event.project group, is_new = self.get_or_create( project=project, checksum=event.checksum, defaults=kwargs ) if is_new: transaction.commit_unless_managed(using=group._state.db) update_kwargs = { 'times_seen': 1, } if time_spent: update_kwargs.update({ 'time_spent_total': time_spent, 'time_spent_count': 1, }) if not is_new: extra = { 'last_seen': max(event.datetime, group.last_seen), 'score': ScoreClause(group), } message = kwargs.get('message') if message: extra['message'] = message if group.status == STATUS_RESOLVED or group.is_over_resolve_age(): # Making things atomic is_new = bool(self.filter( id=group.id, ).exclude( status=STATUS_UNRESOLVED, active_at__gte=date, ).update(active_at=date, status=STATUS_UNRESOLVED)) group.active_at = date group.status = STATUS_UNRESOLVED group.last_seen = extra['last_seen'] silence_timedelta = date - group.last_seen silence = silence_timedelta.days * 86400 + silence_timedelta.seconds app.buffer.incr(self.model, update_kwargs, { 'id': group.id, }, extra) else: # TODO: this update should actually happen as part of create group.update(score=ScoreClause(group)) silence = 0 # We need to commit because the queue can run too fast and hit # an issue with the group not existing before the buffers run transaction.commit_unless_managed(using=group._state.db) # Determine if we've sampled enough data to store this event if is_new: is_sample = False elif not settings.SAMPLE_DATA or group.times_seen % min(count_limit(group.times_seen), time_limit(silence)) == 0: is_sample = False else: is_sample = True # Rounded down to the nearest interval normalized_datetime = normalize_datetime(date) app.buffer.incr(GroupCountByMinute, update_kwargs, { 'group': group, 'project': project, 'date': normalized_datetime, }) app.buffer.incr(ProjectCountByMinute, update_kwargs, { 'project': project, 'date': normalized_datetime, }) if not tags: tags = [] else: tags = list(tags) tags += [ ('logger', event.logger), ('level', event.get_level_display()), ] user_ident = event.user_ident if user_ident: self.record_affected_user(group, user_ident, event.data.get('sentry.interfaces.User')) try: self.add_tags(group, tags) except Exception, e: logger.exception('Unable to record tags: %s' % (e,))