def _create(self, **defaults): from models import Message, GroupedMessage URL_MAX_LENGTH = Message._meta.get_field_by_name('url')[0].max_length view = defaults.pop('view', None) logger_name = defaults.pop('logger', 'root') url = defaults.pop('url', None) data = defaults.pop('data', {}) or {} if url: data['url'] = url url = url[:URL_MAX_LENGTH] instance = Message( view=view, logger=logger_name, data=data, url=url, server_name=socket.gethostname(), **defaults ) instance.checksum = construct_checksum(instance) if settings.THRASHING_TIMEOUT and settings.THRASHING_LIMIT: cache_key = 'sentry:%s:%s' % (instance.class_name, instance.checksum) added = cache.add(cache_key, 1, settings.THRASHING_TIMEOUT) if not added and cache.incr(cache_key) > settings.THRASHING_LIMIT: return try: group, created = GroupedMessage.objects.get_or_create( view=view, logger=logger_name, checksum=instance.checksum, defaults=defaults ) if not created: GroupedMessage.objects.filter(pk=group.pk).update( times_seen=models.F('times_seen') + 1, status=0, last_seen=datetime.datetime.now(), ) instance.group = group instance.save() except Exception, exc: try: logger.exception(u'Unable to process log entry: %s' % (exc,)) except Exception, exc: warnings.warn(u'Unable to process log entry: %s' % (exc,))