def timesince(value): from django.template.defaultfilters import timesince now = utc_to_local(datetime.datetime.utcnow()) if not value: return _('never') if value < (now - datetime.timedelta(days=5)): return value.date() value = (' '.join(timesince(value, now).split(' ')[0:2])).strip(',') if value == _('0 minutes'): return _('just now') if value == _('1 day'): return _('yesterday') return value + _(' ago')
def from_kwargs(self, project, **kwargs): # TODO: this function is way too damn long and needs refactored # the inner imports also suck so let's try to move it away from # the objects manager from sentry.models import Event, Project, View, SearchDocument from sentry.views import View as ViewHandler project = Project.objects.get(pk=project) if any(k in kwargs for k in ('view', 'message_id')): # we must be passing legacy data, let's convert it kwargs = self.convert_legacy_kwargs(kwargs) # First we pull out our top-level (non-data attr) kwargs event_id = kwargs.pop('event_id', None) message = kwargs.pop('message', None) culprit = kwargs.pop('culprit', None) level = kwargs.pop('level', None) or logging.ERROR time_spent = kwargs.pop('time_spent', None) logger_name = kwargs.pop('logger', 'root') server_name = kwargs.pop('server_name', None) site = kwargs.pop('site', None) date = kwargs.pop('timestamp', None) or datetime.datetime.utcnow() extra = kwargs.pop('extra', None) modules = kwargs.pop('modules', None) # We must convert date to local time so Django doesn't mess it up # based on TIME_ZONE date = utc_to_local(date) if not message: raise InvalidData('Missing required parameter: message') checksum = kwargs.pop('checksum', None) if not checksum: checksum = hashlib.md5(message).hexdigest() data = kwargs for k, v in kwargs.iteritems(): if '.' not in k: raise InvalidInterface('%r is not a valid interface name' % k) try: interface = self.module_cache[k] except ImportError, e: raise InvalidInterface('%r is not a valid interface name: %s' % (k, e)) try: data[k] = interface(**v).serialize() except Exception, e: raise InvalidData('Unable to validate interface, %r: %s' % (k, e))
def from_kwargs(self, project, **kwargs): # TODO: this function is way too damn long and needs refactored # the inner imports also suck so let's try to move it away from # the objects manager from sentry.models import Event, Project, View from sentry.views import View as ViewHandler project = Project.objects.get_from_cache(pk=project) # First we pull out our top-level (non-data attr) kwargs event_id = kwargs.pop('event_id', None) message = kwargs.pop('message', None) culprit = kwargs.pop('culprit', None) level = kwargs.pop('level', None) time_spent = kwargs.pop('time_spent', None) logger_name = kwargs.pop('logger', None) or settings.DEFAULT_LOGGER_NAME server_name = kwargs.pop('server_name', None) site = kwargs.pop('site', None) date = kwargs.pop('timestamp', None) or datetime.datetime.utcnow() checksum = kwargs.pop('checksum', None) # We must convert date to local time so Django doesn't mess it up # based on TIME_ZONE date = utc_to_local(date) data = kwargs kwargs = { 'level': level, 'message': message, } event = Event( project=project, event_id=event_id, culprit=culprit, logger=logger_name, data=data, server_name=server_name, site=site, time_spent=time_spent, datetime=date, **kwargs ) # Calculcate the checksum from the first highest scoring interface if not checksum: checksum = get_checksum_from_event(event) event.checksum = checksum group_kwargs = kwargs.copy() group_kwargs.update({ 'last_seen': date, 'first_seen': date, 'time_spent_total': time_spent or 0, 'time_spent_count': time_spent and 1 or 0, }) views = set() for viewhandler in ViewHandler.objects.all(): try: if not viewhandler.should_store(event): continue path = '%s.%s' % (viewhandler.__module__, viewhandler.__class__.__name__) if not viewhandler.ref: # TODO: this should handle race conditions viewhandler.ref = View.objects.get_or_create( path=path, defaults=dict( verbose_name=viewhandler.verbose_name, verbose_name_plural=viewhandler.verbose_name_plural, ), )[0] views.add(viewhandler.ref) except Exception, exc: # TODO: should we mail admins when there are failures? try: logger.exception(exc) except Exception, exc: warnings.warn(exc)
def from_kwargs(self, project, **kwargs): # TODO: this function is way too damn long and needs refactored # the inner imports also suck so let's try to move it away from # the objects manager from sentry.models import Event, Project project = Project.objects.get_from_cache(pk=project) # First we pull out our top-level (non-data attr) kwargs event_id = kwargs.pop('event_id', None) message = kwargs.pop('message', None) culprit = kwargs.pop('culprit', None) level = kwargs.pop('level', None) or logging.ERROR time_spent = kwargs.pop('time_spent', None) logger_name = kwargs.pop('logger', None) or settings.DEFAULT_LOGGER_NAME server_name = kwargs.pop('server_name', None) site = kwargs.pop('site', None) date = kwargs.pop('timestamp', None) or datetime.datetime.utcnow() checksum = kwargs.pop('checksum', None) tags = kwargs.pop('tags', []) # full support for dict syntax if isinstance(tags, dict): tags = tags.items() # We must convert date to local time so Django doesn't mess it up # based on TIME_ZONE date = utc_to_local(date) data = kwargs kwargs = { 'level': level, 'message': message, } event = Event( project=project, event_id=event_id, culprit=culprit or '', logger=logger_name, data=data, server_name=server_name, site=site, time_spent=time_spent, datetime=date, **kwargs ) # Calculcate the checksum from the first highest scoring interface if not checksum: checksum = get_checksum_from_event(event) event.checksum = checksum group_kwargs = kwargs.copy() group_kwargs.update({ 'last_seen': date, 'first_seen': date, 'time_spent_total': time_spent or 0, 'time_spent_count': time_spent and 1 or 0, }) views = self._get_views(event) try: group, is_new, is_sample = self._create_group(event, tags=tags, **group_kwargs) except Exception, exc: # TODO: should we mail admins when there are failures? try: logger.exception(u'Unable to process log entry: %s', exc) except Exception, exc: warnings.warn(u'Unable to process log entry: %s', exc)
def from_kwargs(self, project, **kwargs): # TODO: this function is way too damn long and needs refactored # the inner imports also suck so let's try to move it away from # the objects manager from sentry.models import Event, Project project = Project.objects.get_from_cache(pk=project) # First we pull out our top-level (non-data attr) kwargs event_id = kwargs.pop('event_id', None) message = kwargs.pop('message', None) culprit = kwargs.pop('culprit', None) level = kwargs.pop('level', None) or logging.ERROR time_spent = kwargs.pop('time_spent', None) logger_name = kwargs.pop('logger', None) or settings.DEFAULT_LOGGER_NAME server_name = kwargs.pop('server_name', None) site = kwargs.pop('site', None) date = kwargs.pop('timestamp', None) or datetime.datetime.utcnow() checksum = kwargs.pop('checksum', None) tags = kwargs.pop('tags', []) # full support for dict syntax if isinstance(tags, dict): tags = tags.items() # We must convert date to local time so Django doesn't mess it up # based on TIME_ZONE date = utc_to_local(date) data = kwargs kwargs = { 'level': level, 'message': message, } event = Event(project=project, event_id=event_id, culprit=culprit or '', logger=logger_name, data=data, server_name=server_name, site=site, time_spent=time_spent, datetime=date, **kwargs) # Calculcate the checksum from the first highest scoring interface if not checksum: checksum = get_checksum_from_event(event) event.checksum = checksum group_kwargs = kwargs.copy() group_kwargs.update({ 'last_seen': date, 'first_seen': date, 'time_spent_total': time_spent or 0, 'time_spent_count': time_spent and 1 or 0, }) views = self._get_views(event) try: group, is_new, is_sample = self._create_group(event, tags=tags, **group_kwargs) except Exception, exc: # TODO: should we mail admins when there are failures? try: logger.exception(u'Unable to process log entry: %s', exc) except Exception, exc: warnings.warn(u'Unable to process log entry: %s', exc)